第二章:软件过程及其模型

软件生命周期模型
  • 定义:软件也有一个从产生到消亡的过程,这个过程一般称为“软件的生命周期”(Software Life Cycle)或“软件生存周期”。
  • 划分:软件生命周期可划分为定义、开发和运行3个大的阶段。进一步可细分为6个阶段。
    第二章:软件过程及其模型
软件生命周期的6个阶段
  • 问题的定义及规划:在该阶段软件开发人员与客户进行需求分析,确定软件的开发目标及其可行性。
  • 需求分析:在确定软件开发可行的情况下,对软件需要实现的各个功能进行详细分析。
  • 软件设计:该阶段主要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计,以及数据库设计等。
  • 程序编码:该阶段是将软件设计的结果转换成计算机可运行的程序代码。
  • 软件测试:在软件设计完成后要经过严密的测试,以便发现软件在整个设计过程中存在的问题并加以纠正。包括单元测试、集成测试和系统测试3个阶段。
  • 软件维护:这是软件生命周期中持续时间最长的阶段。为了适应不断变化的用户要求和运行环境,必须对软件进行维护。
各阶段基本任务
可行性研究
  • 任务
    了解用户要求和现实环境,从技术、经济、市场等方面研究并论证开发该软件系统的可行性

  • 研究内容
    1)技术可行性(使用现有的技术能否实现这个系统?是否有胜任开发该项目的熟练技术人员?能否按期得到开发该项目所需的软件、硬件资源?)
    2)经济可行性(这个系统的经济效益能否超过它的开发成本?)
    3)操作可行性(操作可行性评价系统运行后会引起的各方面变化,如:对组织机构管理模式、用户工作环境等产生的影响。)
    4)社会可行性(社会可行性主要讨论法律方面和使用方面的可行性。)

  • 阶段性产品
    可行性论证报告
    初步的项目开发计划

需求分析
  • 任务
    确定用户对待开发软件系统的需求包括:功能、性能、运行环境约束

  • 重要性
    软件开发依据,软件验收的标准

  • 困难性
    难以说清, 动态变化, 歧义,复杂

  • 技术途径和工具
    需求分析人员需与用户不断、反复地交流和商讨,使用户需求逐步准确化、一致化、完全化
    抽象、问题分解、快速原型、多视点等技术

  • 阶段性产品
    软件需求规格说明书SRS(功能,性能和运行环境约束)

概要设计
  • 任务
    根据SRS建立目标软件系统总体结构、设计全局数据库和数据结构,规定设计约束,制定集成测试计划等等。

  • 技术途径和工具
    根据软件需求规格说明书, 自顶向下, 逐步求精, 抽象, 模块化, 局部化,信息隐藏 ……

  • 阶段性产品
    概要设计规格说明书
    数据库或数据结构设计说明书
    集成测试计划。

详细设计
  • 任务
    细化概要设计所生成的各个模块, 并详细描述程序模块的内部细节(算法,数据结构等),形成可编程的程序模块,制订单元测试计划

  • 技术途径
    根据SRS和概要设计结果进行,单入口单出口,PDL

  • 阶段新产品
    详细设计规格说明书
    单元测试计划

实现
  • 任务
    根据详细设计规格说明书编写源程序,并对程序进行调试和单元测试,验证程序与详细设计文档 一致性

  • 技术途径和工具
    以详细设计规格说明书为依据、基于某种程序设计语言进行编码

  • 阶段性产品
    源程序代码

集成测试
  • 任务
    根据概要设计规格说明书,将经过单元测试的模块逐步进行集成和测试

  • 技术途径和工具
    以概要设计规格说明书和集成测试计划为依据,进行集成模块并进行测试
    IDE, 专有工具等

  • 阶段性产品
    生成满足概要设计要求、可运行的系统源程序和系统集成测试报告

确认测试
  • 任务
    根据软件需求规格说明书,测试软件系统是否满足用户的需求

  • 途径
    由用户参与,以软件需求规格说明书为依据进行确认测试
    专有工具

  • 阶段性产品
    可供用户使用的软件产品(文档,源程序)

软件维护
  • 任务
    对使用后的软件进行维护,例如:
    修正使用过程中发现的错误-纠错性维护
    增加新的功能-完善性维护
    从一个环境搬迁到另一个环境-适应性维护

  • 途径
    以文档和源程序为基础按用户要求进行

  • 阶段性产品
    版本更新的软件产品

软件开发过程模型

