摘 要:本文阐述了软件生命周期的概念,介绍了四种常用的软件产品开发的模型,并举例说明如何选择软件生命周期模型。最后,总结了运用软件生命周期方法的必要性及注意事项。

关键词:软件产品开发 软件生命周期

程序员出身的人都有这种切身体会,就是开发管理很重要。很多小规模的开发团队都是作坊式的开发,很不规范。这种开发方式对于一个人来说效率是很高的,但作为一个开发团队,会产生很多问题,不仅开发效率会降低,最关键的是不能保证软件产品的质量。即使有效率,也会在以后的维护中造成成本的增加。表面上看起来开发速度快了,但实际上以后可能会返工甚至推倒重来,效率也就大打折扣,甚至有时根本就无从谈起了。

那么如何解决这种问题呢?经过研究,我认为可以借鉴成熟的管理方法,进行规范化管理。其中,软件生命周期管理是很重要的一种开发管理方法。下面把研究的内容和结果总结如下。

一、什么是软件生命周期

是软件从产生直到报废的生命周期,周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段。

二、软件生命周期模型

按照软件生命周期管理方法,软件产品开发有以下几种模型:

1)瀑布模型

瀑布模型,就是要求每一个阶段都有明确的文档产出,对于严格的瀑布模型每一个阶段都不应该重叠,而应该在评审通过、相关的产出物都已经基线后才能够进入到下一个阶段。就是说瀑布模型一般是按顺序执行的(图1所示)。


图1 瀑布模型阶段示意图

其优点是可以保证系统在整体上的充分把握,可以保证整个软件产品有较高的质量,保证缺陷能够被提前发现和解决。

瀑布模型不适用情况有:采用瀑布模型可以使系统具备良好的扩展性和可维护性,但对于需求不明确,不确定因素多的项目,很难利用瀑布模型。

2)螺旋模型

螺旋模型并不是一个完全独立的模型,而是与瀑布模型有着内在联系。它遵从瀑布模型“需求→架构→设计→编码→测试”的路线。其最大的特点是整个开发过程是迭代的和风险驱动的。就是通过将瀑布模型的多个阶段转化到多个迭代过程中,以减少项目的风险。

螺旋模型的每一次迭代都包含了六个步骤:决定目标,替代方案和约束→识别和解决项目的风险→评估技术方案和替代解决方案→开发本次迭代的交付物和验证迭代产出的正确性→计划下一次迭代→提交下一次迭代的步骤和方案(图2所示)。

图2 螺旋模型示意图

3)增量迭代模型

增量迭代模型并不尝试一次性地完成所有的设计,而是首先进行较小范围的、关键核心的设计,然后在设计验证通过后,对当前设计进行扩展。增量和迭代有区别,但两者又经常一起使用。所以要想解释这个模型,就要先了解一下增量和迭代的概念。

假设现在要开发A、B、C、D四个大的业务功能,每个功能都需要两周的开发时间。则对于增量开发方法而言可以将四个功能分为两次增量来完成,第一次增量完成 A、B功能,第二次增量完成C、D功能;而对于迭代开发来说则是分两次迭代来开发,第一次迭代完成A、B、C、D四项基本业务功能但不含复杂的业务逻辑,而第二次迭代,将功能再逐渐细化补充完整相关的业务逻辑。在第一个月过去后,采用增量开发的时候A、B功能全部开发完成而C、D功能还一点都没有动;而采用迭代开发的时候A、B、C、D四项基础功能都已经完成。

4)快速原型模型

快速原型模型,就是在需求阶段也可以进行界面和操作建模,形成DEMO后和用户进一步进行需求沟通和确认。当用户没有信息系统的使用经验,系统分析员也没有过多的需求分析和挖掘经验的时候,需求分析和调研过程则更需要是一个启发式的过程。而原型则是一种很好的启发式方法,可以快速地挖掘用户需求并达成需求理解上的一致。否则即使双方都签字认可的需求,往往仍然不是客户真正想要的东西。

三、如何选择软件生命周期模型

在软件产品开发的项目中有这么多的模型可以选择,那么我们应该如何选择呢?下面举例说明:

1)对于以前曾经开发过同类型的项目,或用过相同的技术开发过的项目,或在前期需求明确的情况下,可以采用瀑布模型或改进的瀑布模型。

2)对于用户无信息系统使用经验,无法提出需求时,或者需求分析人员技能不足时,采用快速原型模型。

3)有的项目不确定性因素很多,很多东西前面无法计划,这时可以采用增量迭代模型或螺旋模型。

4)有的项目需求总是变来变去,即需求不稳定,这时可以采用增量迭代模型。

5)有的软件比较大,公司不可能一次投入那么多的人力、物力,这时可以采用增量迭代模型,软件产品分多个版本进行发布。

6)有的项目有多个独立功能,这时可以分别针对每个功能,将其作为子项目,每个子项目内都可以采用瀑布模型。

四、其他应注意的事项

我们开发软件项目中经常会遇到使用新的开发技术的情况,也就是创新型的项目。对于创新型的软件项目的开发,风险比较高,容易延期甚至失败,一般是比较难以把握和控制的。对于这种项目的开发,建议先进行预研项目的开发。预研项目只是对技术路线进行探索和修正的过程,是很必要的。我们以前可能是有预研的,但这种预研完全依靠技术尖子的主观能动性,对于人的依赖性太大,不规范。采用CMM后,可能给每个人的任务都比较紧张,技术尖子自由发挥的时间也少了,所以应该有预研项目。

软件项目预研阶段一般采用快速原型模型,就是要先将路走通,并测试开发技术的效率、总结经验、找到行之有效的技术路线。在开发的原型的基础上,再正式立项,因为对于细节已经能够把握,可以进行详细设计,这时可以采用瀑布模型。这样开发效率就可以控制了。

