一、概述
1.1软件与软件危机
软件的概念
软件是计算机系统中与硬件相互依存的另一部分,包括程序、数据及其相关文档的完整集合(软件=程序+数据+文档)
数据:使程序能够适当处理信息的数据结构
程序:能够完成预定功能和性能的可执行指令序列
文档:是开发、使用和维护过程程序所需要的图文资料
软件的特点:
- 软件本身的复杂性
- 软件的成本高昂
- 软件开发未摆脱手工开发方式
- 软件维护与硬件有本质差,维护难度高
- 软件开发不是传统硬件制造过程
- 软件是一种逻辑实体,无磨损性
软件危机
软件危机的概念:在计算机软件开发和维护过程中所遇到的一系列严重问题
软件危机包含两方面内容:
- 如何开发软件,以满足对软件日益增长的需求
- 如何维护数量不断膨胀的已有软件
软件危机的表现:
- 对软件开发成本和进度估算不准确
- 用户对已完成软件不满意
- 软件质量不可靠
- 软件不可维护
- 没有适当文档资料
- 软件成本在计算机系统中所占比例逐年上升
- 软件开发生产率低
软件危机的原因:
- 主观原因:
- 忽视需求分析
- 轻视软件维护
- 没有认识到程序只是软件的一部分
- 没有认识到软件开发只是漫长软件周期中一个比较次要阶段
- 越到后期引入变动付出代价越高
- 客观原因:
- 软件是逻辑实体,缺乏可见性,管理和控制困难
- 软件不会磨损,维护意味着修改原来设计,维护困难
- 软件规模庞大,程序复杂性随规模增加指数上升
消除软件危机的途径:
- 对计算机软件应该有正确认识
- 戏曲借鉴人类长期从事各种工程项目积累的原理、概念、技术和方法
- 积极开发和使用计算机辅助开发道具
- 探索更好更有效地管理措施和手段对开发过程进行控制和管理
1.2软件工程
软件工程出现来源于软件危机
定义: 采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,经济的开发出高质量的软件并维护它
软件工程的本质特性:
- 关注大型程序的构造
- 中心课题是控制复杂性
- 软件经常变化
- 开发效率非常重要
- 开发人员和谐合作是关键
- 软件需有效支持用户
- 软件开发者替代其他领域人员创造产品
软件工程基本原理:
- 按软件生存期分阶段制定计划并认真实施
- 坚持进行阶段评审坚持严格的产品控制
- 使用现代程序设计技术
- 结果能够得到清楚的审查
- 用人少而精
- 承认不断改进软件工程实践的必要性
软件工程方法学:
把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称为泛型
软件工程方法学包括三个要素:方法、工具和过程
- 方法:完成软件开发各项任务的技术方法,回答“怎么做”
- 工具:为运用方法提供的自动或半自动软件工程支撑环境
- 过程:是为了获得高质量软件所需要完成的一系列任务框架,回答“何时做”
软件工程方法学分类
传统方法学(生命周期方法学):
- 采用结构化技术完成软件开发的各项任务
- 把软件生命周期的全过程依次划分为若干阶段
- 每个阶段开始和结束有严格标准
- 每个阶段结束后进行严格审查
面向对象方法学:
- 把对象作为融合了数据及在数据上的操作行为的统一软件构件
- 把所有对象划分为类
- 按照父子关系,把若干类组成层次结构的系统
- 对象彼此间仅能通过发送消息互相联系
1.3软件生命周期
- 软件定义
- 问题定义:弄清用户要解决什么问题
- 可行性研究:上阶段确定问题是否可行
- 需求分析:问解决这个问题,系统需要具备什么功能
- 软件开发
- 总体设计:设计软件结构,确定程序由哪些模块组成以及模块间的关系
- 详细设计:对每个模块,设计详细规格说明,确定算法和数据结构
- 编码和单元测试:将详细设计内容用语言实现,并测试每个模块
- 综合测试:通过各种类型测试使软件达到预定要求
- 软件维护
- 运行维护:使软件在整个生命周期内保证满足用户需求
1.4软件过程
为了获得高质量软件所需要完成的一系列任务框架。通常用软件生命周期模型描述软件过程
主要包括:
- 瀑布模型
- 快速原型模型
- 增量模型
- 螺旋模型
- 喷泉模型
- 其他模型
瀑布模型
将软件生存周期的各项活动规定为依照固定顺序连接的若干阶段工作,最终得到软件产品
特点:
- 阶段间具有顺序性和依赖性
- 推迟实现的观点
- 质量保证的观点
- 每个阶段必须完成规定的文档
- 每个阶段结束前完成文档审查,及时改正错误
快速原型模型
快速建立可运行的程序,它完成的功能往往是最终产品功能的一个子集
优点:开发的软件通常满足需求、软件开发基本是线性过程
缺点:准确原型设计困难、不利于开发人员创新
增量模型
先完成一个系统自己的开发,再按同样的开发步骤增加功能,如此递增下去直至满足全部系统需求
优点:短时间内可提交部分功能;逐渐增加产品功能,用户适应产品快
缺点:增量构件划分以及集成困难;容易退化为边做边改模型
螺旋模型
在每个阶段之前都增加了风险分析过程的快速原型模型。看作增加了风险分析的快速原型模型
优点:利于把软件质量作为软件开发目标;减少测试;维护和开发不分开
缺点:风险评估困难
喷泉模型
典型的面向对象软件过程模型。体现迭代和无缝的特性
二、可行性研究
2.1可行性研究任务
研究目的:用最小的代价在最小的时间内确定问题是否能够解决
实质:系统分析和设计过程的大大压缩和简化,在较高层次上以较为抽象的方式进行系统的分析和设计过程
过程:
- 分析问题定义
- 导出系统的逻辑模型(数据流图+数据字典)
- 根据逻辑模型探索若干种可供选择解法
- 研究每种解法的可行性 :经济、技术、操作、其他可行性
2.2可行性研究内容
可行性研究步骤
- 复查系统规模和目标:对问题定义阶段初步确定的规模和目标进行肯定或改正,并列出对目标系统的约束和限制
- 研究目前正在使用的系统:了解现有系统能做什么,而不花费过多时间分析怎么实现这些功能
- 导出新系统的高层逻辑模型:现有物理系统>现有逻辑模型>目标逻辑模型>目标物理系统
- 进一步定义问题:分析员和用户一起再次重查系统。前四个步骤构成一个闭环
- 导出和评价供选择的解法:从技术、操作、经济防骗排除
- 推荐行动方针:给出是否继续的结论
- 草拟开发计划
- 书写文档提交审查
2.3系统流程图
是一种描绘物理系统的图,用图形符号以黑盒子形式描绘物理系统的各部件,表达数据在系统各部件之间流动的情况。而不是对数据进行加工处理的控制过程
2.4数据流图与数据字典
数据流图(DFD)
描述信息流和数据从输入到输出过程所经受的变换。没有任何具体物理部件,只是描绘数据在软件中流动和被处理的逻辑过程
数据流图画法
- 确定系统输入输出、源点以及终点
- 画系统顶层数据流图:用加工将输入输出数据连接起来,给加工、数据等命名
- 自顶向下分解,画出分层数据流图:将加工细分,细分成几个数据流图表示
数据字典
是关于数据的信息集合,即对数据流图中包含的所有元素定义的集合
内容:数据流、数据流分量(数据元素)、数据存储、处理
用途:在软件分析和设计过程中给人提供关于数据的描述信息
2.5成本效益分析
目的:从经济角度分析系统的开发是否能够盈利
成本估计
- 代码行技术:软件成本=每行代码的平均成本*行数
- 任务分解技术:每个任务的成本=人力*平均工资
成本/效益分析步骤
- 估计开发成本、运行费用和新系统带来的经济效益
- 比较新系统的开发成本和经济效益
三、需求分析
3.1需求分析任务
确定对系统的综合要求
- 功能需求:系统必须提供的服务功能
- 性能需求:系统必须满足的约束条件(响应速度、安全性)
- 可靠性和可用性需求:可靠性定量、可用性量化
- 出错处理需求:错误的响应机制
- 接口需求:应用系统与环境通信格式常见用户接口需求、硬件接口需求、软件接口需求、通信接口需求
- 约束:用户或环境强加的限制条件(工具、语言等)
- 逆向需求:系统不应该做什么
- 将来可能提出的要求:将来可能需要实现的需求
- 分析系统的数据要求
- 导出系统的逻辑模型
- 修正系统开发计划
3.2与用户沟通获取需求方法
- 访谈
- 面向数据流自顶向下求精
- 建议的应用规格说明技术
- 快速建立软件原型
3.3分析建模与规格说明
模型:为了理解事物而对事物做出的一种抽象,是对事物的一种无歧义的书面描述
模型分类:
- 数据模型:(实体-联系图),描绘数据对象及数据对象之间的关系
- 功能模型:(数据流图):描绘数据在系统中流动时被处理的逻辑过程,指明系统具有的变换数据的功能
- 行为模型:(状态转换图):描绘系统的各种行为模式在不同状态之间转换的方式
3.4实体练习图、状态转换图
实体联系图(E-R图)
- 实体:描述数据对象
- 属性:描述数据对象的性质
- 联系:描述数据对象之间的交互方式(1对1,1对多,多对多)
- 表示方式:矩形=实体、菱形=联系、圆角矩形=属性
状态转换图
状态:系统的行为模式,包括初态、终态、中间形态
事件:是指在某个特定时刻发生的事情,即对系统从一个状态转换到另一个状态的事件抽象
表示方式:实心圆=初态、同心圆=终态、圆角矩阵=状态
软件工程复习篇(下):https://developer.aliyun.com/article/1446315