没有合适的资源?快使用搜索试试~ 我知道了~
软件工程复习笔记思维导图


试读
1页
需积分: 0 6 下载量 43 浏览量
更新于2024-06-26
1
收藏 8.06MB PDF 举报
### 软件工程复习知识点总结
#### 一、软件工程概述
- **软件与软件危机**:
- **软件定义**:软件是指能够完成特定功能和性能的程序、数据及相关文档。
- **软件分类**:
- 按功能分类:系统软件、应用软件、支撑软件。
- 按规模分类:小型、中型、大型。
- 按工作方式分类:实时处理、分时交互式、批处理等。
- 其他分类:通用软件/定制软件、一次性/频繁使用、高可靠性/一般可靠性。
- **软件危机**:
- 在软件开发和维护过程中遇到的一系列问题。
- 表现包括计划不准确、用户满意度低、质量不可靠、系统难以维护、文档不适用、成本上升、开发效率低下等。
- 原因包括软件本身的可见性差、潜在错误难以检测、维护复杂度高等。
- 错误的软件开发维护方法也是原因之一。
- **消除软件危机的方法**:
- 正确认识计算机软件。
- 积累有效的原理、概念、技术和方法。
- 开发和使用计算机辅助软件开发工具。
- 探索更有效的管理措施,对开发进程进行管控。
- **软件工程定义**:
- 是指导计算机软件开发和维护的工程学科。
- 使用工程的概念、原理、技术和方法来开发和维护软件。
- 结合管理技术和经过实践检验的技术方法。
- 强调使用生存周期方法学和结构化技术。
#### 二、软件工程基本原理
- **软件生命周期计划的质量管理**:分阶段管理,确保每个阶段的质量。
- **阶段评审**:在每个阶段结束时进行评审,确保符合要求。
- **产品控制**:确保产品的版本控制和变更管理。
- **现代程序设计技术**:使用高效的编程技术和工具。
- **结果审查**:定期审查项目进展和成果。
- **开发小组人员少而精**:组建高效的核心团队。
- **持续改进方法学**:不断优化软件工程方法论。
#### 三、软件生命周期
- **定义**:软件产品或系统从设计、投入使用到最终淘汰的全过程。
- **三个时期**:定义期、开发期、维护期。
- **八个阶段**:
- 定义期:问题定义、可行性研究、需求分析。
- 开发期:总体设计、详细设计、编码与单元测试、综合测试。
- 维护期:运行和维护。
#### 四、软件开发模型
- **软件过程模型**:整个生命周期中系统开发、运行和维护的过程、活动和任务框架。
- **传统软件过程模型**:
- **瀑布模型**:线性顺序模型,适合需求明确的项目。
- **快速原型模型**:快速构建原型,逐步完善。
- **增量模型**:分批次交付软件。
- **螺旋模型**:结合了迭代和风险管理。
- **喷泉模型**:适用于面向对象开发。
- **现代软件过程模型**:
- **Rational统一过程模型(RUP)**:强调迭代开发和架构为中心。
- **敏捷过程与极限编程(XP)**:灵活应对变化,快速反馈。
- **微软过程**:结合了敏捷和传统的最佳实践。
- **基于构件的开发模型**:重用已有的软件构件。
#### 五、可行性研究
- **目的**:确定问题是否可以被解决。
- **任务**:定义问题、研究现有系统、建立系统模型、评估解决方案等。
- **研究内容**:技术可行性、经济可行性、操作可行性等。
- **步骤**:复查系统规模、研究当前系统、导出逻辑模型等。
- **结果**:可行性研究报告。
#### 六、系统流程图与数据流图
- **系统流程图**:概括描绘物理系统的图示,表达数据流动情况。
- **数据流图与数据字典**:
- 数据流图描绘信息流和数据变换过程。
- 数据字典定义数据流图中的元素。
- 特点:无物理部件,侧重逻辑过程。
- 符号及绘制步骤:自顶向下,逐层细化。
以上内容涵盖了软件工程基础知识点的重要方面,对于理解和掌握软件工程的基本概念和技术方法非常有帮助。

