软件测试基本内容之三

上一篇 / 下一篇  2006-12-29 09:33:41

第 16 贴【 2004 - 6 - 1 】:软件质量 

“ 每一个程序都能正确地做某件事,但是这并不是我们想要它作的事情。 ” 这样的软件不能算一个质量好的软件。 

我们如何定义软件质量呢?可以从不同的角度来看待软件质量并对其定义,它们有一些共同点:强调软件与得到了清晰描述的功能和性能需求的符合度、明显的文档标准以及被认为是所有专业开发的软件所具备的隐式特征。 

ISO9126 从如下几个方面来衡量软件质量:功能性、可靠性、可用性、可维护性、效率、可移植性。 

如下三个方面应该尤其被重视: 
1 、软件需求是质量测度的基础。需求符合性的缺乏也就是缺乏质量; 
2 、特定的过程定义了一套开发标准,用以指导软件开发的方式。如果标准未能遵守,那么缺少质量就几乎是肯定的结论; 
3 、除了功能需求等显示的需求外,要对非功能的隐式需求重视(例如,对好的可维护性的期望)。如果软件符合其他显式的需求,但是未能满足隐式需求,软件质量仍然是值得怀疑的。 

软件质量是一个多因素的复杂混合,这些因素随着不同的应用和需要它们的用户而变化。测试时需要根据一定的质量标准有针对性的进行测试。 


第 17 贴【 2004 - 6 - 2 】系统测试方法之恢复测试 

Roger S. Pressman 

许多基于计算机的系统必须在一定的时间内从错误中恢复过来,然后继续运行。在有些情况下,一个系统必须是可以容错的,这就是说,运行过程中的错误不能使整个系统的功能都停止。在其他情况下,一个系统错误必须在一个特定的时间段之内改正,否则就会造成严重损失。 

恢复测试是通过各种手段,让软件强制性地发生故障,然后来验证恢复是否能正常进行的一种系统测试方法。如果恢复是自动的(由系统本身来进行的),重新初始化、检查点机制、数据恢复和重启动都要进行正确验证。如果恢复是需要人工干预的,那么要估算修复的平均时间是否在可以接受的范围之内。 

第 18 贴【 2004 - 6 - 3 】:系统测试方法之安全测试 

Roger S. Pressman 

任何管理敏感信息或者能够对个人造成不正当伤害的计算机系统都是不正当或非法侵入的目标。侵入包括了范围很广的活动:只是为练习而试图侵入系统的黑客;为了报复而试图攻破系统的有怨言的雇员;还有为了得到非法的利益而试图侵入系统的不诚实的个人。 

安全测试用来验证集成在系统内的保护机制是否能够在实际中保护系统不受到非法的侵入。引用 Beizer 的话来说: “ 系统的安全当然必须能够经受住正面的攻击 —— 但是它也必须能够经受住侧面的和背后的攻击。 ” 

在安全测试过程中,测试者扮演着一个试图攻击系统的个人角色。测试者可以尝试去通过外部的手段来获取系统的密码,可以使用可以瓦解任何防守的客户软件来攻击系统;可以把系统 “ 制服 ” ,使得别人无法访问;可以有目的地引发系统错误,期望在系统恢复过程中侵入系统;可以通过浏览非保密的数据,从中找到进入系统的钥匙;等等。 

只要有足够的时间和资源,好的安全测试就一定能够最终侵入一个系统。系统设计者的任务就是要把系统设计为想要攻破系统而付出的代价大于攻破系统之后得到的信息的价值。 

第 19 贴【 2004 - 6 - 4 】:系统测试方法之压力测试 

Roger S. Pressman 

在较早的软件测试步骤中,白盒和黑盒技术对正常的程序功能和性能进行了详尽的检查。压力测试( Stree Testing )的目的是要对付非正常的情形。在本质上说,进行压力测试的人应该这样问: “ 我们能够将系统折腾到什么程度而又不会出错? ” 

压力测试是在一种需要反常数量、频率或资源的方式下运行系统。例如, 
( 1 )当平均每秒出现 1 个或 2 个中断的情形下,应当对每秒出现 10 个中断的情形来进行特殊的测试; 
( 2 )把输入数据的量提高一个数量级来测试输入功能会如何响应; 
( 3 )应当执行需要最大的内存或其他资源的测试用例; 
( 4 )运行一个虚拟的操作系统中可能会引起大量的驻留磁盘数据的测试用例。 
从本质上来说,测试者是想要破坏程序。 

