在软件开发过程中的各种不同活动有:
1、定义问题
2、需求分析
3、规划构建
4、软件架构
5、详细设计
6、编码与高度
7、单元测试
8、集成测试
9、集成
10、系统测试
11、保障与维护
常见的软件隐喻可以分为以下几种:
1、写代码就像写信,读代码就像读小说。这种隐喻具有一定的局限性
2、创建软件类似播种和耕作。(比喻不够恰当,比写信好点,但是没能体现出过程)
3、培育软件,增量开发,一天增加一点。就像养育动物一样。以增量方式进行设计、编译和调试。通过外在的增加或吸收而逐渐生成或变大。(比较恰当的隐喻)
在进行增量开发时,我们先做出软件系统的一个尽可能简单、但能运行的版本。它不必接受真实的输入,也无须对数据进行真正处理,更不用产生真实的输出。它需要的仅仅是一个足够强壮的骨架,支撑起未来将要开发的真实系统。对于你标志出的每一项功能,可能仅需要调用虚假的类。这个最基本的起点,就像牡蛎开始孕育的那颗细小珍珠。建造软件就像造房子,尽可能地把房子设计好,就能省去后期的好多麻烦。知道有哪些现成的东西,如容器类,科学计算函数,数据库访问组件等。哪些东西需要定制,以让自己的房子更高级。
前期准备
在实现一个系统之前,需要理解“这个系统应该做什么”以及“它该如何做到这些”,以下几点可以帮助更好的理清系统:
1、诉诸逻辑
在开始做一个大项目之前,应该为这个项目制订计划。
2、诉诸类比
如果你正为某个高度迭代的项目做计划,那么在开始构建之前,你需要针对要构造的每一片段,先弄清楚哪些是最关键的需要和架构要素。(迭代开发法:这种方法的“计划、需求、架构”活动与“构建、系统测试、质量保证”活动交织在一起)
3、诉诸数据
发现错误的时间要尽可能接近引入该错误的时间。缺陷在软件食物链里面呆的时间越长,它对食物链的后级造成损害越严重。
一条很有用的经验规则:计划好预先先对约80%的需求做出详细说明,并给“稍后再进行详细说明的额外需求”分配一定的时间。然后在项目进行过程中,实施系统化的变更控制措施——只接受那些最有价值的新需求。另一种替代方案是:预先只对最重要的20%的需求做出详细说明,并且计划以小幅增量开发软件的剩余部分,随着项目的进行,对额外的需求和设计做出详细说明。
问题和需求的先决条件
对系统要解决的问题做出清楚的陈述。问题定义应该用客户的语言来书写,而且应该从客户角度来描述问题。通常不应该用计算机的专业术语叙述。
需求详细描述系统应该做什么,这是达成解决方案第一步。充分详尽地描述需求,是项目成功的关键,它甚至很可能比有效的构建技术更重要。
在构建期处理变更
1、确保每个人都知道需求变更的代价。如客户想到一个新功能就要添加时,可以从“成本”和“进度”上劝说。如:咦,这听起来是一个不错的主意。不过由于它不是需求文档里的内容,我会整理一份修订过的进度表和成本估计表,这样你可以决定是现在实施还是过一阵子再说。
2、建立一套变更控制程序。如果有一套变更控制程序,那么你只需要在特定时候处理变更,而客户知道你打算处理他们的提议。
3、使用能适应变更的开发方法。演进交付是一种分析阶段交付系统的方法。你可以建造一小块。从用户获得一点反馈,调整一点设计,做少量改动,再多建造一小块。关键在于缩短开发周期,以便更快地响应用户的需求。
4、注意项目的商业案例。有些需求作为功能特色来看是不错的想法,但是当你评估“增加的商业价值”时就会觉得它是个糟透了的主意。