跳到主要内容

生命周期模型

软件生命周期是软件定义、软件开发、运行维护三个时期。 每个时期又分为若干阶段:

  1. 软件定义
    1. 问题定义
    2. 可行性研究
    3. 需求分析:问题识别、分析和综合、导出软件的逻辑模型、编写文档
  2. 软件开发
    1. 概要设计
    2. 详细设计
    3. 编码
    4. 测试
  3. 运行维护
    1. 软件维护: 矫正性维护、适应性维护、完善性维护、预防性维护
数据字典

数据字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑等进行定义和描述,其目的是对数据流图中的各个元素作出详细的说明,使用数据字典为简单的建模项目。 简而言之,数据字典是描述数据的信息集合,是对系统中使用的所有数据元素的定义的集合。

  1. 作为分析阶段的工具
  2. 估计由变更产生的影响
  3. 作为数据库开发的基础

既然所有的开发模型都具有相同的开发周期,那不同的开发模型的差别从哪里体现呢?或者说不同的开发模型在指导开发过程中的差异点在哪里?

我理解的差别点主要体现在:

每个周期活动的工作上限 每个周期被重复的次数 周期活动被重复的时机 对软件开发活动的指导范围

瀑布模型

六大步:收集需求、分析、设计、编码、测试、维护

理想化模型,现实中不存在

V模型

rap application development 快速软件开发

  1. 需求分析

  2. 概要设计:主要是架构实现,搭建架构,表述各模块功能,模块接口连接,数据传递和实现

  3. 详细设计:对各模块进行深入分析,达到伪代码级别,已经把程序中的具体实现的功能现象描述出来,包含数据库设计说明。

  4. 软件编码

  5. 单元测试

  6. 集成测试

  7. 系统测试

  8. 验收测试

增量模型

增量模型将整个系统结构化的拆成几个增量(功能模块)-- 比如3个,每一个完整的周期完成一个增量,有几个增量就重复几个周期。

思想是先开发出一个初始的实现,给用户使用并听取用户的使用意见和建议,通过对多个版本的不断修改直到产生一个充分的系统。描述、开发和有效性验证等活动不是分离的而是交织在一起。同时让这些活动之间都能得到快速的反馈信息传递。

增量式开发反映了我们解决问题的方法,系统的每一个增量或版本包括用户需要的一部分功能。通常,系统的早期增量包括最重要或最紧急的功能需求。这就意味着在早期开发阶段,用户可以相对早地评估系统,看它是否满足需要。若不满足需要,就只需要改变当前的增量即可,又或许有新的功能被发现并为下个增量做准备,因此可以大幅度地减少成本。

增量式开发相比于瀑布模型的一些重要优点: 降低了适应用户需求变更的成本。重新分析和修改文档的工作量较之瀑布模型要少很多。

在开发过程中更容易得到用户对于已做的开发工作的反馈意见。用户可以评价软件的现实版本,并可以看到已经实现了多少。这比让用户从软件设计文档中判断工程进度要好很多。 使更快地交付和部署有用的软件到客户方变成了可能,虽然不是所有的功能都已经包含在内。相比于瀑布模型,用户可以更早地使用软件并创造商业价值。 从管理的角度看,增量式方法存在的问题: 过程不可见。管理者需要通过经常性的可交付文档来把握进度,若系统开发速度太快,要产生反映系统每个版本的文档就很不划算。

伴随着新的增量的添加,系统结构在逐渐退化。除非投入时间和金钱用在重构系统结构上以改善软件,否则定期的变更会损坏系统的结构。随着时间的推移,越往后变更系统越困难,而且成本也将逐渐上升。

螺旋模型

螺旋模型属于演化开发(也属于迭代开发)。螺旋模型结合了演化开发的迭代和瀑布模型的系统性和监控。最大的特点就是引入了其它模型不具备的风险分析。在每一个迭代里,当确定了目标、方案和限制条件以后,进入风险评估阶段(识别并消除风险)。如果有不确定的风险,则需要进一步工作以将所有风险都确定。风险过大甚至会终止项目。当风险识别完成并有确定的风险消除方案以后,就继续采用瀑布模型完成一次迭代开发。在多次迭代以后,达成所期望的戏疼。

喷泉模型

喷泉模型体现了软件开发的无边界性(每个阶段之间没有清晰的边界)和反复性。就像喷泉水喷出又落下。开发的阶段也是这样,可能从某个阶段回落到之前的任何一个阶段(比如,从测试回到需求获取)。PS:感觉像边改边做模型。

增量开发与迭代开发的区别

增量开发: 每个阶段都完成一个高质量的发布版本,后一阶段不对前一阶段的内容进行任何修改,只在前一阶段的基础上增加新的业务功能实现,称为增量,直至最后一个阶段,形成最终的软件产品。 增量开发只是在原有的基础上增加新的东西。

迭代开发: 第一个阶段就覆盖了项目整体范围,以后每个阶段都是在前一阶段的基础上改进、完善,没有业务范围的扩展。 迭代开发每一次都是在原有的基础上进行改进和完善。 迭代开发只是要求将开发分成多个迭代,并没有回答一个重要的问题:怎么划分迭代,哪个任务在这个迭代,哪个任务在下个迭代?这时,一般采用"增量开发"(incremental development)划分迭代。

所谓"增量开发",指的是软件的每个版本,都会新增一个用户可以感知的完整功能。也就是说,按照新增功能来划分迭代。

Loading Comments...