论文部分内容阅读
【摘要】本文就软件开发与软件测试的关系、软件测试策略、软件测试分类、软件测试的主要方法进行一定介绍和分析。
【关键词】软件测试;测试策略;测试分类;测试方法
The main method on the software development and software which the software test method brief analysis
Ma Jianqiang
【Abstract】This article which tests the relations,the software test strategy,the software test classification,software tests to carry on the certain introduction and the analysis.
【Key words】Software test;Test strategy;Test classification;Test method
【中图分类号】TP311
【文献标识码】B
【文章编号】1005-250X(2007)11-0087-03
一个好的软件系统,至少应该具备以下基本的素质,即:完整、规范的功能,无瑕疵,高性能,高可靠,抗疲劳,恢复性,移植性。软件测试,正是为测试软件系统的各种素质而提出的。完善的软件测试策略,可以节省 40%的开发费用和 60%的软件系统维护费用。在航天、航空、军事、通信、工业控制及民用产品等各个领域,软件测试都发挥着越来越重要的作用。本文分别对软件开发与软件测试的关系、软件测试的分类、软件测试的主要方法等问题进行广泛而深入的介绍。
1 软件开发与软件测试
自从发明了计算机,软件开发和软件测试就同时出现了。传统的软件测试策略,往往将软件测试定位在软件开发的最后阶段,即遵循所谓的瀑布模型,直接反映了对软件测试的重视程度不够,如图 1(A)所示。其缺点是显而易见的,尤其对出现了面向对象和多线程设计方法的今天,更显得力不从心。现代的软件测试策略,则采用双V模型,如图 1(B)所示,体现了软件测试的重要地位,它贯穿了软件开发的全过程。
在双V模型中,首先制定出测试目的,是为了证明软件系统能正常工作,还是为了发现问题;是为了测试系统的质量,还是为了控制软件系统的质量。其次是确定测试对象和测试范围,测试对象可以是整个系统、子系统、模块、单元,也可以是某个变量、类、成员函数等;而测试范围包括功能测试、性能测试、可靠性测试、疲劳测试、移植性测试、恢复性测试等。再次是对测试环境和测试方法的选择和描述,最后对测试结构进行记录和分析,并对测试过程做全面的跟踪和管理。由此可见,软件测试不仅是现代软件工程中重要的一环,其本身就是一个系统工程。
(A) (B)
图1 软件开发与软件测试模型
2 软件测试的分类
软件测试的宗旨,就是要全覆盖地实现测试目的,即:正向测试和负向测试。所谓正向测试,是指测试软件系统做了它应该做的事情;而负向测试,则是测试系统没有做它不该做的事情。
按测试目的分类,可以分为:证明软件系统能正常工作,即演示功能;发现软件系统的问题,即检错功能;测试系统的质量,即预测功能;控制软件系统的质量,即预防功能;集成了预防、检错、预测及演示等功能,并具有自动化和智能化的特性。
按测试功能分类,又可分为:功能测试;性能测试;可靠性测试;疲劳测试;移植性测试;恢复性测试;需求分析测试;安全测试;商用测试;资源测试;敏感性测试等。
按测试应用分类,可分为:嵌入式实时系统;面向对象系统;通信协议系统;客户/服务器系统;JAVA系统;WEB系统等。
按测试状态分类,又可分为:静态测试和动态测试。
3 软件测试的主要方法
3.1 静态测试与动态测试:静态测试,主要是针对所有文档资料、编程规范、数据定义、控制和数据使用、代码与需求的一致性、代码与设计的一致性等方面的分析,其对测试经验和测试计划的依赖性极强。静态测试是在不需运行软件系统的情况下,对系统进行的测试。
动态测试是被测系统在运行当中,根据其动态的行为进行的测试。根据测试规模,可分为:单元测试、集成测试、系统测试及应用测试等几个阶段。
3.2 黑盒测试和白盒测试:所谓黑盒测试,就是将被测对象看作一个黑盒,不需了解其内部结构,只需根据定义的功能规范、输入参数、输出结果等,对被测对象进行的动态测试。黑盒测试的这一特点,决定了它无法或很难实现对被测对象的全覆盖测试。
白盒测试,就是根据对被测对象内部结构的了解,进行全覆盖式的测试。由于这一特性,使得白盒测试的方法呈现出多样化、局部化的特点。
3.3 集成测试和系统测试:由多模块构成的集成测试和系统测试,是在单个模块测试通过后进行的。其测试方法主要包括:自下而上法;由上至下法;隔离测试法。
三种测试方法各有利弊,组合式测试又成为常用的测试手段。与路径覆盖类似,系统的完全覆盖测试也依赖于其路径覆盖的复杂度。理论上,系统测试复杂度是所有模块复杂度的总和,即:v(S) =∑v(Gi)。但实际应用时,往往先对各模块流程图进行简化,得到新的复杂度iv(G);然后,计算出简化后的系统测试复杂度,即:iv(S) =∑iv(Gi) -N + 1,其中N是模块的数量。
3.4 针对面向对象语言的测试:由于面向对象设计方法的特性,如:封装、继承、多型、重载等,对软件测试提出了新的要求,这些分别体现在单元/模块测试和集成/系统测试等方面。
软件测试是一个贯穿软件开发全过程的系统工程,是对测试经验和软件规范化设计有密切关系的工程。如何用较少的测试案例,实现最大的测试覆盖、最大限度地发现软件瑕疵,是软件测试的目标之一;制定完善的测试计划、测试方案、结果分析、文档资料管理,是保证软件测试功效的前提。
参考文献
[1] 朱鸿、金凌.软件质量保障与测试 [M ].北京:科学出版社,1997
[2] 陈意云.形式语义学基础[M].合肥:中国科学技术大学出版社,1994
[3] FewsterM,GranamD.软件测试自动化技术与实例详解[M].舒智勇,等译.北京:电子工业出版社,2000
[4] DustinE,RashkaJ,PaulJ.软件自动化测试:引入、管理与实施[M].于秀山,胡兢玉,等译.北京:电子工业出版社,2003
收稿日期:2007-11-10
【关键词】软件测试;测试策略;测试分类;测试方法
The main method on the software development and software which the software test method brief analysis
Ma Jianqiang
【Abstract】This article which tests the relations,the software test strategy,the software test classification,software tests to carry on the certain introduction and the analysis.
【Key words】Software test;Test strategy;Test classification;Test method
【中图分类号】TP311
【文献标识码】B
【文章编号】1005-250X(2007)11-0087-03
一个好的软件系统,至少应该具备以下基本的素质,即:完整、规范的功能,无瑕疵,高性能,高可靠,抗疲劳,恢复性,移植性。软件测试,正是为测试软件系统的各种素质而提出的。完善的软件测试策略,可以节省 40%的开发费用和 60%的软件系统维护费用。在航天、航空、军事、通信、工业控制及民用产品等各个领域,软件测试都发挥着越来越重要的作用。本文分别对软件开发与软件测试的关系、软件测试的分类、软件测试的主要方法等问题进行广泛而深入的介绍。
1 软件开发与软件测试
自从发明了计算机,软件开发和软件测试就同时出现了。传统的软件测试策略,往往将软件测试定位在软件开发的最后阶段,即遵循所谓的瀑布模型,直接反映了对软件测试的重视程度不够,如图 1(A)所示。其缺点是显而易见的,尤其对出现了面向对象和多线程设计方法的今天,更显得力不从心。现代的软件测试策略,则采用双V模型,如图 1(B)所示,体现了软件测试的重要地位,它贯穿了软件开发的全过程。
在双V模型中,首先制定出测试目的,是为了证明软件系统能正常工作,还是为了发现问题;是为了测试系统的质量,还是为了控制软件系统的质量。其次是确定测试对象和测试范围,测试对象可以是整个系统、子系统、模块、单元,也可以是某个变量、类、成员函数等;而测试范围包括功能测试、性能测试、可靠性测试、疲劳测试、移植性测试、恢复性测试等。再次是对测试环境和测试方法的选择和描述,最后对测试结构进行记录和分析,并对测试过程做全面的跟踪和管理。由此可见,软件测试不仅是现代软件工程中重要的一环,其本身就是一个系统工程。
(A) (B)
图1 软件开发与软件测试模型
2 软件测试的分类
软件测试的宗旨,就是要全覆盖地实现测试目的,即:正向测试和负向测试。所谓正向测试,是指测试软件系统做了它应该做的事情;而负向测试,则是测试系统没有做它不该做的事情。
按测试目的分类,可以分为:证明软件系统能正常工作,即演示功能;发现软件系统的问题,即检错功能;测试系统的质量,即预测功能;控制软件系统的质量,即预防功能;集成了预防、检错、预测及演示等功能,并具有自动化和智能化的特性。
按测试功能分类,又可分为:功能测试;性能测试;可靠性测试;疲劳测试;移植性测试;恢复性测试;需求分析测试;安全测试;商用测试;资源测试;敏感性测试等。
按测试应用分类,可分为:嵌入式实时系统;面向对象系统;通信协议系统;客户/服务器系统;JAVA系统;WEB系统等。
按测试状态分类,又可分为:静态测试和动态测试。
3 软件测试的主要方法
3.1 静态测试与动态测试:静态测试,主要是针对所有文档资料、编程规范、数据定义、控制和数据使用、代码与需求的一致性、代码与设计的一致性等方面的分析,其对测试经验和测试计划的依赖性极强。静态测试是在不需运行软件系统的情况下,对系统进行的测试。
动态测试是被测系统在运行当中,根据其动态的行为进行的测试。根据测试规模,可分为:单元测试、集成测试、系统测试及应用测试等几个阶段。
3.2 黑盒测试和白盒测试:所谓黑盒测试,就是将被测对象看作一个黑盒,不需了解其内部结构,只需根据定义的功能规范、输入参数、输出结果等,对被测对象进行的动态测试。黑盒测试的这一特点,决定了它无法或很难实现对被测对象的全覆盖测试。
白盒测试,就是根据对被测对象内部结构的了解,进行全覆盖式的测试。由于这一特性,使得白盒测试的方法呈现出多样化、局部化的特点。
3.3 集成测试和系统测试:由多模块构成的集成测试和系统测试,是在单个模块测试通过后进行的。其测试方法主要包括:自下而上法;由上至下法;隔离测试法。
三种测试方法各有利弊,组合式测试又成为常用的测试手段。与路径覆盖类似,系统的完全覆盖测试也依赖于其路径覆盖的复杂度。理论上,系统测试复杂度是所有模块复杂度的总和,即:v(S) =∑v(Gi)。但实际应用时,往往先对各模块流程图进行简化,得到新的复杂度iv(G);然后,计算出简化后的系统测试复杂度,即:iv(S) =∑iv(Gi) -N + 1,其中N是模块的数量。
3.4 针对面向对象语言的测试:由于面向对象设计方法的特性,如:封装、继承、多型、重载等,对软件测试提出了新的要求,这些分别体现在单元/模块测试和集成/系统测试等方面。
软件测试是一个贯穿软件开发全过程的系统工程,是对测试经验和软件规范化设计有密切关系的工程。如何用较少的测试案例,实现最大的测试覆盖、最大限度地发现软件瑕疵,是软件测试的目标之一;制定完善的测试计划、测试方案、结果分析、文档资料管理,是保证软件测试功效的前提。
参考文献
[1] 朱鸿、金凌.软件质量保障与测试 [M ].北京:科学出版社,1997
[2] 陈意云.形式语义学基础[M].合肥:中国科学技术大学出版社,1994
[3] FewsterM,GranamD.软件测试自动化技术与实例详解[M].舒智勇,等译.北京:电子工业出版社,2000
[4] DustinE,RashkaJ,PaulJ.软件自动化测试:引入、管理与实施[M].于秀山,胡兢玉,等译.北京:电子工业出版社,2003
收稿日期:2007-11-10