论文部分内容阅读
[摘 要]软件测试作为软件生命周期中不保缺少的组成部分对提高软件质量起着重要作用。本文对目前软件测试存在的问题进行总结,阐述了软件测试的静态测试、动态测试和黑、白盒测试法的一般过程和步骤,并提出了软件测试的几个原则,以求为软件测试技术提供参考。
[关键词]软件测试,静态,动态,黑白盒测试法
中图分类号:TM743 文献标识码:A 文章编号:1009-914X(2015)26-0206-02
0 引言
软件测试时软件开发的核心环节,是在软件交付用户使用或者投入运行前,对软件需求规格说明、设计规格说明和编码的最终审核,是确保软件质量、提高软件可靠性的关键步骤。随着IT技术的迅速发展,软件规模不断扩大,软件设计的复杂程度不断提高,软件开发中出现错误或者缺陷的概率也越来越大。同时,市场对软件质量重要性的认识逐渐增强,要求也越来越高,软件测试在软件项目实施过程中的重要性日益突出。然而,软件测试工作还没有得到足够的重视,存在诸多问题。本文重点探讨软件测试中存在的问题及解决方法。
1 软件测试现在及存在的问题
1.1 软件测试自动化程度低
虽然目前市场上有很不少软件自动化测试工具,但由于工具本身的可扩展性差、价格昂贵、操作复杂等原因,未能得到很好的应用,软件测试仍然需要大量的人工介入,尤其是在嵌入式软件测试中。随着软件开发水平的不断发展及软件规模的扩大,人工测试项目成本越来越高、差错率越来越大,测试效率越来越低,项目进度失控风险小断加大。
1.2 文档管理重视不够
文档的重要性不言而喻,但是在实际项目中,存在诸多文档方面的问题,文档水平参差不齐。如内容过于简单、不符合规范要求、前后不一致、无法追溯、变更不及时等。
1.3 测试人员和经费难以保障
一般而言,软件测试成本要占整个开发成本的30%~40%,甚至更多,而且应配有与开发人员数相当的专门测试队伍。当前,“重开发、轻测试”的思想和现象仍较为严重。在测试经费方面,多数未单独进行费用预算,测试费用很少,甚至短缺,从而导致测试工作敷衍了事、走过场的现象比较普遍。测试人员培养力度不足,很多情况下重复从事低水平的手工测试,测试能力提升渠道不畅。测试人才匾乏,能力不足,是制约软件测试工作发展的瓶颈。
1.4 测试工作介入较晚
项目未考虑实际情况,将测试工作安排在编码之后。测试人员介入时问晚,对需求分析和系统设计理解不充分,一方面无法发现需求分析和设计上的错误,另一方面也导致测试时间不充分,无法对软件进行全面测试,从而影响软件的质量。
2 软件测试的实施
2.1 测试方法
软件测试的方法原则上可以分为两大类,即静态测试和动态测试。静态测试是对被测软件行特性分析的方法的总称,主要特点是不利用计算机运行被测试的软件,而针对需求说明、设计文件等文档和源程序进行人工检查和静态分析,以保证软件质量。静态测试能够有效地发现软件中30%到70%的逻辑设计错误和编码错误。动态测试是在计算机上实际运行被测试的软件,通过选择适当的测试用例,判定执行结果是否符合要求,从而测试软件的正确性、可靠性和有效性。动态测试的两种主要方法是白盒测试和黑盒测试。
白盒测试是对软件内部工作过程的细致检查,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同测试点检查程序的状态,确定实际的状态是否与预期的状态一样,因此白盒测试又称为结构测试或逻辑驱动测试。白盒测试一般选用最少量的可以有效揭露隐藏错误的路径进行测试,所以如何设计软件测试用例是这种方法的关键。
黑盒测试则着眼于软件的外部结构,不考虑程序的逻辑结构和内部特性,仅依据软件的需求规格说明书,在软件界面上检查程序的功能是否符合要求,因此黑盒测试又叫做功能测试或数据驱动测试。用黑盒测试发现程序中的错误,必须在所有可能的输入条件和输出条件中确定测试数据,来检查程序是否都能产生正确的输出。
2.2 测试过程
软件测试过程一般按四个步骤进行,即单元测试、组装测试、确认测试和系统测试,如图1所示。
单元测试是指依据详细的设计描述,对每一个功能相对独立的程序模块进行测试,检查各个单元是否正确地实现规定的功能。单元测试一般在完成某一程序模块的编程后由程序员立即进行,主要对程序内部结构进行检验,着重发现和解决代码编写过程中的差错,多采用白盒测试法。
组装测试是指在将单元测试无误的程序模块组装成软件系统的过程中,对程序模块间的接口和通讯方面的正确性的检查。通常可采用增式和非增式两种方法,其中前者把一个待测试的模块组合到已经测试好的模块组上进行测试,而后者则把通过单元测试的模块组合成整个系统进行统一测试。组装测试一般在完成了软件的所有或大部分编码工作后,由不同开发人员共同完成。确认测试又称有效性测试,即验证软件的功能和性能是否与用户的需求相一致,以及软件配置是否完全正确。一般以软件的需求规格说明书为依据,采用黑盒测试法。系统测试是将通过确认测试的软件作为一个元素,在实际运行环境中,与计算机硬件、外设、某些支持软件、数据和人员等元素结合在一起,对整个系统进行的测试。与前三种测试不同,实施系统测试的人员应是最终用户代表。
3 软件测试的几个原则
3.1 软件测试应贯穿软件开发的全过程
由于原始问题的复杂性、软件的复杂性和抽象性、软件开发各个阶段工作的多样性以及各种层次人员之间工作的配合关系等因素,使得开发的每一个环节都可能产生错误。所以软件测试不仅仅是软件开发的一个独立阶段,而应当把它贯穿到软件开发的各种阶段中,坚持各个阶段的技术评审,才能尽早发现和预防错误。图2所示为软件测试的W模型,形象地说明了软件测试与开发的同步性。
3.2 合理选择测试用例
完整的测试用例不但需要测试的输入数据,而且需要对应这些输入数据的预期输出结果。如果对测试输入数据没有给出预期的输出结果,那么就缺少了检验实测结果的基准,就有可能主观地把一个似是而非的错误结论当成正确的结果。在设计测试用例时,应当包括合理的输入条件和不合理的输入条件。合理的输入条件是指能验证软件的输入条件;不合理的输入条件则是指异常的、临界的、可能引起问题异变的条件。用不合理的输入条件测试软件能核实软件的容错能力和完全性,往往比合理的输入条件能发现更多的错误。
3.3 程序员和程序设计机构应避免测试自己的程序
测试工作需要严谨的作风,客观的态度和冷静的情绪,由开发组成员以外的人来完成软件测试会更客观,更有效,并更容易发现问题。这是因为:一方面,程序中可能包含一些由于对问题的叙述和说明误解而导致的错误,自己一般很难发现;另一方面,就心理上来讲,程序员总不希望自己的程序出错,因此不能有效测试自己的软件。
4 总结
软件测试是保证软件质量的重要途径,本文对软件测试工作中存在的一些问题进行了分析,并提出相关应对方法,可为有效提高软件测试的技术水平和管理水平,促进软件质量和可靠性的整体提升提供借鉴和参考。
参考文献
[1] 李丽.航天相机主控软件测试用例自动生成技术的研究[D].中国科学院研究生院(长春光学精密机械与物理研究所).2010,(11):16-17.
[2] 王立新.软件测试数据的高效生成及测试方法研究[D].东华大学.2011,(21):5-11.
[3] 夏启明.软件测试及评价的复用策略研究及其实现[D].武汉大学.2010,(06):96-97.
作者简介
勒红勤(1976—),湖北襄阳,学历:硕士研究生,专业:软件工程。
[关键词]软件测试,静态,动态,黑白盒测试法
中图分类号:TM743 文献标识码:A 文章编号:1009-914X(2015)26-0206-02
0 引言
软件测试时软件开发的核心环节,是在软件交付用户使用或者投入运行前,对软件需求规格说明、设计规格说明和编码的最终审核,是确保软件质量、提高软件可靠性的关键步骤。随着IT技术的迅速发展,软件规模不断扩大,软件设计的复杂程度不断提高,软件开发中出现错误或者缺陷的概率也越来越大。同时,市场对软件质量重要性的认识逐渐增强,要求也越来越高,软件测试在软件项目实施过程中的重要性日益突出。然而,软件测试工作还没有得到足够的重视,存在诸多问题。本文重点探讨软件测试中存在的问题及解决方法。
1 软件测试现在及存在的问题
1.1 软件测试自动化程度低
虽然目前市场上有很不少软件自动化测试工具,但由于工具本身的可扩展性差、价格昂贵、操作复杂等原因,未能得到很好的应用,软件测试仍然需要大量的人工介入,尤其是在嵌入式软件测试中。随着软件开发水平的不断发展及软件规模的扩大,人工测试项目成本越来越高、差错率越来越大,测试效率越来越低,项目进度失控风险小断加大。
1.2 文档管理重视不够
文档的重要性不言而喻,但是在实际项目中,存在诸多文档方面的问题,文档水平参差不齐。如内容过于简单、不符合规范要求、前后不一致、无法追溯、变更不及时等。
1.3 测试人员和经费难以保障
一般而言,软件测试成本要占整个开发成本的30%~40%,甚至更多,而且应配有与开发人员数相当的专门测试队伍。当前,“重开发、轻测试”的思想和现象仍较为严重。在测试经费方面,多数未单独进行费用预算,测试费用很少,甚至短缺,从而导致测试工作敷衍了事、走过场的现象比较普遍。测试人员培养力度不足,很多情况下重复从事低水平的手工测试,测试能力提升渠道不畅。测试人才匾乏,能力不足,是制约软件测试工作发展的瓶颈。
1.4 测试工作介入较晚
项目未考虑实际情况,将测试工作安排在编码之后。测试人员介入时问晚,对需求分析和系统设计理解不充分,一方面无法发现需求分析和设计上的错误,另一方面也导致测试时间不充分,无法对软件进行全面测试,从而影响软件的质量。
2 软件测试的实施
2.1 测试方法
软件测试的方法原则上可以分为两大类,即静态测试和动态测试。静态测试是对被测软件行特性分析的方法的总称,主要特点是不利用计算机运行被测试的软件,而针对需求说明、设计文件等文档和源程序进行人工检查和静态分析,以保证软件质量。静态测试能够有效地发现软件中30%到70%的逻辑设计错误和编码错误。动态测试是在计算机上实际运行被测试的软件,通过选择适当的测试用例,判定执行结果是否符合要求,从而测试软件的正确性、可靠性和有效性。动态测试的两种主要方法是白盒测试和黑盒测试。
白盒测试是对软件内部工作过程的细致检查,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同测试点检查程序的状态,确定实际的状态是否与预期的状态一样,因此白盒测试又称为结构测试或逻辑驱动测试。白盒测试一般选用最少量的可以有效揭露隐藏错误的路径进行测试,所以如何设计软件测试用例是这种方法的关键。
黑盒测试则着眼于软件的外部结构,不考虑程序的逻辑结构和内部特性,仅依据软件的需求规格说明书,在软件界面上检查程序的功能是否符合要求,因此黑盒测试又叫做功能测试或数据驱动测试。用黑盒测试发现程序中的错误,必须在所有可能的输入条件和输出条件中确定测试数据,来检查程序是否都能产生正确的输出。
2.2 测试过程
软件测试过程一般按四个步骤进行,即单元测试、组装测试、确认测试和系统测试,如图1所示。
单元测试是指依据详细的设计描述,对每一个功能相对独立的程序模块进行测试,检查各个单元是否正确地实现规定的功能。单元测试一般在完成某一程序模块的编程后由程序员立即进行,主要对程序内部结构进行检验,着重发现和解决代码编写过程中的差错,多采用白盒测试法。
组装测试是指在将单元测试无误的程序模块组装成软件系统的过程中,对程序模块间的接口和通讯方面的正确性的检查。通常可采用增式和非增式两种方法,其中前者把一个待测试的模块组合到已经测试好的模块组上进行测试,而后者则把通过单元测试的模块组合成整个系统进行统一测试。组装测试一般在完成了软件的所有或大部分编码工作后,由不同开发人员共同完成。确认测试又称有效性测试,即验证软件的功能和性能是否与用户的需求相一致,以及软件配置是否完全正确。一般以软件的需求规格说明书为依据,采用黑盒测试法。系统测试是将通过确认测试的软件作为一个元素,在实际运行环境中,与计算机硬件、外设、某些支持软件、数据和人员等元素结合在一起,对整个系统进行的测试。与前三种测试不同,实施系统测试的人员应是最终用户代表。
3 软件测试的几个原则
3.1 软件测试应贯穿软件开发的全过程
由于原始问题的复杂性、软件的复杂性和抽象性、软件开发各个阶段工作的多样性以及各种层次人员之间工作的配合关系等因素,使得开发的每一个环节都可能产生错误。所以软件测试不仅仅是软件开发的一个独立阶段,而应当把它贯穿到软件开发的各种阶段中,坚持各个阶段的技术评审,才能尽早发现和预防错误。图2所示为软件测试的W模型,形象地说明了软件测试与开发的同步性。
3.2 合理选择测试用例
完整的测试用例不但需要测试的输入数据,而且需要对应这些输入数据的预期输出结果。如果对测试输入数据没有给出预期的输出结果,那么就缺少了检验实测结果的基准,就有可能主观地把一个似是而非的错误结论当成正确的结果。在设计测试用例时,应当包括合理的输入条件和不合理的输入条件。合理的输入条件是指能验证软件的输入条件;不合理的输入条件则是指异常的、临界的、可能引起问题异变的条件。用不合理的输入条件测试软件能核实软件的容错能力和完全性,往往比合理的输入条件能发现更多的错误。
3.3 程序员和程序设计机构应避免测试自己的程序
测试工作需要严谨的作风,客观的态度和冷静的情绪,由开发组成员以外的人来完成软件测试会更客观,更有效,并更容易发现问题。这是因为:一方面,程序中可能包含一些由于对问题的叙述和说明误解而导致的错误,自己一般很难发现;另一方面,就心理上来讲,程序员总不希望自己的程序出错,因此不能有效测试自己的软件。
4 总结
软件测试是保证软件质量的重要途径,本文对软件测试工作中存在的一些问题进行了分析,并提出相关应对方法,可为有效提高软件测试的技术水平和管理水平,促进软件质量和可靠性的整体提升提供借鉴和参考。
参考文献
[1] 李丽.航天相机主控软件测试用例自动生成技术的研究[D].中国科学院研究生院(长春光学精密机械与物理研究所).2010,(11):16-17.
[2] 王立新.软件测试数据的高效生成及测试方法研究[D].东华大学.2011,(21):5-11.
[3] 夏启明.软件测试及评价的复用策略研究及其实现[D].武汉大学.2010,(06):96-97.
作者简介
勒红勤(1976—),湖北襄阳,学历:硕士研究生,专业:软件工程。