第一章 软件工程概论
- 软件:是计算机程序、方法、规则、相关的文档以及运行计算机系统时所必需的数据的总和(狭义定义:软件=程序+数据+文档)
- 软件的特性:软件是复杂的、软件是不可见的、软件是不断变化的和软件质量难以稳定。
- 软件的质量特性:功能性、可靠性、易用性、效率、维护性、可移植性。
1.1 软件危机:指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
1.1.1 软件危机的主要表现:
- 对软件开发成本和进度估计常常很不准确
- 用户对”已完成”的系统不满意的现象经常发生
- 软件产品的质量往往靠不住
- 软件常常是不可维护的
- 软件通常没有适当的文档资料
- 软件成本在计算机系统总成本所占的比例逐年上升
- 软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势
1.1.2 软件危机产生的主要原因:
- 软件日益复杂和庞大
- 软件开发管理困难和复杂
- 软件开发技术落后
- 生产方式落后
- 开发工具落后
- 软件开发费用不断增加
1.1.3 软件危机如何解决:既要有技术措施(方法和工具),又要有必要的组织管理措施。
1.2 软件工程:是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它。
1.2.1 软件工程的本质特性
- 软件工程关注于大型程序构造
- 软件工程的中心课题是控制复杂性
- 软件经常变化
- 开发软件的效率非常重要
- 和谐地合作是开发软件的关键
- 软件必须有效地支持它的用户
- 在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品
1.2.2 软件工程的基本原理
- 用分阶段的生命周期计划严格管理
- 坚持进行阶段评审
- 实行严格的产品控制
- 采用现代程序设计技术
- 结果应能清楚地审查
- 开发小组的人员应该少而精
- 承认不断改进软件工程实践的必要性
1.2.3 软件工程方法学:把软件生命周期全过程中使用的一整套技术方法的集合成为方法学(也称范型paradigm),包括三个要素:方法,工具和过程,目前使用最广泛的是传统方法学和面向对象方法学
- 传统方法学(也称生命周期方法学或结构化范型)
- 面向对象方法学: 有4个要点; 它是一个多次反复迭代的演化的过程; 特有的继承性和多态性进一步提高了面向对象软件的可重用性
1.3 软件生命周期
- 问题定义:确定要解决的问题是什么(通过客户的访问调查,系统分析员写出问题的性质,工程目标和工程规模的书面 告,并得到客户的确认)
- 可行性研究:不是具体解决问题,而是研究问题的范围,探索问题是否值得去解,是否有可行的解决方法
- 需求分析:准确地确定”为了解决这个问题,目标系统必须做什么”,主要是确定目标系统必须具备哪些功能
- 总体设计:设计出目标系统的多种方案;设计程序的体系结构
- 详细设计:详细的设计每个模块,确定要实现模块功能所需要的算法和数据结构
- 编码和单元测试:写出正确的容易理解,容易维护的程序模块
- 综合测试:通过各种类型的测试(及相应的的调试)使软件达到预定的要求
- 设想供选择的方案
- 选取合理的方案
- 推荐最佳方案
- 功能分解
- 设计软件结构
- 设计数据库
- 制定测试计划
- 书写文档
- 审查和复审
- 改进软件结构提高模块的独立性
- 模块规模应该适中
- 深度、宽度、扇出和扇入都应适当
- 模块的作用域应该在控制域内
- 力争降低模块接口的复杂程度
- 设计单入口单出口的模块
- 模块的功能应该可预测
- 一般交互指南
- 信息显示指南
- 数据输入指南
2.5 数据字典定义组成:数据流;数据流分量(即数据元素);数据存储;处理
3.7 其他图形工具
第四章 形式化说明技术
(我们不学,所以。。。)
第五章 总体设计(概要设计或初步设计)
5.1 设计过程
设计过程:2个阶段 ( 系统设计阶段: 和 结构设计阶段: )
9个步骤:
5.2 设计原理
5.2.1 模块化:就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求
5.2.2 抽象:抽出事物本质特性而暂时不考虑细节
5.2.3 逐步求精:为了能集中精力解决最主要问题而尽量推迟对问题细节的考虑。逐步求精是人类解决复杂问题时采用的基本方法,也是许多软件工程技术的基础
5.2.4 信息隐藏:应该这样设计和确定模块,使得一个模块内包含的信息对于不需要这些信息的模块来说是不能访问的。 局部化:是指把一些关系密切的软件元素物理地址放得彼此靠近
5.2.5 模块独立:是模块化、抽象、信息隐藏和局部化的概念的直接结果。独立的程度测量标准:内聚、耦合
5.3 启发规则
5.4 描绘软件结构的图形工具
5.4.1 层次图:描绘软件的层次结构。一个矩形框代表一个模块,方框间的连线表示调用关系
5.4.2 HIPO图:“层次图加输入/处理/输出图”,就是在层次图的每个方框加编
5.4.3 结构图:每个方框代表一个模块,框内注明模块的名字或主要功能,方框间的箭头(或直线)代表模块的调用关系,注释表示来回传递的信息【尾部空心圆表示传递数据,实心圆代表传递控制信息】
第六章 详细设计
6.2 人机界面设计指南
6.3 过程设计的工具
6.3.1 程序流程图:
6.3.3 问题分析图(PAD图)其优点:
6.3.5 判定树:判定表变种
7.3 单元测试
7.3.1 测试重点
- 模块接口
- 局部数据结构
- 重要的执行通路
- 出错处理通路
- 边界条件
7.3.2 代码审查
7.3.3 计算机测试
7.4 集成测试
渐增式测试()
- 自顶向下集成
- 深度优先策略
- 广度优先 策略
- 自底向上集成
非渐增式测试
7.5 确认测试
通常使用黑盒测试
- Alpha 测试
- Beta 测试
第八章 维护
8.1 软件维护的定义
软件维护的定义:就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程
8.2 软件维护的特点
8.2.1 结构化维护和非结构化维护差别巨大
-
非结构化维护
如果软件配置的唯一成分是程序代码,那么维护活动从评价代码开始,而且由于内部文档不足而使评价更困难
非结构化维护需要付出巨大代价,是没有使用良好定义的方法学开发出来的必然结果 -
结构化维护
如果有一个完整软件配置存在,那么维护从评价设计文档开始就很规范
减少精力的浪费,提高维护的总体质量
8.2.2 维护的代码高昂
8.2.3 维护的问题很多
8.3 软件维护的过程
- 维护组织
- 维护 告
- 维护的事件流
- 保存维护记录
- 评价维护活动
8.4 软件的可维护性
决定软件可维护的因素:
- 可理解性
- 可测试性
- 可修改性
- 可移植性
- 可重用性
第九章 面向对象方法学引论
9.1.1 面向对象方法学要点:
-
基本原则:尽可能模拟人类习惯的思维方式,是开发软件的方法和过程尽可能接近人类认识的世界解决问题的方法和过程
-
4个要点
- 软件是由对象组成的,任何元素都是对象,复杂软件对向由比较简单的软件对象组成
- 所有对象都划分成对象类,类都定义了一组数据和一组方法
- 若干对象类组成一个层次的系统
- 对象间仅能通过传递消息互相联系
9.1.2 面向对象方法学优点
- 与人类习惯的思维方法一致
- 稳定性好
- 可重用性好
- 较易开发大型软件产品
- 可维护性好
9.2.1 对象:是描述该对象属性的数据以及对这些数据施加的所有操作封装在一起构成的统一体
对象的定义
- 对象是具有相同状态的一组操作的集合
- 对象是对问题域中某个东西的抽象
- 对象::=
。ID是对象的标识或名字,MS操作集合,DS数据结构,MI对象受理的消息名集合
对象的特点
- 以数据为中心
- 对象是主动
- 实现了数据的封装
- 本质上具有并行性
- 模块独立性好
其它概念
9.3 面向对象建模
需要建立3种形式的模型,它们分别是
- 描述系统数据结构的对象模型
- 描述系统控制结构的动态模型
- 描述系统功能的功能模型。
第十章 面向对象分析
建立对象模型
三个子模型,按所解决的问题进行划分
- 静态结构(对象模型)
- 交互次序(动态模型)
- 数据变换(功能模型)
5个层次
- 主题层
- 类与对象层
- 结构层
- 属性层
- 服务层
对象模型创建的步骤
- 确定类与对象
- 确定关联
- 划分主题
- 确定属性
- 识别继承关系
- 反复修改
第十一章 面向对象设计
面向对象设计准则
- 模块化
- 抽象
- 信息隐藏
- 弱耦合
- 强内聚
- 可重用
类构件的重用方式:
- 实例重用
- 继承重用
- 多态重用
第十三章 软件项目管理
- 所谓管理就是通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,以达到既定目标的过程。
- 软件项目管理先于任何技术活动之前开始,并且贯穿于软件的整个生命周期之中
- 软件项目管理过程从一组项目计划活动开始,而制定计划的基础是工作量估算和完成期限估算。
13.1估算软件规模
- 代码行技术
- 功能点技术
13.2 工作量估算
- 静态单变量模型
- 动态多变量模型
- COCOMO2模型
13.3 进度计划
特别惊喜????????
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!