购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.1.4 软件工程基础

【考点1】软件工程的基本概念

1.软件定义与软件特点

计算机软件是由程序、数据及相关文档构成的完整集合,它与计算机硬件一起组成计算机系统。其中,程序和数据是机器可执行的,文档是机器不可执行的。

软件具有以下特点。

(1)软件是一种逻辑实体,具有抽象性。

(2)软件没有明显的制作过程。

(3)软件在使用期间不存在磨损、老化问题。

(4)软件对硬件和环境具有依赖性。

(5)软件复杂性高,成本高。

(6)软件开发涉及诸多的社会因素。

2.软件的分类

计算机软件按功能分为系统软件、应用软件、支撑软件(或工具软件)。

(1)系统软件是管理计算机的资源、提高计算机的使用效率、为用户提供各种服务的软件,如操作系统(Operating System,OS)、数据库管理系统(Data Base Management System,DBMS)、编译程序、汇编程序及网络软件等。

(2)应用软件是为了应用于特定的领域而开发的软件。我们熟悉的办公软件、即时通信软件、杀毒软件、财务管理系统软件等属于应用软件。

(3)支撑软件是介于系统软件和应用软件之间,协助用户开发软件的工具软件,其中包括帮助程序人员开发和维护软件产品的工具软件,也包括帮助管理人员控制开发进程和项目管理的工具软件。

3.软件工程

软件工程是试图用工程、科学及数学的原理与方法研制、维护计算机软件的有关技术和管理方法,是应用于计算机软件的定义、开发及维护的一整套方法、工具、文档、实践标准及工序。软件工程包含3个要素:方法、工具及过程。

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

4.软件过程

软件过程是把输入转换为输出的一组彼此相关的资源和活动。软件过程是指为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。软件过程所进行的基本活动主要有软件规格说明、软件开发或软件设计与实现、软件确认、软件演进。

5.软件生命周期

软件开发应遵循软件生命周期。通常把软件产品从问题定义、可行性研究、需求分析、概要设计、详细设计、软件实现、软件测试到使用、维护和退役的过程称为软件生命周期。软件生命周期分为3个时期,共8个阶段,如图2.20所示。

图2.20 软件生命周期

软件生命周期中各阶段的主要任务如下。

(1)问题定义:确定要解决的问题是什么。

(2)可行性研究:决定该问题是否存在一个可行的解决办法,确定完成开发任务的实施计划。

(3)需求分析:对待开发软件提出的需求进行分析并给出详细定义。编写软件的需求规格说明书和初步的用户手册,提交评审。

(4)软件设计:通常又分为概要设计和详细设计两个阶段,其目的是给出软件的结构、模块的划分、功能的分配以及处理流程等。软件设计阶段提交评审的文档有概要设计说明书、详细设计说明书及测试计划初稿。

(5)软件实现:在软件设计的基础上编写程序。该阶段完成的文档有用户手册、操作手册等面向用户的文档,以及为下一阶段编写的单元测试计划。

(6)软件测试:在设计测试用例的基础上,检验软件的各个组成部分,编写测试分析报告。

(7)使用和维护:将已交付的软件投入运行,同时不断地维护,进行必要而且可行的扩充和删改。

【考点2】需求分析及其方法

1.需求分析

(1)需求分析相关概念。

需求分析是发现需求、求精、建模及定义需求的过程。需求分析将创建所需的数据模型、功能模型及控制模型。

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

(2)需求规格说明书。

需求规格说明书是需求分析阶段的最后成果。需求规格说明书应重点描述软件的目标,如软件的功能需求、性能需求、外部接口、属性及约束条件等。

需求规格说明书的特点:正确性、无歧义性、完整性、可验证性、一致性、可理解性、可修改性、可追踪性。

(3)需求分析方法。

需求分析方法可以分为结构化分析方法和面向对象分析方法两大类。

① 结构化分析方法。结构化分析方法主要包括面向数据流的结构化分析方法、面向数据结构的Jackson系统开发方法及面向数据结构的结构化数据系统开发方法。

