文章教程

全国计算机等级考试二级C语言1.3软件工程基础

8/22/2020 10:24:52 PM 人评论 次浏览

1.3 软件工程基础

考点12 软件工程的基本概念

真考链接

考核概率为75%,该知识点属于熟记理解性内容,考生要熟记软件的定义、特点、软件工程的目标与原则、开发工具与开发环境,理解软件工程过程与软件生命周期。

1.软件定义与软件特点

(1)软件的定义。

软件(software)是与计算机系统的操作有关的计算机程序、规程、规则,以及可能有的文件、文档及数据。

计算机软件由两部分组成:一是机器可执行的程序和数据;二是机器不可执行的,与软件开发、运行、维护、使用等有关的文档。

(2)软件的特点。

软件主要包括以下几个特点:

●软件是一种逻辑实体,具有抽象性;

●软件的生产与硬件不同,它没有明显的制作过程;

●软件在运行、使用期间,不存在磨损、老化问题;

●软件的开发、运行对计算机系统具有依赖性,受计算机系统的限制,这导致了软件移植的问题;

●软件复杂性高、成本昂贵;

●软件开发涉及诸多的社会因素。

2.软件危机与软件工程

(1)软件危机。

软件危机泛指在计算机软件的开发和维护中所遇到的一系列严重问题。具体地说,在软件开发和维护过程中,软件危机主要表现在以下几个方面:

●软件需求的增长得不到满足;

●软件的开发成本和进度无法控制;

●软件质量难以保证;

●软件不可维护或维护程度非常低;

●软件的成本不断提高;

●软件开发生产率的提高赶不上硬件的发展和应用需求的增长。

总之,可以将软件危机归结为成本、质量、生产率等问题。

(2)软件工程。

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

软件工程包括两方面内容:软件开发技术和软件工程管理。软件工程包括3个要素,即方法、工具和过程。软件的核心思想是把软件产品看做是一个工程产品来处理。

3.软件工程过程与软件生命周期

(1)软件工程过程。

软件工程过程是把输入转化成为输出的一组彼此相关的资源和活动。

(2)软件生命周期。

通常,将软件产品从提出、实现、使用维护到停止使用的过程称为软件生命周期。

软件生命周期主要包括软件定义、软件开发及软件运行维护3个阶段。其中软件生命周期的主要活动阶段包括可行性研究与计划制订、需求分析、软件设计、软件实现、软件测试和运行维护。

4.软件工程的目标与原则

(1)软件工程的目标。

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

(2)软件工程的原则。

为了实现上述的软件工程目标,在软件开发过程中,必须遵循软件工程的基本原则。这些原则适用于所有的软件项目,包括抽象、信息隐蔽、模块化、局部化、确定性、一致性、完备性和可验证性。

5.软件开发工具与软件开发环境

软件开发工具与软件开发环境的使用,提高了软件的开发效率、维护效率和软件质量。

(1)软件开发工具。

软件开发工具的产生、发展和完善促进了软件的开发速度和质量的提高。软件开发工具从初期的单项工具逐步向集成工具发展。与此同时,软件开发的各种方法也必须得到相应的软件工具的支持,否则方法就很难有效地实施。

(2)软件开发环境。

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

计算机辅助软件工程(CASE)是当前软件开发环境中富有特色的研究工作和发展方向。CASE将各种软件工具、开发机器和一个存放过程信息的中心数据库组合起来,形成软件工程环境。一个良好的软件工程环境将最大限度地降低软件开发的技术难度并使软件开发的质量得到保证。

真题精选

下列描述中,正确的是(  )。

A.程序就是软件    B.软件开发不受计算机系统的限制

C.软件既要是逻辑实体,又是物理实体    D.软件是程序、数据与相关文档的集合

【答案】 D

【解析】计算机软件是计算机系统中与硬件相互依存的另一部分,包括程序、数据及相关文档的完整集合。软件具有以下特点:①软件是一种逻辑实体,而不是物理实体,具有抽象性;②软件的生产过程与硬件不同,没有明显的制作过程;③软件在运行、使用期间,不存在磨损、老化问题;④软件的开发、运行对计算机系统具有不同程度的依赖性,这导致软件移植的问题;⑤软件复杂性高,成本昂贵;⑥软件开发涉及诸多的社会因素。

