软件工程复习4.7

软件危机

软件危机的定义

软件在开发和维护过程中遇到的一系列问题

软件危机的表现

  • 成本高
  • 软件质量得不到保证
  • 进度难以控制
  • 维护非常困难

软件危机包含两方面问题

  • 如何开发软件,以满足不断增长,日趋复杂的需求
  • 如何维护数量不断膨胀的软件产品

软件危机产生的原因

  • 复杂性高
  • 规模大
  • 影响软件生产率和质量的因素比较复杂
  • 缺乏有效的系统原理、原则、方法和工具的指导和辅助

软件危机的技术解决途径

  • 1968年提出软件工程概念和思想
  • 20世纪70年代的结构化软件开发方法
  • 20世纪80年代的面向对象的软件开发方法

软件工程的定义

软件工程是研究软件开发和软件管理的一门工程学科

软件工程的基本原则

  • 严格按照软件生命周期各阶段的计划进行管理
  • 坚持阶段评审
  • 实施严格的产品控制
  • 采用现代程序设计技术
  • 开发小组的成员应该少而精
  • 结果应能清楚地审查
  • 认识不断改进软件工程实践的必要性

软件生存周期

提出软件生存周期的意义

  • 降低整个软件开发工程的难度
  • 便于不同人员分工协作
  • 便于在各个阶段采用先进的开发方法和技术
  • 便于对软件开发的全过程的组织和管理

软件过程的定义

软件过程就是为建造高质量软件所需完成的任务的框架,即形成软件产品的一系列步骤,包括中间产品、资源角色及过程中采取的方法、工具等范畴

软件能力成熟度模型(CMM)

(1)初始级
工作无序,项目进行过程中常放弃当初的计划
(2)可重复级
管理制度化,建立了基本的管理制度和规程,管理工作有章可循
(3)已定义级
建立了完善的培训制度和专家评审制度,全部技术活动和管理活动均可控制
(4)已管理级
产品和过程已建立了定量的质量目标,已建立过程数据库,已实现项目产品和过程的控制
(5)优化级
可集中精力改进过程,采用新技术、新方法

瀑布模型

特点

  • 顺序性和依赖性
  • 推迟实现的观点
  • 文档驱动,每个阶段必须完成规定的文档
  • 每个阶段结束前完成文档审查,及早改正错误

缺点

  • 缺乏灵活性,需求阶段要求全部需求
  • 项目开发晚期才能得到程序的运行版本
  • 采用线性模型组织项目开发经常发生开发小组人员堵塞状态

适用的场景

  • 产品需求确定、技术解决方案成熟
  • 开发队伍的技术力量薄弱 缺乏经验
  • 质量需求高于成本需求和进度需求

快速原型模型

原型
软件开发过程中,软件的一个早期可运行的版本,它反映了最终系统的部分重要特性

原型模型的分类

  • 抛弃型原型
  • 进化型原型

优点

  • 在实践中学习
  • 改善客户关系
  • 保证主体需求的正确性
  • 克服瀑布模型的缺点,减少需求不确定带来的开发风险
  • 减少过程文档

缺点

  • 容易退化为边做边改
  • 构造一个原型需要10%的额外花费
  • 原型的迭代的周期难以控制

适用场景

  • 项目的需求在项目开始时不明确
  • 开发新产品,验证技术可行性

增量模型

先完成一个系统子集的开发,再按同样的开发步骤增加系统子集,如此递增下去指直到满足全部系统需求

增量
满足用户需求的一个子集,是能够完成一定功能的、小而可用的软件

软件工程复习4.7_第1张图片

每一个增量都是一个瀑布模型的基本成分

优点

  • 客户无需等到整个系统的实现
  • 可以将早期的增量作为原型,获得后面增量的经验
  • 项目总体失败的风险比较低
  • 系统结构接受了最多的测试

缺点

  • 要求待开发的软件系统可以被模块化

适用场景

  • 项目中明确了大部分需求,但需求可能发生变化
  • 市场和用户把握不准确,希望尽早进入市场

螺旋模型

螺旋模型综合楼传统的瀑布模型和快速原型模型的优点,同时增加了风险分析
瀑布模型+快速原型模型+风险分析

优点

  • 支持需求的动态变化
  • 尽早发现软件中的错误
  • 支持风险分析

缺点

  • 风险分析需要有丰富的风险评估知识和方法

适用场景

  • 需求不明确或可能发生变化的大型复杂软件系统
  • 支持面向过程、面向对象开发方法、具有广阔前景

统一过程模型RUP

捕获了现代软件开发的最佳实践

你可能感兴趣的:(软件工程)