压力测试的一个变种是一种被成为是敏感测试的技术。在有些情况(最常见的是在数学算法中)下,在有效数据界限之内的一个很小范围的数据可能会引起极端的甚至是错误的运行,或者引起性能的急剧下降,这种情形和数学函数中的奇点相类似。敏感测试就是要发现在有效数据输入里可能会引发不稳定或者错误处理的数据组合。 

第 20 贴【 2004 - 6 - 5 】:系统测试方法之性能测试 

Roger S. Pressman 

在实时系统和嵌入式系统中,提供符合功能需求但不符合性能需求的软件是不能被接受的。性能测试就是用来测试软件在系统中的运行性能的。性能测试可以发生在各个测试阶段中,即使是在单元层,一个单独模块的性能也可以使用白盒测试来进行评估,然而,只有当整个系统的所有成分都集成到一起之后,才能检查一个系统的真正性能。 

性能测试经常和压力测试一起进行,而且常常需要硬件和软件测试设备,这就是说,常常有必要的在一种苛刻的环境中衡量资源的使用(比如,处理器周期)。外部的测试设备可以监测测试执行,当出现情况(如中断)时记录下来。通过对系统的检测,测试者可以发现导致效率降低和系统故障的原因。 

第 21 贴【 2004 - 6 - 6 】:回归测试 

Roger S. Pressman 

每当一个新的模块被当作集成测试的一部分加进来的时候,软件就发生了改变。新的数据流路径建立起来,新的 I/O 操作可能也会出现,还有可能激活了新的控制逻辑。这些改变可能会使原本工作得很正常的功能产生错误。在集成测试策略的环境中,回归测试是对某些已经进行过的测试的某些子集再重新进行一遍,以保证上述改变不会传播无法预料的副作用。 

在更广的环境里,(任何种类的)成功测试结果都是发现错误,而错误是要被修改的,每当软件被修改的时候,软件配置的某些方面(程序、文档、或者数据)也被修改了,回归测试就是用来保证(由于测试或者其他原因的)改动不会带来不可预料的行为或者另外的错误。 

回归测试可以通过重新执行所有的测试用例的一个子集人工地进行,也可以使用自动化的捕获回放工具来进行。捕获回放工具使得软件工程师能够捕获到测试用例,然后就可以进行回放和比较。回归测试集(要进行的测试的子集)包括三种不同类型的测试用例: 
· 能够测试软件的所有功能的代表性测试用例。 
· 专门针对可能会被修改影响的软件功能的附加测试。 
· 针对修改过的软件成分的测试。 

在集成测试进行的过程中,回归测试可能会变得非常庞大。因此,回归测试应当设计为只对出现错误的模块的主要功能进行测试,每当进行一个修改时,就对每一个程序功能都重新执行所有的测试是不实际的而且效率很低的。 

第 22 贴【 2004 - 6 - 7 】:测试与调试 

测试的目的是显示存在错误,而调试的目的是发现错误或导致程序失效的错误原因,并修改程序以修正错误。调试是测试之后的活动。 [Beizer, 1984] 认为,测试和调试在目标、方法和思路上都有所不同,如下: 

1 、测试从一个已知的条件开始,使用预先定义的过程,有预知的结果。调试从一个未知的条件开始,结束的过程不可预计。 

2 、测试过程可以实现设计,进度可实现确定。调试不能描述过程或持续时间。 

3 、测试是显示错误的行为。调试是推理的过程。 

4 、测试显示开发人员的错误。调试是开发人员为自己辩护。 

5 、测试能预期和可控。调试需要想象,经验和思考。 

6 、测试能在没有详细设计的情况下完成。没有详细设计的信息调试不可能进行。 

7 、测试能由非开发人员进行。调试必须由开发人员进行。 

第 23 贴【 2004 - 6 - 8 】:系统测试方法之功能测试 

功能测试又称正确性测试,它检查软件的功能是否符合规格说明。由于正确性是软件最重要的质量因素,所以其测试也最重要。 

