软件开发生命周期
- 问题定义,该阶段由软件开发方与需求方共同讨论,主要确定软件的开发目标及其可行性。
- 需求分析,该阶段对软件需求进行更深入的分析,划分出软件需要实现的功能模块,并制作成文档。需求分析在软件的整个生命周期中起着非常重要的作用,它直接关系到后期软件开发的成功率。在后期开发中,需求可能会发生变化,因此,在进行需求分析时,应考虑到需求的变化,以保证整个项目的顺利进行。
- 软件设计,该阶段在需求分析结果的基础上,对整个软件系统进行设计,如系统框架设计、数据库设计等。
- 软件开发,该阶段在软件设计的基础上,选择一种编程语言进行开发。在开发过程中,必须要制订统一的、符合标准的程序编写规范,以保证程序的可读性、易维护性以及可移植性。
- 软件测试,该阶段是软件开发完成后对软件进行测试,以查找软件设计与软件开发过程中存在的问题并加以修正。软件测试过程包括单元测试、集成测试、系统测试3个阶段;测试的方法以黑盒测试、白盒测试或者两者结合的形式进行。在测试过程中,为减少测试的随意性,需要制订详细的测试计划并严格遵守;测试完成之后,要对测试结果进行分析并对测试结果以文档的形式汇总。
- 软件维护与运行,软件完成测试运行之后并投入使用,会面对庞大的用户群体,软件可能无法满足用户使用需求,此时就需要对软件进行维护升级以延续软件的使用寿命。软件的维护包括纠错性维护和改进性维护两个方面。软件维护是软件生命周期中持续时间最长的阶段。
软件开发模型
大爆炸模式
将大把时间放在开发软件上,计划、进度安排、正规开发过程几乎没有。
优点:简单。多数情况下,大爆炸模式几乎没有什么测试。假如要测试人员的参与,软件测试的工作就是向客户报告发现的问题。
边改边写模型
走一步,看一步,再走一步,…
优点:适用于一些较小的程序开发,可以快速实现功能 缺点: 无计划的发展,随着软件结构的无规律修改,产品会越来越糟,最终导致无法继续修改。开发过程无考虑测试和可维护性,也没有任何文档,软件的维护十分困难。
瀑布模型
将功能的实现与设计分开,便于分工协作,即采用结构化的分析与设计方法将逻辑实现与物理实现分开
优点:简捷、精致、很有意义、在合适的项目中效果显著 即 检查点清晰、分工明确有利于开发人员组织管理及工具的使用与研究,提高开发效率 缺点:严格按照线性执行、增加了开发风险。而且必须有产出结果,增加了开发的工作量。 目前来说 瀑布模型不适合现在软件开发
瀑布模型的三点需要强调:
- 非常强调产品的定义
- 各步骤是分立的,没有交叉
- 无法回溯
螺旋模型
是一种演化软件开发过程模型,它兼顾了快速原型的迭代的特征以及瀑布模型的系统化与严格监控。
每次循环包括:
优点:强调了风险的分析,对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标 缺点:采用螺旋模型需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开发中,如果未能够及时标识风险,势必造成重大损失 过多的迭代次数会增加开发成本,延迟提交时间
敏捷模型
是一种应对快速变化的需求的一种软件开发能力。
优点:及时响应客户需求,不断适应新的趋势 缺点:管理起来相对混乱,不适合大型项目的使用
迭代模型
迭代增量式开发或迭代进化式开发,是一种与传统的瀑布式开发相反的软件开发过程,它弥补了传统开发方式中的一些弱点,具有更高的成功率和生产率。
优点:降低了在一个增量上的开支风险,降低了产品无法按照既定进度进入市场的风险。 加快了整个开发工作的进度。由于用户的需求并不能在一开始就作出完全的界定,它们通常是在后续阶段中不断细化的。 缺点:增加了集成失败风险,容易变成“边改边写”模型。
快速原型模型
需要迅速建造一个可以运行的软件原型 ,以便理解和澄清问题,使开发人员与用户达成共识,最终在确定的客户需求基础上开发客户满意的软件产品。
优点:减少由于软件需求不明确带来的开发风险。 缺点:原型设计较难,不利于开发人员对产品的扩展 所选用的开发技术和工具不一定符合主流的发展;快速建立起来的系统结构加上 连续的修改可能会导致产品质量低下。
|