另外,在开发的各个阶段都要有相应的评审会并形成相应的记录和文档。

五、结论

国内外成功的软件公司,多数都采用软件生命周期方法来管理软件项目,这确实是一种行之有效的管理方法。我们自己可以学习和消化这种方法,因地制宜地开展起来,相信对于软件开发项目管理水平的提高是非常有益的。

软件开发生命周期的管理相关推荐

  1. 软件开发生命周期模型 瀑布模型、增量模型、原型模型、螺旋模型、喷泉模型总结...

    在校期间学习过这些模型,现在来复习一下. 瀑布模型/改进的瀑布模型 虽然瀑布模型仍然存在很多的问题有待解决,但瀑布模型仍然是最基本的和最效的一种可供选择的软件开发生命周期模型.瀑布模型要求软件开发严格 ...

  2. 软件开发生命周期中的设计阶段_测试基础——软件开发生命周期

    今天和大家分享的是软件开发生命周期,主要介绍软件的生命周期和软件的设计模型. 国标(GB8566-88)中将软件生命周期分为8个阶段:可行性研究与计划.需求分析.概要设计.详细设计.实现(包括单元测试 ...

  3. 软件开发生命周期中的设计阶段_什么是软件生命周期模型?软件测试和软件开发的关系分析!...

    软件生命周期这个词,对于大部分人应该比较陌生,但却不容忽视!正因为它的重要性,才有许多不同的软件开发生命周期模型,但是它们都有一个共同的特点,那就是在生命周期中的某一时刻,软件都会被测试.今天我就和大 ...

  4. 软件开发生命周期及开发模型

    软件开发生命周期 软件开发生命周期又叫做SDLC(Software Development Life Cycle),它是集合了计划.开发.测试和部署过程的集合.如下图所示 : 需求分析 这是生命周期的 ...

  5. sdlc 瀑布式 生命周期_SDLC指南–软件开发生命周期的阶段和方法

    sdlc 瀑布式 生命周期 When I decided to teach myself how to code almost four years ago I had never heard of, ...

  6. 测试基础---软件开发生命周期

    今天和大家分享的是软件开发生命周期,主要介绍软件的生命周期和软件的设计模型. 国标(GB8566-88)中将软件生命周期分为8个阶段:可行性研究与计划.需求分析.概要设计.详细设计.实现(包括单元测试 ...

  7. 软件开发生命周期有几个阶段?

    关注+星标公众号,不错过精彩内容 作者 | 情报小哥 ID | 嵌入式情报局 很多初学软件编程的小伙伴,只顾着"编程",其他开发相关的一些"技能"很少关注.如果 ...

  8. 在软件开发生命周期中使用应用程序验证器

    转自https://msdn.microsoft.com/zh-cn/library/aa480483.aspx#EHAA 发布日期 : 2006-6-5 | 更新日期 : 2006-6-5 摘要 M ...

  9. 云原生安全系列 1:零信任安全和软件开发生命周期

    引言: 自动化已经以各种形式出现了几十年,直到现在我们才开始看到它的全部潜力. 自动化软件开发生命周期 (SDLC) 可以显著提高质量保证.开发人员的生产力并减少花在特定任务上的时间.公司已开始在其整 ...

  10. 软件开发生命周期(SDLC)完全指南

    译者:陈峻 软件开发生命周期(Software Development Life Cycle,SDLC)包含了软件从开始到发布的不同阶段.它定义了一种用于提高待开发软件质量和效率的过程.因此,SDLC ...

最新文章

  1. 《Python数据分析与挖掘实战》一3.1 数据质量分析
  2. Python培训:Python有哪些函数?你了解几种?
  3. python实现网络监控_使用python进行服务器监控
  4. 一个 TCP 连接可以发多少个 HTTP 请求?
  5. 为什么美团打车、滴滴外卖必败?君智谢伟山揭秘了背后的竞争战略逻辑
  6. HTML+CSS+JavaScript复习笔记持更(八)——CSS3常用属性之列表
  7. xhost: unable to open display linux下安装oracle
  8. 大道至简—GO语言最佳实践
  9. CF1338D:Nested Rubber Bands(树形dp)
  10. SmartSVN:File has inconsistent newlines
  11. git serialtool_Git学习笔记---协作的一般流程
  12. 面试准备每日五题:C++(二)——mallocnew、宏、volatile、constvolatile、(a)和(a)
  13. 基于麻雀算法优化的核极限学习机(KELM)回归预测 -附代码
  14. 数值类型小数点后是否可以接零问题
  15. IE恶意修改防护大法(转)
  16. 位运算实现加减乘除运算——超详细C语言描述
  17. 系列之FIRST——跑酷小游戏:关卡+BOSS+技能版
  18. 奥格斯堡大学计算机系,奥格斯堡大学
  19. Spring(8):构造方法注入与示例
  20. 解决 Vmware 上不了网 - 无法使用桥接方式连接网络

热门文章

  1. 吉比特无源光纤说明书_[干货]光纤通信之缩略语英汉对照表
  2. Msm8937+android7.1.1编译环境搭建及编译
  3. 精品化游戏《热血征途》掀起网页游戏大变革
  4. 【289】生命游戏(Game Of Life)
  5. 耗时一年整理:Netty 终极权威指南 + 项目
  6. 智能医疗二次爆发,医疗的全产业链何时打通?
  7. Junglescout 正版账号共享 亚马逊卖家选品必备软件 junglescout插件同步升级
  8. Michele Maggiore《A Modern Introduction to Quantum Field Theory》(米歇尔·马焦雷《量子场论现代导引》)中文目录
  9. CMSIS Driver
  10. 【JavaScript游戏开发】使用HTML5 canvas开发的网页版中国象棋项目