考点13 结构化分析方法

真考链接

考核概率为85%,该知识点属于熟记理解性内容,考生要熟记需求分析的定义及其工作、2种需求分析方法,理解结构化分析方法常用的工具。

1.需求分析和需求分析方法

(1)需求分析。

软件需求是指用户对目标软件系统在功能、行为、性能、设计约束等方面的期望。

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

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

(2)需求分析方法。

常用的需求分析方法有结构化分析方法和面向对象分析方法。

2.结构化分析方法

(1)结构化分析方法。

结构化分析方法是结构化程序设计理论在软件需求分析阶段的应用。

结构化分析方法的实质是着眼于数据流,自顶向下,逐层分解,建立系统的处理流程,以数据流图和数据字典为主要工具,建立系统的逻辑模型。

(2)结构化分析方法的常用工具。

常用工具包括数据流图(DFD)、数据字典(DD)、判断树、判断表。下面主要介绍数据流图和数据字典。

数据流图(DataFlowDiagram,DFD)是描述数据处理的工具,是需求理解的逻辑模型的图形表示,它直接支持系统的功能建模。

数据流图从数据传递和加工的角度,来刻画数据流从输入到输出的移动变换过程,其主要图形元素及说明见表1.1。

表1.1 数据流图中主要图形元素及说明

数据字典是结构化分析方法的核心,是对所有与系统相关的数据元素的一个有组织的列表,以及明确的、严格的定义,使得用户和系统分析员对于输入、输出、存储成分和中间计算结果有共同的理解。通常数据字典包含的信息有名称、别名、何处使用/如何使用、内容描述、补充信息等。数据字典中有4种类型的条目:数据流、数据项、数据存储和数据加工。

小提示

数据流图与程序流程图中用箭头表示的控制流有本质的不同,千万不要混淆。此外,数据存储和数据流都是数据,仅仅是所处的状态不同。数据存储是处于静止状态的数据,数据流是处于运动状态的数据。

3.软件需求规格说明书

软件需求规格说明书是需求分析阶段的最后结果,是软件开发中的重要文档之一。

软件需求规格说明书的标准主要有正确性、无歧义性、完整性、可验证性、一致性、可理解性、可修改性和可追踪性。

考点14 结构化设计方法

真考链接

考核概率为65%,该知识点属于熟记理解性内容,考生要熟记概要设计的基本任务、准则,理解软件设计的基本原理、面向数据流的设计方法、详细设计的工具。

1.软件设计的基本概念及方法

(1)软件设计的基础。

软件设计是软件工程的重要阶段,是一个把软件需求转换为软件表示的过程。软件设计的基本目标是用比较抽象概括的方式确定目标系统如何完成预定的任务,即软件设计是确定系统的物理模型。

(2)软件设计的基本原理。

软件设计遵循软件工程的基本目标和原则,建立了适用于在软件设计中应该遵循的基本原理和与软件设计有关的概念。主要包括抽象、模块化、信息隐藏及模块的独立性。下面主要介绍模块独立性的一些度量标准。

模块的独立程度是评价设计好坏的重要度量标准。衡量软件的模块独立性的定性度量标准是使用耦合性和内聚性。

耦合性是模块间互相连接的紧密程度的度量。内聚性是一个模块内部各个元素间彼此结合的紧密程度的度量。通常较优秀的软件设计,应尽量做到高内聚、低耦合。

(3)结构化设计方法。

结构化设计就是采用最佳可能方法,设计系统的各个组成部分及各成分之间的内部联系的技术。也就是说,结构化设计是这样一个过程,它决定用哪些方法把哪些部分联系起来,才能解决好某个具体有清楚定义的问题。

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

小提示

一般来说,要求模块之间的耦合尽可能弱,即模块尽可能独立,且要求模块的内聚程度尽可能高。内聚性和耦合性是一个问题的两个方面,耦合性程度弱的模块,其内聚性一定高。

2.概要设计

(1)概要设计的任务。

