1、软件概述
1、软件概述
软件生存周期
8个阶段
可行性研究与计划;需求分析;总体设计;详细设计;实现(编码和单元测试);集成测试;确认测试;使用和维护。
可行性研究与计划
任务
需要解决什么问题,是否有解决方案?
问题定义报告
问题性质、工程目标、工程规模
可行性研究报告
经济、社会、技术可行性
项目开发计划
粗略计划
需求分析
任务
目标系统必须做到什么?
可行性研究中的需求粗略、不够准确;但需求分析中要求需求必须准确、清晰、具体。
需求规格说明书
这个说明书记录目标系统需求,是客户验收的准绳、软件开发是否成功的标准。非常重要。
总体设计
任务
怎么实现目标系统?
根据需求设计一或多套方案,分析最佳方案,设计软件结构。
总体设计说明书
记录总体设计的结果。
详细设计
任务
怎么实现目标系统?
设计每个模块的算法和数据结构
详细设计说明书
用适当工具表达算法和数据结构
实现
任务
选择语言和开发工具,翻译详细设计结果和测试模块。
实现阶段文档
程序清单、单元测试报告
集成测试
任务
将经过单元测试的模块组装起来测试,通过测试使软件达到预定需求。
测试报告
测试计划、方案、结果
确认测试
任务
由用户按需求规格说明书规定测试。
测试报告
测试计划、方案、结果
使用和维护
任务
通过必要维护活动使系统持久满足用户要求,延长软件生存周期。
维护类型
改正性:软件运行过程中发现错误,进行改正维护。
适应性:软件运行软硬件变化(操作系统、硬件型号架构)。
完善性:用户要求改进或扩充软件。
预防性:为将来的维护做准备,未雨绸缪(主动维护)。
过程模型
并非所有软件都有全部8步,不同因素会影响阶段划分和执行顺序,形成不同的生存周期模型,这就是过程模型。
常用软件过程模型
确定任务框架和它们的完成顺序。
瀑布模型
特点
1. 阶段具有顺序性和依赖性
前一阶段结束后后一段才能开始,前一个阶段输出文档,后一个阶段输入文档。
2. 推迟实现观点
瀑布模型在编码前设置系统分析、系统设计,推迟物理实现,尽量让编码靠后,保证前期工作扎实。
3. 质量保证观点
坚持两个重要做法:
每个阶段都必须有完整、准确的文档,作为软件开发时人员间通信、运行时期维护的重要依据。
每阶段结束前评审文档。
瀑布只能自上而下,即使评审时发现有问题也不能改。它过于理想化,默认开发者不会犯任何错误,所有评审都能过。
改进——带反馈环的瀑布模型
前面说的瀑布只能自上而下,即使评审时发现有问题也不能改。它过于理想化,默认开发者不会犯任何错误,所有评审都能过。所以实际的瀑布模型带反馈环。
优点
提高软件质量,降低维护成本,缓解软件危机。
缺点
缺乏灵活性,无法解决需求不明确的问题。用户不经过实践就不能提出完整准确的需求。
快速原型模型
用户不会说,但是会挑毛病。
快速建立反应用户需求的原型系统,反复由用户评价修正需求,开发出最终产品。
优点
确定需求上优于瀑布模型(通过原型与用户交互);
提供学习手段,通过开发和演示原型对开发者和使用者了解系统都有积极作用;
有的软件原型可以成为系统的一部分。
缺点
快速建立的系统结构加连续修改可能导致产品质量下降,原型系统内部结构可能不好。
而且有些原型只为了确定需求,确定完就被抛弃,会导致开发冗余增加成本。
目标软件
需求模糊的软件适合用这个模型。
增量模型
又称渐增模型,开发软件时将软件作为一系列增量构件设计、编码、集成和测试。
和前两个的区别
那俩都是一次把满足所有需求的产品提交给用户,而增量模型是分批提交产品。
上面两个都是一次交完,增量模型是分批提交。
流程
这里的设计不包含详细设计,做完整体设计直接切分成构件,并行开发,哪个做完交哪个。
优点
较短时间向用户提交产品,可以分散用户的业务负担;
用户有充裕时间学习和适应产品;
软件结构必须开放,方便向现有产品加入新构件。
缺点
“软件结构必须开放,方便向现有产品加入新构件”这件事很难做到。
风险更高的增量模型
前面的增量模型在实现构件之前完成总体需求分析、规格说明和概要设计,风险较小。
风险更高的模型中确定用户需求后,各个构件并行开发。
并行度高,流程很快。
但不建议使用,因为最后一堆构件分别地同时交付,各个构件有可能不能正确有效地组合。
螺旋模型
此模型加入了风险分析。
软件风险
超期,超预算,行业竞争
四方面活动
制定计划
确定目标、选定方案、设定约束条件
风险分析
评估方案,识别和消除风险
如果评估认为能消除就进行下一步,不通过就停止项目或削减预期目标
实施工程
软件开发
客户评估
评价开发工作,计划下一阶段工作。沿螺线自内向外每旋转一圈开发出更完善的版本
结束条件:经费不够、竞争不力等无法解决的问题。
优点
对于大型项目有较好的风险控制。螺旋模型通过每个阶段的风险分析和评估,及时发现和解决项目中的风险问题,降低项目失败的风险。螺旋模型采用迭代的开发方式,每个迭代周期都可以产生可用的软件产品,便于及时验证和确认需求。
缺点
需要风险评估的经验;
契约开发(签合同)需要事先指定模型和发布产品,普及度不高。
由于需要进行多次迭代和反复验证,螺旋模型的开发成本较高、周期长。
喷泉模型
面向对象的生命周期模型,体现迭代和无缝特性。
迭代
求精,系统某部分被重复多次,相关功能在每次迭代中逐渐加入系统。
无缝
分析、设计、编码没有明显界限。
各个阶段之间有重叠,没有明显边界。该模型认为软件开发过程自下而上周期的各阶段是相互重叠和多次反复的,就像水喷上去又可以落下来,类似一个喷泉。各个开发阶段没有特定的次序要求,并且可以交互进行,可以在某个开发阶段中随时补充其他任何开发阶段中的遗漏。
优点
无缝,可以同步开发,提高开发效率,节省开发时间,适应面向对象软件。
缺点
可能随时加各种信息、需求和资料,需要严格管理文档(因为所有文档几乎不停地在同时更新),审核的难度加大。
Rational统一过程
三大特点:1)软件开发是一个迭代过程,2)软件开发是由Use Case驱动的,3)软件开发是以架构设计(Architectural Design)为中心的。
总共四个阶段,每个阶段都要访问9个工作流(6个核心、三个支持),访问强度由图中的厚度决定。
4个连续阶段每阶段都有明确目标,通过一次或多次迭代完成。
一个迭代是一个完整的开发循环,产生一个可执行的产品版本,是最终产品的一个子集。
优点
降低了在一个增量上的开支风险。如果开发人员重复某个迭代,那么损失只是这一个开发有误的迭代的花费。 降低了产品无法按照既定进度进入市场的风险。通过在开发早期就确定风险,可以尽早来解决而不至于在开发后期匆匆忙忙。
加快了整个开发工作的进度。因为开发人员清楚问题的焦点所在,他们的工作会更有效率。 由于用户的需求并不能在一开始就作出完全的界定,它们通常是在后续阶段中不断细化的。因此,迭代过程这种模式使适应需求的变化会更容易些。
微软过程
每个阶段设一个里程碑,达到就算结束。
五个阶段
规划
开展市场调研,形成目标
设计
完成规格说明和总体设计,确定主要进度
开发
完成所有构件的开发工作
稳定
实施全面的内部和外部测试,最终形成可发布的RTM版本
发布
确定产品质量符合发布标准后,发布产品和相关信息
每个版本都要经历五个阶段。
每个版本开发结束后都可以快速推向市场占领市场,之后再慢慢更新。