② 面向对象分析方法。面向对象分析是面向对象软件工程方法的第一个环节,包括概念原则、过程步骤、表示方法、提交文档等规范要求。

另外,从需求分析建模的特性来划分,需求分析方法还可以分为静态分析方法和动态分析方法。

2.结构化分析方法的常用工具

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

需求分析的结构化分析方法中常用的工具是数据流图(Data Flow Diagram,DFD)。数据流图的主要图形元素与说明如表2.15所示。

表2.15 数据流图的主要图形元素与说明

为使构造的数据流图表达完整、准确、规范,应遵循如下的构造规则和注意事项。

(1)数据流图上的每个元素都必须被命名。

(2)对加工处理建立唯一、层次性的编号,并且每个加工处理通常要求既有输入,又有输出。

(3)数据存储之间不应有数据流。

(4)数据流图的一致性,即输入/输出、读/写的对应。

(5)父图、子图关系与平衡规则:子图个数不大于父图中的处理个数。所有子图的输入/输出数据流和父图中相应处理的输入/输出数据流必须一致。

【考点3】软件设计及其方法

1.软件设计的基本概念

软件设计的基本目标是用比较抽象、概括的方式确定目标系统如何完成预定的任务。也就是说,软件设计是确定系统的物理模型。

软件设计是开发阶段最重要的步骤之一。从工程管理的角度来看可分为两步:概要设计和详细设计。从技术方面来看,软件设计包括结构设计、数据设计、接口设计、过程设计4个步骤。

将软件按功能分解为组成模块,是概要设计的主要任务。划分模块要本着提高独立性的原则。模块独立性的高低决定设计的好坏,而设计又是决定软件质量的关键环节。模块的独立性可以由两个定性标准度量:耦合性和内聚性。

(1)耦合性用于衡量不同模块彼此间互相依赖(连接)的紧密程度。

(2)内聚性用于衡量一个模块内部各个元素彼此结合的紧密程度。

模块的内聚性越高,模块间的耦合性就越低,可见模块的耦合性和内聚性是相互关联的。因此,好的软件设计,应尽量做到高内聚、低耦合。

2.概要设计

(1)概要设计的任务

概要设计又称总体设计,软件概要设计的基本任务如下。

① 设计软件系统结构。

② 设计数据结构和数据库。

③ 编写概要设计文档:概要设计阶段的文档有概要设计说明书、数据库设计说明书及集成测试计划等。

④ 评审概要设计文档。

(2)结构图

在概要设计中,常用的软件结构设计工具是结构图(Structure Chart,SC),也称为程序结构图。它反映了整个系统的功能实现以及模块之间的联系。

结构图的基本图符及其含义如表2.16所示。

表2.16 结构图的基本图符及其含义

软件结构图是一种层次化的表示,它指出了软件各个模块之间的关系,如图2.21所示。

图2.21 软件结构图

软件结构图术语及其含义如表2.17所示。

表2.17 软件结构图术语及其含义

好的软件设计结构通常顶层扇出多,中间扇出较少,底层扇入多。

3.详细设计

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

常用的设计工具有程序流程图(Program Flow Diagram,PFD)、N-S图(Nassi—Shneiclerman Diagram,N-S)、问题分析图(Problem Analysis Diagram,PAD)、HIPO(Hierarchy plus Input—Process—Output,HIPO)图、判定表、PDL。

【考点4】软件测试

1.软件测试的目的和准则

软件测试的目的是在软件投入运行之前,尽可能多地发现软件中的错误。软件测试是保证软件质量、可靠性的关键步骤。它是对软件规格说明、设计及编码的最后复审。

软件测试应遵循如下准则。

(1)所有测试都应追溯到用户需求。

(2)在测试之前制定测试计划,并严格执行。

(3)充分注意测试中的群集现象。

(4)避免由程序的编写者测试自己的程序。

(5)不可能进行穷举测试。

(6)妥善保存测试计划、测试用例、出错统计及最终分析报告,为维护提供方便。

2.软件测试方法

