软件工程期末复习(详细)
1 软件工程概述(10%)
书上题目
1.1 简述软件的定义及特点
定义:软件 = 程序 + 数据 + 文档资料
程序:完成特定功能和满足性能要求的指令序列
数据:程序运行的基础和操作对象
文档:与程序开发维护和使用有关的图文资料
特点:
- 软件是一种逻辑实体,具有抽象性
- 软件是设计开发的,不是生产制作的
- 软件在使用过程中没有磨损老化问题
- 对计算机硬件依赖性
- 软件手工开发方式
- 软件本身复杂性高
- 软件的高成本
- 规模大
- 应用范围广
1.2 什么是软件工程
软件工程:是指导计算机软件开发和维护的一门工程学科;
1.3 软件工程的目标是什么? 软件工程有哪些原则?
目标:
- 付出较低的开发成本,在规定的时限内满足用户的功能、性能要求
- 开发的软件移植性要比较好
- 易于维护且维护费用较低
- 软件系统的可靠性高
原则:
- 模块化
- 抽象和信息隐藏
- 模块的高内聚和低耦合
- 确定性
- 一致性
- 完备性
1.4什么是软件生存周期?软件生存周期包括哪几个阶段?
复习
1.5软件工程概念
将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中。
主要思想:强调在软件开发过程中应用工程化原则的重要性。
1.6软件工程方法学包含3个基本要素是什么?
方法,工具和过程。
工具 :为软件工程方法提供自动或半自动的软件支撑环境。计算机辅助软件工程(CASE)。
方法:提供软件开发的各种方法。包括项目计算与估算方法、需求分析和设计方法、编程测试方法、维护方法等。
过程:为了获得高质量软件需要完成的一系列任务的框架,规定了完成各项任务的步骤
1.7软件生命周期划分为哪些阶段?各阶段的基本任务?
分为软件定义、软件开发及软件运行维护3个阶段。
软件定义:
软件定义包括可行性研究和详细需求分析过程,任务是确定软件开发工程必须完成的总目标,具体可分为问题定义、可行性研究、需求分析等。
软件开发:
软件开发阶段指软件的设计与实现,可分为概要(总体)设计、详细设计、编码、测试等。
软件运行和维护:
软件运行就是把软件产品移交给用户使用。软件投入运行后的主要任务是使软件持久满足用户的要求。
软件维护是对软件产品进行修改或对软件需求变化做出响应的过程,也就是尽可能地延长软件的寿命。
(1)问题定义:系统分析员就问题性质、工程目标和规模等,提出书面报告。
(2)可行性研究与计划:确定问题是否有行得通的解决方法。是在较高抽象层次上,进行的分析和设计过程。目的是更准确地确定工程的规模和目标,更准确地分析成本/效益,最终决定是否实施项目。
(3)需求分析:确定目标系统必须具备哪些功能。
(4)总体设计:描述每种可能的实现方案,估计每种方案的成本和效益;设计软件的体系结构。
(5)详细设计:设计出软件的详细规格说明,为编码工作提供“蓝图”。
(6)编码和单元测试
(7)综合测试
①集成测试:将结构单元集成起来,进行测试。
②验收确认测试:按需求规格说明书,用户进行测试。
(8)使用和维护:使软件系统持久地满足用户不断变化的需求。
通常有四类活动:
①改正性维护:修改已发现的错误。
②适应性维护:为适应变化了的环境,而修改软件。
③完善性维护:根据用户的要求,改进和扩充软件,使之完善。
④预防性维护:为将来的维护活动作准备,而修改软件。如为提高软件的可维护性,而进行的修改。
1.8软件过程模型都有哪些
瀑布模型 原型模型 螺旋模型 喷泉模型 构件组装模型 增量模型
1.9瀑布模型有什么特点
(1)阶段之间具有顺序性和依赖性
①前一阶段的工作完成后,才能开始下一阶段工作。
②前一阶段的输出文档就是后一阶段工作的基础。
③某一阶段发现错误要追溯到前面阶段,代价较大。
(2)尽可能地推迟实现
①程序代码只是软件的一部分,而不是全部。
②清楚地区分分析、设计与实现,尽可能推迟软件实现。
(3)确保质量
①每阶段都必须完成规定的文档。
②每阶段结束前,都要对所完成的文档进行评审,及早改正错误,评审通过才能进入下一阶段。
2 可行性研究(5%)
书上题目
2.1 可行性研究的目的是什么? 可行性研究的任务包括哪些?
目的:
说明该软件开发项目的实现在技术上、经济上和社会条件上的可行性;评述为合理地达到开发目标可能选择的各种方案”。
任务:
“了解客户的要求及现实环境,从技术、经济和社会因素等方面研究并论证本软件项目的可行性,编写可行性研究报告,制定初步项目开发计划。”
复习
2.2从哪些方面进行可行性研究
- 经济可行性
- 技术可行性
- 法律可行性(社会可行性)
- 运行可行性
- 方案可行性
2.3系统流程图的作用?
- 制作系统流程图的过程是系统分析员全面了解系统业务处理概况的过程,它是系统分析员做进一步分析的依据。
- 系统流程图是系统分析员、管理员、业务操作员相互交流的工具。
- 系统分析员可直接在系统流程图上画出可以有计算机处理的部分。
- 可利用系统流程图来分析业务流程的合理性。
2.4数据流图的四要素是什么?画数据流图有哪些注意事项?
四要素:
- 外部实体,系统以外又与系统有联系的人或事务,它表达了该系统数据的外部来源和去处;
- 数据处理,对数据的逻辑处理能力,也就是对数据的交换功能;
- 数据存储,某种数据保存后的逻辑统称,不是指保存数据的物理地点和物理介质;
- 数据流,处理功能的输入或输出(箭头表示数据流向)。
注意事项:
- 适当地为数据流、加工、数据存储、外部实体命名,名字反映该成分的实际含义,避免空洞的名字。
- 画数据流而不要画控制流。
- 每条数据流的输入或输出是加工。
- 一个加工的输出数据流不应与输入数据流同名,即使它们的组成成分相同。
- 允许一个加工有多条数据流流向另一个加工,也允许一个加工有两个相同的输出数据流流向两个不同的加工。
- 保持父图与子图的平衡。也就是说,父图中某加工的输入输出数据流必须与它的子图的输入输出数据流在数量和名字上相同。如果父图中的一个输入(输出)数据流对应于子图中几个输入(或输出)数据流,而子图中组成这些数据流的数据项全体正好是父图中的这一个数据流,那么它们仍然算是平衡的。
- 在自顶向下的分解过程中,若一个数据存储首次出现时只与一个加工有关,那么这个数据存储应作为这个加工的内部文件而不必画出。
- 保持数据守恒。也就是说,一个加工所有输出数据流中的数据必须影从该加工的输入数据流中直接获得或者是通过该加工能产生的数据。
- 每个加工必须既有输入数据流,又有输出数据流。
- 在整套数据流图中,每个数据存储必须既有读的数据流,又有写的数据流。但在某一张子图中可能只有读没有写,或者只有写没有读。
3需求分析(15%)
复习
3.1需求分析的任务是什么?
**基本任务:**对目标系统提出完整、准确、清晰、具体的要求。
主要内容:
- 确定对系统的综合要求
- 分析系统的数据要求
- 导出系统的逻辑模型
- 修正系统的开发计划
3.2系统的综合需求有哪些
- 系统功能要求:确定系统必须完成的所有功能。
- 系统性能要求: 如系统联机响应时间、吞吐率、连续运行时间、可靠性、安全性、操作简便等。
- 运行要求:系统运行时所处环境的要求,如硬件平台、软件平台、网络环境、通信接口等。
- 可扩展性要求:应明确列出将来可能会提出来的扩展要求。这是设计目标系统时要考虑的因素。
3.3在需求分析中要建立哪些模型?其作用是什么?
- 数据模型
作用:描述系统工作前的数据来自何处,工作中的数据暂存什么地方,工作后的数据放到何处,以及这些数据之间 的关联,即对系统的数据结构进行定义。
- 功能模型
作用:描述系统能做什么,即对系统的功能、性能、接口和界面进行定义。
- 行为模型
作用:描述系统在何时、何地、由何角色、按什么业务规则去做,以及做的步骤或流程,即对系统的操作流程进行 定义。
3.4结构化的需求分析描述工具有哪些?
数据流图(DFD)、数据字典(DD)、判定表、判定树、结构化语言( PDL)、层次方框 图、Warnier图、IPO图、控制流图(CFD)、控制说明(CSPE)、状态转换图(STD)和实体-关系图(E-R)等
3.5什么是结构化分析方法?结构化分析建模采用的主要模型有哪些?
结构化分析方法:
是面向数据流的、自顶向下逐步求精进行需求分析的方法,它按照软件内部数据传递、变换的关系,自顶向下逐层分解,直到找到满足功能要求的所有可实现的软件成分为止。
主要模型:
- 实体-关系图(E-R)
- 数据流图(DFD)
- 状态转换图(STD)
4 概要设计/总体设计(10%)
书上题目
4.1说明耦合的种类及设计原则
耦合类型(由强到弱)为:
- 内容耦合
- 公共耦合
- 控制耦合
- 数据耦合
设计原则:
尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,不要使用内容耦合
4.2说明内聚的种类及设计原则
内聚的类型(由低到高)为:
- 偶然内聚
- 逻辑内聚
- 时间内聚
- 过程内聚
- 通信内聚
- 顺序内聚
- 功能内聚
设计原则:
力求做到高内聚,通常中内聚也可以使用,其效果与高内聚相类似,禁止使用低内聚。
复习
4.3总体设计的主要任务是什么?
通过仔细分析软件规格说明,适当地对软件进行功能分解,从而把软件划分为模块,并且设计出完成预定功能的模块结构;
4.4什么是模块化?模块化有什么优点?
模块化:
就是把程序划分成可独立命名且独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求
模块化优点:
- 可维护性
- 可测试性
4.5什么是耦合?有哪些类型?
耦合:
对一个软件结构内不同模块之间互连程度的度量。
类型(由强到弱):
- 内容耦合
- 公共耦合
- 控制耦合
- 数据耦合
4.6什么是内聚?有哪些类型?
内聚:
标志着一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然拓展。
类型(由低到高):
- 偶然内聚
- 逻辑内聚
- 时间内聚
- 过程内聚
- 通信内聚
- 顺序内聚
- 功能内聚
4.7软件设计有哪些启发式规则?
- 改进软件结构提高模块独立性
- 模块规模应该适中
- 深度、宽度、扇出和扇入都应适当
- 模块的作用域应该在控制域之内
- 力争降低模块接口的复杂程度
- 设计单入口单出口的模块
- 模块功能应该可以预测
4.8描述软件结构有哪些图?
- 层次图
- HIPO图
- 结构图
5详细设计(7%)
书上题目
5.1简单比较几种常用详细设计的工具的优缺点
- 程序流程图,又称程序框图。
优点:
对控制流程的描绘很直观,便于初学者掌握。
缺点:
⑴程序流程图本质上不是逐步求精的好工具,它诱使程序员过早地考虑程序的控制流程,而不去考虑程序的全局结构
⑵程序流程图中用箭头代表控制流,因此程序员不受任何约束,可以完全不顾结构程序设计的精神,随意转移控制
⑶程序流程图不易表示数据结构
- 盒图(N-S图)。
同程序流程图相比,它以一种结构化的方式严格地限制从一个处理到另一个处理的控制转移。
- PAD问题分析图。主要优点有~⑴使用表示结构化控制结构的PAD符号所设计出来的程序必然是结构化程序 ⑵PAD图所描述的程序结构十分清晰 ⑶用PAD图表现程序逻辑,易读、易懂、易记 ⑷很容易将PAD图转换成高级语言源程序 ⑸既可用于表示程序逻辑,也可用于描述数据结构 ⑹PAD图的符号支持自顶向下、逐步求精方法的使用
- 过程设计语言PDL。也称为伪码。
优点
⑴可以作为注释直接插在源程序中间
⑵可以使用普通的正文编辑程序或文字处理系统,很方便地完成PDL的书写和编辑工作
⑶已经有自动处理程序存在,而且可以自动由PDL生成程序代码。
缺点:
不如图形工具形象直观,描述复杂的条件组合与动作间的对应关系时,不如判定表或判定树清晰简单
- 判定表
- 判定树
5.2将如图所示的流程图改写成N-S图或PAD图表示(未做)
复习
5.3详细设计的主要任务是什么?
- 模块的逻辑结构设计‘’
- 模块的数据设计
- 模块的结构设计
- 模块的测试用例设计
- 模块的其他设计
- 编写详细设计说明书
5.4结构程序设计的基本原理是什么?
- 抽象
- 模块化
- 信息屏蔽
- 模块独立
5.5详细设计有哪些工具?
- 程序流程图
- PAD图
- 盒图
6 面向对象技术(25%)
书上题目
6.1什么是面向对象方法学?试阐述这种方法学的优缺点。
面向对象软件开发方法:
是一种运用对象、类、继承、封装、聚合、消息传送、多态性等概念来构造系统的软件开发方法。面向对象方法的基本思想是从现实世界中客观存在的事物出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式。
优点:
- 与人们习惯的思维方法一致
- 稳定性好
- 可重用性好
- 可维护性好。
- 较易开发大型软件产品
缺点:
对系统开发的人力、财力和物力要求比较高;由于缺乏全局性控制,会造成系统结构不合理、各部分关系失调等问题。
6.2什么是面向对象?面向对象方法的特点是什么?为什么要用面向对象方法开发软件?
面向对象:
面向对象(Object Oriented)是软件开发方法,一种编程范式。面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。面向对象=对象+类+继承+通信。
特点:
封装性,继承性,多态性
1.封装性:封装使数据和加工该数据的方法(函数)封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性(对象能接受哪些消息,具有那些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。
2.继承性:继承性是子类自动共享父类之间数据和方法的机制。它由类的派生功能体现。一个类直接继职其它类的全部描述,同时可修改和扩充。
3.多态性:对象根据所接收的消息而做出动作。同一消息为不同的对象接受时可产生完全不同的行动,这种现象称为多态性。利用多态性用户可发送一个通用的信息,而将所有的实现细节都留给接受消息的对象自行决定,如是,同一消息即可调用不同的方法。
原因:
(1)简单性
因为面向对象语言里的对象都是反映的真实世界的对象,所以复杂性降低了,而且使网站或软件开发程序的结构也更加清晰。
(2)重用性高、开发效率高
采用OOP可以只编写一次代码,之后在软件或网站开发的整个过程中反复重用。而在非OOP的情况下,则可能要反复多次编写具有同样功能的代码。所以OOP减少了编写应用软件或网站程序代码的总量,从而加快了软件开发的进度,同时降低了程序中的错误量。
(3)容易修改和维护
OOP 的代码可以进行分别修改、扩展或其他维护, 这样就使查找问题、修复问题或者为软件和网站添加新的功能变得简单,同时类内部的改动不会影响软件和网站程序的其他部分。随着项目越来越大,使用OOP的优越性会更多的显示出来,例如,在开发大型的在线应用软件、网站等项目中。相比而言,用面向过程的方法,也可以写出一些可复用的系统,但是这需要组织好系统低层的复杂的数据结构,这对程序员的技术要求就很高。另外,系统版本的升级过程也使面向过程的编程维护更加困难。
(4)结构明细、可读性强
非OOP的语言的源代码可读性较差,要看大量的函数,然后体会其中的关系,OOP通过读函数名和类名可以较快的理解软件或网站开发程序中源代码之间的关系。
(5)安全性
由于封装,隐藏了重要的数据和实现细节,使得软件或网站开发程序代码更加易于维护,更加安全。
6.3面向对象设计应遵守哪些准则?简述每条准则的内容,并说明这些准则的必要性
1.模块化:面向对象的开发方法支持把系统分解成模块的设计原则,因为对象从某种意义上说就是模块,而且是一种把数据和操作紧密结合在一起的模块。
2.抽象:抽象是指强调实体的本质、内在的属性,而忽略了一些无关紧要的属性。
3.信息隐藏:信息隐藏在面向对象的方法中是指封装性,封装性是保证软件部件具有优良模块性的基础。封装性是指将对象的属性及操作(服务)结合为一个整体,尽可能屏蔽对象的内部细节,软件部件外部对内部的访问只能通过接口实现。
4.弱耦合:按照抽象与封装性,弱耦合是指子系统之间的联系应尽量少。子系统应具有良好的接口,子系统通过接口与系统的其他部分联系。
5.强内聚:内聚衡量的是一个模块内各个元素彼此结合的紧密程度,也可以理解为一个构件内各个元素对完成一个定义明确的目标所做出的贡献程度。面向对象设计中有以下3种内聚:
①服务内聚;②类内聚;③一般/特殊内聚
6.可扩充性:可扩充性是指面向对象易扩充的设计。
7.可集成性:面向对象的设计过程会产生便于将单个构件集成为完整设计的设计。
8.支持重用:软件重用是提高软件开发生产率和目标系统质量的重要途径。重用基本上从设计阶段开始,它有两方面含义:一是尽量使用已有的类;二是如果确实需要创建新类,则在设计这些新类的协议时,应该考虑将来的可重复使用性。
6.4UML的定义是什么?他的组成部分有哪些?
定义:
UML(Unified Modeling Language 统一建模语言) 是为软件系统的制品进行描述(specifying)、可视化(visualizing)、构造(constructing)、文档化(documenting) 的一种语言。
组成部分:
UML中有九种图(diagram)和五种视图(view)。
九种图包括:用例图、类图、对象图、状态图、顺序图、协作图、活动图、构件图和部署图。
用来观察系统的五种视图有:用例视图、逻辑视图、构件视图、并发视图和部署图。
复习
6.5面向对象方法的四个要点?
面向对象的4个要点是:对象分解、数据专有、继承、封
装性。
- 对象分解: 认为客观世界是由各种对象组成的。
2)数据专有,方法共享:把所有对象都划分成各种对象
类 (简称为类, class) , 每个对象类都定义了一组数据和一
组方法。
6.6面向对象分析的3个子模型、5个层次是什么?
三个模型:
1.描述系统数据结构的对象模型,
2.描述系统控制结构的动态模型
3.描述系统功能的功能模型。
五个层次:
主题层、类与对象层、结构层、属性层、服务层
6.7面向对象建模中要建立哪三大模型?各自的作用及关系如何?
1.功能模型:表达系统的详细需求,为软件的进一步分析和设计打下基础.在面向对象方法中,由用例图和场景描述组成.
2.对象模型:表示静态的、结构化的系统"数据〞性质.描述现实世界中实体的对象以与它们之间的关系,表示目标系统的静态数据结构.在面向对象方法中,类图是构建对象模型的核心工具.
3.动态模型:描述系统的动态结构和对象之间的交互,表示瞬时的、行为化的系统的"控制〞特性.面向对象方法中,常用状态图、顺序图、合作图、活动图构建系统的动态模型.
关系:
在面向对象方法学中,对象模型是最基本最重要的,为其他两种模型奠定了基础,我们依靠对象模型完成三种模型的集成。下面扼要地叙述三种模型之间的关系:
(1)针对每个类建立的动态模型,描述了类实例的生命周期或运行周期。
(2)状态转换驱使行为发生,这些行为在数据流图中被映射成处理,在用例图中被映射成用例,它们同时与类图中的服务相对应。
(3)功能模型中的处理(或用例)对应于对象模型中的类所提供的服务。
(4)数据流图中的数据存储,以及数据的源点/终点,通常是对象模型中的对象。
(5)数据流图中的数据流,往往是对象模型中对象的属性值,也可能是整个对象。
(6)用例图中的行为者,可能是对象模型中的对象。
(7)功能模型中的处理(或用例)可能产生动态模型中的事件。
(8)对象模型描述了数据流图中的数据流、数据存储以及数据源点/终点的结构。
(1)与功能模型的关系:对象模型展示了功能模型中的动作者、数据存储和流的结构,动态模型展示了执行加工的顺序。
(2)与对象模型的关系:功能模型展示了类上的操作和每个操作的变量,因此它也表示了类之间的“供应者一客户"关系;动态模型展示了每个对象的状态以及 它接收事件和改变状态时所执行的操作。
(3)与动态模型的关系: 功能模型展示了动态模型中未定义的不可分解的动作和活动的定义,对象模型展示了是谁改变了状态和承受了操作。
6.8复杂对象模型的5个层次是什么?
答:复杂问题(大型系统)的对象模型由5个层次组成,即主题层、类-&-对象层、结构层、属性层和服务层。
(1)类-&-对象层:定义类和属性。在这个层次将分析与待开发软件对应的各个现实世界的实体,并从中抽象出类和对象。
(2)结构层:定义对象和类之间的层次结构关系,如一般-特殊结构(即继承结构)、整体-部分结构(即组合结构)。
(3)属性层:定义属性。为类和对象层中抽取出来的各个类和对象设计静态属性和它们之间的关系。
(4)服务层:定义对象和类的动态属性以及对象之间的消息通信。
(5)主题层:主题是指导读者理解大型、复杂模型的一种机制。定义若干个主题,把有关的对象分别划归不同的主题,每个主题构成一个子系统。
6.9UML的主要图形有哪些?各自的作用是什么?
1、用例图
说明的是谁要使用系统以及使用该系统可以做些什么。UML9种图中一个用例图包含了多个模型元素,如系统、参与者和用例,并且显示了这些元素之间的各种关系,如泛化、关联和依赖。
2、活动图
UML9种图中活动图能够演示出系统中哪些地方存在功能,以及这些功能和系统中其他组件的功能如何共同满足前面使用用例图建模的商务需求。
3、状态图
可以捕获对象、子系统和系统的生命周期。它们可以告知一个对象可以拥有的状态,并且事件(如消息的接收,时间的流逝、错误、条件为真等)会怎样随着时间的推移来影响这些状态。一个状态图应该连接到所有具有清晰的可标志状态和复杂行为的类;该图可以确定类的行为以及该行为如何根据当前的状态而变化,也可以展示哪些事件将会改变类的对象的状态。
4、顺序图
也叫做序列图是用来显示参与者如何以一系列顺序的步骤与系统的对象交互的模型。UML9种图中顺序图可以用来展示对象之间是如何进行交互的。顺序图将显示的重点放在消息序列上,即消息是如何在对象之间被发送和接收的。
5、类图
能够让我们在正确编写代码以前对系统有一个全面的认识。UML9种图中类图是一种模型类型,确切的说,是一种静态模型类型。一个类图根据系统中的类以及各个类之间的关系描述系统的静态视图。
6、对象图
与类图极为相似,只是它描述的不是类之间的关系。
7、协作图
可以看成类图和顺序图的交集,协作图建模对象或者角色,以及它们彼此的通信方式。
8、组件图
UML9种图中组件图用来建模软件的组织以及其相互之间的关系。这些图由组件标记符和组件之间的关系构成。在组件图中,组件是软件的单个组成部分,它可以是一个文件、产品、可执行文件和脚本等。
9、部署图
用来建模系统的物理部署。例如计算机和设备,以及它们之间是如何连接的。部署图的使用者是开发人员、系统集成人员和测试人员。
7程序设计语言和编码
7.1选择程序设计语言时应考虑哪些因素?
1.项目的应用范围;2.工程规模;3.用户的要求;4.软件执行的环境;5:算法和数据结构的复杂性;6.可以使用的编译器;7.软件可移植性;8.支持的CASE工具;9.软件开发人员的知识水平和心理因素等。
7.2根据经验总结编程时应遵循的风格,并说明为什么遵循这样的风格就能增加代码的可读性和可理解性
1、源程序文档化;
2、数据说明的次序规范化,说明语句中变量安排有序化,使用注释来说明复杂数据的结构;
3、程序编写要做到清晰第一、效率第二,先保证程序正确再要求提高速度,避免不必要的转移;
4、对所有的输入数据都要进行检验,确保输入数据的合法性。
8软件测试(15%)
书上题目
8.1为什么要进行软件测试?软件测试的目标和原则是什么?
原因:
在软件生命周期的每个阶段都不可避免地会产生错误。
目标:
用最少的人力物力时间,找出软件中存在的问题,修正问题,规避商业风险。
原则:
- 完全测试是不可能的
- 测试中存在风险
- 软件测试只能表明缺陷的存在,而不能证明软件产品已经没有缺陷
- 软件产品中潜在的错误数与已发现的错误数成正比
- 让不同的测试人员参与到测试工作中
- 让开发小组和测试小组分立,开发工作和测试工作不能由同一部分人来完成
- 尽早并不断地进行测试,使测试工作贯穿于整个软件开发的过程中
- 在设计测试用例时,应包括输入数据和预期的输出结果两个部分,并且,输入数据不仅应该包括合法的情况,还应该包括非法的输入情况
- 要集中测试容易出错或错误较多的模块
- 应该长期保留所有的测试用例
8.2软件测试包括哪几个过程
- 需求分析
- 编写测试计划
- 编写测试用例
- 执行测试
- 编写测试总结报告
8.3什么是白盒测试法?他包括哪几种基本方法?(课本P142)
白盒测试法:
是一种测试用例的设计方法,在测试者完全了解程序的结构和处理过程,按照程序内部的逻辑测试检验程序中的每条通路是否都能按预定的要求正确工作。
基本方法:
- 代码检查法
- 静态结构分析法
- 程序插桩技术
- 逻辑覆盖法
8.4什么是黑盒测试法?他包括哪几种覆盖标准?(课本P145)
黑盒测试法:
测试人员对于测试对象的内部结构、运作情况不清楚,主要验证其和规格的一致性。
覆盖标准:
复习
8.5测试的目标是什么?黑盒测试有哪些方法?白盒测试有哪些方法?
目标:
用最少的人力物力时间,找出软件中存在的问题,修正问题,规避商业风险。
黑盒测试方法:
- 等价分类法
- 边界值分析法
- 错误推测法
- 因果图法
白盒测试方法:
- 语句覆盖
- 判定覆盖
- 条件覆盖
- 判定-条件覆盖
- 条件组合覆盖
8.6测试有哪些类型或步骤(课本P140)?说明每一步骤的主要目标以及这些测试与软件开发各阶段之间的关系.
测试类型/步骤:
- 单元测试
- 组装测试
- 确认测试
- 系统测试
目标:
- 单元测试:保证每个模块能作为一个独立的单元正确运行
- 组装测试:检查模块之间的接口及 接口之间的数据传递关系问题,以及单元组合后是否能够实现预期的功能等
- 确认测试:确认软件是否满足用户需求
- 系统测试:充分运行系统,验证系统,同系统的需求定义做比较,发现软件与系统定义不符合或矛盾的地方
关系:
项目规划阶段:负责从单元测试到系统测试的整个测试阶段的监控。
需求分析阶段:确定测试需求分析,即确定在项目中需要测试什么,同时制定系统测试计划。
概要设计与详细设计阶段:制定单元测试计划和集成测试计划。
编码阶段:编写相应的测试代码和测试脚本。
测试阶段:执行测试并提交相应的测试报告。
8.7单元测试的重点是什么?
单元测试 一般是开发人员进行的测试 测试的重点是系统的模块,包括子程序的正确性验证等。
8.8什么是存根模块?什么是驱动模块?
驱动模块:用以模拟被测模块的上级模块。驱动模块在集成测试中接受测试数据,把相关的数据传送给被测模块,启动被测模块,并打印出相应的结果。
桩模块:也有人称为存根程序,用以模拟被测模块工作过程中所调用的模块。桩模块由被测模块调用,它们一般只进行很少的数据处理,例如打印入口和返回,以便于检验被测模块与其下级模块的接口
驱动模块一般是应用于自底向上的集成测试环境中
桩模块一般是应用于自顶向下的集成测试环境中
8.9一般驱动模块比桩模块容易设计,为什么?
因为驱动模块是模拟主程序或者调用模块的功能,处于被测试模块的上层,而驱动模块只需要模拟向被测模块传递数据,接收、打印从被测模块返回的数据的功能,较容易实现。
8.10调试与测试的区别
1、目的:测试的目的是找问题,调试的目的是找到并解决问题。
2、人员:测试由专门的测试人员完成,调试由开发人员完成。
3、结果:测试从已知条件开始,使用预定义的过程,并且有预期结果;而调试条件未知,结果不可 预知。
4、过程:测试可以预先计划,可以制订测试用例和计划,进度可以度量;调试没有计划,进度也不可以度量。
5、阶段:测试贯穿于软件生命周期的整个阶段;调试只在编码阶段进行。
9 软件维护(5%)
书上题目
9.1什么是软件维护?简述常见的软件维护种类。
软件维护:
软件维护是指在软件产品在交付之后,为改正错误、改进性能或其他属性,或者为了适应变化了的环境而对软件产品所进行的修改活动。
常见软件维护种类:
- 纠错性维护:改正测试阶段未发现的错误
- 完善性维护:完善功能,对软件进行修改或开发
- 适应性维护:为适应外部新硬件和软件环境或数据环境发生的变化而进行修改软件
- 预防性维护:提高软件的维护性和可靠性
复习
9.2维护的类型有哪些
常见软件维护种类:
- 纠错性维护:改正测试阶段未发现的错误
- 完善性维护:完善功能,对软件进行修改或开发
- 适应性维护:为适应外部新硬件和软件环境或数据环境发生的变化而进行修改软件
- 预防性维护:提高软件的维护性和可靠性
9.3软件的可维护性与哪些因素有关(课本P176)?
- 可理解性
- 可测试性
- 可修改性
- 可靠性
- 可移植性
- 效率
- 可使用
10 软件质量和质量保证
10.1什么是软件质量?他强调哪3个要点?
软件质量
概括地说:
软件与明确地和隐含地定义的需求相一致的程度。
具体地说:
软件质量是软件符合明确叙述的功能和性能需求、文档中明确描述的开发标准,以及所有专业开发的软件都应具有的隐含特征的程度。
定义强调以下三点:
- 软件需求是度量软件质量的基础,与需求不一致就是质量不高。
- 指定的标准定义了一组指导软件开发的准则,如果没有遵守这些准则,几乎肯定会导致质量不高。
- 通常,有一组没有显式描述的隐含需求。如果软件满足明确描述的需求,但却不满足隐含的需求,那么软件的质量仍然是值得怀疑的。
定义强调以下三点:
- 软件需求是度量软件质量的基础,与需求不一致就是质量不高。
- 指定的标准定义了一组指导软件开发的准则,如果没有遵守这些准则,几乎肯定会导致质量不高。
- 通常,有一组没有显式描述的隐含需求。如果软件满足明确描述的需求,但却不满足隐含的需求,那么软件的质量仍然是值得怀疑的。
10.2软件质量度量的度量标准有哪些(课本P194)?
- 客观性:如果不存在来自测试者对度量的主观影响,则度量是客观的。
- 适用性:如果度量结果能够明确地说明质量特性,则表明度量是适用的。
- 可靠性:如果在重复度量中,在相同条件下达到相同的效果,则认为度量是可靠的
- 经济性:当度量是在低成本下进行时,他是经济的。度量的经济性主要取决于度量过程的自动化程度和数据量。
- 可比较性:当某项度量与其他度量相关时,度量具有可比较性。
- 标准化:如果有一个可以明确表示度量结果的标度存在,则度量被认为是达到标准化的
- 有效性:质量标准的有效性是最难被证明的。但如果不说明度量标准是有效的,就不能客观地评价软件质量
10.3什么是软件质量保证?软件质量保证采取的策略有哪些(课本P196)?软件质量保证的活动有哪些(课本P197)?
软件质量保证:
软件质量保证是建立一套有计划,有系统的方法,来向管理层保证拟定出的标准、步骤、实践和方法能够正确地被所有项目所采用。
策略:
- 审查
- 复查和管理复审
- 测试
活动:
- 评审软件产品、工具和设施
- SQA活动审查的软件开发过程
- 参与技术和管理评审
- 做SQA报告
- 做SQA度量
11项目计划与管理(8%)
书上题目
11.1软件项目组织有哪些模式?开发小组的组织有哪些类型?
模式:
- 按课题划分的模式
- 按职能划分的模式
- 矩阵形模式
类型:
- 主程序员制小组
- 民主制小组
- 层次制小组
11.2软件项目成本主要由哪些方面构成?
- 硬件成本
- 差旅费及培训费用
- 软件开发成本
- 项目管理费用
11.3软件开发成本的估算方法有哪几种?
- 自顶向下的估算方法
- 自底向上的估算方法
- 差别估算法
复习
11.4什么是软件质量?他与软件可靠性的关系怎么样?
软件质量
概括地说:
软件与明确地和隐含地定义的需求相一致的程度。
具体地说:
软件质量是软件符合明确叙述的功能和性能需求、文档中明确描述的开发标准,以及所有专业开发的软件都应具有的隐含特征的程度。
定义强调以下三点:
- 软件需求是度量软件质量的基础,与需求不一致就是质量不高。
- 指定的标准定义了一组指导软件开发的准则,如果没有遵守这些准则,几乎肯定会导致质量不高。
- 通常,有一组没有显式描述的隐含需求。如果软件满足明确描述的需求,但却不满足隐含的需求,那么软件的质量仍然是值得怀疑的。
与软件可靠性的关系:
软件可靠性直接影响着软件质量,如果一个软件的可靠性不高的话,那么说明这个软件产品的质量是有问题的。只有软件可靠性足够高,质量才更好。
11.5什么是基线?为什么要建立基线?
基线:
已经通过了正式复审的规格说明或中间产品,它可以作为进一步开发的基础,并且只有通过正式的变化控制过程才能改变它。简而言之,基线就是通过了正式复审的软件配置项。
建立基线原因:
- 重现性
重现性是指及时返回并重新生成软件系统给定发布版的能力,或者是在项目中的早些时候重新生
成开发环境的能力。
- 可追踪性
可追踪性建立项目工件之间的前后继承关系。其目的在于确保设计满足要求、代码实施设计以及
用正确代码编译可执行文件。
- 报告
报告来源于一个基线内容同另一个基线内容的比较。基线比较有助于调试并生成发布说明。
建立基线后,需要标注所有组成构件和基线,以便能够对其进行识别和重新建立。
复习题目
选择题
- 以下哪一项不是软件危机的表现形式( )。
A. 开发的软件不满足用户需要 B. 开发的软件可维护性差
C. 开发的软件价格便宜 D. 开发的软件可靠性差
2.当一个模块直接使用另一个模块的内部数据,这种模块之间的耦合为( )
A .数据耦合 B .公共耦合
C .标记耦合 D .内容耦合
3、经过严密的软件测试后所提交给用户的软件产品中( )
A、软件不再包含任何错误
B、还可能包含少量软件错误
C、所提交给用户的可执行文件不会含有错误
D、文档中不会含有错误。
4、软件详细设计的主要任务是确定每个模块的( )
A、算法和使用的数据结构 B、外部接口
C、功能 D、编程
5.以下哪种测试方法不属于白盒测试技术( )
A基本路径测试 B边界值分析测试
C循环覆盖测试 D逻辑覆盖测试
6.螺旋模型是一种将瀑布模型和 ___ 结合起来的软件开发模型。( )
A .增量模型 B .专家系统
C .喷泉模型 D .变换模型
7、系统因错误而发生故障时,仍然能在一定程度上完成预期的功能,则把该软件称为( )。
A、软件容错 B、系统软件
C、测试软件 D、恢复测试
8、软件生存周期中时间最长的是( )阶段。
A、总体设计 B、需求分析
C、软件测试 D、软件维护
- 通信内聚、逻辑内聚、顺序内聚和时间内聚的内聚性从高到低顺序是( )
A. 通信、逻辑、顺序、时间
B. 通信、时间、顺序、逻辑
C. 顺序、通信、时间、逻辑
D. 顺序、通信、逻辑、时间
10.用白盒法技术设计测试用例的方法包括( )
A .错误推测
B .因果图
C .基本路径测试
D .边界值分析
填空题
1.数据流图的基本组成部分有外部实体、数据处理、数据存储、数据流。
2.数据流图和数据字典共同构成了系统的逻辑模型,是需求规格说明书的主要组成部分。
3.结构化设计以数据流图为基础,按一定的步骤映射成软件结构。软件工程中的结构化分析SA是一种面向数据流的分析方法。
4.调试的目的是确定错误的位置和引起错误的原因,并加以改正。因此,又称为排错或纠错。
5.等价划分法是一种黑盒测试技术,这种技术把程序的输入域划分为若干个数据类,据此导出测试用例。
6.在信息处理和计算机领域内,一般认为软件包括程序、数据和文档三部分。
7.在软件生命周期中,需求分析的任务是准确回答“目标系统必须做什么”这个问题。
8.在软件系统模块化时,模块间依赖程度最低的耦合是数据耦合,模块内各元素结合程度最高的内聚是功能内聚。
9.程序设计中的三种基本控制结构是顺序结构**、**选择结构和循环结构。
简答题
1.简述文档在软件工程中的作用。
2.可行性研究包括哪几方面的内容?
3.结构化的需求分析描述工具有哪些?
4.一般面向对象分析建模的工具(图形)有哪些?
5.在面向对象分析时类与类之间的静态关系主要有哪几种?
6.集成测试有哪两种测试策略?试比较它们的优缺点。
7.什么是模块化?模块设计的准则?
8.什么是模块独立性?用什么度量?
9.数据字典包括哪些内容?它与数据流图有何关系?
10.什么是软件生存周期?常用的模型有哪些?
11.测试有哪些步骤?说明每一步骤的主要目标以及这些测试与软件开发各阶段之间的关系。
12.说明软件测试和调试的目的有何区别?
13.什么是黑盒测试?黑盒测试主要采用的技术有哪些?
14.什么是白盒测试?白盒测试主要采用的技术有哪些?
15.简述面向对象3种模型和5个层次
16.说明结构化程序设计的主要思想是什么?
应用题
1.现有一图书管理系统,图书管理员提出软件应实现如下功能:
a. 管理员增加书目
b. 管理员删除书目
c. 管理员增加或者删除书目的时候,可以选择是否打印增删的书目清单系统的用户是读者和图书管理员。请画出系统的用例图。
2.建立微机的对象模型。
3.画出银行取款过程的DFD图。
问题描述:储户用存折取款首先填写取款的,根据“帐卡”中的信息检验取款单与存折,如有问题,将问题反馈给储户,否则,登陆“储户存款数据库”,修改相应数据,并更新“帐卡”,同时发出付款通知,出纳向储户付款。
4.如图显示某程序的逻辑结构。
试为它设计足够的测试用例,分别实现对程序的判定覆盖、条件覆盖和条件组合覆盖。