●设计软件系统结构;

●数据结构及数据库设计;

●编写概要设计文档;

●概要设计文档评审。

(2)面向数据流的设计方法。

在需求分析设计阶段,产生了数据流图。面向数据流的设计方法定义了一些不同的映射方法,利用这些映射方法可以把数据流图变换成结构图表示的软件结构。数据流图从系统的输入数据流到系统的输出数据流的一连串连续加工形成了一条信息流。下面首先介绍数据流图的不同类型。

数据流图的信息流可分为两种类型:变换流和事务流。相应地,数据流图有两种典型的结构形式:变换型和事务型。

面向数据流的结构化设计过程:

●确认数据流图的类型(是事务型还是变换型);

●说明数据流的边界;

●把数据流图映射为程序结构;

●根据设计准则对产生的结构进行优化。

(3)结构化设计的准则。

大量的实践表明,以下的设计准则可以借鉴为设计的指导和对软件结构图进行优化的条件:

●提高模块独立性;

●模块规模应该适中;

●深度、宽度、扇入和扇出都应适当;

●模块的作用域应该在控制域之内;

●降低模块之间接口的复杂程度;

●设计单入口、单出口的模块;

●模块功能应该可以预测。

小提示

扇出过大意味着模块过分复杂,需要控制和协调过多的下级模块;扇出过小时可以把下级模块进一步分解成若干个子功能模块,或者合并到它的上级模块中去。扇入越大则共享该模块的上级模块数目越多,这是有好处的,但是,不能牺牲模块的独立性单纯追求高扇入。大量实践表明,设计得很好的软件结构通常顶层扇出比较高,中层扇出较少,底层模块有高扇入。

3.详细设计

(1)详细设计的任务。

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

(2)详细设计的工具。

●图形工具:程序流程图、N-S、PAD及HIPO。

●表格工具:判定表。

●语言工具:PDL(伪码)。

真题精选

从工程管理角度,软件设计一般分为两步完成,它们是(  )。

A.概要设计与详细设计    B.数据设计与接口设计

C.软件结构设计与数据设计    D.过程设计与数据设计

【答案】 A

【解析】从工程管理角度看,软件设计分两步完成:概要设计与详细设计。概要设计将软件需求转化为软件体系结构、确定系统级接口、全局数据结构或数据库模式;详细设计确立每个模块的实现算法和局部数据结构,用适当方法表示算法和数据结构的细节。

考点15 软件测试

真考链接

考核概率为75%,该知识点属于熟记理解性内容,考生要熟记软件测试的目的和准则,理解白盒测试与黑盒测试及其测试用例设计。

软件测试是保证软件质量的重要手段,其主要过程涵盖了整个软件生命周期的过程,包括需求定义阶段的需求测试、编码阶段的单元测试、集成测试以及其后的确认测试、系统测试,验证软件是否合格、能否交付用户使用等。

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

(1)软件测试的目的。

软件测试是为了发现错误而执行程序的过程。

一个好的测试用例是指很可能找到迄今为止尚未发现的错误的用例;

一个成功的测试是发现了至今尚未发现的错误的测试。

(2)软件测试的准则。

鉴于软件测试的重要性,要做好软件测试,除了设计出有效的测试方案和好的测试用例,软件测试人员还需要充分理解和运用软件测试的一些基本准则:

●所有测试都应追溯到用户需求;

●严格执行测试计划,排除测试的随意性;

●充分注意测试中的群集现象;

●程序员应避免检查自己的程序;

●穷举测试不可能实施;

●妥善保存测试计划、测试用例、出错统计和最终分析报告,为软件维护提供方便。

2.软件测试技术和方法综述

软件测试的方法是多种多样的,对于软件测试方法和技术,可以从不同角度加以分类。

若从是否需要执行被测软件的角度,可以分为静态测试和动态测试。若按照功能划分,可以分为白盒测试和黑盒测试。

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

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

动态测试是基于计算机的测试,是为了发现错误而执行程序的过程。设计高效、合理的测试用例是做好动态测试的关键。

测试用例就是为测试设计的数据,由测试输入数据和预期的输出结果两部分组成。测试用例的设计方法一般分为两类:黑盒测试和白盒测试。