基本的方法是构造一些合理输入,检查是否得到期望的输出。这是一种枚举方法。测试人员一定要设法减少枚举的次数,否则测试投入太大。关键在于寻找等价区间,因为在等价区间中,只需用任意值测试一次即可。等价区间的概念可表述如下:记( A , B )是命题 f(x) 的一个等价区间,在( A , B )中任意取 x1 进行测试。如果 f (x1) 错误,那么 f (x) 在整个( A , B )区间都将出错。如果 f (x1) 正确,那么 f (x) 在整个( A , B )区间都将正确。上述测试方法称为等价测试,来源于人们的直觉与经验,可令测试事半功倍。 

还有一种有效的测试方法是边界值测试。即采用定义域或者等价区间的边界值进行测试。因为程序员容易疏忽边界情况,程序也 “ 喜欢 ” 在边界值处出错。例如测试平方根函数的一段程序。凭直觉输入等价区间应是( 0 , 1 )和( 1 , +∞ )。可取 x=0 。 5 以及 x=2 。 0 进行等价测试。再取 x=0 以及 x=1 进行边界值测试。 

有一些复杂的程序,我们难以凭直觉与经验找到等价区间和边界值,这时枚举测试就相当有难度。 

第 24 贴【 2004 - 6 - 9 】:黑盒测试的端口测试模型 

端口测试模型侧重于对被测对象的抽象,它阐明的是我们要测试什么。它将被测试者间的共性抽象出来,使测试者和被测者可以最大程度地分离开来。其主要思想是:被测试者可以用测试端口集来表达。测试功能体现在测试端口对外协议(称为端口协议)的实现,对不同系统的测试或对同一系统中不同子系统的测试都表现为对不同端口的测试。端口协议一般是非确定的有限自动机( NFA) ,它可以分解成确定的有限自动机( DFA) 的集合(对应于功能迁移路径集),并可以用结构化语言描述在测试用例中。这样,端口协议的差异就不会影响测试者的内部实现(与被测者的接口除外)。 

第 25 贴【 2004 - 6 - 10 】:黑盒测试的对象测试模型 

对象测试模型注重于测试内容的表达,它 阐明的是如何表达我们的测试内容。它把分散的功能测试单元有机地组合起来,使实际测试更逼近真正的系统测试。其主要思想是:测试内容及测试的实现方法(指对测试数据的处理)可以被封装在一个个的测试对象中。测试对象有三个层次:数据对象、业务对象和事务对象,它们的关系是逐级被包含。简单来说, 数据对象是指业务(或功能)数据的载体,它通常有物理对应,其主要测试内容是一个状态迁移图;业务对象指共同实现一种业务(或功能)的数据对象集合,它一般都只有逻辑对应,其主要测试内容是一个时间追踪图;事务对象是指一组业务相关的业务对象的有序组合,其主要测试内容是业务间的关系图,准确地说是业务结果间的布尔关系图。 

第 26 贴【 2004 - 6 - 11 】:黑盒测试的分层设计模型 

分层设计模型侧重于黑盒自动测试工具的实现,它阐明的是我们如何设计测试工具。它将测试工具的功能进行抽象和分层,使测试工具的积木化开发现实可行。其主要思想是:测试工具可划分为五个不同的层次,从低到高依次是:端口驱动层、测试执行层、测试表达层、测试管理层、测试设计层。通过规范这五个层次间的接口,可以使按照这个设计模型设计的测试工具或提供相同的接口的其它测试工具无缝地集成在一起,从而实现理想的积木式开发。 

第 27 贴【 2004 - 6 - 12 】: QA 的职责 

QA 到底应该在企业里起什么作用呢?下面是 QA 职责的总结: 

1 、保障软件组织流程体系得到遵守; 
2 、促使软件组织过程改进 ; 
3 、 指导项目实施流程,; 
4 、增加开发活动透明度; 
5 、评审项目活动; 
6 、审核工作产品; 
7 、协助工作产品问题解决; 
8 、度量数据采集、分析,提供决策参考; 
9 、进行缺陷预防; 
10 、实现质量目标。 

第 28 贴【 2004 - 6 - 13 】:软件走读 

软件走读的目的是为了对软件产品进行评价,软件走读也可以是为给参与走读的人员培训有关软件产品知识而举行,软件走读的主要目的是: 
1 )发现软件产品中的软件异常,缺陷、遗漏和自相矛盾的地方,以改进产品并提出可供选择的实现方案; 
2 )改进软件产品; 
3 )考虑可选项方案的实现方法; 
4 )评价与标准和规格的符合性; 
5 )进行技术交流,人员培训。 

