软件工程
1.软件危机
2.软件生命周期
3.模型
4.模块
5.图
6.RUP
7.CMM
8.测试
1.软件危机
软件危机是指在软件开发和维护过程遇到的一系列严重问题
造成软件危机的主要原因
软件自身的特点:
管理控制开发软件过程困难
软件的复杂度随程序规模增加而指数级上升
软件开发和维护使用的方法不正确:
只重视程序忽略其他的条件
软件定义实期没有做好需求分析而交付时完全不符合用户需求
相同问题在软件开发不同阶段修改付出的代价不同
2.软件生命周期
软件定义
问题定义 可行性研究 需求分析
软件开发
总体设计 详细设计 编码和单元测试 综合测试
软件维护
3.模型
瀑布模型
具有顺序性、依赖性、将某一阶段的输出结果作为下一阶段的输入,
且具有推迟实现、质量保证等特点,
优点是可以约束开发人员使用规范的方法,严格规定了某个阶段提交的文档,每个阶段的产品会经过严格的质量验证,
缺点缺乏灵活性,在交付软件之前用户只能通过文档了解产品,很可能导致最后的产品不能满足用户的需求。
快速原型模型
快速建立一个软件原型,在客户的评价中,明确用户真正的需求
优点:可以应对需求的不确定性,原型可以是最终产品的一个子集,
缺点:快速的构建原型,使得软件开发具有随意性,没有考虑软件的质量和长期可维护性
增量模型
把软件产品作为一系列的增量构件来设计、编码、集成和测试,渐增式的完成系统需求
优点,可以分批次的向用户提交阶段性成果,逐步增加产品功能可使用户逐步适应
缺点,增量构件划分和集成比较困难
螺旋模型
螺旋模型可以看作是添加了风险分析的快速原型模型,适用于复杂的、大型的软件项目
优点,软件项目有较好的风险控制
缺点,需要开发人员具有丰富的风险评估经验
喷泉模型
是由用户需求驱动,面向对象的模型,具有无缝隙、迭代的特点
优点是各个阶段没有明显的界限,开发人员可以同步开发,从而提高了开发效率
缺点是各个开发阶段重叠,因此需要大量开发人员,不利于项目的管理,而且对于文档的要求更加严格
4.模块
模块是指功能相对独立的一个程序单元
模块独立性是指模块内部及模块间的关系的一种衡量标准,由内聚和耦合来度量。
耦合性指模块间的紧密联系程度
非直接耦合,数据耦合,标记耦合,控制耦合,外部耦合,公共耦合,内容耦合
内聚性指模块内的紧密联系程度
偶然内聚,逻辑内聚,时间内聚,过程内聚,通信内聚,顺序内聚,功能内聚
区分模块的要素
功能、逻辑、状态
5.图
数据流图
采用图形化,进行数据分析与设计的工具,它不存在任何物理部件,通过图形的形式描绘数据在软件中的流动和处理的逻辑过程,适用于可行性研究
IPO图
是输入、处理、输出图的简称,能够方便地描述这三者之间的关系,通过左中右三个方框图分别表示输入、处理和输出的过程,适用于需求分析阶段
层次图
以多层次的树形结构描述数据的层次结构,最顶层的矩形框代表完整的数据结构,下层的矩形框代表这个数据的子集,最底下的矩形框代表实际数据元素,适用于需求分析阶段
状态转化图
需通过描绘系统的各种状态及引起系统状态变化的事件,用来表示系统的行为,适用于需求分析阶段
6.RUP
RUP是统一软件开发过程,主要包含六点经验
迭代式开发
管理需求
使用基于构件的体系结构
可视化建模
验证软件质量
控制软件变更
UML是统一建模语言
静态结构图:用例图、类图、对象图
交互图:活动图、状态图、顺序图、协作图
实现图:构件图、部署图
7.CMM
软件能力成熟度模型的评价指标,总共分为五级
初始级 缺乏健全的管理制度,工作是无序的
可重复级 管理制度化,工作有章可循
可定义级 开发过程标准化、文档化。技术活动和管理活动可控化。
可管理级 开发过程建立定量的质量目标。开发活动的生产率和质量都可以被度量。
可优化级 采用新技术、新方法对过程进行修改和优化
8.测试
黑盒测试是指将程序看成一个黑盒子,不关注其内部结构和处理过程,而只关注输入产生的输出结果是否符合实际要求
白盒测试是将程序透明化,测试者完全知道程序的结构和处理过程,并检测处理过程是否按照程序内部的逻辑进行工作