软件工程
软件工程概述
软件与软件危机
软件
能够完成特定功能和性能的程序、数据和相关文
档
软件分类
按功能分类
系统软件
应用软件
支撑软件
按规模分类
按工作方式分类
实时处理
分时
交互式
批处理
其他分类
通用软件/定制软件
一次性/频繁使用
高可靠性/一般可靠性
软件危机
在计算机软件开发和维护过程中遇到的一系列严
重问题
两个方面
如何开发软件
如何维护软件
软件危机的表现
计划不准确
用户不满意
质量不可靠
系统难维护
文档不适合
成本上升
开发效率低
产生软件危机的原因
与软件本身特点有关
1、软件缺乏可见性
2、可能存在测试阶段没能检测出来的错误
3、软件维护通常意味着改正或修改原来的设
计,使软件难维护
4、软件规模庞大,随着规模增加复杂性指数上
升
软件开发维护方法不正确
1、忽视软件需求分析重要性,匆忙着手编程
2、程序只是完整的软件产品的一个组成部分
3、需要清除只重视程序而忽视软件配置其余成
分的错误观念
4、轻视维护是最大的错误
消除软件危机的方法
1、对计算软件有正确认识
2、积累有效的原理、概
念、技术和方法
3、积极开发和使用计算机
辅助开发软件
4、探索更好的管理措施对
开发进程进行管控
软件工程
定义
指导计算机软件开发和维护的工程学科
1、采用工程的概念、原理、技术和方法来开发和
维护软件
2、它将管理技术与当前经过时间考验的而证明
是正确的技术方法结合起来
3、他强调使用生存周期方法学和结构化技术
基本原理
1、用分阶段的软件生命周期计划进行质量管理
2、进行阶段评审
3、实行产品控制
4、使用现代程序设计技术
5、结果能够审查
6、开发小组人员应该少而精
7、不断改进
软件工程方法学
软件生命周期中使用一整套技术方法的集合称为
软件工程方法学
三要素
方法
工具
过程
分类
结构化方法学
(传统方法学/生命周期方法
学)
机构化分析SA、结构化设计SD、结构化程序设
计SP
1、采用结构化技术
2、把软件生命周期的全过程依次划分若干阶段
3、每一阶段开始 和结束都有严格标准
4、每一阶段结束前需严格审查和复审
面向对象方法学
面向对象分析OOA、面向对象设计OOD、面向对
象程序设计OOP
1、用对象分解取代传统方法学的功能分解
2、把所有对象都划分成类
3、按照父类和子类的关系,把若干个相关类组
成一个层级结构的系统
4、对象间仅通过发送消息互相联系
软件生命周期
定义
软件产品或软件系统从设计、投入和使用到被淘
汰的全过程
3时期、8阶段
软件定义时期
问题定义
可行性研究
需求分析
软件开发时期
总体设计
详细设计
编码和单元测试
综合测试
软件维护时期 运行和维护
软件开发模型(软件过程模型)
软件过程
在整个生命周期的系统开发、运行和维护过程中
所实施的全部过程、活动、和任务的结构框架。
通常用软件过程模型来 描述软件过程
软件过程模型
传统软件过程模型
瀑布模型
快速原型模型
增量模型
螺旋模型
喷泉模型
现代软件过程模型
Rational统一过程模型(UML)
敏捷过程与极限编程
微软过程
基于构件的开发模型
瀑布模型
是以文档为驱动,适合软件需求确定的软件项目
开发
特点
1、阶段间具有顺序性和依赖性,自上而下,相互
衔接,前阶段的输出是后一阶段的输入文本
2、推迟实现的观点:主要考虑逻辑模型
3、质量保证的观点:每个阶段必须完成规定的
文档,每个阶段对文档进行评审,发现问题,保
证质量
优点
1、强迫开发人员采用规范的方法
2、严格规定每个阶段必须提交的文档
3、每个阶段交出的所有产品都必须是经过验证
的
缺点
1、仅通过静态规格说明,无法验证需求是否正确
2、完全依赖书面说明,容易导致不能满足用户
需求
3、缺乏灵活性,不支持产品演化
几种开发模型的主要特点
可行性研究
可行性研究
目的
用最小代价在最短时间内确定问题能否被解决
(行/不行)
任务
定义问题
导出系统模型
物理模型:系统流程图SFD
逻辑模型:数据流图DFD、数据字典DD
探索解法
研究可行性
技术可行性
经济可行性
操作可行性
其他:法律,社会...
步骤
1、复查系统规模和目标
2、研究目前正在使用的系统
3、导出新系统的高层逻辑模型
4、进一步定义问题
5、导出和评价可供选择的解法
6、推荐行动方针
7、拟开发计划
8、书写文档提交审查
结果:可行性研究报告
1、系统概述
2、可行性研究
3、拟定开发计划
4、结论意见
系统流程图
定义
概括描绘物理系统的图。表达数据在系统各部件
间的流动情况,而不是进行加工处理的控制
常用符号
例
数据流图和数据字典
定义 数据流图和数据字典共同构成系统的逻辑模型
数据流图
描绘信息流和数据从输入到输出过程所经受的变
换的图
每个加工至少有一个输入流和一个输出流
特点
1、没有物理部件,只是描绘数据流动和被处理的
逻辑过程
2、是系统逻辑功能的图形表示
3、设计时只需考虑系统必须完成的基本逻辑功
能,不考虑具体实现
符号
附加符号
1、“与”
2、“或”
3、“异或”
绘制步骤 自顶向下,逐层细化
一、确定基本成分
1.源点和终点
2.加工处理
3.数据流
4.数据存储
二、画数据流图
1、顶层数据流图
2、第0层数据流图
细化基本模型,
描绘系统主要功能,
为处理和数据存储添加编号
3、第1层数据流图
例题
数据字典
定义
是关于数据的信息集合,即对数据流图中包含的
所有元素定义的集合
内容
数据流
数据流分量
数据存储
处理
作用 作为分析阶段工具,是开发数据库的第一步
定义数据的方法
1、组成方式
顺序
选择
重复
可选
2、符号
建立数据字典
例题
成本效益分析
目的 从经济角度分析新系统开发是否能盈利
成本估算方法
1、代码行技术 软件成本=每行代码平均成本*源代码行数
2、任务分解技术
每个任务的成本=人力*平均工资
总成本=独立任务的总和
3、自动估计成本技术
必须有长期搜集大量历史数据作为基础,有良好
的数据库系统支持
成本/效益分析方法
1、货币的时间价值
2、投资回收期
3、纯收入
4、投资回报率
需求分析
需求分析概念
定义
软件定义时期最后一个阶段;主要工作是准确回
答“系统必须做什么”。要产生需求规格说明书
为什么要需求分析
1、需求分析是软件开发的基础和前提;必须了解
用户需求
2、需求分析最终目标软件系统验收的标准
3、需求分析能避免或尽量剔除早期的错误
任务
1、确定对系统的综合要求
功能需求
性能需求
可靠性和可用性需求
出错处理的需求
接口需求
约束
逆向需求
将来可能提出的要求
2、分析系统的数据要求
建立数据模型
描绘数据结构
层次方框图
Warnier图
IPO图
3、导出系统的逻辑模型
数据流图
数据字典
实体联系图
状态转换图
4、修正系统的开发计划
与用户沟通获取需求的方法
1、访谈
基本形势
正式会谈
非正式会谈
技术方法
调查表
情景分析
2、面向数据流自顶向下求精
分析跟踪
补充修正
细化数据流图
3、简易的应用规格说明技术
4、快速建立软件原型
分析建模
1、模型
理解事物而对事物的抽象,是对事物的无歧义的
描述
2、模型分类
1、数据模型(实体-联系图):描绘数据对象及
数据对象之间的关系
2、功能模型(数据流图):描绘数据在系统中
流动时被处理的逻辑过程,指明系统(数据流图)
且有的变换数据的功能
3、行为模型(状态转换图):描绘系统的各种
行为模式在不同状态转换的方式
软件需求规格说明书
是需求分析阶段得出的最主要的文档。
通常用自然语言完整、准确、具本地描述系统的
数据要求、功能需求、性能需求、可靠性和可用
性要求、出错处理需求、接口需求、约束、逆向
需求以及将来可能提出的要求。
实体联系图(E-R图)
数据模型
定义
数据模型: 一种面向问题的数据模型,是按照用
户的观点对数据建立的模型。它描述了从用户角
度看到的数据,它反映了用户的现实环境,而且
与在软件系统中的实现方法无关
构成
实体(数据对象):是对软件必须理解的复合信
息的抽象
属性:定义了数据对象的性质
联系:数据对象相互间的连接方式
一对一(1:1)
一对多(1:N)
多对多(N:N)
实体联系图(E-R图)
定义
使用实体联系图可以建立数据模型,利用E-R图
描绘的数据模型称之为E-R模型。用于描述数据
流图中的数据存储及其之间的关系,可用于数据
库的概念设计。实体联系图可以作为用户与分析
员之间有效的交流工具。
表述方式
例题
一个教师可讲授多门课一门课一个学生可选修多
门课,一门课有若干学生选修只有一个教师讲授;
学生选修一门课,产生成绩学生的属性有学号、
姓名等;教师的属性有教师编号,教师姓名等;课
程的属性有课程号、课程名等。请画出该系统E-
R图
状态转换图STD
定义
通过描绘系统的状态及引起系统状态转换的事件
来表示系统的行为
状态
状态是任何可以被观察到的系统行为模式,状态
规定了系统对事件的响应方式
事件
事件是在某个特定时刻发生的事情,就是引起系
统做动作或(和)转换状态的控制信息
符号表示
其他图形工具
层次方框图
1、定义:用树形结构的一系列矩形框描绘数据的
层次结构。
2、优点:随着结构的逐步精细,对数据结构的描
绘也越来越详细
Warnier图
1、定义:用树形结构描绘信息的层次结构
2、优点:可以表明信息的逻辑组织;可以表明某类
信息出现的条件或者是否重复出现
IPO图 1、定义
输入、处理、输出图的简称,能够方便地描绘输
入数据、对数据的处理和输出数据之间的关系
验证软件需求
验证需求正确性的四个方面
1、一致性
2、完整性
3、现实性
4、有效性
验证软件需求的方法
验证一致性
验证现实性
验证完整性和有效性
用于需求分析的软件工具
PSL 问题陈述语言
PSA 问题陈述的分析程序
总体设计
设计过程
总体设计又称概要设计或初步设计
任务
确定系统中每个程序有哪些模块组成以及模块之
间的关系
划分出物理元素。包括程序、文件、数据库、文
档等
总体设计包括系统设计阶段和结构设计阶段
系统设计阶段
1、设想供选择的方案
2、选取合理的方案
3、推荐最佳的方案
结构设计阶段
4、功能分解
5、设计软件结构
6、设计数据库
7、制定测试计划
8、书写文档
9、审查和复查
设计原理
模块化
模块:能够单独命名,由边界元素限定的程序元素
的序列,是构成程序的基本构件。
模块化:把程序划分成独立命名且可独立访问的模
块,每个模块完成一个子功能,把这些模块集成
起来构成一个整体,可以完成指定的功能满足用
户的需求。
抽象
逐步求精 Miller法则:注意力集中在(7+-2)上
信息隐藏与局部化
信息隐藏:指一个模块内包含的信息对于不需要这
些信息的模块来说,是不能访问的。主要是指模
块的实现细节
局部化:指把一些关系密切的软作元素物理地放得
彼此靠近,它有助于实现信息隐藏。
模块独立
模块独立性·是模块化、抽象、信息隐蔽和局部化
概念的直接结果。
模块独立是好设计的关键,设计是决定软件质量
的关键环节。
度量标准:耦合、内聚
耦合
是对一个软件结构内不同
模块之间互连程序的度
量。耦合强度取决于模块
接口的复杂程度、通过接
口的数据等
耦合性越高,模块独立性
越弱
耦合分类(程度从低->高)
无直接耦合=》数据耦合=》标记耦合(特征耦
合)=》控制耦合=》外部耦合=》公共耦合
内聚
是用来度量一个模块内部
各个元素彼此结合的紧密
程度的。
内聚分类(程度从低->高):
偶然内聚=》逻辑内聚=》时间内聚=》过程内聚
=》通信内聚=》顺序内聚=》功能内聚
同其它模块强耦合的模块意味着弱内聚;强内聚模
块意味着与其它模块间散耦合
软件设计目标:高内聚、低耦合
启发规则
改进软件结构提高模块独立性
模块规模应该适中
深度、宽度、扇入和扇出应适当
深度:表示软件结构中控制的层数。
宽度:软件结构内同一个层次上的模块总数的最大
值。
扇出:一个模块直接控制(调用)的模块数目,扇出
过大意味着模块过分复杂。一般一个设计的好的
典型系统的平均扇出是3或4,扇出的上限是5到
9。
扇入:指有多少上级模块调用它,扇入大说明上级
模块共享该模块的数目多好的软件结构顶层扇出
比较高,中层扇出比较少,底层扇入到公共的实
用模块中,即底层模块有高扇入。
模块的作用域应该在控制域之内
作用域:指受该模块内一个判定影响的所有模块的
集合
控制域:是这个模块本身以及所有直接或间接从属
于它的模块的集合。
力争降低模块接口的复杂程度
设计单入口单出口的模块
模块功能应该可以预测
描绘软件结构的图形工具
层次图和IPO图
层次图
用方框和连线表示,连线表示上下层的调用关系
HIPO图
层次图加编号
结构图 模块调用分类
简单调用
循环调用
选择调用
面向数据流的设计方法
面向数据流设计方法也称为结构化设计方法(SD)
数据流图的分类
变换流:由输入、变换中心和输出三部分组成。
事务流:在多种事务中选择一个执行。
详细设计
详细设计的目的任务
目的 确定怎样具体实现所要求的系统
任务
过程设计 每个模块实现的算法
数据设计 设计数据结构
接口设计 设计软件内部各模块之间的接口
结构程序设计
定义
只用三种基本控制结构就能实现任何单入口单出
口的程序
三种基本控制结构
选择
顺序
循环
扩充的控制结构
Do-case多分支
Do-UNTIL循环
修正的结构程序设计 还使用BREAK结构
人机界面设计
是接口设计的一个重要部分
设计的四个问题
系统响应时间
长度
易变性
用户帮助设施
出错信息处理
命令交互
人机界面设计指南
一般交互指南
信息显示指南
数据输入指南
过程设计工具
描述程序处理过程的工具
程序流程图
又称程序框图
符号
盒图(N-S)图
出于要有一种不允许违背结构程序设计精神的图
形工具的考虑。
结构
PAD图 问题分析图
符号
顺序
选择
CASE多分支
WHILE循环
UNTIL循环
语句标号
定义
PAD图的主要优点如下
(1)使用表示结构化控制结构的 PAD 符号所设计出
来的程序
必然是结构化程序。
(2)PAD 图所描绘的程序结构十分清晰。
(3)用 PAD图表现程序逻辑,易读、易懂、易记。
(4)容易将 PAD图转换成高级语言源程序,这种转
换可用软件工具自动完成,从而可省去人工编码
的工作,有利于提高软件可靠性和软件生产率。
(5)即可用于表示程序逻辑,也可用干描绘数据结
构。
判定表
四个部分
左上部列出所有条件
左下部是所有可能做的动作
右上部是表示各种条件组合的一个矩阵
右下部是和每种条件组合相对应的动作
判定树
判定树是判定表的变种,它也能清晰地表示复杂
的条件组合与应做的动作之间的对应关系。
过程设计语言PDL
过程设计语言(PDL)也称为伪码。是用正文形式表
示数据和处理过程的设计工具。
程序复杂程度的定量度量
定量的度量详细设计模块的质量
McCabe方法
将程序转换为流图在进行计算复杂度
计算方法
流图中的区域数等于环形复杂度
流图 G 的环形复杂度 V(G)=E-N+2,其中,E是流
图中边的条数,N是结点数。
流图 G 的环形复杂度 V(G)=P+1,其中,P是流图
中判定结点的数目。
V(G)<=10 合适
实现与测试
实现
软件生命周期中编码和测试统称为实现
编码
选择程序设计语言
编码风格
程序内部文档
数据说明
语句构造
输入输出
效率
程序运行时间
存储器效率
输入输出效率
软件测试基础
软件测试的目标
为了发现错误而执行程序的过程
编码阶段(单元测试)
测试阶段(综合测试)
软件测试准则
- 所有测试都应该能追溯到用户需求
- 应该远在测试开始之前就制定出测试计划
- 把 Pareto 原理应用到软件测试中
- 应该从“小规模”测试开始,并逐步进行“大规模”
测试
- 穷举测试是不可能的
- 为了达到最佳的测试效果,应该由独立的第三
方从事测试工作。
测试方法
黑盒测试
黑盒测试(又称功能测试)把程序看作一个黑盒
子,完全不考虑程序的内部结构和处理过程·黑盒
测试是在程序接口进行的测试,只检查程序功能
是否能按照规格说明书的规定正常使用,程序是
否能适当地接收输入数据并产生正确的输出信
息,程序运行过程中能否保持外部信息(例如数据
库或文件)的完整性。
白盒测试
白盒测试(又称结构测试)是把程序看成装在一个
透明的白盒子里,测试者完全知道程序的结构和
处理算法。这种方法按照程序内部的逻辑测试程
序,检测程序中的主要执行通路是否都能按预定
要求正确工作。
测试步骤
模块测试
子系统测试
系统测试
验收测试
平行运行
测试技术
单元测试 测试重点
模块接口
局部数据结构
重要执行通路
出错处理通路
边界条件
集成测试
目标:发现与接口有关的问题
非渐进式测试
渐进式测试
自顶向下 从主控模块开始
自底向上 从最底层模块开始组装
回归测试
重新执行已经做过测试的某个子集,以保证程序
的变化没有带来非预期的副作用。
确认测试
又称验收测试,目标是验证软件的有效性
验证:为了保证软件正确的实现了某个特定要求
而进行的一系列活动。
确认:为了保证软件确实满足了用户需求而进行
的一系列活动。
Alpha测试 用户在开发者场所,在开发者指导下进行
Beta测试
用户在用户场所进行,遇到问题报告给开发者,
开发者进行修改。
白盒测试
测试用例 测试输入数据和预期的输出结果
测试方案 测试目的,测试用例集合
逻辑覆盖
语句覆盖
选择足够多的测试数据,使被测程序中每个语句
至少执行一次。
判定覆盖
不仅每个语句必须至少执行一次,而且每个判定
的每种可能的结果都应该至少执行一次,也就是
每个判定的每个分支都至少执行一次。
条件覆盖
不仅每个语句至少执行一次,而且使判定表达式
中的每个条件都取到各种可能的结果。
判定/条件覆盖
判定/条件覆盖是一种能同时满足判定覆盖和条件
覆盖的逻辑覆盖,它的含义是,选取足够多的测
试数据,使得判定表达式中的每个条件都取到各
种可能的值,而且每个判定表达式也都取到各种
可能的结果。
条件组合覆盖
条件组合覆盖是更强的逻辑覆盖标准,它要求选
取足够多的测试数据,使得每个判定表达式中条
件的各种可能组合都至少出现一次。
路径覆盖
选取足够多测试数据,使程序的每条可能路径都
至少执行一次(如果程序图中有环,则要求每个环
至少经过一次)。
控制结构测试
基本路径测试
条件测试
循环测试
黑盒测试
黑盒测试着重测试软件功能。黑盒测试并不能取
代白盒测试,它是与白盒测试互补的测试方法,
它很可能发现白盒测试不易发现的其他类型的错
误。
可能发现的错误
(1)功能不正确或遗漏了功能
(2)界面错误:
(3)数据结构错误或外部数据库访问错误
(4)性能错误;
(5)初始化和终止错误。
等价划分法
(1)把程序的输入数据集合按输入条件划分为若干
个等价类,每一个等价类相对于输入条件表示为
一组有效或无效的输入。
(2)为每一等价类设计一个测试用例。
边界值分析法
输入等价类和输出等价类的边界就是应该着重测
试的程序边界情况。选取的测试数据应该刚好等
于、刚好小于、刚好大于边界值
调试
调试(也称为纠错)是在测试发现错误之后排除错
误的过程
方法
蛮干法
回溯法
原因排除法
结果
找到了原因,然后改正和排除。
没找到原因,猜测一个原因,并设计附加测试用
例来验证这个假设。
软件可靠性
软件可靠性:程序在给定时间间隔内,按照规格说
明书的规定成功运行的概率。
软件可用性:程序在给定时间点,按照规格说明书
的规定成功运行的概率。
维护
软件维护的定义
是在软件已经交付使用之后,为了改正错误或满
足新的需要而修改软件的过程。
分类
改正性维护
适应性维护
完善性维护
预防性维护
软件维护的特点与过程
特点
结构化维护与非结构化维护差别巨大
非结构化维护:惟一成分是程序代码,那么维护活
动从艰苦地评价程序代码开始。
结构化维护:有完整的软件配置存在,那么维护工
作从评价设计文档开始
维护代价高昂
维护问题多
过程
维护组织
维护报告
维护的事件流
保护维护记录
评价维护活动
软件可维护性
决定软件可维护性的因素
可理解性
可测试性
可修改性
可移植性
可重用性
文档
用户文档
功能描述
安装文档
使用手册
参考手册
操作员指南
用户文档是用户了解系统的第一步,它应该能使
用户获得对系统的准确的初步印象。
系统文档
所谓系统文档指从问题定义、需求说明到验收测
试计划这样一系列和系统实现有关的文档
可维护性复审
预防性维护与再工程过程
预防性维护
为了提高未来的可维护性或可靠性,而主动地修
改软件。
原因
唯护一行源代码的成本可能是初始开发成本的
20-40倍使用现代设计概念重新设计软件结构,
对未来的维护是很有帮助的软件原型已经存在,
软件开发生产率将远远高于平均水平现在用户已
经有丰富的使用软件的经验,很容易确定新的需
求和变更方向利用软件再工程工具可以自动完成
部分工作在完成预防性维护的过程中,可以建立
起完整的软件配置(文档、程序、数据)
再工程则是对现有的软件系统进行重新设计、重
新编码和测试,以改进其质量、性能或可维护
性。
软件再工程过程
库存目录分析
文档重构
逆向工程
软件的逆向工程是分析程序以便在比源代码更高
的抽象层次上创建出程序的某种表示的过程,也
就是说,逆向工程是一个恢复设计结果的过程
代码重构
正向工程
面向对象方法学
面向对象方法学概述
按人类习惯的思维方法,以现实世界中客观存在
的对象为中心来思考和认识问题。
采用的思想方法与原则 抽象、分类、继承、聚合、封装等
要点
任何客观的事物或实体都是对象。对象组成客观
世界,复杂的对象可以由简单的对象组成。
具有相同数据和操作的对象可以归并对象是对象
类的一个为一个类(class),实例。
类可以派生出子类,子类继承父类的全部特性(数
据和操作),又可以有自己的新特性。子类与父类
形成类的层次结构。
对象之间通过消息传递相互联系。
面向对象=对象+类+继承+通信
优点
与人类习惯的思维方法一致
稳定性好
可重用性好
较易开发大型软件产品
可维护性好
面向对象概念
面向对象设计准则
1.模块化
对象就是模块把数据结构和操作这些数据的方法
紧密地结合在一起
2.抽象
过程抽象数据抽象:类
参数化抽象:C++的“模板
3.信息隐藏
通过对象的封装性实现类分离了接口与实现,支
持信息隐藏
4.弱耦合
耦合:一个软件结构内不同模块之间互连的紧密程
度弱耦合:系统中某一部分的变化对其他部分的影
响降到最低程度
对象之间的耦合:交互耦合&继承耦合
5.强内聚
内聚衡量一个模块内各个元素彼此结合的紧密程
度
在设计时应该力求做到高内聚面向对象设计的 3
种内聚:服务内聚、类内聚、一般\特殊内聚
6.可重用
尽量使用已有的类
如果确实需要创建新类,则在设计这些新类的协
议时应该考虑将来的可重复使用性
启发规则
1.设计结果应该清晰易懂
2.一般-特殊结构的深度应适当
3.设计简单的类
4.使用简单的协议
5.使用简单的服务
6.把设计变动减至最小
软件重用
类构件特点
(1)模块独立性强
(2)成具有高度可塑性
(3)接口清晰、简明、可靠
(4)需求模型和规格说明
类构件重用方式
实例重用
继承重用
多态重用
语言技术特点
支持类与对象概念的机制
实现整体-部分(即聚集)结构的机制
实现一般-特殊(即泛化)结构的机制
实现属性和服务的机制
类型检查
类库
效率
持久保存对象
参数化类
开发环境
优点 语言的一致的表达能力、可重用性及可维护性。
4.良好的面向对象程序设计风格主要有哪些准
则?
提高方法内聚
可重用性
保持一致性
把策略和实现分开
全面覆盖
尽量不使用全局信息
利用继承机制
对象(Objec)
在应用领域中有意义的、与所要解决的问题有关
系的任何事物都可以作为对象,包括具体的物理
实体 的抽象、人为的概念、任何有明确边界和意
义的东西。
对象既有静态的属性,又有动态的行为。
要素
属性:用来描述对象静态特征的一个数据项;
服务:用来描述对象动态特征(行为)的一个操作序
列。
对象的属性和所有操作封装在一起,构成一个统
一体。属性一般只能通过执行对象的操作来改
变。
特点
1.以数据为中心
2.对象是主动的
3.实现了数据封装
4.本质上具有并行性模块独立性好
类
具有相同属性和服务的一组对象的集合,它为属
于该类的全部对象提供了统一的抽象描述。
实例 是某个特定类所描述的一个具体对象。
消息
对象之间通信的手段,是一个对象要求另一对象
执行类中定义的某个操作的规格说明。
方法
对象所能执行的操作称为佐法,也就是类中所定
义的服务。方法描述了对象执行的功能、响应消
息的操作。
属性
属性是对客观世界实体所具有的性质的抽象,是
类中所定义的数据
封装
封装是把对象的属性和实现操作的代码结合成一
个独立的系统单位,并尽可能隐藏对象的内部细
节,对象以外的部分不能直接作用于对象的内部
数据(属性),对象间的通信只能通过明确的消息
来进行。
继承
单继承与多继承
单继承:一个类只允许有一个父类,即类等级为树
形结构
多继承:一个类允许有多个父类
多态
指对象根据所接受的消息而做出动作,同样的消
息为不同的对象接受时可导致完全不同的行动。
重载
函数重载:在同一作用域,若干个参数特征不同的
函数可以使用相同的函数名
运算符重载:同一个运算符可以施加于不同类型的
操作数上面。
父类、子类、超类
父类:一个类的上层是父类。
子类:一个类的下层是子类。
超类:父类的父类为超类。
面向对象模型
所谓模型,就是为了理解事物而对事物作出的一
种抽象是对事物的一种无歧义的书面描述。
模型可以帮助人们思考问题、定义术语、在选择
术语时作出适当的假设,并且有助于保持定义和
假设的一致性。
对象模型 定义实体,描述系统数据,定义“对谁做”
动态模型 描述系统控制结构,规定“何时做”
功能模型 描述系统功能,指明系统应“做什么
对象模型
对象模型表示静态的、结构化的系统的“数据”性
质
它是对模拟客观世界实体的对象以及对象彼此间
的关系的映射,描述了系统的静态结构。
对象模型为建立动态模型和功能模型,提供了实
质性的框架·
类图的基本符号
定义类
定义属性
可见性属性名: 类型名=初值{性质串}
定义服务
表示关系的符号
关联
泛化
依赖
细化
步骤
首先确定对象类和关联(因为它们影响系统整体结
构和解决问题的方法),对于大型复杂问题还要进
一步划分出若干个主题:
然后给类和关联增添属性,以进一步描述它们:
·接下来利用适当的继承关系进一步合并和组织
类。
对类中操作的最后确定,
五个层次
主题层
类与对象层
结构层
属性层
服务层
动态模型
状态图
事件追踪图
步骤
第一步,是编写典型交互行为的脚本。虽然脚本
中不可能包括每个偶然事件,但是,至少必须保
证不遗漏常见的交互行为。
第二步,从脚本中提取出事件,确定触发每个事
件的动作对象以及接受事件的目标对象。
第三步,排列事件发生的次序,确定每个对象可
能有的状态及状态间的转换关系,并用状态图描
绘它们。
最后,比较各个对象的状态图,检查它们之间的
一致性确保事件之间的匹配。
功能模型 用例图
系统
系统被看作是一个提供用例的黑盒子,内部如何
工作、用例如何实现对于建立用例模型来说都是
不重要的。
用例
(1)用例代表某些用户可见的功能,实现一个具体
的用户目标。
(2)用例总是被行为者启动的,并向行为者提供可
识别的值。
(3)用例必须是完整的。
行为者
行为者是指与系统交互的人或其他系统,它代表
外部实体。使用用例并且与系统交互的任何人或
物都是行为者。行为者代表一种角色,而不是某
个具体的人或物。一个具体的人可以充当多种不
同角色
同列之间的关系
扩展关系
使用关系
用例建模
寻找行为者
寻找用例
3种模型间的关系
三个模型从三个侧面描述了索要开发的系统,它
们相互补充、互相配合。使我们对系统的认识更
全面;
功能模型指明系统必须做什么;
动态模型规定什么时候做;
对象模型定义了做事情的实体。
软件项目管理
估算软件规模
代码行技术
功能点技术
工作量估算
静态单变量模型
动态多变量模型
1. 考虑了多个因素:动态模型考虑了多个影响
项目工作量的因素,如人员技能、资源可用性、
风险、依赖关系和项目变更等。这使得估算更加
全面和精确,因为它能反映实际工作中可能遇到
的各种情况。
2. 适应性:动态模型能够随着项目的进展和环
境变化调整其预测。例如,它可以根据实际情况
中的进度延迟、资源分配变化或者新任务的加入
实时更新估算,这在项目生命周期中更具实用
性。
3. 风险管理:多变量模型能够识别和量化风险
对工作量的影响。通过分析各个变量之间的相互
作用,可以评估不同风险对项目完成时间或成本
的影响,从而做出更明智的决策。
4. 历史数据支持:动态模型常常基于历史数据
建立,这使得它可以利用过去项目的经验和教
训,提高估算的准确性。通过分析过去的项目数
据,可以找出变量之间的相关性和规律,从而进
行更合理的预测。
5. 决策支持:对于大型、复杂的项目,动态模
型能够为项目管理者提供详细的决策支持,帮助
他们优化资源分配、调整计划或应对不确定性。
6. 透明度和沟通:动态模型通常以图形化的方
式展示,如甘特图或网络图,这有助于团队成员
和利益相关者理解项目的复杂性,增强沟通和协
作。
COCOMO2模型
进度计划
估算开发时间
Gantt图
制定进度计划的工具
优点
Gantt 图能很形象地描绘任务分解情况,以及每
个子任务(作业)的开始时间和结束时间,因此是
进度计划和进度管理的有力工具。它具有直观简
明和容易握、容易绘制的优点
缺点
不能显式地描绘各项作业彼此间的依赖关系
(2)进度计划的关键部分不明确,难于判定哪些部
分应当是主攻和主控的对象
(3)计划中有潜力的部分及潜力的大小不明确,往
往造成潜力的浪费。
工程网络
估算工作进度
关键路径
机动时间
人员组织
民主制程序员组
民主制程序员组的一个重要特点是,小组成员完
全平等,享有充分民主,通过协商做出技术决
策。
主程序员组
用这种组织方式主要出于下述几点考虑:
(1)软件开发人员多数比较缺乏经验。
(2)程序设计过程中有许多事务性的工作,例如,
大量信息的存储和更新。
(3)多渠道通信很费时间,将降低程序员的生产
率。
现代程序员组 取消主程序员的大部分行政管理工作
质量保证
软件质量
软件需求是度量软件质量的基础,与需求不一致
就是质量不高。
指定的开发标准定义了一组指导软件开发的准
则,如果没有遵守这些准则,肯定会导致软件质
量不高。
通常,有一组没有显式描述的隐含需求(例如,软
件应该是容易维护的)。如果软件满足明确描述的
需求,但却不满足隐含的需求,那么软件的质量
仍然是值得怀疑的。
软件质量保证措施
基于非执行测试(复审/评审)
基于执行测试(软件测试)
程序正确性证明(数学方法)
参与人员
1. 质量保证专业人员
2. 开发和运维人员
技术复审的重要性
正式技术复审的显著优点是,能够较早发现软件
错误,从而可防止错误被传播到软件过程的后续
阶段。
软件配置管理
软件配置管理是在软件生命期内管理变化的一组
活动,用来标识、控制、报告变化确保适当的实
现了变化。
基线:通过了正式复审的软件配置项,可以作为进
一步开发的基础,只有通过正式的变化控制过程
才能改变它。
软件配置管理5项任务:标识对象、版本控制、变
化控制、配置审计和状态报告
能力成熟模型
能力成熟度模型是用于评价软件机构的次件过程
能力成熟度模型,用于帮助软件开寸程。发机构
建立一个有规模的,成熟的软件
五个等级从低到高:
初始级、可重复级、已定义级、已管理、优化
级。
基本思想
通过定量和定性的度量来评估和改进软件过程,
从而使软件组织能够更高效、更可靠地开发和维
护软件。
习题
第一章 软件工程学概述
1.什么是软件危机,它有哪些典型表现?
软件危机是指在计算机软件的开发和维护过程中
所遇到的一系列严重问题,这些问题包括了软件
开发的成本和进度估计不准确,软件产品质量不
可靠,用户对完成的软件系统不满意,软件难以
维护,缺乏适当的文档资料,以及软件成本在计
算机系统总成本中所占比例逐年上升等。
1. 对软件开发成本和进度的估计常常很不准
确,导致项目超出预算和延期交付。
2. 用户对已完成的软件系统不满意的现象经常
发生,表明软件产品往往不能完全满足用户的需
求。
3. 软件产品的质量往往靠不住,存在各种缺陷
和错误,影响软件的功能和稳定性。
4. 软件常常是不可维护的,意味着软件难以进
行修改和更新,以适应新的需求和技术环境。
5. 软件中通常没有适当的文档资料,导致软件
的使用和维护困难。
6. 软件成本在计算机系统总成本中所占的比例
逐年上升,表明软件开发的投入不断增加。
7. 软件开发生产率提高的速度,远远跟不上计
算机应用迅速普及深入的趋势,反映出软件开发
效率的不足。
2.简述产生软件危机的原因。
1. 软件本身的特性
2. 用户需求的复杂性和不确定性
3. 开发过程的不规范性。
4. 缺乏经验和数据积累。
5. 方法学和工具的支持不足。
6. 忽视软件维护的重要性。
7. 沟通和协作问题。
8. 软件开发环境的限制。
3.什么是软件工程?它有哪些本质特性?
指导计算机软件开发和维护的工程学科
1、采用工程的概念、原理、技术和方法来开发和
维护软件
2、它将管理技术与当前经过时间考验的而证明
是正确的技术方法结合起来
3、他强调使用生存周期方法学和结构化技术
4.什么是软件工程方法学?软件工程包括哪三
大要素?
软件生命周期中使用一整套技术方法的集合称为
软件工程方法学
三要素
方法
工具
过程
5.简述软件工程的基本原理。 基本原理
1、用分阶段的软件生命周期计划进行质量管理
2、进行阶段评审
3、实行产品控制
4、使用现代程序设计技术
5、结果能够审查
6、开发小组人员应该少而精
7、不断改进
6.什么是软件过程?它与软件工程方法学有何
关系?
在整个生命周期的系统开发、运行和维护过程中
所实施的全部过程、活动、和任务的结构框架。
通常用软件过程模型来 描述软件过程
软件过程是软件工程方法学的三个重要组成部分
之一
7.什么是软件生命周期?什么是软件生命周期
模型?
软件产品或软件系统从设计、投入和使用到被淘
汰的全过程
软件生命周期模型(Software Life Cycle
Model)是描述软件生命周期中各个阶段的模型
8.试比较瀑布模型、快速原型模型、增量模型
和螺旋模型的优缺点,说明它们各自的适用范
围。
几种开发模型的主要特点
第二章 可行性研究
1.在软件开发的早期阶段,为什么要进行可行性
研究?其任务是什么?
用最小代价在最短时间内确定问题能否被解决
(行/不行)
任务
定义问题
导出系统模型
探索解法
研究可行性
2.应该从哪些方面研究目标系统的可行性?
技术可行性
经济可行性
操作可行性
其他:法律,社会...
3.可行性研究有哪些工作步骤?
1、复查系统规模和目标
2、研究目前正在使用的系统
3、导出新系统的高层逻辑模型
4、进一步定义问题
5、导出和评价可供选择的解法
6、推荐行动方针
7、拟开发计划
8、书写文档提交审查
4.简述系统流程图在可行性研究中的作用。
概括描绘物理系统的图。表达数据在系统各部件
间的流动情况,而不是进行加工处理的控制
5.简述数据流图在可行性研究中的作用。
描绘信息流和数据从输入到输出过程所经受的变
换的图
6.简单描述数据字典的内容。
数据流
数据流分量
数据存储
处理
第三章 需求分析
1.为什么要进行需求分析?通常对软件系统有哪
些需求?
1、需求分析是软件开发的基础和前提;必须了解
用户需求
2、需求分析最终目标软件系统验收的标准
3、需求分析能避免或尽量剔除早期的错误
功能需求
性能需求
可靠性和可用性需求
出错处理的需求
接口需求
约束
逆向需求
将来可能提出的要求
2.怎样与用户有效地沟通,以获得用户的真实
需求?
正式会谈
非正式会谈
调查表
情景分析
3.需求分析的任务是什么?
1、确定对系统的综合要求
2、分析系统的数据要求
3、导出系统的逻辑模型
4、修正系统的开发计划
4.通常系统的需求可以分为哪几个层次? 业务需求 用户需求 功能需求
5.进行需求分析的步骤有哪些?
获取需求
需求建模
需求验证
需求文档
6.简述建立原型模型对软件需求分析的作用。
数据模型: 一种面向问题的数据模型,是按照用
户的观点对数据建立的模型。它描述了从用户角
度看到的数据,它反映了用户的现实环境,而且
与在软件系统中的实现方法无关
7.解释实体-联系图及其用途。
使用实体联系图可以建立数据模型,利用E-R图
描绘的数据模型称之为E-R模型。用于描述数据
流图中的数据存储及其之间的关系,可用于数据
库的概念设计。实体联系图可以作为用户与分析
员之间有效的交流工具。
8.说明为什么需要进行需求验证及验证的步骤
有哪些?
验证一致性
验证现实性
验证完整性和有效性
第五章 总体设计
1.简单说明系统总体设计的步骤。
• 1、设想供选择的方案
• 2、选取合理的方案
• 3、推荐最佳的方案
• 4、功能分解
• 5、设计软件结构
• 6、设计数据库
• 7、制定测试计划
• 8、书写文档
• 9、审查和复查
2.为什么要尽量使用数据耦合,少用控制耦
合,限制公共耦合的范围,完全不用内容耦合?
• 同其它模块强耦合的模块意味着弱内聚;强内
聚模块意味着与其它模块间散耦合 软件设计目
标:高内聚、低耦合
3.为什么模块的规模要适中?
可管理性
可重用性
耦合性
内聚性
可测试性
开发效率
资源优化
4.请说明为什么模块控制的宽度和深度要适
度。
· 提高可维护性
· 降低复杂性
· 提高内聚性
· 优化资源使用
· 增强可重用性
5.面向数据流的设计方法主要有哪几个步骤?
变换流:由输入、变换中心和输出三部分组成。
事务流:在多种事务中选择一个执行。
第六章 详细设计
1.详细设计的任务是什么? 任务
过程设计
数据设计
接口设计
2.在对系统做详细设计时,应遵循哪些原则?
1. 功能性原则
2. 非功能性原则。
3. 模块化原则
4. 抽象化原则
5. 逐步求精原则
6. 信息隐藏原则
7. 最少知识原则
8. 可追溯性原则
9. 灵活性和适应性原则
10. 成本效益原则
11. 用户友好性原则
12. 标准化和一致性原则
13. 验证和验证原则
3.结构化程序设计中有哪几种基本控制结构?
分别描绘在程序流程图、盒图和PDA图中这些基
本控制的图例。
三种基本控制结构
选择
顺序
循环
程序流程图 符号
盒图
PAD
顺序
选择
CASE多分支
WHILE循环
UNTIL循环
语句标号
定义
第七章 实现
1.说明什么是程序编码?为什么程序设计语言的
特点和编码风格会影响到程序的可靠性、可读
性、可测试性和可维护性?
程序编码是软件开发过程中的一个关键步骤,它
指的是将设计阶段的算法和数据结构转换成计算
机可以理解和执行的代码。
2.为什么说软件界面设计的质量会直接影响到
用户对软件产品的评价?
第一印象
易用性
学习成本
专业性和可信度
品牌形象
3.什么是系统响应时间?系统响应时间有哪些
重要属性?
是指系统从接收到用户请求到系统产生响应并返
回结果所需的时间。
最小响应时间
平均响应时间
最大响应时间
可预测性
响应时间的一致性
4.在设计软件系统的用户帮助设施时,需要注
意解决哪些问题?
易用性
一致性
针对性
故障排除和常见问题解答
互动性
5.软件出错处理设计,即软件安全性设计。一
个交互式出错处理程序应该具备哪些功能和属
性?
1. 用户友好的错误信息:错误信息应当清晰、
简洁,使用非技术性语言,让用户能够理解发生
了什么问题。
2. 上下文相关的帮助:提供与当前错误相关的
帮助信息,指导用户如何解决遇到的问题。
3. 错误分类:根据错误的严重性对错误进行分
类(例如,警告、错误、致命错误),以便用户
和开发人员可以区分和处理不同级别的错误。
4. 恢复选项:提供明确的恢复选项,允许用户
在出错后选择不同的恢复路径,如重试、撤销操
作、回退到安全状态等。
5. 错误记录:自动记录错误详细信息到日志文
件中,包括错误类型、发生时间、相关数据等,
以便于问题诊断和调试。
6. 非侵入性:错误处理程序应避免在用户不知
情的情况下更改用户数据或系统状态。
7. 安全性:确保错误处理不会引入新的安全问
题,例如避免在错误信息中暴露敏感信息。
8. 最小化损害:错误处理程序应能够限制错误
的扩散,尽量减少对系统其他部分的影响。
9. 可配置性:允许开发人员或用户根据具体需
求配置错误处理的行为,例如启用或禁用某些错
误提示。
10. 自动化恢复:对于可预测的错误,应能够自
动执行恢复过程,无需用户干预。
11. 清晰的界面:提供一个直观的错误处理界
面,使得用户即使在出错时也能轻松地识别操作
路径。
12. 测试和验证:确保错误处理程序经过充分测
试,包括各种异常场景,并验证其正确性。
13. 反馈机制:提供一个反馈渠道,用户可以报
告错误或提供解决问题的建议。
14. 持续监控:实时监控错误发生率和类型,以
便持续改进错误处理程序。
15. 遵守规范:确保错误处理程序遵守相关的安
全标准和最佳实践
6.测试的最基本目标是什么? 为了发现错误而执行程序的过程
7.软件测试的原则有哪些?
- 所有测试都应该能追溯到用户需求
- 应该远在测试开始之前就制定出测试计划
- 把 Pareto 原理应用到软件测试中
- 应该从“小规模”测试开始,并逐步进行“大规模”
测试
- 穷举测试是不可能的
- 为了达到最佳的测试效果,应该由独立的第三
方从事测试工作。
8.为什么人工代码审查十分重要?
1. 质量保障:代码审查是确保代码质量的一种
有效手段。通过人工审查,可以检查代码是否符
合预期的功能需求,是否遵循最佳实践,以及是
否包含潜在的问题,如错误、逻辑错误或性能瓶
颈等。此外,它还可以确保代码遵循公司或项目
的编码标准和规范。
2. 提高可维护性:通过代码审查,审查者可以
帮助开发者识别代码中的复杂性和冗余性,从而
提出改进建议,提高代码的可读性和可维护性。
3. 增强安全性:在代码审查过程中,可能会发
现并解决可能的安全问题或潜在的漏洞,包括未
经适当处理的数据访问等,从而减少系统中的风
险。
4. 团队协作和沟通:代码审查是一个团队协作
的过程,有助于增强团队成员之间的沟通和理
解。通过这种方式,开发者可以学习其他成员的
编码风格和最佳实践,同时也能更好地理解业务
需求和项目目标。这对于团队间的协作和成长非
常重要。
5. 提高效率:尽管初始的代码审查可能需要投
入额外的时间和资源,但从长远来看,这有助于
避免后期开发过程中的大量修复工作。通过早期
发现和纠正问题,可以提高开发效率和项目的整
体质量。
6. 管理风险:对于一些需要遵守严格质量标准
和合规性要求的行业来说,进行人工代码审查有
助于发现并管理可能出现的风险。这可能包括对
关键业务功能的关键变更、合规性审计等方面的
问题进行特别关注。通过发现这些可能的风险点
并及时修正,可以有效减少可能的法律或其他严
重后果。
9.什么是调试?调试和测试有什么不同?
调试(也称为纠错)是在测试发现错误之后排除错
误的过程
10.简单说明调试的方法和策略。 方法
蛮干法
回溯法
原因排除法
11.什么是软件的可靠性、可用性和正确性?
软件可靠性:程序在给定时间间隔内,按照规格说
明书的规定成功运行的概率。
软件可用性:程序在给定时间点,按照规格说明书
的规定成功运行的概率。
子主题 12
第八章 维护
1.什么是软件维护?
是在软件已经交付使用之后,为了改正错误或满
足新的需要而修改软件的过程。
2.软件维护有哪几种类型? 分类
改正性维护
适应性维护
完善性维护
预防性维护
3.为什么说软件文档维护和代码维护同样重
要?
确保一致性和准确性:
支持理解和继承:
提升用户体验:
降低维护成本:
4.为什么说维护的代价很高?应该怎样做才能
降低维护的代价?
结构化维护与非结构化维护差别巨大
维护代价高昂
维护问题多
1. 编写清晰的代码和文档:
4. 进行良好的设计和规划:
3. 使用版本控制工具
5. 培训和知识传递:
6.什么是软件的可维护性?
1. 可理解性:软件的结构和逻辑是否易于理解
和掌握。
2. 可测试性:软件是否易于进行测试和调试,
包括单元测试、集成测试、系统测试等。
3. 可修改性:软件的设计和实现是否易于修
改,以纠正错误、改善性能或增加新功能。
4. 可扩展性:软件是否易于扩展,以适应新的
需求和变化。
5. 可靠性:软件是否能够在预期的环境和负载
下可靠运行,不受错误或故障的影响。
6. 可维护性:软件的维护成本是否较低,包括
维护人员的培训和时间成本等。
7. 安全性:软件是否容易受到安全漏洞的攻
击,保护用户的隐私和数据安全。
8. 易用性:软件是否易于使用,满足用户的需
求和期望。
7.如何提高软件的可维护性?
1. 模块化设计:将软件分解为独立的、可重用
的模块或组件,每个模块负责一个特定的功能。
这有助于降低系统的复杂性,使得理解和修改特
定部分变得更加容易。
2. 清晰的命名约定:使用描述性的变量、函数
和类名,使得代码的意图和功能一目了然。这有
助于提高代码的可理解性。
3. 文档化:为代码和设计编写清晰的文档,包
括API文档、设计文档和用户手册。良好的文档
可以帮助新团队成员快速理解系统,减少猜测和
误解。
4. 代码注释:在代码中添加注释,解释复杂的
算法、决策逻辑或非直观的代码段。这有助于提
高代码的可理解性。
5. 遵循设计模式:使用已知的设计模式和最佳
实践来解决常见的设计问题。这可以提高代码的
可维护性和可复用性。
6. 测试:编写单元测试、集成测试和系统测
试,确保代码的每个部分都经过验证。这有助于
快速发现和修复缺陷,减少维护成本。
7. 持续集成和持续部署(CI/CD):实施自动
化的构建、测试和部署流程,确保代码的每次更
改都经过验证,并且可以快速部署到生产环境。
8. 代码审查:定期进行代码审查,以发现潜在
的问题,确保代码符合团队的标准和最佳实践。
9. 避免过早优化:在必要时进行优化,但避免
过早优化,因为这可能导致代码复杂性和维护成
本的增加。
10. 使用版本控制系统:使用版本控制系统如Git
来跟踪代码的变更历史,便于回滚到旧版本和理
解变更原因。
11. 重构:定期对代码进行重构,以改善其结构
和性能,同时保持功能不变。这有助于提高代码
的可维护性。
12. 培训和知识传递:确保团队成员具备必要的
技能和知识,以有效地维护和改进代码。
13. 监控和反馈:使用监控工具来跟踪系统的性
能和错误,从实际使用中获取反馈,以指导维护
工作。
14. 适应性维护:软件应该设计成能够适应变
化,包括新功能的需求和技术的更新。
9.为什么说文档是影响软件可维护性的决定因
素?
由于长期使用的大型软件系统在使用过 程中必然
会经受多次修改
10.什么是软件的系统文档?
所谓系统文档指从问题定义、需求说明到验收测
试计划这样一系列和系统实现有关的文档
11.什么是软件的用户文档?
用户文档是用户了解系统的第一步,它应该能使
用户获得对系统的准确的初步印象。
12.什么是可重用性?如何通过提高软件的可重
用性来提高软件的可维护性?
所谓重用(reuse)是指同一事物不做修改或稍加改
动就在不同环境中多次重复使用。
(1)通常,可重用的软件构件在开发时都经过很严
格的测试可靠性比较高,且在每次重用过程中都
会发现并清除一些错误,随着时间推移,这样的
构件将变成实质上无错误的。因此,软件中使用
的可重用构件越多,软件的可靠性越高改正性维
护需求就越少。
(2)很容易修改可重用的软件构件使之再次应用在
新环境中,因此,软件中使用的可重用构件越
多,适应性和完善性维护也就越容易·
13.为什么要进行软件可维护性复审?
如果对软件的可执行部分的修改没有及时反映在
用户文档中,则必然会使用户因为受挫折而产生
不满
14.什么是软件的逆向工程和再工程?
软件的逆向工程是分析程序以便在比源代码更高
的抽象层次上创建出程序的某种表示的过程,也
就是说,逆向工程是一个恢复设计结果的过程
再工程则是对现有的软件系统进行重新设计、重
新编码和测试,以改进其质量、性能或可维护
性。
15.逆向工程与再工程与软件的预防性维护有什
么样的关系?
逆向工程和再工程可以帮助预防性维护活动更有
效进行,因为它们提供了深入理解和改进软件内
部结构的机会。然而,预防性维护的核心仍然是
保持代码清洁、文档完整和遵循良好的编程实
践,这些是逆向工程和再工程无法替代的基础。
第九章 面向对象方法学引论
1.为什么要引入面向对象方法学?
按人类习惯的思维方法,以现实世界中客观存在
的对象为中心来思考和认识问题。
2.面向对象方法学有哪4个基本要素?
任何客观的事物或实体都是对象。对象组成客观
世界,复杂的对象可以由简单的对象组成。
具有相同数据和操作的对象可以归并对象是对象
类的一个为一个类(class),实例。
类可以派生出子类,子类继承父类的全部特性(数
据和操作),又可以有自己的新特性。子类与父类
形成类的层次结构。
对象之间通过消息传递相互联系。
3.面向对象方法学的优点主要有哪些?
与人类习惯的思维方法一致
稳定性好
可重用性好
较易开发大型软件产品
可维护性好
4.什么是模型?软件开发为什么要建立模型?
所谓模型,就是为了理解事物而对事物作出的一
种抽象是对事物的一种无歧义的书面描述。
模型可以帮助人们思考问题、定义术语、在选择
术语时作出适当的假设,并且有助于保持定义和
假设的一致性。
5.什么是对象模型?建立对象模型时主要使用
哪些图形符号?
对象模型表示静态的、结构化的系统的“数据”性
质
6.什么是动态模型?建立动态模型时主要使用
哪些图形符号?
对象模型表示静态的、结构化的系统的“数据”性
质
它是对模拟客观世界实体的对象以及对象彼此间
的关系的映射,描述了系统的静态结构。
对象模型为建立动态模型和功能模型,提供了实
质性的框架·
7.什么是功能模型?建立功能模型时主要使用
哪些图形符号?
功能模型指明系统必须做什么;
系统
用例
行为者
第十章 面向对象分析
1.进行面向对象分析的基本过程是怎么样的?
面向对象分析,就是抽取和整理用户需求并建立
问
题域精确模型的过程。
2.建立对象模型有哪几个步骤? 步骤
首先确定对象类和关联(因为它们影响系统整体结
构和解决问题的方法),对于大型复杂问题还要进
一步划分出若干个主题:
然后给类和关联增添属性,以进一步描述它们:
·接下来利用适当的继承关系进一步合并和组织
类。
对类中操作的最后确定,
3.复杂问题的对象模型有哪5个层次?
主题层
类与对象层
结构层
属性层
服务层
4.建立动态模型的步骤有哪些? 步骤
第一步,是编写典型交互行为的脚本。虽然脚本
中不可能包括每个偶然事件,但是,至少必须保
证不遗漏常见的交互行为。
第二步,从脚本中提取出事件,确定触发每个事
件的动作对象以及接受事件的目标对象。
第三步,排列事件发生的次序,确定每个对象可
能有的状态及状态间的转换关系,并用状态图描
绘它们。
最后,比较各个对象的状态图,检查它们之间的
一致性确保事件之间的匹配。
5.如何建立功能模型?
系统
用例
行为者
同列之间的关系
用例建模
第十一章 面向对象设计
1.面向对象设计应该遵循哪些准则?简述每条准
则的内容,并说明遵循该条准则的必要性。
面向对象设计准则
1.模块化
对象就是模块把数据结构
和操作这些数据的方法紧
密地结合在一起
2.抽象
过程抽象数据抽象:类
参数化抽象:C++的“模板
3.信息隐藏
通过对象的封装性实现类
分离了接口与实现,支持
信息隐藏
4.弱耦合
耦合:一个软件结构内不同
模块之间互连的紧密程度
弱耦合:系统中某一部分的
变化对其他部分的影响降
到最低程度
对象之间的耦合:交互耦合
&继承耦合
5.强内聚
内聚衡量一个模块内各个
元素彼此结合的紧密程度
在设计时应该力求做到高
内聚面向对象设计的 3种
内聚:服务内聚、类内聚、
一般\特殊内聚
6.可重用
尽量使用已有的类
如果确实需要创建新类,
则在设计这些新类的协议
时应该考虑将来的可重复
使用性
2.简述有助于提高面向对象设计质量的每条主
要启发式规则的内容和必要性。
启发规则
1.设计结果应该清晰易懂
2.一般-特殊结构的深度应适当
3.设计简单的类
4.使用简单的协议
5.使用简单的服务
6.把设计变动减至最小
3.为什么说类构件是目前较为理想的可重用软
构件?它有哪些重用方式?
类构件特点
(1)模块独立性强
(2)成具有高度可塑性
(3)接口清晰、简明、可靠
(4)需求模型和规格说明
类构件重用方式
实例重用
继承重用
多态重用
4.什么是继承耦合?
是指在软件设计中,类之间的耦合度量,它描述
了一个类如何通过继承来使用另一个类。继承耦
合度量通常用来衡量类之间关系的紧密程度和依
赖性。
第十二章 面向对象实现
1.面向对象实现应该选用哪种程序设计语言?为
什么?
面向对象设计的结果既可以用面向对象语言、也
可以用非面向对象语言实现。
使用面向对象语言时,由于语言本身充分支持面
向对象概念的实现,因此,编译程序可以自动把
面向对象概念映射到目标程序中。
使用非面向对象语言编写面向对象程序,则必须
由程序员自己把面向对象概念映射到目标程序
中。
2.面向对象程序设计语言主要有哪些技术特
点?
语言技术特点
支持类与对象概念的机制
实现整体-部分(即聚集)结构的机制
实现一般-特殊(即泛化)结构的机制
实现属性和服务的机制
类型检查
类库
效率
持久保存对象
参数化类
开发环境
3.选择面向对象程序设计语言时主要应该考虑
哪些因素?
语言的一致的表达能力、可重用性及可维护性。
4.良好的面向对象程序设计风格主要有哪些准
则?
提高方法内聚
可重用性
保持一致性
把策略和实现分开
全面覆盖
尽量不使用全局信息
利用继承机制
第十三章 软件项目管理
1.请简单描述有哪些进行软件规模估算的方法。 估算软件规模
代码行技术
功能点技术
2.在工作量估算技术中,动态多变量模型比静
态单变量模型有哪些优点?
1. 考虑了多个因素:动态模型考虑了多个影响
项目工作量的因素,如人员技能、资源可用性、
风险、依赖关系和项目变更等。这使得估算更加
全面和精确,因为它能反映实际工作中可能遇到
的各种情况。
2. 适应性:动态模型能够随着项目的进展和环
境变化调整其预测。例如,它可以根据实际情况
中的进度延迟、资源分配变化或者新任务的加入
实时更新估算,这在项目生命周期中更具实用
性。
3. 风险管理:多变量模型能够识别和量化风险
对工作量的影响。通过分析各个变量之间的相互
作用,可以评估不同风险对项目完成时间或成本
的影响,从而做出更明智的决策。
4. 历史数据支持:动态模型常常基于历史数据
建立,这使得它可以利用过去项目的经验和教
训,提高估算的准确性。通过分析过去的项目数
据,可以找出变量之间的相关性和规律,从而进
行更合理的预测。
5. 决策支持:对于大型、复杂的项目,动态模
型能够为项目管理者提供详细的决策支持,帮助
他们优化资源分配、调整计划或应对不确定性。
6. 透明度和沟通:动态模型通常以图形化的方
式展示,如甘特图或网络图,这有助于团队成员
和利益相关者理解项目的复杂性,增强沟通和协
作。
3.简述Gantt图的用途和优缺点。
制定进度计划的工具
优点
Gantt 图能很形象地描绘任务分解情况,以及每
个子任务(作业)的开始时间和结束时间,因此是
进度计划和进度管理的有力工具。它具有直观简
明和容易握、容易绘制的优点
缺点
不能显式地描绘各项作业彼此间的依赖关系
(2)进度计划的关键部分不明确,难于判定哪些部
分应当是主攻和主控的对象
(3)计划中有潜力的部分及潜力的大小不明确,往
往造成潜力的浪费。
4.目前项目开发时常用的小组组织方法有哪
些?
民主制程序员组
主程序员组
现代程序员组
5.简述主程序员组的优缺点。 主程序员的大部分行政管理工作
6.什么是软件质量?
软件需求是度量软件质量的基础,与需求不一致
就是质量不高。
7.软件质量保证的措施主要有哪些? 软件质量保证措施
基于非执行测试(复审/评审)
基于执行测试(软件测试)
程序正确性证明(数学方法)
8.参加软件质量保证活动的人员有哪两类?
1. 质量保证专业人员
2. 开发和运维人员
9.简述技术复审的必要性。 技术复审的重要性
正式技术复审的显著优点是,能够较早发现软件
错误,从而可防止错误被传播到软件过程的后续
阶段。
10.什么是软件能力成熟度模型?其基本思想是
什么?
能力成熟模型
能力成熟度模型是用于评价软件机构的次件过程
能力成熟度模型,用于帮助软件开寸程。发机构
建立一个有规模的,成熟的软件
通过定量和定性的度量来评估和改进软件过程,
从而使软件组织能够更高效、更可靠地开发和维
护软件。
11.简述软件能力成熟度模型的5个等级。 五个等级从低到高:
初始级、可重复级、已定义级、已管理、优化
级。
下载后可阅读完整内容,剩余0页未读,立即下载
资源推荐
资源评论
2021-02-25 上传
182 浏览量
107 浏览量

