软件的编码与测试
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
火龙果整理 uml.org.cn
从客观系统的描述分类
• 面向过程语言: 其程序设计范式:“数据结构+算法” 前面所介绍的程序设计语言都属此类。 • 面向对象语言: 其程序设计范式: “对象+消息” 如:Delphi、Visual Basic、Java、C++等。
火龙果整理 uml.org.cn
火龙果整理 uml.org.cn
白盒测试
• 白盒测试是对程序内部执行路径进行的。 • 穷尽测试(程序中每条可能的通路至少都应该执行 一次)是不可能的。(一个例子) • 白盒测试是一种程序级的微观上的测试,适合于很 小单元的测试,以及从事软件底层工作、生产构件 的测试人员进行的测试。 • 无论是黑盒测试还是白盒测试,都不可能进行完全 测试,因此通过测试并不能证明程序是正确的。 • 在实际应用中,常常采用白盒测试和黑盒测试相结 合的方法,对软件进行有限的测试。
火龙果整理 uml.org.cn
5.4.2 软件测试的原则
• • • • •
避免程序员检查自己的程序; 软件测试应尽早地、不断的进行; 软件测试不等于程序测试; 充分认识错误的群集现象; 测试用例应包括测试输入数据和与之对应的输出 结果; • 测试用例的输入数据应包括合理的输入和不合理 的输入; • 严格执行测试计划,避免测试的随意性。
火龙果整理 uml.org.cn
从应用角度分类
• 基础语言:也称通用语言。历史悠久,流传很广, 有大量的已开发的软件库,拥有众多的用户,为 人们所熟悉和接受。 如:FORTRAN、COBOL、BASIC、ALGOL等。 • 结构化语言:直接支持结构化的控制结构,具有 很强的过程结构和数据结构能力。 如:PASCAL、C、Ada。 • 专用语言: 是为某种特殊应用而专门设计的语言, 通常具有特殊的语法形式。应用比较广泛的有: APL语言、FORTH语言、LISP语言。
第5章 软件的编码与测试
教学目标 教学内容 5.1 编码设计的目的 5.2 程序设计语言 5.3 编码风格 5.4 软件测试 5.5 测试用例的设计 5.6 测试步骤 5.7 调试技术
火龙果整理 uml.org.cn
重点/难点
火龙果整理 uml.org.cn
教学目标
• 掌握程序设计语言特点和选择; • 掌握程序编码风格; • 掌握软件测试的概念、目的、原则和测 试的方法; • 重点掌握软件测试用例的设计; • 了解程序调试的过程和基本方法。
5.2.2 程序设计语言的选择
• 在编码之前应选好适当的语言,特别是在 大型软件的开发中更不能只局限于使用自 己所熟悉的语言。 • 一般情况下,程序设计语言的选择常从以 下几个方面考虑: 项目的应用领域、 算法与计算的复杂性、 数据结构的复杂性、效率、可移植性、程 序设计人员的水平、构造系统的模式等
火龙果整理 uml.org.cn
火龙果整理 uml.org.cn
5.3 编码风格
• • • • •
所谓编码风格即书写源程序的习惯 。 从软件工程要求出发,程序设计风格包括 如下要求 : 使用好程序内部的文档 ; 数据说明原则; 语句结构的规则; 输入、输出规则 ; 高效率的原则。
5.3.1使用好程序内部的文档
火龙果整理 uml.org.cn
5.2 程序设计语言
• 程序设计语言的分类 自20世纪60年代以来,世界上公布的程 序设计语言已有上千种之多,但是只有很 小一部分得到了广泛的应用。 • 程序设计语言的选择 语言选择的合适,会使编码困难减少, 程序测试量减少,并且可以得到易读、易 维护的软件。
5.2.1 程序设计语言的分类
火龙果整理 uml.org.cn
5.3.2 数据说明原则
一般而言,数据说明应遵循三个原则。 (1) 数据说明的次序应当规范化,使数据属性 容易查找,有利于测试、排错和维护; (2) 当多个变量名用一个语句说明时,应当对 这些变量按字母的顺序排列; (3) 如果设计了一个复杂的数据结构,应当使 用注释,说明这个数据结构的固有特点。
火龙果整理 uml.org.cn
黑盒测试
• 黑盒测试是在软件的接口处进行的,一方面 看其是否能对合法的数据得出正确的结果, 另一方面看它是否能对非法的数据进行正确 的处理。 • 黑盒测试法不能测试所有可能情况(一个例 子)。 • 黑盒测试是一种宏观功能上的测试,该方法 适合测试部门的测试人员或用户。 • 随着软件生产的组装技术的发展,黑盒测试 方法会越来越普及。
火龙果整理 uml.org.cn
5.1 编码设计的目的
• 所谓编码,是使用选定的程序设计语言,把模块 的过程描述翻译为用该语言书写的源程序。 • 源程序不仅要求语法上的正确性,还要求源程序 具有良好的结构性和良好的程序设计风格 。 • 在程序编写时应考虑到,所写的程序将被别人阅 读,一定要尽量使程序写得容易被人读懂。 • 目前,人们编写源程序还不能使用自然语言,只 能用某种程序设计语言 。
火龙果整理 uml.org.cn
第二代语言(汇编语言)
• 汇编语言指令是机器指令的符号化,与机器指令 存在着直接的对应关系。 • 缺点:难学难用、容易出错、维护困难等。 • 优点:可直接访问系统接口,汇编程序翻译成的 机器语言程序的效率高。 • 从软件工程角度来看,只有在高级语言不能满足 设计要求,或不具备支持某种特定功能的技术性 能(如特殊的输入输出)时,汇编语言才被使用。
火龙果整理 uml.org.cn
第四代语言(简称4GL)
• 真正的4GL应该说还没有出现。目前,所谓 的4GL大多是指基于某种语言环境上具有 4GL特征的软件工具产品,如System Z、 PowerBuilder、FOCUS等。 • 面向应用,为最终用户设计的一类程序设 计语言。 • 优点:缩短应用开发过程、降低维护代价、 最大程度地减少调试过程中出现的问题、 对用户友好等。
第四代语言(简称4GL)
• 4GL是非过程化语言,编码时只需说明“做 什么”,不需描述算法细节。 • 两个典型应用:数据库查询和应用程序生 成器是4GL的。 • 数据库查询语言(SQL)可以对数据库中的信 息进行复杂的操作。用户只需将要查找的 内容在什么地方、根据什么条件进行查找 等信息告诉SQL,SQL将自动完成查找过 程。应用程序生成器则是根据用户的需求 “自动生成”满足需求的高级语言程序。
火龙果整理 uml.org.cn
一个例子(黑盒测试)
假设一个程序P有输入量X和Y及输出量Z。 在字长为32位的计算机上运行。若X、Y取整 数,按黑盒方法进行穷举测试,可能采用的 测试数据组: 232×232=264 如果测试一 组数据需要1毫秒, 一年工作365×24 小时完成所有测试需5亿年。
火龙果整理 uml.org.cn
第三代语言(高级语言)
Biblioteka Baidu
• 高级语言是面向用户的、基本上独立于计算机种 类和结构的语言。 • 形式上接近于算术语言和自然语言,概念上接近 于人们通常使用的概念。 • 一个命令可以代替几条、几十条甚至几百条汇编 语言的指令。 • 优点:易学易用,通用性强,应用广泛。 • 高级语言种类繁多,我们可以从应用特点和对客 观系统的描述两个方面对其进一步分类。
火龙果整理 uml.org.cn
5.4.3 软件测试的方法
软件测试可以分为人工测试和基于计算机的测 试。基于计算机的测试有两种方法: • 黑盒测试 把程序看成一个黑盒子,完全不考虑其内部 结构和处理过程,只检查程序的功能是否符合它 的需求规格说明。 • 白盒测试 把程序看成一个打开的盒子,测试人员对程 序所有逻辑路径进行测试,在不同检查点输出结 果,与预期的结果比较,确定程序是否有错。
火龙果整理 uml.org.cn
火龙果整理 uml.org.cn
5.3.4 输入、输出规则
• 对所有的输入数据进行检验,从而识别错误的输 入,以保证每个数据的有效性; • 检查输入项的各种重要组合的合理性; • 输入的步骤和操作尽可能简单; • 输入数据时,允许使用自由格式输入; • 应允许缺省值; • 一批数据输入时,最好使用输入结束标志; • 输入/输出交叉时,要在屏幕上使用提示信息; • 应保持输入格式与输入语句要求的一致性; • 给所有的输出加注释,并设计输出报表格式。
5.4.1 软件测试目标
• 仅就测试本身而言,软件测试的目标是以最少的时 间和人力发现软件中潜在的各种错误和缺陷(尽量 多的发现错误)。 • 一个好的测试方案是极可能发现至今为止尚未发现 的错误的测试方案。 • 成功的测试是发现了至今为止尚未发现的错误的测 试。 • 发现错误并不是软件测试的最终目标。 • 测试阶段的根本目标是尽可能多的发现并排除软件 中潜藏的错误,最终把一个高质量的软件系统交给 用户使用。
从发展历程来看程序设计语言可以分为 四代: 第一代语言(机器语言) • 机器语言是由二进制0、1代码指令构成, 不同的CPU具有不同的指令系统。 • 机器语言程序难编写、难修改、难维护, 需要用户直接对存储空间进行分配,编程 效率极低。 • 目前这种语言已经被淘汰。
火龙果整理 uml.org.cn
5.3.3 语句结构的规则(1)
语句结构应遵从如下规则: • 一行内只写一条语句,并采用适当的缩进格式; • 不要刻意追求技巧性,使程序编写得过于紧凑; • 要简单、清楚,直截了当地说明程序员的用意; • 除非对效率有特殊的要求,程序编写要做到清晰第 一,效率第二; • 首先保证程序正确,然后才要求提高速度; • 让编译程序作简单的优化; 尽可能使用库函数; • 避免使用临时变量而使可读性下降; • 尽量用公共过程或子程序代替重复的功能代码段; • 多使用括号以使表达式运算顺序清晰;
火龙果整理 uml.org.cn
5.3.3 语句结构的规则(2)
• • • • • • • • • • 避免不必要的转移; 用逻辑表达式代替分支嵌套; 避免使用空的ELSE语句和IF…THEN IF…语句; 避免使用ELSE GOTO和ELSE RETURN结构; 使与判定相联系的动作尽可能地紧跟着判定; 避免采用过于复杂的条件测试; 尽量减少使用“否定”条件的条件语句; 避免过多使用循环嵌套和条件嵌套; 不要使GOTO语句相互交叉; 对递归定义的数据结构尽量使用递归过程。
火龙果整理 uml.org.cn
一个例子(白盒测试)
它包括了一个执行20次的循环,不同执行路径数 达520条,如果对每一条路径进行测试需要1毫秒, 假定一年工作365×24小时,要想把所有路径测试完, 需3170年。
火龙果整理 uml.org.cn
5.4.4 软件测试的过程
可见,测试过程需要三类输入: • 软件配置:包括软件需求规格说明、软件设计规格说明、 源程序代码等; • 测试配置:包括测试计划、测试用例等。 • 测试工具:为了提高软件测试效率,减轻测试过程中手 工劳动,可使用一些专门的测试工具。如测试数据自动 生成测试结果分析程序、驱动测试的测试数据库等。
火龙果整理 uml.org.cn
5.3.5 高效率的原则
运行效率:占用的处理机时间和存储空间 可以从以下三个方面着手: • 提高程序运行效率; 程序编码使程序运行高效 • 提高存储器效率; 占用存储单元小,要求存取的时间短 • 提高输入/输出效率。
火龙果整理 uml.org.cn
5.4 软件测试
• 软件测试,是为了发现错误而执行程序的 过程。是对需求分析、设计和编码三个阶 段进行的最终复审。 • 软件测试在软件生存周期中横跨两阶段: 编码阶段(单元测试) 测试阶段(各种综合测试) • 测试只能找出程序中的错误,但在未发现 错误时,并不能证明程序中没有错误。
火龙果整理 uml.org.cn
软件=程序十文档 为了提高程序的可维护性,源代码也需要 实现“文档化”。内部文档的组织包括: • 标识符命名:具有鲜明的意义,能够提示 程序对象代表的实体。 • 程序代码的视觉组织:逻辑结构清晰,层 次分明(空格、空行、缩进 )。 • 程序内部的注释 :序言性注释和功能性注 释
火龙果整理 uml.org.cn
5.4.5 软件测试与开发各阶段的关系