(2)白盒测试方法与测试用例设计。

白盒测试也称结构测试或逻辑驱动测试,它根据程序的内部逻辑来设计测试用例,检查程序中的逻辑通路是否都按预定的要求正确地工作。

白盒测试的主要方法有逻辑覆盖测试、基本路径测试等。

(3)黑盒测试方法与测试用例设计。

黑盒测试也称为功能测试或数据驱动测试,它根据规格说明书的功能来设计测试用例,检查程序的功能是否符合规格说明书的要求。

黑盒测试的主要诊断方法有等价类划分法、边界值分析法、错误推测法、因果图法等,主要用于软件确认测试。

3.软件测试的实施

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

(1)单元测试。

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

(2)集成测试。

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

(3)确认测试。

确认测试的任务是用户根据合同进行,确定系统功能和性能是否可接受。确认测试需要用户积极参与,或者以用户为主进行。

(4)系统测试。

系统测试是将软件系统与硬件、外设或其他元素结合在一起,对整个软件系统进行测试。

系统测试的内容包括功能测试、操作测试、配置测试、性能测试、安全测试和外部接口测试等。

真题精选

下列叙述中,正确的是(  )。

A.软件测试应该由程序开发者来完成    B.程序经调试后一般不需要再测试

C.软件维护只包括对程序代码的维护    D.以上3种说法都不对

【答案】 D

【解析】程序调试的任务是诊断和改正程序中的错误。它与软件测试不同,软件测试是尽可能多地发现软件中的错误。先要发现软件的错误,然后借助于一定的调试工具去找出软件错误的具体位置。软件测试贯穿整个软件生命周期,调试主要在开发阶段。为了实现更好的测试效果,应该由独立的第三方来构造测试。软件的运行和维护是指将已交付的软件投入运行,并在运行使用中不断地维护,根据新提出的需求进行必要而且可能地扩充和删改。

考点16 程序的调试

真考链接

考核概率为30%,该知识点属于熟记性内容,考生要熟记程序调试的任务及调试方法。

在对程序进行了成功的测试之后将进行程序的调试。程序调试的任务是诊断和改正程序中的错误。

本节主要讲解程序调试的概念及调试的方法。

1.程序调试的基本概念

调试是成功测试之后出现的步骤,也就是说,调试是在测试发现错误之后排除错误的过程。软件测试贯穿整个软件生命期,而调试主要在开发阶段。

程序调试活动由两部分组成:

●根据错误的迹象确定程序中错误的确切性质、原因和位置;

●对程序进行修改,排除这个错误。

(1)调试的基本步骤。

①错误定位;

②修改设计和代码,以排除错误;

③进行回归测试,防止引入新的错误。

(2)调试的原则。

调试活动由对程序中错误的定性/定位和排错两部分组成,因此调试原则也从这两个方面考虑:

●确定错误的性质和位置的原则;

●修改错误的原则。

2.程序调试方法

调试的关键在于推断程序内部的错误位置及原因。从是否跟踪和执行程序的角度,类似于软件测试,分为静态调试和动态调试。静态调试主要是指通过人的思维来分析源程序代码和排错,是主要的调试手段,而动态调试是辅助静态调试的。

主要的软件调试方法有强行排错法、回溯法和原因排除法。其中,强行排错法是传统的调试方法;回溯法适合于小规模程序的排错;原因排除法是通过演绎和归纳及二分法来实现的。

真题精选

软件调试的目的是(  )。

A.发现错误    B.更正错误    C.改善软件性能    D.验证软件的正确性

【答案】 B

【解析】软件调试的目的是诊断和更正程序中的错误,更正以后还需要进行测试

常见问题

软件设计的重要性和地位主要有哪些?

软件开发阶段(设计、编码、测试)占据软件项目开发总成本绝大部分,是在软件开发中形成质量优劣的关键环节;软件设计是开放阶段最重要的步骤,是将需求准确地转化为完整的软件产品或系统的唯一途径;软件设计作出的决策,最终影响软件实现的成败;设计是软件工程和软件维护的基础。

教程类别