软件工程重点解答题
第一章 软件工程概论
软件的生命周期
- 从软件的问题定义开始,经过开发、使用、维护直到废弃阶段的整个过程就是软件的生命周期
- 问题定义-可行性研究-软件分析-软件设计-软件开发-运行与维护-软件废弃
软件工程概念
- 是指导软件开发和维护的工程学科
- 核心思想是采用工程点的概念、原理、技术和方法进行软件的开发和维护,把经过实践证明是正确的管理技术与当下最好的技术结合起来,经济的开发高质量的软件并有效的维护它。
软件工程的七大基本原理
- 用分阶段的生命周期计划管理软件工程过程
- 坚持在软件工程过程进行阶段评审
- 实行严格的产品控制
- 采用现代化的技术进行软件的设计与开发
- 工作结果应当是能够清楚地审查的
- 开发小组人员应少而精
- 承认不断改进软件工程实践的必要性
软件工程研究内容
- 软件开发技术
- 软件工程管理技术
- 软件安全保护技术
软件工程的方法学
- 传统方法学: 采用结构化技术
- 面向对象方法学: 采用面向对象思想
第二章 软件计划与可行性研究
可行性研究的任务以及方面
- 可行研究的任务
- 进行概要的分析与研究,初步确定软件的规模和目标,确定项目的约束和限制,进行简单的需求分析,抽象出逻辑模型 ,从逻辑模型出发,探索可供选择的方法,对每一种方法研究它的可行性
- 方面
- 经济可行性
- 社会可行性
- 技术可行性
可行性研究的目的、步骤
- 目的
- 用最小的代价在最短的时间内确定问题是否能解决
- 步骤
- 确定系统的目标和规模
- 研究正在运行的系统
- 导出新系统的高层逻辑结构
- 设计和评价可供选择的解决方案
- 选择合适的解决方案
- 编制可行性研究报告
可行性研究的CASE工具
- 系统流程图
- 表达数据在系统各部件之间的流动情况。
- 数据流图
- 表达数据处理系统中信息的传递和变换过程
- 数据字典
- 关于数据的信息集合
第三章 软件需求分析
需求分析的步骤
-
通过调查研究,获取用户的需求
-
去除非本质因素,确定系统真正的需求
-
描述需求,建立系统的逻辑模型
-
写需求说明书,进行需求复审
常用的需求方法,每种方法的思想
-
结构化分析法
- 基本思想是抽象和分解,采用自顶向下逐步分解的思想,直到每一个子功能足够简单
-
原型化分析方法
- 通过获取需求后,快速开发一个模型,进行模拟操作,来对需求进行分析
-
面向对象分析
- 基于面向对象的思想,以用例模型为基础
需求分析的原则
- 能够表达和理解问题的数据域和功能域
- 能够对问题进行分解和不断细化,建立问题的层次结构
- 能够描述系统的逻辑模型和物理模型
需求分析的CASE工具
- 层次方框图
- Warnier图
- IPO图:输入、处理、输出图
- E-R图
- 状态迁移图
- Petri网
第四章 软件结构设计
软件结构设计概念及内容
- 概念
- 软件结构设计就是确定系统是由那些模块构成,以及模块之间的关系。
- 内容
- 采用某种设计方法,通过模块结构的原则,通过分解细化将一个复杂的系统分解为若干个模块,逐步、逐层的设计模块层次结构
- 确定模块的功能,与已确定的需求建立对应关系
- 确定模块之间的调用关系,模块之间的接口,评价模块结构的质量
结构设计的原则
- 降低模块的耦合性,提高模块的内聚性
- 软件的规模应该适中
- 选择合适的深度、宽度、扇出、扇入
- 尽量降低模块间接口的复杂度
- 模块的作用域应当在控制域范围之内
- 设计单入口单出口的模块
- 模块功能可预测
结构化设计的图形工具
- 层次图
- HIPO图
- 结构图
第五章
详细设计的工具
- 图形工具
- 程序流程图
- PAD图
- NS图(盒图)
- 语言工具
- 伪码
- PDL
程序流程图
N-S图
PAD图
案列
- 在一组数中求最大数”的详细设计为例,分别用传统流程图、PAD图和N-S图来描述它的软件过程
第六章 软件编码设计
编码的工具语言
1.面向机器语言
- 机器语言
- 二进制形式的指令代码。由操作数和操作码构成
- 汇编语言
- 符号语言,采用了一定的助记符来代替机器语言中的指令和数据
2.高级语言
- 通用语言
- 专业语言
语言特性
1.心理特性
- 歧义性
- 简洁性
- 局部性
- 相关内容的相对集中性
- 顺序性
2.工程特性
- 可移植性
- 程序在不同机器环境下的通用性和适应性
- 语言编译器的实现效率
- 开发工具的支持
- 可维护性
- 良好的可读性和易于使用
3.技术特性
- 有的语言提供丰富的数据类型和复杂的数据结构
- 很强的实时功能
- 大量数据的增删查改
程序设计语言的选择
- 理论标准
- 理想的模块化机制, 易于阅读和使用的控制结构和数据结构
- 完善、独立的编译机制
- 实用标准
- 系统用户的要求
- 工程的规模和大小
- 软件的运行环境
- 可以得到的软件开发工具
- 软件开发人员的理论知识
- 软件的可移植性要求
- 算法和数据结构的复杂性
- 软件的应用领域
第七章 软件的测试
软件测试过程模型
- V模型
- 需求阶段-概要设计-详细设计-编码
- 单元测试-集成测试-系统测试-验收测试
- W模型
- 测试与开发并行关系,同步进行的
- X模型
- 提出针对单独的程序段进行相互分离的编码和测试,此后通过频繁的交接,通过集成最终合成可执行的程序
- H模型
- 用于改进V模型和W模型不足之处的软件测试管理模型
软件开发过程的测试步骤
- 单元测试
- 也称模块测试,对模块进行正确性检验的测试,以期尽早发现各模块内部可能存在的各种错误。
- 集成测试
- 在单元测试的基础上将软件的多个模块或者系统前后台合并之后进行的测试
- 系统测试
- 基于一定的计算机硬件环境,对整个系统进行的一系列测试
- 验收测试
- 旨在向软件的购买者展示该软件系统满足其用户要求
软件测试用例的设计
测试用例的概述
- 定义
- 为特定的目的而设计的一组测试输入数组、执行条件和预期的输出结果
- 设计原则
- 测试用例的代表性
- 测试结果的可判定性
- 测试结果的可在现行
白盒测试用例的设计
- 语句覆盖
- 判定覆盖
- 条件覆盖
- 判定条件覆盖
- 条件组合覆盖
- 所有可能的条件取值组合至少执行一次
- 点覆盖
- 边覆盖
- 路径覆盖
黑盒测试用例的设计
-
等价类划分
- 有效等价类
- 无效等价类
-
边界值分析
-
因果图法
- 输入之间有关系
-
错误推测法
- 基于经验和直觉推测程序中可能出现的错误
软件调试概念
- 测试发现错误后消除错误的过程
第八章 软件维护
软件维护的任务
- 就是在已经交付使用之后,为了改正错误和满足新的需要而修改软件的工程
软件维护的分类
- 改正性维护
- 在软件运行过程中发生异常或错误进行的维护
- 适应性维护
- 软件适应不断变化的环境而进行修改
- 完善性维护
- 在软件使用过程中,用户对软件提出新的功能与性能要求
- 预防性维护
- 为了改善软件将来的可维护性或可靠性
第九章 面向对象的软件开发技术概述
面向对象建模
面向对象的开发模型
面向对象模型
- 对象模型
- 描述系统的数据结构
- 动态模型
- 表示顺时的、行为化的系统的控制性质,描述了系统的控制结构
- 功能模型
- 定义系统应该做什么,表达系统的功能信息
对象模型的5个层次
- 主题层
- 类-&-对象层
- 结构层
- 表示问题域的复杂性
- 属性层
- 服务层
- 收到消息后必须执行的一些出来
建立动态模型
- 编写脚本
- 从脚本提炼出事件,联系该事件与其目标对象
- 组织事件的顺序和状态
- 检查对象间的一致性,确保事件之间的匹配。
建立功能模型
- 建立基本系统模型图
- 细化数据流图
- 功能描述
面向对象的设计原则
- 模块化
- 数据抽象和过程抽象
- 信息隐蔽和封装
- 高内聚和低耦合
- 可重用