在软件走读中可以指出各种缺陷,例如软件产品中的效率和可读性问题,设计或编码中模块化问题,或者规格书中的可测试问题等等。 

要求进行软件走读的软件产品,包括但不限于: 
1 )软件需求规格, 
2 )软件设计文档, 
3 )源代码, 
4 )软件测试文档, 
5 )软件用户文档, 
6 )维护手册, 
7 )安装过程 

第 29 贴【 2004 - 6 - 14 】: TCL 简介 

TCL 是一脚本解释器,具有基本的语言特性,支持整型和字符串变量,支持循环等控制结构;同时它具有灵活的扩展性和跨平台的特性,后者是它最主要的特性。通过 TCL 脚本可以编写测试用例,通过扩展功能,可以扩展你想要的测试动作。最终目的是将测试的自动化和 灵活性(可扩展性)结合在一起。       

     TCL 提供以下接口: 
     1 、用户接口 
      对用户提供语言特性,如循环、条件判断等控制结构,通过它用户可以灵活的书写测试用例;当然只 提供语言特性远远不够,因为业务千差万别,所以用户需要业务接口,从而完成特定的测试任务。 而业务接口,是通过下面的程序员接口实现。 
      2 、程序员接口 
       用户可以编写自己命令,它包括用户层(即名字)和实现层(通过 C 语言实现),然后用 TCL 提供的注册 函数登记,以后命令就可灵活的嵌入到脚本中了。 

      TCL 测试模型分三部分: 
       被测试程序(由开发人员编写) ---- 测试人员应搞清楚程序结构和业务功能,指导扩展命令的设计。 
       测试代码(由测试设计人员编写)   --- 通过程序员接口,提供给脚本扩展命令。 
       测试用例( TCL 脚本形式,由测试执行人员编写) --- 通过脚本对扩展命令进一步组合。 

第 30 贴【 2004 - 6 - 15 】: CMM 的五级简介 

CMM 为企业的软件过程能力提供了一个阶梯式的进化框架,阶梯共有五级。第一级只是一个起点,任何准备按 CMM 体系进化的企业都自然处于这个起点上,并通过它向第二级迈进。除第一级外,每一级都设定了一组目标,如果达到了这组目标,则表明达到了这个成熟级别,可以向下一级别迈进。 
第一级、初始级: 
      初始级的软件过程是未加定义的随意过程,项目的执行是随意甚至是混乱的。也许有些企业制定了一些软件工程规范,但若这些规范未能覆盖基本的关键过程要求,且执行没有政策、资源等方面的保证时,那么它仍然被视为初始级。 
第二级、重复级: 
      根据多年的经验和教训,人们总结出软件开发的首要问题不是技术问题而是管理问题。因此,第二级的焦点集中在软件管理过程上。一个可管理的过程则是一个可重复的过程,可重复的过程才能逐渐改进和成熟。可重复级的管理过程包括了需求管理、项目管理、质量管理、配置管理和子合同管理五个方面;其中项目管理过程又分为计划过程和跟踪与监控过程。通过实施这些过程,从管理角度可以看到一个按计划执行的且阶段可控的软件开发过程。 
第三级、定义级:         
       在可重复级定义了管理的基本过程,而没有定义执行的步骤标准。在第三级则要求制定企业范围的工程化标准,并将这些标准集成到企业软件开发标准过程中去。所有开发的项目需根据这个标准过程,裁剪出与项目适宜的过程,并且按照过程执行。过程的裁剪不是随意的,在使用前必须经过企业有关人员的批准。 
第四级、管理级:         
       第四级的管理是量化的管理。所有过程需建立相应的度量方式,所有产品的质量(包括工作产品和提交给用户的最终产品)需要有明确的度量指标。这些度量应是详尽的,且可用于理解和控制软件过程和产品。量化控制将使软件开发真正成为一种工业生产活动。 
第五级、优化级:         
      优化级的目标是达到一个持续改善的境界。所谓持续改善是指可以根据过程执行的反馈信息来改善下一步的执行过程,即优化执行步骤。如果企业达到了第五级,就表明该企业能够根据实际的项目性质、技术等因素,不断调整软件生产过程以求达到最佳。 


TAG:

 

评分:0

我来说两句

我的栏目

日历

« 2024-05-08  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 20486
  • 日志数: 30
  • 建立时间: 2006-12-27
  • 更新时间: 2013-04-18

RSS订阅

Open Toolbar