软件工程相关笔记。
1. 绪论
简述软件危机与软件工程的概念以及提出软件工程概念的目的
- 软件危机: 是指软件生产率、软件质量远远不能满足社会发展的需求,成为社会、经济发展的制约因素的现象
- 软件工程: 是应用计算机科学理论和技术以及工程管理原则和方法,按预算和进度实现满足用户需求的软件产品的工程,或以此为研究对象的学科
- 提出软件工程概念的目的: 软件工程是倡导以工程的原理、原则和方法进行开发,以期解决出现的软件危机
简述软件开发的本质
不同抽象层术语之间的 “映射”,以及不同抽象层处理逻辑之间的映射。
2. 软件需求与软件需求规约
初始发现需求
初始发现需求的常见技术包括: 自悟、交谈、观察、小组会、提炼
需求规约定义
需求规约是一个软件项/产品/系统所有需求陈述的正式文档。它表述了软件产品/系统的概念模型。
它一般满足以下四点性质:
- 重要性和稳定性程度: 按需求的重要性和稳定性,对需求进行分级
- 可修改的: 在不过多影响其他需求的前提下,可以容易修改单一的需求。
- 完整的: 没有被遗漏的需求
- 一致的: 不存在互斥的需求
需求规约的三种基本形式
- 非形式化的需求规约
- 半形式化的需求规约
- 形式化的需求规约
3. 结构化方法
模块的内聚性
内聚是测量一个模块化系统好坏的标准之一。主要分为7种评分:
- 功能内聚 10
- 顺序内聚 9
- 通信内聚 7
- 步骤内聚 5
- 时间内聚 3
- 逻辑内聚 1
- 偶然内聚 0
前三种是可以接收的,后四种要尽量避免。
模块间的耦合类型
常见的模块间耦合类型有 5 种,由强到弱有: 内容耦合、公共耦合、控制耦合、标记耦合、数据耦合。
程序流程图主要用于软件开发的哪一阶段?它的主要优缺点有哪些?
主要应用于 软件的详细设计阶段。
主要优点是: 对控制流程的描绘很直观,便于初学者掌握。
主要缺点是:
- 不是一种逐步求精的工具,它诱使程序员过早地考虑程序的控制流程,而不考虑程序的全局结构。
- 所表达的控制流,往往不受任何约束,可随意转移。从而影响甚至破坏好的系统结构
- 不易表达数据结构
系统流程图与数据流程图有什么区别?
- 系统流程图是描述系统物理模型的工具,数据流程图是描述系统逻辑模型的工具。
- 系统流程图从系统功能的角度抽象地描述系统的各个部分及其相互之间信息流动的情况。
- 数据流程图从数据传送和加工的角度抽象地描述信息在系统中流动和数据处理的情况。
演化模型的主要特征是什么?它存在什么不足?
- 该模型显式地把需求获取扩展到需求阶段,即为了第二个构造增量,使用了第一个构造增量来精化需求。
- 演化模型在一定程度上可以减少软件开发活动的满目性。
不足: 在演化模型的使用中,即便很好地理解了需求或设计,也很容易弱化需求分析阶段的工作。
4. RUP、UML
图形工具的用途
- 类图: 可视化表达系统静态结构模型的工具。
- 用况图: 表达系统功能模型的图形化工具。
- 状态图: 显示一个状态机的图。
- 顺序图: 一种交互图。由一组对象以及时序组织的对象之间的关系组成。
什么是 UML? 它有什么特点?
UML: Unified Modeling Language, 统一建模语言
- UML 是面向对象方法,它是一种根据客体之间的关系来构造系统模型的系统化方法。
- UML 是一种可视化语言, 可用于规约系统的制品、构造系统的制品,建立系统制品的文档。这意味着 UML 可作为软件需求规约、设计和实现的工具。
- UML 给出了方法学中不同抽象层次术语以及模型表达工具。
简述泛化的概念及其约束
泛化是一般性类目(父类)和它的较为特殊的类目(子类)之间的关系,有时称为 “is-a-kind-of” 关系,UML 给出了 4 个约束:
- 完整
- 不完整
- 互斥
- 重叠
RUP 的特点之一是迭代、增量式开发,它规定了 4 个开发阶段。请简述每次迭代在各阶段的目标。
- 初始阶段的基本目标:获得与特定用况和平台无关的系统体系结构轮廓,已建立产品功能范围;编制初始业务示例,从业务角度指出该项目的价值,减少项目主要错误风险。
- 精化阶段的基本目标:捕获并描述系统的大部分需求,建立系统体系结构基线的第一个版本,主要包括用况模型和分析模型,减少次要的错误风险;到该阶段末,就能估算成本、进度,并能详细地规划构造阶段。
- 构造阶段的基本目标:通过演化,形成最终的系统体系结构基线,开发完整的系统,确保产品可以开始向客户交付。
- 移交阶段的基本目标:确保有一个实在的产品发布给用户群。
简述 RUP 和 UML 之间的关系
- RUP 和 UML 构成了一种特定的软件开发方法学
- UML 作为一种可视化建模语言,给出了表达事务和事务之间关系的基本术语,给出了多种模型的表达工具。
- RUP 利用 UML 的术语定义了 需求获取层、系统建模层、设计层、实现层,并给出各层模型映射的基本活动以及相关的指导。
简述需求分析与软件设计两个阶段任务的主要区别
需求分析阶段的主要任务是定义软件的用户需求,即定义待开发的软件能做什么。
软件设计阶段的主要任务是定义软件的实现细节,以满足用户需求,即研究如何实现软件。
简述事务设计的基本步骤
- 设计准备,复审并精化系统的模型
- 确定事务处理中心
- 设计系统模块结构图的顶层和第一层
- 自顶向下,逐步求精
6. 软件测试
软件测试技术一般分为白盒测试技术和黑盒测试技术。
白盒测试法和黑盒测试法的区别是什么?
白盒测试法完全了解程序的结构和处理过程,这种方法按照程序内部的逻辑结构以及有关信息设计或选择测试你用例,检查程序中每条通路是否都能按照预定要求正确工作。
黑盒测试法着眼于软件的外部特征,不考虑软件的内部逻辑和内部特征,只依据程序的需求规格说明书检查是否满足功能要求,测试要在软件的接口处进行。
简述软件测试的基本步骤
- 单元测试: 主要检验软件设计的最小单元——模块。该测试以详细设计文档为指导,测试模块内的重要控制路径。
- 集成测试: 集成测试是软件组装的一个系统化技术,其目标是发现与接口有关的错误。将经过单元测试的模块构成一个满足设计要求的软件结构。
- 有效性测试: 目标是发现软件实现的功能与需求规格说明书不一致的地方。
- 系统测试: 验证将软件运行于更大系统中时整个系统的有效性。
简述路径测试中几种典型的测试策略。
- 路径覆盖: 执行所有与可能穿过程序控制流的路径。(T 条件走一遍)
- 语句覆盖: 至少执行过程中所有语句一次。
- 分支覆盖: 至少将程序中每一个分支执行一次。
- 条件覆盖: 每个判定的所有可能的条件取值至少执行一次。(全取假值)
- 条件组合覆盖: 设计足够多的测试用例,使每个判定中的所有可能的条件取值组合至少执行一次。
简述因果图方法生成测试用例的基本步骤
- 通过对软件规格说明书的分析,找出一个模块的原因和结果,并给每个原因和结果赋予一个标识符。
- 分析原因和结果之间以及原因与原因之间对应的关系,并画出因果图
- 在因果图上表示一些特定的约束或限制条件
- 把因果图转换判定表
- 为判定表的每一列设计测试用例
7. 软件生存周期过程与管理
软件生存周期模型
时间顺序:
- 瀑布模型(1970, 20世纪60年代到80年代的主要成果)
- 演化模型
- 螺旋模型(1988, 加入了前两者所忽略的风险分析)
- 喷泉模型: 体现了软件创建所固有的迭代和无间隙的特征。
简述演化模型及其主要特征
演化模型主要针对事先不能完整定义需求的软件开发,在用户提出待开发系统的核心需求的基础上,软件开发人员首先开发一个核心系统并投入运行,以便用户能够有效地提出反馈,即提出精化系统能力的需求。
接着,软件开发人员根据用户反馈,实施开发的迭代过程均由需求,设计,编码、测试、集成等阶段组成。为整个系统添加一个可定制的、可管理的子集;如果在一次迭代中,有的需求不能满足用户的要求,可在下一次迭代中予以修正。
演化模型的主要特征是: 该模型显式地把需求获取扩展到需求阶段,即为了第二个构造增量使用,使用第一个构造增量来精化需求。
8. 集成化能力成熟度模型
能力等级
一种过程改善路径,该路径可使组织针对单一过程域不断改善该过程域。
- 0 级: 未完成级
- 1 级: 已执行级
- 2 级: 已管理级
- 3 级: 已定义级
- 4 级: 已定量管理级
- 5 级: 持续优化级
成熟度等级
一种过程改善路径,该路径可使组织针对一组过程域不断改善该过程域。
- 1 级: 初始级
- 2 级: 已管理级
- 3 级: 已定义级
- 4 级: 已定量管理级
- 5 级: 持续优化级
能力等级和成熟度等级等级只有 1 级名称不同,2~5 是相等名称。
其他
- 计算机软件一般是指计算机系统中的程序及其 文档(或数据和文档)
- 对于单一一个需求,必须具有的基本性质: 必要的、无歧义的、可追踪的、可测试的、可测量的。
- 需求人员通过提出问题/用户回答的方式,直接询问用户需要的初始发现需求技术是 交谈。
- 在结构化分析方法中,表示 “数据的静态结构“ 的术语是 数据存储。
- 为保证加入的模块没有引进新的错误,可能需要进行回归测试。
- CMMI 的成熟度等级和能力等级还可用于评选活动和估算。