软件测试方法较多,如果根据软件是否需要被执行,可以分为静态测试和动态测试;如果根据功能划分,可以分为白盒测试和黑盒测试。

(1)静态测试和动态测试。

① 静态测试。静态测试包括代码检查、静态结构分析、代码质量度量等。其中代码检查分为代码审查、代码走查、桌面检查、静态分析等具体形式。静态测试不实际运行软件,主要通过人工进行分析。

② 动态测试。动态测试就是通常所说的上机测试,通过运行软件来检验软件中的动态行为和运行结果的正确性。

动态测试的关键是设计高效、合理的测试用例。测试用例就是为测试设计的数据,由测试输入数据和预期的输出结果两部分组成。

(2)白盒测试和黑盒测试。

① 白盒测试。白盒测试假设程序装在一只透明的白盒子里,测试者完全了解程序的结构和处理过程。它根据程序的内部逻辑来设计测试用例,检查程序中的逻辑通路是否都按预定的要求正确地工作。

白盒测试的主要技术有逻辑覆盖测试、基本路径测试等。其中逻辑覆盖测试又分为语句覆盖、路径覆盖、判定覆盖、条件覆盖及判断-条件覆盖。

② 黑盒测试。黑盒测试又称功能测试或数据驱动测试,着重测试软件功能,假设程序装在一只黑盒子里,测试者完全不了解或不考虑程序的结构和处理过程。它根据规格说明书的功能来设计测试用例,检查程序的功能是否符合规格说明书的要求。

常用的黑盒测试方法和技术有等价类划分法、边界值分析法、错误推测法及因果图等。

3.软件测试的实施

软件测试的实施过程主要有4个步骤:单元测试、集成测试、确认测试及系统测试。

(1)单元测试。

单元测试也称模块测试,模块是软件设计的最小单位,单元测试是对模块的正确性进行检验,以期尽早发现各模块内部可能存在的各种错误。

单元测试通常在编码阶段进行,单元测试的依据除了源程序以外,还有详细设计说明书。

单元测试可以采用静态测试或者动态测试。动态测试通常以白盒测试为主,测试程序的结构;以黑盒测试为辅,测试程序的功能。

(2)集成测试。

集成测试也称组装测试,它是对各模块按照设计要求组装成的程序进行测试,主要目的是发现与接口有关的错误(系统测试与此类似)。

集成测试主要发现设计阶段产生的错误。集成测试的依据是概要设计说明书,通常采用黑盒测试。

集成可以分为非增量方式(一次性组装方式)集成和增量方式集成两种。增量方式包括自顶向下、自底向上,以及自顶向下和自底向上相结合的混合增量方式。

(3)确认测试。

确认测试也称验收测试,其任务是检查软件的功能、性能及其他特征是否与用户的需求一致,它是以需求规格说明书作为依据的测试。确认测试通常采用黑盒测试。

(4)系统测试。

在确认测试完成后,把软件系统整体作为一个元素,与计算机硬件、支持的软件、数据、人员及其他计算机系统的元素组合在一起,在实际运行环境下对计算机系统进行一系列的集成测试和确认测试,这样的测试称为系统测试。

【考点5】程序的调试

1.程序调试的基本概念

调试(debug),也称为排错,是在成功测试之后出现的步骤。也就是说,调试是在测试发现错误之后排除错误的过程。程序调试的任务是诊断和改正程序中的错误。

程序调试由两部分组成。

(1)根据错误的迹象确定程序中错误的确切性质、原因及位置。

(2)对程序进行修改,改正这个错误。

2.调试方法

从是否跟踪和执行程序的角度,调试分为静态调试和动态调试。静态调试是主要的调试手段,是指通过人的思维来分析源程序的代码和排错。而动态调试是静态测试的辅助手段,主要调试方法有强行排错法、回溯法、原因排除法(二分法、归纳法及演绎法)等。 2+hHP4G1IP6ZVwSTaGynEt8hzAj6eNm+Fqnakya54YKLitrLY0UYaY2iEzjKV2+x

点击中间区域
呼出菜单
上一章
目录
下一章
×