113 浏览量
2020-11-18 上传
178 浏览量
2020-06-20 上传
102 浏览量
2021-03-27 上传
2024-12-29 上传
125 浏览量
2010-11-11 上传
2020-11-18 上传
174 浏览量
127 浏览量
152 浏览量
2019-02-16 上传
115 浏览量
162 浏览量
2998 浏览量
资源评论


一岁就可帅-
- 粉丝: 1182
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 浅论网络时代的高校思想政治工作.docx
- Project-Management-Plan-Template-项目管理计划模板.doc
- 项目管理经验交流材料.docx
- 工程认证背景下软件项目管理企业捐课模式分析.docx
- 物联网对计算机通信网络的影响及问题研究.docx
- 计算机在人事管理中的应用.docx
- 论述基层文物保护信息化建设存在的问题与解决对策.docx
- (源码)基于Python的智能家居自动化系统.zip
- 互联网金融企业财务管理中存在的问题及对策.docx
- 第四章企业会计信息化及其流程重组.doc
- 物联网在智慧校园中的应用分析.docx
- 大数据时代企业管理会计的机遇与挑战.docx
- 计算机网络远程控制系统及应用研究.docx
- 互联网+时代高职《外贸英语函电》多模态教学探究.docx
- 下一代通信网络的无线传输技术研究.doc
- 大数据一期课程中的机器学习相关内容
安全验证
文档复制为VIP权益,开通VIP直接复制
