软件工程复习4.7

软件危机

软件危机的定义

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

软件危机的表现

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

软件危机包含两方面问题

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

软件危机产生的原因

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

软件危机的技术解决途径

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

软件工程的定义

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

软件工程的基本原则

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

软件生存周期

提出软件生存周期的意义

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

软件过程的定义

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

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

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

瀑布模型

特点

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

缺点

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

适用的场景

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

快速原型模型

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

原型模型的分类

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

优点

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

缺点

扫描二维码关注公众号,回复: 16458321 查看本文章
  • 容易退化为边做边改
  • 构造一个原型需要10%的额外花费
  • 原型的迭代的周期难以控制

适用场景

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

增量模型

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

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

在这里插入图片描述

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

优点

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

缺点

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

适用场景

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

螺旋模型

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

优点

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

缺点

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

适用场景

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

统一过程模型RUP

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

问题定义

什么是问题定义

  • 建立项目范围,确定要开发的新系统的问题域
  • 对项目进行功能性分割

问题定义关键问题

  • 如何解析问题
  • 用自然语言描述清楚问题的关键问题
  • 问题定义举例

问题定义报告

在这里插入图片描述

可行性研究

可行性研究前提

  • 假设问题定义已经清晰
  • 是不是所有问题都有解决办法

可行性研究目标

  • 用最小的代价,在尽可能短的时间内,确定问题是否有可行的解决方案

可行性研究内容

  • 经济可行性
  • 技术可行性
  • 操作可行性
  • 社会可行性

可行性研究的特征

  • 不是解决问题,而是确定是否可解
  • 占总成本的5%-10%
  • 可行性研究一般由系统分析员负责

可行性研究的步骤

  • 复查系统规模和目标
  • 研究目前正在使用的系统
  • 确定新系统的高层逻辑模型
  • 重新定义问题
  • 推荐行动方针
  • 草拟软件项目开发计划
  • 书写可行性研究报告,并提交审查

系统流程图

系统流程图SFD用于在可行性研究阶段描述系统的物理模型

成本/效益分析

成本/效益分析从经济角度分析开发一个新系统是否核算,从而帮助客户组织的负责人正确地做出是否投资开发软件

成本估算

  • 软件的成本主要是人员开支,因此,成本估算主要估算工作量
  • 估算出软件开发或维护的工作量,然后计算各类人员工作量的比例,再分别计算每类人员的工资总额,即可求出人员开支成本

需求分析

需求问题

  • 需求是软件项目成败的关键所在
  • 越早发现需求错误,越早改正它,其代价越小
  • 需求是系统必须具有的能力
  • 好需求的特征:无歧义、完整、一致、可检验、确定、可跟踪的、正确的、

需求定义

  • 用户解决问题或达到目标所需的条件
  • 系统或系统部件要满足合同、标准、规范或其他正式规定文档所需具有的条件
  • 反映上述两种条件的文档说明

需求性质

  • 必要的
  • 无歧义的
  • 可测的
  • 可跟踪的

需求的分类

  • 业务需求
  • 用户需求
  • 软件功能需求
  • 非功能需求

业务需求

  • 系统建立的战略出发点,表现为高层次的目标
  • 系统应该具备的特性
  • 参与各方建立一个共同的前景
  • 限定系统的范围

用户需求

  • 用户需求是指描述用户使用软件需要完成什么任务、怎么完成
  • 通常是在业务需求定义的基础上通过用户访谈、调查,对用户使用的场景进行整理,从而建立用户角度的需求
  • 用户需求是需求捕获的结果

功能需求

  • 软件功能需求可以直接映射为系统行为,定义了系统中需要实现的功能,描述了开发人员需要实现什么
  • 将用户需求转化为软件功能需求的过程是一个复杂的过程

非功能需求

  • 速度
  • 容量
  • 吞吐量

面向对象的提出

  • 第一阶段:以计算为中心
    分析设计围绕程序的运行效率、算法优劣来进行
  • 第二阶段:以过程为中心
    分析设计围绕数据流进行,以数据流程来模拟业务流程。面向过程的设计是以程序模块来构建软件结构
    典型模型:E-R图、数据流图、状态转换图、判定表、判定树

面向对象的优点

  • 从认知学的角度来看,面向对象方法符合人们对客观世界的认识规律
  • 面向对象方法开发的软件系统易于维护,其体系结构易于理解、扩充和修改
  • 面向对象方法中的继承机制有力支持软件的复用

猜你喜欢

转载自blog.csdn.net/weixin_47020721/article/details/130005187