软件开发基础
软件开发基础
Table of Contents
1 引言
有多少新人在不同语言, 不同数据类型, 不同的选择, 循环等方式中游走, 一遍遍的书写着片断式的代码, 然后自认为已经步入了编程的大门, 其实仍然在殿堂外不断着徘徊着寻找着进入的大门. 其实我也算是其中一个. 作为一个程序员, 首先需要认识的不单单是语言的细节, 更重要的还有软件开发的意识. 本文将简单介绍一下软件开发的基本流程. 并且希望将它运用到以后的编程中.
2 软件开发的由来
我们为什么需要软件开发呢? 因为用户以及市场的需求, 迫使我们需要将这些需求进一步开发成为好的软件应用. 而整个软件开发的过程都是在用户需求的基础上, 通过一系列的过程将需求逐步的实现为具体的产物. 1
3 软件开发基本组成部份2
- 问题定义, problem definition
- 需求分析, requirements development
- 结构计划, construction planning
- 软件架构, 高级别的设计, software architecture, or high-level design
- 详细设计, detailed design
- 编写与调试, coding and debugging
- 单元测试, unit testing
- 整体测试, integration testing
- 整合, integration
- 系统测试, system testing
- 维护, corrective maintenance
4 类推有助于理解软件开发
当你对一个问题无法理解的时候, 通过类推的方式, 将这个未知的问题类推到你熟悉的问题上, 往往是快速准确理解一个问题的好方法. 化学苯环的出现, 正是化学家凯库勒梦中梦见蛇用嘴咬住自己尾巴后的灵光一闪.
当然, 类推也要有好坏之分, 一个好的类推往往是简单的, 并且能够被更多的实验证据以及相关的发现给证明. 类推过头了就会导致错误的发生, 正如曾经科学家们对"以太"这个物质的寻找.
那么在软件开发过程中如何运用"类推"这一个强大的帮手呢?
类推相比较算法而言, 具有更强的启发性. 算法是由一系列针对某个特殊任务定义完善的指令构成的, 具有可预测性, 以及准确性. 而类推是帮助你找到答案, 帮助你如何看待, 理解一个问题. 算法直接告诉你了答案, 类推启发你自己去寻找答案. 由于很多问题的未知性, 并没有直接的, 全面的算法, 因此需要一个自己对自己启发的过程, 引导自己建立相应的算法.
在很多时候, 一个灵活使用类推的人能够更好的理解软件开发的过程.
4.1 软件开发中常用的类推
建筑过程和软件开发的过程十分相近.
如果你需要建造一个很简单的结构–狗舍–你可以利用废旧的家俱, 买些木头以及钉子, 很快就能够搞定. 如果发现忘记装门了, 以及一些其他的小问题, 也能够轻松的完成. 你需要花费的大概只是一个下午的部份时间. 对于小的项目软件开发的过程中, 遇到的情况也是类似的, 如果你在1000行的代码中使用了一个错误的设计, 你可以对它进行重构, 或是全盘推倒重来, 即使这样你也不会失去太多.
如果你建造的是一个房子, 整个建造过程将变得非常复杂, 不良的设计导致的结果也将变得更加严重. 首先, 你需要确定建造什么类型的房子, 这个过程就好比软件开发过程中的问题定义. 然后, 你和建筑师一起完成普通设计, 这类比于软件开发过程中架构设计. 接着, 你绘制详细的蓝图, 雇佣一个承包商, 这类似于软件开发中的详细设计. 接着, 你要准备建造的位置, 打下地基, 为整个房子做骨架, 把墙壁和房顶完成, 这类似于软件开发中的软件架构. 当房子的大部份已经完成之后, 庭园设计师和粉刷匠开始干活了, 这类似于软件优化. 当完成整个过程之后, 不同的观察人员进入, 开始确认位置, 框架, 电线, 以及其他可以检测的东西, 这类似于软件审查, 结对编程.
两者之间其他的一些类比.
- 如果原来的室内设计不完善, 当建造完成之后, 住户需要拆除一面墙, 那么又得花费相应的物力与人力, 同样的, 如果你最初的设计没有过关, 那么同样会需要更多的人力与时间在后期进行改进. 而后期改进的时间成本, 将比前期改进的时间成本高很多.
- 房屋建造过程中, 已经能够直接购买的东西, 并不需要你花费时间去生产, 如, 洗衣机, 冰箱等. 同样的, 在软件开发过程中, 也应该避免"重建轮子", 尽量使用高级语言的扩展, 而不是自己去写底层实现的代码. 你也可以使用现有的类, 如容器类, 科学函数, 用户接口类等等.
建筑以及软件的开发, 受益于合理的步骤. 如果在软件开发的过程中, 将整个顺序给打乱了, 这将导致代码编写, 测试, 调试的困难. 也就意味着需要花费更多的时间去完成. 当然, 小心的计划并不意味着过度计划, 而是先计划出大的框架, 如先将房子的框架计划好, 而是否铺地板什么的可以后续的过程中进行更改. 一个好的项目计划, 将会给你对细节进行更改的能力. 你的软件开发的经验越是丰富, 你事先能够考虑倒的计划也就越详细.
这样的类比, 能够帮助你更好的理解软件开发的过程, 以及不同类型的软件在开发过程中的差异 (不同建筑在建造过程中的差异一样).
5 软件开发流程图3
不知道为啥ubuntu下dia导出的图成了这个样子??
Footnotes:
1 http://ezinearticles.com/?The-Importance-of-Software-Development&id=1406350
2 book code complete
3 book fundamentals of python