软件工程中的概念、相关知识点总结

博客分类: 软件工程 阅读次数: comments

软件工程中的概念、相关知识点总结

传统软件工程学科中的概念、相关知识点总结

1、软件与软件工程

1.1 软件的概念、软件的特点、软件发展的四个阶段

软件的概念

软件是能够完成预定功能和性能,并对相应数据进行加工的程序和描述程序及其操作的文档。
软件 = 程序+数据+文档
程序 = 算法+数据结构

软件的特点

软件发展的四个阶段

1.2 软件危机产生的原因,解决软件危机的方法

软件危机产生的原因

解决软件危机的办法

1.3 软件工程的概念,软件工程的三要素

软件工程的概念

软件工程的三要素

过程、工具、方法

1.4 软件生命周期个阶段及其基本任务

1.5 软件开发过程模型:瀑布模型、原型模型、螺旋模型等几种模型的形式与特点及使用范围

瀑布模型

软件开发过程与软件生命周期是一致的
相邻二阶段之间存在因果关系
需对阶段性产品进行评审

原型模型

螺旋模型

增量模型

并发开发模型

形式化开发方法

2 软件项目管理

2.1软件项目管理的基本概念

软件项目管理

2.2 软件项目估算(代码行、功能点估算)

2.2.1 度量 metrics

度量具有数字特征,软件工程范围的度量是软件开发过程、软件资源或软件产品简单属性的定量描述。
如,程序规模、操作符个数、程序中错误的个数等

2.2.2 估算 estimation

对软件产品、过程、资源进行预测
估算可以采用经验公式、或参考历史资料
估算用于事前签订合同、立项、制定工作计划等

2.2.3 面向规模的度量

2.2.3.1 规模度量的优缺点

2.2.4 面向功能的度量

2.2.4.1 根据事务信息处理程序的基本功能定义的,在系统设计初期可以估算出软件项目的规模:
FP=CT* [0.65+0.01*∑Fi ] 其中:CT 按表3.1 计算(),Fi 是复杂性调节值,Fi值取值 0,1,…,5,当Fi = 0时,表示 Fi 不起作用,Fi = 5时,表示 Fi 作用最大。

一些符号代表的意思:

计算方法:  

简单功能点与功能点:

优缺点:

2.2.5 代码行度量与功能点度量的比较

2.2.6 各种语言的LOC/FP(平均值)

汇编语言 300, COBOL 100, FORTRAN 100, Pascal 90, Ada 70, 面向对象的语言 30, 四代语言(4GL) 20, 代码生成器 15,

2.3 McCabe度量法,能完成环路复杂度的度量

2.3.1 定义

McCabe 度量法又称环路复杂性度量,基于程序控制结构的软件复杂性度量模型。

2.3.2 程序控制结构图

2.3.3 McCabe 度量法

McCabe 用程序控制结构图的巡回秩数V(G)作为程序结构复杂性的度量
V(G) = e-n+2
其中,e为结构图的边数,n为结构图的结点数
可以证明V(G) 等于结构图中有界或无界的封闭区域个数。

V(G)的值不要大于10,当V(G)>10时,模块内部结构就会变得复杂,给编码和测试带来困难。

2.3.4 McCabe 度量的缺点

2.4 成本估算方法及其特点

估算可以采用经验公式、或参考历史资料
估算用于事前签订合同、立项、制定工作计划等

常用的估算方法:

四种方法可以同时、单独或组合使用,以便取长补短,提高项目估算的精度和可靠性。采用分解技术辐射那软件项目应考虑系统集成是需要的工作量。为了实现呢软件项目估算,实践中开发了大量的软件项目自动估算工具,用以支持软件工作量或成本估算。

2.4.1 分解技术

采用“分而治之”的策略就行软件项目估算。将项目分解为若干个主要的功能及相关的软件工程活动,通过逐步求精的方式进行成本及工作量估算。

2.4.3 经验估算模型

可用于补充分解技术

2.4.3.1 CoCoMo模型

2.4.4 自动估算工具

实现一种或多种分解技术或经验魔性,与人机交互结合,自动估算将是很好的选择。

2.5 关键路径法

2.6 CMM与CMMI的基本概念

2.6.1 CMM/能力成熟模型

对于软件组织在定义、实施、度量、控制和改善其软件过程的实践中各个发展阶段的描述。CMM的核心是把软件开发视为一个过程,并根据这一原则对软件开发和维护进行过程监控和研究,以使其更加科学化、标准化、使企业能够更好地实现商业目标。 CMM是一种用于评价软件承包能力以改善软件质量的方法,侧重于软件开发过程的管理及工程能力的提高与评估。分为五个等级:一级为初始级,二级为可重复级,三级为已定义级,四级为已管理级,五级为优化级。

2.6.2 CMMI/能力成熟度模型集成

其目的是帮助软件企业对软件工程过程进行管理和改进,增强开发与改进能力,从而能按时地、不超预算地开发出高质量的软件。

3 需求分析

3.1 软件需求内同

用户对目标软件系统在功能、行为、性能、设计、约束等方面的期望。
需求分析阶段的任务,通过对问题及环境的理解、分析,将用户需求精确化,完全化,最终形成需求规格说明,描述系统信息、功能和行为。

3.1.1 用户需求

用自然语言和图标描述,说明系统必须提供哪些服务、系统运行要受哪些约束

3.1.2 系统需求

详细说明系统将要提供的服务以及系统受到的约束,精确的描述软件的功能,系统买方和软件开发者签订合同的重要性。

3.1.3 软件设计描述

在系统需求的基础上,加入更详细的内容,构成软件设计活动的概要描述,是软件设计和实现的基础。

3.1.4 需求分析的三个阶段

问题分析,需求描述,需求评审

3.2 需求分析常用技术

3.2.1 初步需求获取技术

3.2.2 需求建模技术

3.2.3 快速原型技术

软件开发早期,快速建立目标软件系统原型 ,让用户对原型进行评估并提出意见 。 原型几经改进最终确定 , 设计和编码人员遵循原型确立的外部特征实现软件产品 。如果软件产品含有大量人机交互 、 可视输出 、或者涉及复杂的算法 , 应采用快速原型技术 。对于复杂问题, 可对某些子问题 , 尤其是用户界面 , 使用快速原型技术 。

3.2.4 问题抽象

抽象:关注一般问题的解决途径 , 以此指导特殊问题的求解 。 注意用户描述的抽象级别 , 统一规划系统 行为 。避免不一致性 , 减少分析的工作量 。

3.2.5 问题分级与多视点分析

分解:根据问题的规模和复杂性进行分解 , 并对子问题展开进一步的分析 。逐级分解 , 直至子问题的规模降至合适程度 。在问题分解过程中 , 要建立子问题之间的相互联系 。必须遵循子问题内部紧藕合 , 子问题之间松藕合的原则

视点分解法:在分析的初期 , 整体地把握一个大型问题的软件需求是困难的 。 需要从各个角度分别对问题进行理解和分析 , 然后再综合 , 达到全面理解的目

3.3 结构化分析方法

需求分析视点:系统观点,用户观点,信息观点功能观点,行为观点等 。整理 、 综合用户描述 , 应注意用户视点的变化 ,避免遗漏

3.4 数据流图(DFD)的作用,能用数据流图完成需求分析,能废除精化数据流图,数据字典

第四章,第45页

4 软件设计基础

4.1 设计阶段主要任务

4.2 软件设计准则(抽象、信息隐蔽、模块化、自顶向下逐步求精等)

4.3 高内聚低耦合度的含义

内聚度:模块内部各成分彼此结合的紧密程度。
耦合度:软件结构中模块间关联程度的一种度量。

4.4 熟悉变换分析和事务分析,能用两种方法分析和构建软件程序结构图

4.4.1 变换分析

