《软件工程与软件测试》课程
期末复习资料
《软件工程与软件测试》课程讲稿章节目录及知识点:
第1章 概述
(1) 了解软件的定义
(2) 了解软件危机的产生
(3) 了解软件工程的定义
第2章 软件过程
(1) 掌握软件过程的定义
(2) 掌握软件生命周期的几个阶段
(3) 掌握瀑布模型、快速原型模型、软件开发模型的基本过程,了解其优缺点
(4) 掌握增量模型、螺旋模型、喷泉模型的基本过程,了解其优缺点
第3章 可行性研究
(1) 了解可行性研究的目的与任务
(2) 掌握系统流程图
(3) 掌握数据流图
(4) 掌握数据字典
(5) 了解成本-效益分析的方法
第4章 软件需求分析
(1) 了解需求分析的任务
(2) 掌握需求获取的常用方法
(3) 掌握结构化分析方法
(4) 熟练使用需求分析图形工具
第5章 软件总体设计
(1) 了解软件设计和总体设计的定义
(2) 掌握模块化、抽象和信息隐蔽和局部化的原理
(3) 掌握模型快独立性和衡量标准
(4) 掌握软件结构设计准则
(5) 熟练使用软件结构设计图形工具
(6) 掌握结构化设计方法
第6章 软件详细设计
(1) 了解详细设计的目标和任务
(2) 掌握程序流程图、盒图等程序设计工具的使用
(3) 掌握程序判定表、判定树等程序设计工具的使用
(4) 掌握人机界面设计的原则和方法
第7章 软件编码
(1) 掌握程序设计语言的选择准则
(2) 掌握程序设计风格要点
第8章 软件测试
(1) 掌握软件测试的目标和原则
(2) 掌握几种软件测试方法的定义
(3) 掌握语句覆盖、判定覆盖等逻辑覆盖方法
(4) 掌握条件覆盖、条件组合覆盖等逻辑覆盖方法
(5) 掌握循环测试和基本路径测试基本方法
(6) 掌握等价类划分的方法
(7) 掌握边界值分析、错误推测和因果图的原理和方法
(8) 掌握单元测试方法
(9) 掌握集成测试方法
(10) 掌握确认测试和系统测试方法
(11) 掌握软件调试的方式
第9章 软件维护
(1) 了解软件维护定义
(2) 掌握软件维护过程
(3) 掌握软件可维护定义和方法
(4) 了解软件维护中存在的问题
第10章 面向对象方法学
(1) 了解面向对象方法定义
(2) 掌握面向对象的基本概念
(3) 掌握对象、类及类之间关系
(4) 掌握统一建模语言UML
第11章 面向对象的分析
(1) 掌握面向对象的分析过程
(2) 掌握建立用例模型方法
(3) 掌握建立对象模型方法
(4) 掌握建立顺序图和通信图方法
(5) 掌握建立状态图和活动图方法
(6) 掌握建立物理实现模型方法
第12章 面向对象的设计与实现
(1) 掌握面向对象的设计准则和启发式规则
(2) 掌握问题与子系统和人机监护子系统
(3) 掌握任务管理子系统和数据管理子系统
(4) 掌握服务设计方法
(5) 掌握关联设计方法
(6) 掌握面向对象设计优化方法
(7) 掌握面向对象系统实现方法
一、客观部分:(单项选择、多项选择)
(一)、单项选择
1模块独立性是由内聚性耦合性来度量的,其中内聚性是( )
A. 模块间的联系程度
B. 模块的功能强度
C. 信息隐藏程度
D. 接口的复杂程度
★考核知识点:模块独立性
参见讲稿章节:5.3
附1.1.1:(考核知识点解释)
模块的独立性是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其它的模块的接口是简单的。
模块的独立性可以从两个方面来度量:耦合衡量不同模块彼此间相互依赖的紧密程度。耦合要低,即每个模块和其他模块之间的关系要简单。内聚衡量一个模块内部各个元素之间彼此结合的紧密程度的度量。 内聚要高,每个模块完成一个相对独立的特定子功能。
模块耦合性类型包括:无直接耦合、数据耦合、标记耦合、控制耦合、公共环境耦合、内容耦合,它们之间依次耦合性由低到高,模块独立性由强到弱。
模块内聚类型包括:偶然内聚、逻辑内聚、时间内聚、通信内聚、顺序内聚、功能内聚,它们之间依次内聚性由低至高,模块独立性由弱至强。
2. 成本/效益分析是()的一项重要内容
A.可行性研究
B.需求分析
C.软件测试
D.软件维护
[答案]:A
★考核知识点:可行性研究-成本/效益分析
参考讲稿章节:3.1、3.5
附1.1.2(考核知识点解释):
可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决。需要明确,这个阶段不是解决用户提出的问题,而是确定这个问题是否值得去解决。
可行性研究的主要任务是,首先需要进一步分析和澄清问题定义,在问题定义阶段初步确定的规模和目标,如果是正确的就进一步加以肯定,如果有错误就应该及时改正,如果对目标系统有任何约束和限制,也必须把它们清楚地列举出来。
在澄清了问题定义之后,分析员应该导出系统的逻辑模型。然后从系统逻辑模型出发,探索若干种可供选择的主要解法,也就是系统实现方案。分析每种解法可行性和利弊,从而判定系统的目标和规模是否现实,系统完成后带来的效益是否达到值得投资开发这个系统的程度。
可行性的研究实际上是一次大大简化了的系统分析和系统设计的过程,即以抽象的方式进行分析和研究。
成本-效益分析的目的是从经济角度评价开发一个新的软件项目是否可行,从而帮助客户正确地作出是否投资于这项开发工程的决定。
3. 软件开发模型不包括()
A.瀑布模型
B.用例模型
C.增量模型
D.螺旋模型
★考核知识点:软件开发模型
参见讲稿章节:2.3、2.4
附1.1.3:(考核知识点解释)
经典的软件开发模型有瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型等。
瀑布模型也称生存周期模型或线性顺序模型,是W·Royce于1970年首先提出来的。它是将软件生存周期各个活动规定为依线性顺序连接的若干阶段的模型。
快速原型(rapid prototype)是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。
增量模型也称为渐增模型,是瀑布模型的顺序特征和快速原型法的迭代特征相结合的产物,是一种非整体开发的模型。
螺旋模型加入了瀑布模型与增量模型都忽略了的风险分析,即将两种模型结合起来,弥补了两种模型的不足。螺旋模型是一种迭代模型,它把开发过程分为几个螺旋周期,每迭代一次,螺旋线就前进一周。它是一种风险驱动的模型。基本思想:使用原型及其他方法来尽量降低风险。简单理解,在每个阶段之前都增加了风险分析过程的快速原型模型。
喷泉模型是典型的面向对象生命周期模型。以用户需求为动力,以对象作为驱动的模型,适合面向对象的开发方法。
(二)、多项选择
1.结构化程序设计所使用的结构有()
A. 顺序
B. 选择
C. 重复
D. GOTO
★考核知识点:结构化程序设计
参考讲稿章节:6.1
附1.2.1(考核知识点解释):
结构程序设计的概念最早是由E.W.Dijkstra在1965年召开的IFIP(国际信息处理联合会)会议上提出的,他指出:“可以从高级语言中取消GOTO语句”,“程序的质量与程序中所包含的GOTO语句的数量成反比”。1966年,Bohm和Jacopini证明了程序设计语言中,只用3种基本控制结构就能实现任何单入口、单出口的程序。这3种基本的控制结构是顺序、选择和循环。
结构化程序设计经典定义: “如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。”
2. 面向对象系统的逻辑设计模型划分为若干部分,分别对应组成目标系统的()。
A. 问题域子系统
B. 人机交互子系统
C. 任务管理子系统
D. 数据管理子系统
★考核知识点: 面向对象的系统设计
参考讲稿章节:12.2
附1.2.2(考核知识点解释):
面向对象系统的逻辑设计模型可以划分为4部分,分别对应组成目标系统的4个子系统。分别是:问题域子系统、人机交互子系统、任务管理子系统、数据管理子系统。
二、主观部分:
(一)、名词解释
1. 软件工程
★考核知识点: 软件工程的定义
参考讲稿章节:1.3
附2.1.1(考核知识点解释):
软件工程是指导计算机软件开发和维护的一门工程学科,采用工程的概念、原理、技术和方法来开发和维护软件。
2. 软件过程
★考核知识点: 软件过程
参考讲稿章节:2.1
附2.1.2(考核知识点解释):
软件过程(software process)是为了获得高质量所需要完成的一系列任务的框架,它规定了完成多项任务的工作步骤。
3. 软件生命周期
★考核知识点: 软件生命周期
参考讲稿章节:2.2
附2.1.3(考核知识点解释):
软件生命周期是指某一软件项目被提出来并着手实现开始直到该软件报废或停止使用为止的生命周期,又称软件生存期。
4. 数据流图
★考核知识点: 数据流图
参考讲稿章节:3.3
附2.1.4(考核知识点解释):
数据流图(Data Flow Diagram, DFD) 用于表示系统逻辑模型的一种工具,它以直观的图形清晰地描述了系统数据的流动和处理过程。数据流图是系统逻辑功能的图形展示。
5. 数据字典
★考核知识点: 数据字典
参考讲稿章节:3.4
附2.1.5(考核知识点解释):
数据字典是关于数据的信息集合,也是对数据流图包含的所有元素的定义的集合。
6. 模块
★考核知识点:软件设计的概念和原理
参见讲稿章节:5.2
附2.1.6:(考核知识点解释)
模块,又称“组件”,是软件结构的基础,是软件元素,是能够单独命名、独立完成一定功能的程序语句的集合。
7.静态测试
★考核知识点:软件测试方法
参见讲稿章节:8.2
附2.1.7:(考核知识点解释)
静态测试,就是静态分析,指被测程序不在机器上运行,对模块的源代码进行研读,查找错误或收集一些度量数据,检测只进行特性分析。
8.动态测试
★考核知识点:软件测试方法
参见讲稿章节:8.2
附2.1.8:(考核知识点解释)
动态测试是指通过运行程序发现错误。
9.黑盒测试
★考核知识点:软件测试方法
参见讲稿章节:8.2
附2.1.9:(考核知识点解释)
黑盒测试,也称功能测试或数据驱动测试。它不考虑程序内部结构和处理过程。把被测程序看成一个黑盒子,只在软件接口处进行测试。测试者只知道该程序输入和输出之间的关系或程序的功能,依靠能够反映这一关系和程序功能的需求规格说明书考虑确定测试用例和推断测试结果的正确性,检查程序是否满足功能要求 黑盒测试被用来证实软件功能的正确性和可操作性。
10.白盒测试
★考核知识点:软件测试方法
参见讲稿章节:8.2
附2.1.10:(考核知识点解释)
白盒测试,也称结构测试或逻辑驱动测试。白盒测试法与黑盒测试法不同,测试人员将程序视为一个透明的白盒子,测试人员需了解程序的内部结构和处理过程。以检查处理过程的细节为基础,要求对程序的结构特性做到一定程度的覆盖,对程序中的所有逻辑路径进行测试,并检验内部控制结构是否有错,确定实际的运行状态与预期的状态是否一致。
11. 集成测试
★考核知识点:集成测试
参见讲稿章节:8.9
附2.1.11:(考核知识点解释)
集成测试是在单元测试基础上,将所有模块按要求组装成一个完整的系统而进行的测试。集成测试用于组装软件的一种系统的技术,是要把模块按照设计要求组装起来的同时进行测试,用以发现和接口相联系的问题。
12. 确认测试
★考核知识点:确认测试
参见讲稿章节:8.10
附2.1.12:(考核知识点解释)
确认测试,又称为有效性测试或验收测试,是从质量的角度,在功能、性能、可靠性、易用性等方面对软件做全面的质量检测。
13. 系统测试
★考核知识点:系统测试
参见讲稿章节:8.10
附2.1.13:(考核知识点解释)
系统测试是将经过单元测试、集成测试、确认测试以后的软件,作为计算机系统中的一个组成部分,需要与系统中的硬件、外部设备、支持软件、数据及操作人员结合起来,在实际运行环境下对计算机系统进行一系列的严格有效的测试来发现软件的潜在问题,以保证各组成部分不仅单独的正常运行,而且在系统各部分统一协调下也能正常运行。
系统测试不同于功能测试。功能测试主要是验证软件功能是否符合用户需求,并不考虑各种环境及非功能问题,如安全性、可靠性、性能等,而系统测试是在更大范围内进行的测试,着重对系统的性能、特性进行测试。
14. 封装
★考核知识点:面向对象基本概念
参见讲稿章节: 10.2
附2.1.14:(考核知识点解释)
封装指把对象的属性和操作结合成一个独立的系统单位,并尽可能隐藏对象的内部细节,又称信息隐藏。通过对象的封装特性,用户只能看到对象封装界面上的信息,对象内部对用户是隐蔽的,有效地实现了模块化功能。封装的目的是将对象的使用者与设计者分开。
15. 构件
★考核知识点:构件
参见讲稿章节: 11.6
附2.1.15:(考核知识点解释)
构件是一个相对独立的可装配的物理块,一般作为一个独立的文件存在。构件具有确定的接口,相互之间可以调用,构件之间存在依赖关系。构件定义了一个系统的功能,一个构件是一个或多个类的实现。
(二)、简答
1. 简述软件危机的表现形式,产生软件危机的原因,软件危机的解决途径
★考核知识点:软件危机
参见讲稿章节:1.2
附2.2.1(考核知识点解释):
软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
软件危机的表现形式:
1) 对软件开发成本和研制进度的估计常常很不精确。
2) “已完成”的软件不能满足用户要求。
3) 软件产品质量差,可靠性得不到保证。
4) 软件产品可维护性差。
5) 软件成本在计算机系统总成本中所占的比例逐年上升。
6) 软件开发生产率提高的速度,远远跟不上计算机应用速度普及深入的趋势。
产生软件危机的原因:
1) 软件是计算机系统中的逻辑部件,软件产品往往规模庞大,结构复杂。
2) 软件开发的管理困难。
3) 软件开发费用不断增加,维护费用急剧上升,直接威胁计算机应用的扩大。
4) 软件开发技术落后。
5) 生产方式落后。
6) 开发工具落后,生产效率提高缓慢。
软件危机的解决途径:
1) 首先应该对计算机软件有一个正确的认识,彻底清除“软件就是程序”的错误观念。
2) 要使用好的开发技术和方法,并且要不断研究探索更好更有效的技术和方法。尽快消除在计算机系统早期发展阶段形成的一些错误观念和作法。
3) 要有良好的组织、严密的管理,各类人员要相互配合,共同完成任务。充分认识软件开发不是某种个体劳动的神秘技巧。
2. 简述软件工程的基本目标。
★考核知识点:软件工程
参见讲稿章节: 1.3
附2.2.2:(考核知识点解释)
软件工程是指导计算机软件开发和维护的一门工程学科,采用工程的概念、原理、技术和方法来开发和维护软件。
软件工程的宗旨是为了提高软件生产率、降低生产成本,以较小的代价获得高质量的软件产品。
软件工程的基本目标包括
1) 付出较低的开发成本
2) 达到用户要求的全部软件功能
3) 取得较好的软件性能
4) 具有较好的易用性、可重用性和可移植性
5) 需要较低的维护费用,较高的可靠性
6) 能按时完成开发工作,及时交付用户使用
3.什么是软件的生命周期?典型的软件生命周期包括哪些阶段?软件生命周期中软件开发时期包含哪些阶段?并简述各阶段的主要任务。
★考核知识点:软件生命周期
参见讲稿章节: 2.2
附2.2.3:(考核知识点解释)
软件生命周期是借用工程中产品生命周期的概念而得来的,是指某一软件项目被提出来并着手实现开始直到该软件报废或停止使用为止的生命周期,又称软件生存期。
软件的生命周期一般分为软件定义、软件开发和软件运行三个时期。
软件定义时期一般有问题定义、可行性研究和需求分析三个阶段;软件开发时期有概要设计、详细设计、编码和单元测试、综合测试阶段;软件维护时期完成运行维护阶段。
软件开发时期通常由下述4个阶段组成:概要设计、详细设计、编码和单元测试、综合测试。其中前两个阶段又称为系统设计,后两个阶段又称为系统实现。
(1)概要设计又称为总体设计、初步设计、逻辑设计或高层设计。这个阶段是要概括地回答“怎样实现目标系统?”,主要任务是将需求转变为软件的表示形式。开发人员要把确定的各项功能需求转换成需求的体系结构,即从需求规格说明书导出软件结构图(体系结构设计),确定由哪些模块组成以及模块之间的关系(接口设计、组件设计),同时还要设计该项目的应用系统的总体数据结构和数据库结构(数据库设计),撰写出总体设计说明书。
(2)详细设计也称为模块设计、物理设计或低层设计,详细设计阶段的任务是要回答“应该怎样具体地实现这个系统?”,为概要设计阶段得到的软件结构图中的每个模块完成的功能进行具体描述、内部特征,要把功能描述转变为精确的、结构化的过程描述,即确定实现模块功能所需要的算法和数据结构,并用相应的详细设计工具表示出来,撰写软件的详细设计说明书。
(3)编码和单元测试这个阶段的关键任务将软件设计转换成程序代码,写出正确的,容易理解、容易维护的程序模块。程序员应该根据目标系统的性质和实际环境,选取一种适当的高级程序设计语言(必要时用汇编语言),把详细设计的结果翻译成用选定的语言书写的程序,并且仔细测试编写出的每一个模块。最终提交源程序、详尽的程序说明和单元测试报告。
(4)测试是开发时期的最后一个阶段,是保证软件质量的重要手段。这个阶段的关键任务是通过各种类型的测试(及相应的调试)使软件达到预定的要求。最基本的测试是集成测试和验收测试。必要时还可以再通过现场测试或平行运行等方法对目标系统进一步测试检验。集成测试是根据设计的软件结构,把经过单元测试检验的模块按某种选定的策略装配起来,在装配过程中对程序进行必要的测试。验收测试则是按照规格说明书的规定(通常在需求分析阶段确定),由用户(或在用户积极参加下)对目标系统进行验收。最终提交测试计划、详细测试方案以及实际测试结果等。
4. 简述软件模块设计准则。
★考核知识点:软件结构设计准则
参见讲稿章节:5.4
附2.2.4:(考核知识点解释)
软件模块设计需要遵循的准则如下:
1)降低模块之间的耦合性,提高模块的内聚性。
2)模块结构的深度、宽度、扇出和扇入应适当
3)模块的作用范围应该在控制范围内
4)模块接口设计要简单,以便降低复杂程度和冗余度
5)设计功能可预测并能得到验证的模块
6)适当划分模块规模,以保持其独立性
5. 有哪些常用的黑盒测试方法?有哪些常用的白盒测试方法?
★考核知识点:白盒测试、黑盒测试
参见讲稿章节:8.3-8.7
附2.2.5:(考核知识点解释)
用黑盒技术设计测试用例一般有等价类划分、边界值分析、错误推测和因果图4种方法。
常用的白盒测试方法包括逻辑覆盖测试法、循环测试法、基本路径测试法。在逻辑覆盖法中大致又可以分为:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖和条件组合覆盖。
6. 什么是类,什么是对象,类和对象是什么关系?
★考核知识点:面向对象的基本概念,对象、类及类之间关系
参见讲稿章节: 10.2、10.3
附2.2.6:(考核知识点解释)
类是具有相同属性和操作的一组相似对象(实体)的集合。也就是说,类是对具有相同属性和行为的一个或多个对象的描述,通常在这种描述中也包括对怎样创建该类的新对象的说明。类为属于该类的全部对象提供了统一的抽象描述。同类的对象具有相同的属性和方法。
对象是对问题域中客观存在的事物的抽象,是一组属性和在这些属性上的操作的封装体。
在应用领域中有意义的、与所要解决的问题有关系的任何事物都可以作为对象,它既可以是具体的物理实体的抽象,也可以是人为的概念,或者是任何有明确边界和意义的东西。
由于客观世界中的实体通常都既具有静态的属性,又具有动态的行为,因此,面向对象方法学中的对象是由描述该对象属性的数据以及可以对这些数据施加的所有操作封装在一起构成的统一体。
类给出了属于该类的全部对象的抽象定义,而对象则是符合这种定义的一个实体。
因此,对象又称为是类的一个“实例(Instance)”,类又称为是对象的“模板(Template)”。
另外,类是静态的,类的语义和类之间的关系在程序执行之前已经定义,但对象是动态的,在程序执行过程中可以动态地创建和删除对象;
类代表一类抽象的概念或事物,对象是在客观世界中实际存在的类的实例。
7. 面向对象分析主要建立哪几种模型?各自的特点是什么?
★考核知识点:面向对象的分析过程
参见讲稿章节: 11.1
附2.2.7:(考核知识点解释)
面向对象分析过程,首要的是先建模,通常需要建立4 种形式的模型:
由用例和场景表示的用例(功能)模型;
用类和对象表示的对象(静态)模型;
由状态机图和交互图表示的动态行为模型;
由构件图和部署图表示的物理实现模型。
这4 种模型从4 个不同的角度描述目标系统,从不同侧面反映系统的实质内容,总体可以全面反映对目标系统的需求。
其中对象(静态)模型是上述分析阶段几个模型的核心,是动态模型和功能模型的框架。
用例(功能)模型往往是从用户需求的角度来描述系统,指明系统应该“做什么”,直接反映用户对目标系统的需求,描述数据在系统中的变换过程及系统的功能。
对象模型是面向对象方法最基础、最核心,也是最重要的模型。无论解决什么问题,都需要从客观世界对象及对象之间的联系中抽象出有价值的信息,用于表示静态的、结构化的、系统的数据性质。该模型主要关心系统中对象的结构、属性与操作,以及对象与对象之间关系的映射。对象模型是对模拟客观世界的对象及对象彼此间的关系静态结构的描述,为建立动态模型和用例(功能)模型提供了实质性的框架。
一旦建立起对象模型之后,就需要考察对象的动态行为。动态模型可以借助于交互(顺序图或通信图)或状态机(状态图或活动图)进行建模。交互主要用于对共同工作的群体对象的行为建模,而状态机则是对单个对象的行为建模。动态模型表示瞬时的、行为化的、系统的“控制”性质,定义对象模型中对象的合法变化序列,描述系统中不同对象类之间的交互。当问题系统涉及交互作用和时序,如用户界面交互和过程控制时,动态模型是重点。
物理实现模型关注的是系统实现过程的建模常常用构件图和部署图表示静态的物理实现模型,用交互图和状态机描述动态实现模型。物理实现模型从实现子系统和实现元素(即构件)的角度来表现系统实现的物理组成。