#### 软件工程的基本概念

软件的定义:软件是与计算机系统操作有关的计算机程序、规则、规程,以及可能有的文件、文档及数据。计算机软件有两部分组成:机器可执行的程序和数据,机器不可执行的与软件开发运行维护使用等相关的文档

软件的特点:

1. 软件是一种逻辑实体,具有抽象性
2. 软件没有明显的制作过程
3. 软件在使用中不存在磨损、老化等问题
4. 对硬件和环境具有依赖性
5. 软件复杂性高,成本昂贵
6. 软件开发涉及诸多社会因素

软件分类:

* 按功能分类:应用软件、系统软件、支撑(工具)软件

1. 系统软件:管理主动向的资源,提高计算机的使用效率,为用户提供服务,是计算机系统中不可缺少一个组成部分,是最靠近计算机硬件的软件,如操作系统,数据库管理系统,编译程序,网络软件,驱动
2. 应用软件:为了应用于特定领域而开发的软件,如嵌入式软件,制造业软件,系统仿真软件,人工智能软件,工程和科学计算软件
3. 支撑软件:介于系统和应用软件之间,协助用户开发软件的工具型软件,其中包括帮助程序员开发和维护软件产品的工具软件,也包括帮助管理人员控制开发进程和项目管理的工具软件,如VS

软件危机:泛指计算机软件的开发和维护过程中所遭遇的一系列严重问题。几乎所有软件都不同程度的存在这些问题,主要体现在:(成本、质量、生产率问题)

1. 不能满足软件需求的增长,常有用户对系统不满意
2. 软件开发的成本和进度无法控制,成本过高,开发周期过长
3. 软件质量难以保证
4. 软件可维护程序低或不可维护
5. 软件成本不断提高
6. 软件开发生产率的提高赶不上硬件的发展和应用需求的增长

软件工程:应用于计算机软件的定义,开发和维护的一整套方法,工具、文档、实践标准及工序

软件工程概念:出现源于软件危机,通过研究解决软件危机的途径而形成的一门工程学科

软件工程要求(三要素):方法、工具、过程

软件工程目标:在给定成本、进度的前提下,开发出具有有效性,可靠性,可理解性,可维护性,可重用性,可适应性、可移至性、可追踪性和可交互操作性且满足客户需求的产品

软件工程研究内容:软件开发模型(瀑布模型、增量模型、迭代模型)、开发方法(面向过程、面向数据方法、面向对象)、支持过程、管理过程

软件工程原则:抽象、模块化、信息隐蔽、局部化、确定性、一致性、完备性、可验证性

软件生命周期:软件从提出、实现、使用、维护至停止使用、退役的过程,软件产品从其概念提出开始到软件产品不能使用为止的整个时间段都属于软件生命周期,分为3个阶段:软件定义阶段、软件开发阶段、软件维护阶段

软件开发环境:是全面支持软件开发全过程的软件工具的集合,这些软件工具按照一定的方法或模式组合起来,支持软件生命周期各个阶段和各项任务的完成。

#### 结构化分析

结构化分析方法:使用数据流图(DFD),数据字典(DD),结构化英语,判定表和判定树等工具,来建立的一种新的、称为结构化规格说明的目标文档

结构化分析步骤:

1. 通过对用户的调查,以软件需求为线索,建立当前系统的具体模型
2. 去掉具体模型中非本质因素,抽象出当前系统的逻辑模型
3. 根据计算机的特点分析当前系统和目标系统的差别,建立目标系统 逻辑模型
4. 完善目标系统并补充细节,写出目标系统的软件需求规格说明书
5. 评审直到确认完全符合用户的软件需求

结构化分析常用工具:数据流图,数据字典,判定树,判定表

数据流图:是系统逻辑模型的图形表示,主要使用的图形元素如下:

数据字典:是对数据流中所有元素的定义的集合,是结构化分析的核心。数据字典中有4种类型的条目:数据流、数据项、数据存储和加工

判定树: 又称决策树,是一种描述加工的图形工具,适合描述问题处理具有多个判断,而且每个决策与若干条件有关的事务。

判定表: 与判定树类似,当数据流图中的加工要依赖于多个逻辑条件的取值,即完成该加工的一组动作是由某—组条件取值的组合而引发的,使用判定表描述比较适宜,由四个象限组成