瀑布模型
  • 软件过程模型的第一个模型
    第二章:软件过程及其模型

  • 特点:
    提供了软件过程模型的基本框架(模板)。采用结构化方法开发,包括结构化分析、结构化设计、结构化程序设计和结构化测试方法。
    2、阶段间具有顺序性和依赖性,强调每一阶段活动的严格顺序。
    3、推迟实现的观点。
    4、每个阶段必须完成规定的文档,以经过评审确认了的阶段工作产品(文档)驱动下一阶段的工作。每个阶段结束前完成文档审查, 及早改正错误。

  • 优点:

  1. 采用规范的方法;严格规定每个阶段提交的文档;要求每个阶段交出的产品必须经过验证。
  2. 瀑布模型适合于用户需求明确、完整、无重大变化的软件项目开发。瀑布模型的成功在很大程度上是由于它基本上是一种文档驱动的模型。
  • 缺点:
  1. 对如何处理开发中产品和活动的变化没有提供相关的指导
  2. 将软件开发视为制造而不是创造
  3. 创造一个产品没有迭代的活动
  4. 需要等待很长时间
原型化模型
  • 定义:
  1. 原型是一个部分开发的产品
  2. 原型化:
    使开发者能够对评估可选的设计策略 (设计原型)
    帮助用户理解系统将会是什么样子 (用户界面原型)
    第二章:软件过程及其模型
  • 特点:
  1. 允许需求或设计反复调查
  2. 减少开发中的风险和不确定性
  • 缺点:
  1. 为了使原型尽快的工作,没有考虑软件的总体质量和长期的可维护性。
  2. 为了演示,可能采用不合适的操作系统、编程语言、效率低的算法,这些不理想的选择成了系统的组成部分。
  3. 开发过程不便于管理。
增量和迭代模型
  • 定义:
  1. 增量开发: 先定义一个小的功能子系统,再在每个新的发布中增加新功能
  2. 迭代开发: 一开始就提交完整的系统,再在每一个新的发布中改变每个子系统的功能
  • 特点:
  1. 减少循环时间
  2. 系统一部分一部分地交付: 系统其他部分在开发时,客户能获得一部分功能
  3. 两个系统功能可以并行
    产品系统 (发布n): 正在运行
    开发系统 (发布 n+1): 下一个版本
    第二章:软件过程及其模型
  • 优点:
  1. 即使缺少某些功能,也可以在早期的发布中就可以开始进行培训
  2. 可以及早为那些以前从未提供的功能开拓市场
  3. 经常性的发布可以使开发人员全面、快速修复这些问题
  4. 开发团队将重点放在不同的专业领域技术上
螺旋模型
  • 定义:围绕四个活动
  1. 计划
  2. 确定目标、可选方案、约束
  3. 评估可选方案和风险
  4. 开发和测试
    第二章:软件过程及其模型
  • 缺点:
  1. 风险驱动,需要相当丰富的风险评估经验和专门知识,否则风险更大
  2. 随着迭代次数的增加,工作量加大,软件开发成本增加
  • 优点:
  1. 对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标
  2. 减少了过多测试或测试不足
  3. 维护和开发之间并没有本质区别
敏捷软件过程

敏捷方法的两大主要特征是对“适应性”的强调,以及对“人”的关注。敏捷过程非常强调人的作用

敏捷过程将整个软件生命周期分解为若干个小的迭代周期,通过在每个迭代周期结束时交付阶段性成果获取切实有效的客户反馈。
其目的是希望通过建立及时的反馈机制,以应对随时可能的需求变更,并做出相应的调整,从而增强对软件项目的控制能力。
相对于经典的软件开发过程的计划性特征,该过程在适应性上具有更大的优势

  • 特点:
  1. 相对于过程和工具,更强调个人和交互的价值
  2. 更喜欢在生产运行的软件上投入时间 ,而不是在文档的编写上
  3. 注重客户的合作,而不是合同谈判
  4. 专注于对变化的反应,而不是创建一个计划而后遵循这个计划
极限编程

极限编程是敏捷软件开发中最富有成效的几种方法学之一.

  • 优点:
  1. 是“轻量型”和“灵活”的软件过程模型,并且与面向对象语言结合起来,提供了一种很有特点的软件开发解决方案。
  2. 是用于解决大型软件开发过程中所遇到的问题的方法,可以称为“专家协作”的开发方式。
  • 4个要点:交流、简单、反馈和勇气
  1. 交流包括开发人员与客户的交流、开发人员之间的交流、开发人员与管理人员的交流。
  2. 简单是指设计简单、编码简单、注释简单以及测试简单。
  3. 反馈包括客户对软件的反馈,以及测试代码对功能代码的反馈。
  4. 勇气是指接受任务的勇气。

相关文章: