软件工程导论课件之第7章_实现

合集下载

07实现

07实现

软件可靠性
基本概念
什么是软件可用性 – 是程序在给定的时间点,按照规格说明书的规定,成 功地运行的概率 可靠性和可用性的主要差别 – 可靠性意味着在0到t这段时间间隔内系统没有失效 – 可用性只意味着在时刻t,系统是正常运行的。
软件可靠性
估算平均无故障时间MTTF
推测错误的产生频度,即推测错误产生的时间间隔。 经验表明,平均无故障时间MTTF与单位长度程序中剩余 的错误数成反比
– 如标识符、注释良好,程序文档结构易读易理解。
– – – –
数据说明应易于理解和维护 语句结构尽可能简单直观 输入输出风格遵守人机界面设计准则 效率满足用户需求即可
编码
编码风格
从三个方面考虑效率问题 – 程序运行的时间 – 存储器效率
– – – 大型机要考虑操作系统页式调度的特点; 微型机可考虑使用最小的存储单元; 提高存储器效率的关键是程序的简单性。
调试
调试途径
归纳法调试 – 归纳法调试步骤
– – – – 收集有关数据。列出所有已知的测试用例和程序执行结果。 组织数据。组织整理数据,以发现规律。3W1H形式。 提出假设。利用分析结果,设计一个或多个关于出错原因的假设。 若提不出假设,则需收集更多数据。 证明假设。把假设与原始线索或数据进行比较,若它能完全解释 一切现象,则假设得到证明;否则,就认为假设不合理、不完全, 或是存在多个错误,以致只能消除部分错误。
修改错误的原则 – 修改错误的一个常见失误是只修改了这个错误的征兆 或这个错误的表现,而没有修改错误的本身。 – 当心修正一个错误的同时有可能会引入新的错误。 – 修改错误的过程将迫使人们暂时回到程序设计阶段。 – 修改源代码程序,不要改变目标代码。

软件工程-07

软件工程-07
16
120
130 140
面向对象的程序设计方法

在面向对象的程序设计中,数据和操作数据的算 法不再分离,它们被封装在一起,构成对象,其 他的对象可以使用这个对象所提供的服务。
面向对象程序设计方法的特点是封装、泛化、多 态、协同和复用。 1. 封装 按照抽象数据类型的要求,对象把数据和相应 操作封装在其内部,通过定义在接口上的操作 访问。

对框架中的局部再做细化,得到整个程序。 main ( ) { /*建立2到100的数组A[ ],其中A[i]=i*/ for ( i = 2;i <= 100;i++ ) A[i] = i; /* 建立2到10的素数表B[ ],其中存放2到10以内的素数*/ B[1]= 2;B[2]= 3;B[3]= 5;B[4]= 7; /*若A[i]=i是B[ ]中任一数的倍数,则剔除A[i]*/ for ( j = 1;j <= 4;j++ )
软件工程59xp迭代的生存周期版本发布计划新用户故事项目速度用户故事上一次迭代项目速度制定迭代计划未完成的任务迭代计划新功能学习交流未通过测试的部分错误开发每日工作最新版本软件工程60xp的产品化阶段的核心是确认软件产品已经通过了大规模高强度的测试准备好进入产在这个阶段中会降低软件的演化速度但软件的演化过程并没有停止只是对于某个功能是否应被加入到下一个发布中需要慎重考虑


19
4. 协同 协同是指一组对象通过它们之间的协作来完成 一个任务。这组对象间的协作包含了一个消息 序列,亦称线程。 在使用消息传递时需要仔细考虑消息序列中每 个操作执行的前臵条件和后臵条件。 例如,使用队列时,在进队列前要先保证队列 非满,在出队列前要保证队列非空。但这样做, 必须了解消息接收者对象的细节,有悖于实现 与使用相分离的信息隐蔽原则。

软件工程导论第五版第七章

软件工程导论第五版第七章

第7章实现7。

1编码7。

1。

1选择程序设计语言7.1。

2编码风格1。

程序内部的文档2。

数据说明3。

语句构造4。

输入输出5。

效率7。

2软件测试基础7。

2。

1软件测试的目标7。

2.2软件测试准则7。

2。

3测试方法7。

2.4测试步骤1。

模块测试2. 子系统测试3. 系统测试4。

验收测试5。

平行运行7。

2。

5测试阶段的信息流图7。

1测试阶段的信息流7.3单元测试7.3。

1测试重点1. 模块接口2. 局部数据结构3. 重要的执行通路4. 出错处理通路5。

边界条件7.3.2代码审查7.3.3计算机测试图7.2正文加工系统的层次图7。

4集成测试7.4。

1自顶向下集成图7.3自顶向下结合7.4.2自底向上集成图7。

4自底向上结合7.4.3不同集成测试策略的比较7.4。

4回归测试7.5确认测试7。

5.1确认测试的范围7。

5。

2软件配置复查7.5。

3Alpha和Beta测试7.6白盒测试技术7。

6.1逻辑覆盖1。

语句覆盖图7.5被测试模块的流程图2. 判定覆盖3。

条件覆盖4. 判定/条件覆盖5. 条件组合覆盖6。

点覆盖7. 边覆盖8。

路径覆盖7。

6.2控制结构测试1. 基本路径测试图7。

6求平均值过程的流图2. 条件测试3. 循环测试图7。

73种循环7。

7黑盒测试技术7。

7。

1等价划分7。

7。

2边界值分析7.7。

3错误推测7.8调试7。

8.1调试过程图7。

8调试过程7.8。

2调试途径1。

蛮干法2。

回溯法3. 原因排除法7.9软件可靠性7。

9.1基本概念1. 软件可靠性的定义2. 软件的可用性7.9。

2估算平均无故障时间的方法1。

符号2。

基本假定3。

估算平均无故障时间4。

估计错误总数的方法7.10小结习题71。

下面给出的伪码中有一个错误。

仔细阅读这段伪码,说明该伪码的语法特点,找出并改正伪码中的错误。

字频统计程序的伪码如下:2。

研究下面给出的伪码程序,要求:(1) 画出它的程序流程图.(2)它是结构化的还是非结构化的?说明理由。

软件工程导论 第7章

软件工程导论 第7章

二、语言的选择准则 1、应用领域不同决定用不同的语言 、 2、系统用户的要求 、 3、性能因素 、 4、软件的执行环境 、 5、数据结构的复杂性 、 6、算法与计算方法的复杂性 、 7、软件开发人员的水平 、
软件工程
6
王素红
中北大学电子与计算机科学技术学院
7.3 SP方法与编程 方法与编程 提高程序可读性的关键是使程序结构 提高程序可读性的关键是使程序结构 简单清晰, 方法是达到这一目标的手段 方法是达到这一目标的手段。 简单清晰,SP方法是达到这一目标的手段。 SP方法的基本精神是按照由顶向下逐 方法的基本精神 方法的基本精神是按照由顶向下逐 步细化的方式, 步细化的方式,用三种基本控制结构来实 现程序。 现程序。
软件工程
13
王素红
中北大学电子与计算机科学技术学院
采用有实际意义的变量名 不用相似的变量名 变量名中一般不要带数字 同一变量名不要具有多种含义 显式说明一切变量 对变量最后做出注释说明其含义
软件工程
14
王素红
中北大学电子与计算机科学技术学院
7.6 程序的执行效率 提高程序效率的根本途径在于设计阶 提高程序效率的根本途径在于设计阶 段选择良好的数据结构和算法。 段选择良好的数据结构和算法。
软件工程
7
王素红
中北大学电子与计算机科学技术学院
SP方法的优点 方法的优点 产生的程序简单清晰, 产生的程序简单清晰,它由许多块组 每块只有一个入口和出口, 成,每块只有一个入口和出口,程序中一 般没有GOTO语句。这种程序称为结构化程 GOTO语句 般没有GOTO语句。这种程序称为结构化程 结构化程序易于测试 排错和修改、 易于测试、 序,结构化程序易于测试、排错和修改、 易于阅读、易于验证。 易于阅读、易于验证。

张海藩《软件工程导论》(第6版)(课后习题 第7章 实现)【圣才出品】

张海藩《软件工程导论》(第6版)(课后习题 第7章 实现)【圣才出品】

第7章实现1.下面给出的伪码中有一个错误。

仔细阅读这段伪码,说明该伪码的语法特点,找出并改正伪码中的错误。

字频统计程序的伪码如下:答:(1)错误:INSERT the extracted word into the table在这个后面,没有给这个word的occurrence count赋值为1。

(2)语法特点:该伪代码在循环结构中嵌套循环结构,并且在嵌套的循环结构中又嵌套了IF ELSE结构。

2.研究下面给出的伪码程序,要求:(1)画出它的程序流程图。

(2)它是结构化的还是非结构化的?说明理由。

(3)若是非结构化的,则:a.把它改造成仅用3种控制结构的结构化程序;b.写出这个结构化设计的伪码;c.用盒图表示这个结构化程序。

(4)找出并改正程序逻辑中的错误。

答:(1)程序流程图,如图7-8所示。

图7-8程序流程图(2)此程序是非结构化的,它有一个GOTO语句,并且是从一个循环体内转到循环体外的一条件语句内部。

(3)①修改后的伪码,如图7-9所示。

图7-9修改后的伪码②修改后程序的盒图,如图7-10所示。

图7-10修改后程序的盒图(4)程序中的错误:①语句“IF WORD=KEYWORD”里的变量“WORD”没有预先赋值。

②程序中没有预先输入T的值。

③“N=0”应该是“MATCH=0”。

3.在第2题的设计中若输入的N值或KEYWORD不合理,会发生问题。

(1)给出这些变量的不合理值的例子。

(2)将这些不合理值输入程序会有什么后果?(3)怎样在程序中加入防错措施,以防止出现这些问题?答:(1)N=1,KEYWORD=#。

(2)不合理的值输入程序后无法打印出任何信息。

(3)可以通过加入循环来防止出现这些错误的问题。

4.回答下列问题。

(1)什么是模块测试和集成测试?它们各有什么特点?(2)假设有一个由1000行FORTRAN语句构成的程序(经编译后大约有5000条机器指令),估计在对它进行测试期间将发现多少个错误?为什么?(3)设计下列伪码程序的语句覆盖和路径覆盖测试用例:答:(1)①模块测试时对每个单独的模块,分别用黑盒和白盒测试技术,测试它地功能是否正确,检查模块控制结构中的特定路径并发现最大数量的错误。

软件工程导论(第7章)

软件工程导论(第7章)

测试的正确定义:“为了发现程序中的错 误而执行程序的过程。”
7.2.2 软件测试准则
1)所有测试都应该能追溯到用户需求;
2)应该远在测试前就制定出测试计划;
3)把Pareto原理应用到软件测试中;Pareto原理 说明测试发现的错误中的80%很可能是由程序 中20%的模块造成的。
4)应该从“小规模”测试开始,并逐步进行“大 规模”测试;
USER32.DLL; GDI32.DLL; KERNEL32.DLL。
Windows消息机制:
1)基于消息的事件驱动 消息可以是由硬件发来的(存于系统队列),
也可以由Windows系统和应用程序发来(存于 程序队列中);
每一个Windows程序在不停的捕捉各种消息, 并进行处理;
每个窗口都必须有一个窗口函数,来负责消息 的判断与处理。
3)重要的执行路径 由于不可能进行穷尽测试,因此选择测试
路径是非常关键的。 4)出错处理通路 5)边界条件
7.3.2 代码审查
审查小组: 1)组长; 2)程序的设计者; 3)程序的编写者; 4)程序的测试者。
7.3.3 计算机测试
由于软件模块不是一个独立的系统,不能独 立运行,要依靠其他模块调用,或需要调用其 他模块。
1.模块测试 模块测试又称单元测试,它把每个模块作为
单独的实体来测试。 2.子系统测试
子系统测试是把经过单元测试的模块放在一 起形成一个子系统来测试。
3.系统测试 系统测试是把经过测试的子系统装配成一个完
整的系统来测试。 4.验收测试
验收测试把软件系统作为单一的实体进行测试 (利用用户的实际数据测试)。 5.平行运行
如PL/1、PASCAL、C、ADA等 3)专用语言 如APL、BLISS、FORTH、LISP、PROLOG等

软件工程全部课件-07 章实现A

软件工程全部课件-07 章实现A

程序设计风格
源程序文档化
源程序文档化包括标识符的命名、安排注释
以及程序的视觉组织等。
17
标识符包括模块名、变量名、常量名、标号名、子程序名以 及数据区名、缓冲区名等。这些名字应能反映它所代表的实 际东西,使其能够见名知意,有助于对程序功能的理解。选
取含义鲜明的名字,使它能正确地提示程序对象所代 表的实体
(3)注释要正确。
23
程序设计风格
视觉组织—空格、空行和移行
空格:恰当地利用空格,可以突出运算的优
先性,避免发生运算的错误。例如,将表达 式
(a<-17)&&!(b<=49)||c
写成
(a<-17) && !(b<=49) || c
就更清楚。
空行:自然的程序段之间可用空行隔开。
24
程序设计风格
12
高级语言优点:
生产率高, 程序容易阅读,容易测试,容易调试, 容易维护
选择高级语言的理想标准: 为了使程序容易测试和维护以减少软件的总成本,所选用的高 级语言应该有理想的模块化机制,以及可读性好的控制结构和 数据 结构; 为了便于调试和提高软件可靠性,语言特点应该使编译程序能 够尽可能多地发现程序中的错误; 为了降低软件开发和维护的成本,选用的高级语言应该有良好 的独立编译机制。

根据设计去完成编码时,困难最少; 可以减少需要的程序测试量; 可以得到更容易阅读和更容易维护的程序。 7.1.1 选择程序设计语言
第7章
实现
4
7.1.1 程序设计语言
程序设计语言的性能
从软件心理学及软件工程角度对程序设计语
言的性能进行讨论。
5
程序设计语言
软件心理学的观点

《软件工程导论》课件

《软件工程导论》课件

定义
软件维护是指在软件运行过程中,为了改 正错误、满足新的需求或改进性能等目的 ,对软件进行的修改和调整。
预防性维护
为了提高软件的可维护性和可靠性而进行 的维护活动。
改正性维护
为了纠正软件中存在的错误而进行的维护 活动。
完善性维护
为了扩充和增强软件功能而进行的维护活 动。
适应性维护
为了使软件适应外部环境的变化而进行的 维护活动。
介绍如何评估软件架构的合理性 、可扩展性和可维护性,以及如 何根据业务需求和系统规模选择 合适的架构。
架构设计原则
强调架构设计时应遵循的几个重 要原则,如模块化、开放-封闭原 则、单一职责原则等。
数据设计
数据模型
介绍常见的数据模型,如关系模型、面向对象模型、键-值存储模型等,以及它们的应 用场景和优缺点。
02
03
界面设计原则
交互设计
强调界面设计时应遵循的几个重 要原则,如用户友好、一致性、 可用性等。
介绍常见的交互方式,如按钮、 菜单、对话框等,以及如何通过 良好的交互设计提高用户体验。
05
CHAPTER
软件测试
单元测试
总结词
单元测试是对软件中的最小可测试单元进行检查和验 证,通常以函数或方法为单位进行测试。
详细描述
单元测试主要关注软件中的细节问题,检查单个函数 或方法的正确性、性能和边界条件等。通过单元测试 ,可以尽早发现代码中的错误和缺陷,提高软件质量 。
集成测试
总结词
集成测试是在单元测试的基础上,将多个模块或组件 组合在一起进行测试,以验证它们之间的集成是否正 常工作。
详细描述
集成测试的主要目的是检查模块之间的接口和通信是否 正常,以及是否存在潜在的缺陷或问题。通过集成测试 ,可以确保软件在组合时能够正常工作,满足设计要求 。

软件工程导论课件之第7章_实现

软件工程导论课件之第7章_实现




可以在准生产环境中运行新系统而又不冒风险;
用户能有一段熟悉新系统的时间;
可以验证用户指南和使用手册之类的文档;
能够以准生产模式对新系统进行全负荷测试,可 以用测试结果验证性能指标。
36
7.2.5 测试阶段的信息流

输入信息有两类:


软件配置,包括需求说明书、设计说明书和源程序 清单等; 测试配置,包括测试计划和测试方案。
26
7.2 软件测试基础 7.2.1 软件测试的目标



测试是为了发现程序中的错误而执行程序的过 程; 好的测试方案是极可能发现迄今为止尚未发现 的错误的测试方案; 成功的测试是发现了至今为止尚未发现的错误 的测试。
27
7.2.2 软件测试准则

所有测试都应该能追溯到用户需求; 应该远在测试开始之前就制定出测试计划; 把Pareto原理应用到软件测试中; 应该从“小规模”测试开始,并逐步进行“大 规模”测试; 穷举测试是不可能的; 为了达到最佳的测试效果,应该由独立的第三 方从事测试工作。
37
7.3 单元测试

单元测试集中检测模块;
单元测试和编码属于软件过程的同一个阶段; 可以应用人工测试和计算机测试这样两种不同 类型的测试方法; 单元测试主要使用白盒测试技术,对多个模块 的测试可以并行地进行。

38
7.3.1 测试重点


模块接口 局部数据结构 重要的执行通路 出错处理通路 边界条件
12
(1) 程序运行时间 写程序之前先简化算术的和逻辑的表达式; 仔细研究嵌套的循环,以确定是否有语句可以从内层 往外移; 尽量避免使用多维数组; 尽量避免使用指针和复杂的表; 使用执行时间短的算术运算; 不要混合使用不同的数据类型; 尽量使用整数运算和布尔表达式。 在效率是决定性因素的应用领域,尽量使用有良好优 化特性的编译程序,以自动生成高效目标代码。

《软件工程》课件 第7章实现

《软件工程》课件 第7章实现

2014年春 • 软件工程
一般语言的项目应用领域
2014年春 • 软件工程
7.1.2
编码风格

源程序代码的逻辑简明清晰、易读易懂是好程序 的一个重要标准 源程序文档化 数据说明 语句结构 输入/输出方法
注:参考Java语言编程规范
2014年春 • 软件工程
1. 源程序文档化
标识符的命名
2014年春 • 软件工程
黑盒测试例
2014年春 • 软件工程
白盒测试例
2014年春 • 软件工程
7.2.4
测试步骤
1.单元测试 又称模块测试。每个程序模块完成一个相对独立的子功 能,所以可以对该模块进行单独的测试。由于每个模块都有 清晰定义的功能,所以通常比较容易设计相应的测试方案, 以检验每个模块的正确性。 2.集成测试
例2:程序段功能是交换元素a[j]和a[j+1]。为少一个变量程序的易读性差。 a[j] :=a[j] + a[j+1]; a[j+1] := a[j] - a[j+1]; a[j] :=a[j] - a[j+1]; t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t;
应改为:
为了改善程序的易读性,应采用直截了当的描述方式。
测试只能证明程序中有错误,不能证明程序中没有错误。 (6)为了达到最佳的测试效果,应该由独立的
第三方从事测试工作。
2014年春 • 软件工程
7.2.3
测试方法
软件测试方法一般分为:静态测试和动态测试。
静态测试是指被测程序不在机器上运行,采用人 工检测和计算机辅助静态分析的手段对程序进行 检测。 动态测试是指通过运行程序发现错误,又分黑盒 测试和白盒测试两种。

软件工程导论_第七章