变换分析由一系列设计步骤组成,经过这些步骤就能把具有变换流特点的数据流图,按预先确定的模式映射成软件结构

  1. 复审基本系统模型
  2. 复审和精化软件数据流图
  3. 确定DFD为变换流还是事务流。
  4. 划定输入流和输出流边界孤立变换中心
  5. 执行“一级分解”导出具有三个层次的程序结构,一级分解的原则:在完成控制功能并保持低耦合度、高内聚度的前提下尽可能减少模块数
  6. 执行 “ 二级分解 ”,把数据流图中每个处理框映射成程序结构中一个适当的模块,二级分解过程是从变换中心的边界开始沿输入、输出通道向外移动,把遇到的每个处理框映射为程序结构中的一个模块。
  7. 采用启发式设计策略,精化所得程序结构雏形,改良软件质量。

4.4.2 事物分析

  1. 复审基本系统模型
  2. 复审并精华软件数据流图
  3. 确定数据流图的特性,
  4. 指出事物中心,确定由事物中心发出的每一动作路径的数据流图
  5. 把数据流图映射为事务处理型的程序结构
  6. 分解并精化事务结构以及每条动作路径所对应的结构
  7. 使用启发式设计策略,精化所得程序结构雏形,改良软件质量

4.5 详细设计工具(程序流程图、盒图(N-S图)与PAD图之间的转化,能将伪码或程序转换成程序流程图、盒图(N-S图)与PAD图

8 软件测试

8.1 软件测试的目的和原则,软件测试流程

8.1.1 目的

8.1.2 流程

8.2 软件测试计划

8.3 软件测试技术(白盒测试、黑盒测试、利用软件测试技术进行软件测试、设计测试用例)

8.3.1 导出测试用例:

8.3.2 测试技术

8.3.3 黑盒测试:

8.4 软件测试策略(单元测试、集成测试、确认测试、验收测试、系统测试)的基本概念

8.4.1 单元测试

8.4.2 综合测试

综合测试是组装软件的系统测试技术, 按设计要求把通过单元测试的各个模块组装在一起之后, 进行综合测试以便发现与借口有关的各种错误。

8.4.3 自顶向下集成

8.4.4 自底向上集成

8.4.5 关键模块

8.4.6 综合测试文档

测试说明书应给出软件集成的总体规划和某特殊测试的描述。

关键模块应尽早测试

8.4.7 确认测试

确认测试应检查软件能否按合同要求进行工作, 即是否满足软件需求说明书中的确认标准。

10 软件维护

10.1 四种维护的类型,软件维护的概念、软件可维护性

10.1.1 四种维护

10.1.2 软件维护的概念

在软件运行。维护阶段软件产品进行的修改就是所谓的维护。

10.2 软件维护的技术有那几种

10.2.1 改正性维护

通过使用新技术,大大减少进行改正性维护的需要。这些技术包括:数据库管理系统、软件开发环境、程序自动生成系统、较高级(第四代)的语言,以及新的开发方法、软件复用、防错程序设计及周期性维护审查等。

10.2.2 适应性维护

这一类维护不可避免,可以控制。

10.2.3 完善性维护

利用前两类维护中列举的方法也可以减少这一类维护。特别是数据库管理系统、程序生成器、应用软件包,可减少维护工作量,此外,建立软件系统的原型,把它在实际系统开发之前提供给用户。用户通过研究原型,进一步完善他们的功能要求,就可以减少以后完善性维护的需要。

10.3 维护工作量的模型

M = p + Ke的c-d次方

M 是维护中消耗总工作量,p是上面描述的生产性工作量(如分析和评价、设计修改和实现),k是一个经验常数,c是因缺乏好的设计和文档而导致复杂性的度量,d是对软件熟悉程度的度量。

10.4 软件可维护性

软件可维护性的定义:

10.4.1 衡量程序的可维护性

可理解性、可使用性、可测试性、可移植性、可修改性、效率、可靠性

10.4.2 定量度量可维护性

10.5 提高可维护性的方法

考试常见题型(天大)
一、名词解释(4分*5)
二、简答 (6分*5)
三、设计题(15分*2)
四、建模(10分*2)

建模要求将给出的问题陈述进行分析,做出数据流图,并完成软件层次结构图,或者将给出的数据流程图直接转化为软件层次结构图。