需求分析∶是指用户对软件系统在功能,行为,性能,设计约束等方面的期望,需求分析的任务是发现需求,求精,建模和定义需求的过程。

需求分析阶段的工作可以分为4个方面:需求获取,需求分析,编写需求规格说明书,需求评审

需求分析方法:分为结构化分析方法和面向对象的分析方法(静态分析方法、动态分析方法)

软件需求规格说明书:是软件开发过程中的重要文档之一

软件需求规格说明书的作用:

1. 便于用户与开发人员进行理解和交流
2. 反应出用户问题的结构,可以作为软件开发工作的基础和依据
3. 作为确认测试和验收的依据
4. 为成本估算和编制计划进度提供依据和基础
5. 是软件不断改进的基础

软件需求规格说明书的内容:重点描述软件的目标,软件的功能需求,性能需求,外部接口,属性及约束条件等。

#### 结构化设计

软件设计从工程管理角度分为概要设计和详细设计两步,从技术观点来看分为软件结构设计、数据设计、接口设计、过程设计

软件设计的基本原则:模块化、抽象、信息隐藏、模块独立性

模块独立性:

1. 耦合性:指软件系统中各模块之间相互联系紧密程度的一种度量,耦合的高低取决于接口的复杂性,调用方式及传递信息
2. 内聚性:指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量

结构化设计的方法的基本思想是将软件设计成由相对独立、单一功能的模块组成的结构

概要设计又称总体设计,基本任务为:设计软件系统结构、数据结构及数据库设计、编写概要设计文档、概要设计文档评审

扇入大表示模块的复用程度高,扇出大表示模块的复杂度高

结构化设计准则:

1. 提高模块独立性,尽量高内聚,低耦合
2. 模块规模应适中
3. 深度、宽度、扇入、扇出适当
4. 模块的作用域应该在控制域内
5. 降低模块间接口的复杂度
6. 模块功能应该可以预测

详细设计:任务,为软件结构图中的每一个模块确定实现算法和局部数据结构,常用某种选定的表达工具表示算法和数据结构的细节

常用工具:

1. 图形工具:程序流程图(PFD),N-S图(盒图),PAD图,HIPO
2. 表格工具:判定表
3. 语言工具:PDL(Procedure Design Language 伪码)

程序流程图:用于描述程序逻辑的工具,大多符号与系统流程图相同,**但箭头符号代表控制流而不是数据流**

N-S图都由矩形构成

PAD图:是问题分析图,用二维树形结构表示程序控制流,易读易写

PDL:用于描述模块算法设计和处理细节的语言,分内外两层语言

#### 软件测试

软件测试目的:为了发现程序中的错误而执行程序的过程,好的测试用例很可能发现迄今为止尚未发现的错误

软件测试方法:

* 根据软件是否需要被执行:静态测试、动态测试
* 根据功能划分:白盒测试和黑盒测试(适用于动态测试)

1. 白盒测试:把程序看成装在一只透明的白盒子里,测试者完全了解程序的结构和处理过程
2. 白盒测试用例设计:主要技术有逻辑覆盖测试(语句覆盖、路径覆盖、判定覆盖、条件覆盖、判断-条件覆盖),基本路径测试(在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法)
3. 黑盒测试:把程序看成装在一只黑盒子里,测试者完全不了解或不考虑程序的结构和处理过程,根据规格说明书的功能来设计测试用例
4. 黑盒测试用例设计:常用技术:等价类划分法、边界值分析法、错误推测法

* 软件测试的实施步骤:单元测试、集成测试、确认测试(验收测试)、系统测试

#### 程序的调试

任务:诊断和改正程序中的错误

基本步骤:

1. 错误定位
2. 修改设计和代码,排除错误
3. 进行回归测试,防止引进新的错误

调试方法:强行排错法、回溯法、原因排除法(二分法、归纳法、演绎法)

#### 小结

软件设计中模块划分应遵循高内聚低耦合

软件生命周期中活动不包括市场调研

可行性研究不属于开发阶段

软件开发中需求分析的主要任务是定义和描述目标系统“做什么”

软件测试的目的只是发现错误,并没有改正

届ける言葉を今は育ててる
最后更新于 2023-01-27