软件工程导论_第七章
Байду номын сангаас
4. 应制定测试计划并严格执行,排除随意性。 5. 长 期 保 留 测 试 用 例 , 因 为 以 后 还 要 用 。 (例修改后或以后的维修) 6.对发现错误较多的程序段(局部原理), 应进行更深入的测试。 7.错误中的80%很可能是程序中的20%的模块 造成的。 8.程序员避免测试自己的程序,①心理状 态的障碍。②自己错误理解,应由别人或 另外机构来测试。
– 1)输入操作步骤和输入格式尽量简单。
– 2) 应检查输入数据的合法性、有效性、报告 必要的输入状态信息及错误信息。 – 3)交互式输入时,提供可用的选择和
边界值。
4)当程序设计语言有严格的格式要求时, 应保持输入格式的一致性。 5)输出数据表格化、图形化。 输入/输出风格还受其他因素的影响, 如输入、输出设备,用户经验、通信 环境等。
(一)程序内部的文档 1. 符号名的命名:
• 即模块名,变量名、常量名、子程序名、 数量区名、缓冲区名等。这是名字要求; ①能够看其名知意,有一定实际意义。如 sum,total,average等等 ②不应限制名字的长度但不是越长越好,过 长增加了工作量。 ③必要使用缩写名字,但缩写规则要一致。
2.
7)尽量使用整数运算和布尔表达式。 8)在效率是决定性因素的应用领域,尽量使用有良 好优化特性的编译程序,以自动生成高效目标代 码。 2、 存储器效率 1)在大型计算机中必须考虑操作系统页式调度的特 点。 2)在微处理机中如果要求使用最少的存储单元,则 应选用有紧缩存储器特性的编译程序,在非常必 要时可以使用汇编语言。 3)提高执行效率的技术通常也能提高存储器效率。 提高存储器效率的关键同样是“简单”。
1、 程序运行时间 源程序的效率直接由详细设计阶段确定的算法 的效率决定,但是,写程序的风格也能对程序的 执行速度和存储器要求产生影响。在把详细设计 结果翻译成程序时,可以应用下述规则: 1)写程序之前先简化算术的和逻辑的表达式; 2)仔细研究嵌套的循环,以确定是否有语句可以从 内层往外移; 3)尽量避免使用多维数组; 4)尽量避免使用指针和复杂的库表; 5)使用执行时间短的算术运算; 6)不要混合使用不同的数据类型;

软件工程-第7章

软件工程-第7章
源程序代码的逻辑简明清晰、易读易懂是好程序的一个重 要标准,为了做到这一点,应该遵循下述规则。
1.程序内部的文档
所谓程序内部的文档包括恰当的标识符、适当的注解和程 序的视觉组织等。
标识符:含义鲜明的名字、缩写规则一致、为名字加注 解;
注解:正确性,简要描述模块的功能、主要算法、接口 特点、重要数据以及开发简史或解释包含这段代码的必 要性;
子系统测试和系统测试,都兼有检测和组装两重含义, 通常称为集成测试。
第7章 实现
7.2.4 测试步骤
28
7.2 软件测试基础
4.验收测试 验收测试把软件系统作为单一的实体进行测试,测试内
容与系统测试基本类似,但是它是在用户积极参与下进行的, 而且可能主要使用实际数据(系统将来要处理的信息)进行测 试。
7.1 编码
17
编码规范的意义:
➢促进团队合作 ➢减少bug处理 ➢降低维护成本 ➢有助于代码审查
7.1 编码
18
编码规范的原则:
➢方便交流和维护 ➢不影响编码的效率,符合大众习惯 ➢使代码更美观,阅读更方便 ➢使代码的逻辑更清晰,更易于理解
7.1 编码
代码开源网站 :
20
主要内容
7.1 编码 7.2 软件测试基础 7.3 单元测试 7.4 集成测试 7.5 确认测试 7.6 白盒测试技术 7.7 黑盒测试技术 7.8 调试 7.9 软件可靠性
视觉组织:适当的阶梯形式使程序的层次结构清晰明显。
第7章 实现
7.1.2 编码风格
7.1 编码
7.1.2.编码风格
要做到按照良好的编程风格进行编程,可以从以下几点入手。 1.版权和版本声明。 应该在每个代码文件的开头对代码的版权和版本 进行声明,主要内容有:
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5

主要的实用标准:

系统用户的要求


可以使用的编译程序
可以得到的软件工具
工程规模
程序员的知识
软件可移植性要求
软件的应用领域
6
7.1.2 编码风格
1. 程序内部的文档 恰当的标识符 适当的注解 程序的视觉组织
7
2. 数据说明 数据说明的次序应该标准化。 当多个变量名在一个语句中说明时,应该按字 母顺序排列这些变量。 如果设计时使用了一个复杂的数据结构,则应 该用注解说明用程序设计语言实现这个数据结 构的方法和特点。
26
7.2 软件测试基础 7.2.1 软件测试的目标



测试是为了发现程序中的错误而执行程序的过 程; 好的测试方案是极可能发现迄今为止尚未发现 的错误的测试方案; 成功的测试是发现了至今为止尚未发现的错误 的测试。
27
7.2.2 软件测试准则

所有测试都应该能追溯到用户需求; 应该远在测试开始之前就制定出测试计划; 把Pareto原理应用到软件测试中; 应该从“小规模”测试开始,并逐步进行“大 规模”测试; 穷举测试是不可能的; 为了达到最佳的测试效果,应该由独立的第三 方从事测试工作。
29
黑盒测试不可能实现穷尽测试: 假设有程序P,输入量微A和B,输出量为C。 如果计算机的字长为32位,A和B的数据类型 都是整数类型。将A和B的可能取值进行排列 组合,输入数据的可能性有:232×232=264种。 假设这个程序执行一次需要1毫秒,要完成所 有的测试,计算机需要连续工作5亿年。
16
例2:视觉组织——空格
(A<-17)ANDNOT(B<=49)ORC
(A<-17) AND NOT (B<=49) OR C
17
例3:视觉组织——移行
IF (…) THEN IF (…) THEN …… ELSE …… ENDIF …… ELSE …… ENDIF
18
例4:数据说明标准化
INTEGER size,length,width,cost,price

如果用户为了给计算机提供输入信息或为了理 解计算机输出的信息,所需花费的脑力劳动是 经济的,那么人和计算机之间通信的效率就高。 因此,简单清晰同样是提高人机通信效率的关 键。
15
例1:注释
/* ADD AMOUNT TO TOTAL */ TOTAL = AMOUNT+TOTAL
/* ADD MONTHLY-SALES TO ANNUAL-TOTAL */ TOTAL = AMOUNT+TOTAL
if (char>=‟a‟ && char<=‟z‟) cout << “This is a letter.”; else cout << “This is not a letter.”;
25
例10:少用否定条件
if ( !(char < ‟0‟ || char > ‟9‟) )
if (char >= „0‟ && char <= „9‟)
30
50 60 70
SMALL=X; IF (Y<SMALL) SMALL=Y; IF (Z<SMALL) SMALL=Z;
24
例9:避免使用空ELSE和IF…THEN IF…语句
if (char>=‟a‟) if (char<=‟z‟) cout << “This is a letter.”; else cout << “This is not a letter.”;
28
7.2.3 测试方法
黑盒测试(功能测试): 把程序看作一个黑盒子; 完全不考虑程序的内部结构和处理过程; 是在程序接口进行的测试。 白盒测试(结构测试): 把程序看成装在一个透明的盒子里; 测试者完全知道程序的结构和处理算法; 按照程序内部的逻辑测试程序,检测程序中的主 要执行通路是否都能按预定要求正确工作。
8
3. 语句构造 不要为了节省空间而把多个语句写在同一行; 尽量避免复杂的条件测试; 尽量减少对“非”条件的测试; 避免大量使用循环嵌套和条件嵌套; 利用括号使逻辑表达式或算术表达式的运算次 序清晰直观。
9
4. 输入输出 对所有输入数据都进行检验; 检查输入项重要组合的合法性; 保持输入格式简单; 使用数据结束标记,不要要求用户指定数据的数目; 明确提示交互式输入的请求,详细说明可用的选择或 边界数值; 当程序设计语言对格式有严格要求时,应保持输入格 式一致; 设计良好的输出报表; 给所有输出数据加标志。
第7章 实现
7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 编码 软件测试基础 单元测试 集成测试 确认测试 白盒测试技术 黑盒测试技术 调试 软件可靠性
1


通常把编码和测试统称为实现。 所谓编码就是把软件设计结果翻译成用某种程序设计 语言书写的程序。 软件测试在软件生命周期中横跨两个阶段。

通常在编写出每个模块之后就对它做单元测试。 在这个阶段结束之后,对软件系统还应该进行各种综合测 试,通常由专门的测试人员承担这项工作。


通过测试发现错误之后还必须诊断并改正错误,这就 是调试的目的。调试是测试阶段最困难的工作。 在对测试结果进行收集和评价的时候,使用故障率数 据,估计软件将来出现故障的情况并预测软件的可靠 性。
10
5. 效率 效率主要指处理机时间和存储器容量两个方面。 效率是性能要求,因此应该在需求分析阶段确 定效率方面的要求。 效率是靠好设计来提高的。 程序的效率和程序的简单程度是一致的,不要 牺牲程序的清晰性和可读性来不必要地提高效 率。
11
效率问题:


程序运行时间
存储器效率

输入输出的效率
A B
P
C
30
白盒测试也不能实现穷尽测试:

图中所示的一个小程序的控制 流程。曲线代表执行次数不超 过20的循环,循环体中共有5 条通路。 可能执行的路径有520条,近似 为1014条可能的路径。 如果完成一个路径的测试需要 1毫秒,那么整个测试过程需 要3170年。


31
黑盒测试与白盒测试优缺点比较:
4
语言
选择语言的理想标准:

为了使程序容易测试和维护以减少软件的总成 本,所选用的高级语言应该有理想的模块化机 制,以及可读性好的控制结构和数据结构;

为了便于调试和提高软件可靠性,语言特点应 该使编译程序能够尽可能多地发现程序中的错 误;
为了降低软件开发和维护的成本,选用的高级 语言应该有良好的独立编译机制。
12
(1) 程序运行时间 写程序之前先简化算术的和逻辑的表达式; 仔细研究嵌套的循环,以确定是否有语句可以从内层 往外移; 尽量避免使用多维数组; 尽量避免使用指针和复杂的表; 使用执行时间短的算术运算; 不要混合使用不同的数据类型; 尽量使用整数运算和布尔表达式。 在效率是决定性因素的应用领域,尽量使用有良好优 化特性的编译程序,以自动生成高效目标代码。
黑盒测试 ①适用于各阶段测试 优 ②从产品功能角度测试 点 ③容易入手生成测试数据 ①某些代码得不到测试 缺 ②如果规格说明有误,则无 点 法发现 ③不易进行充分性测试 一种确认技术,回答“我们 性 在构造一个正确的系统吗? 质 ” 白盒测试 ①可构成测试数据使特定程 序部分得到测试 ②有一定的充分性度量手段 ③可获较多工具支持 ①通常不易生成测试数据 ②无法对未实现规格说明的部 分进行测试 ③工作量大,通常只用于单元 测试,有应用局限 一种验证技术,回答“我们在 正确地构造一个系统吗?”
INTEGER cost,length,price,size,width
19
例5:一行一条语句
FOR I:=1 TO N-1 DO BEGIN T:=I; FOR J:=I+1 TO N DO IF A[J]<A[T] THEN T:=J; IF T<>I THEN BEGIN WORK:=A[T]; A[T]:=A[I]; A[I]:=WORK; END END;
13
(2) 存储器效率

使用能保持功能域的结构化控制结构,是提高 效率的好方法。
在微处理机中如果要求使用最少的存储单元, 则应选用有紧缩存储器特性的编译程序,在非 常必要时可以使用汇编语言。 提高执行效率的技术通常也能提高存储器效率。 提高存储器效率的关键同样是“简单”。


14
(3) 输入输出的效率
20
FOR I:=1 TO N-1 DO BEGIN T:=I; FOR J:=I+1 TO N DO IF A[J]<A[T] THEN T:=J; IF T<>I THEN BEGIN WORK:=A[T]; A[T]:=A[I]; A[I]:=WORK; END END;
21
例6:强调清晰性



可以在准生产环境中运行新系统而又不冒风险;
用户能有一段熟悉新系统的时间;
可以验证用户指南和使用手册之类的文档;
能够以准生产模式对新系统进行全负荷测试,可 以用测试结果验证性能指标。
36
7.2.5 测试阶段的信息
软件配置,包括需求说明书、设计说明书和源程序 清单等; 测试配置,包括测试计划和测试方案。
A[I]=A[I]+A[T]; A[T]=A[I]-A[T]; A[I]=A[I]-A[T];
WORK=A[T]; A[T]=A[I]; A[I]=WORK;
22
例7:简单直接
相关文档
最新文档