论文部分内容阅读
摘要: 为保证软件产品的质量,需要对软件过程进行控制,同时也需要对软件产品本身进行检测,在目前形式化方法和程序正确性证明还无望成为使用性方法的情况下,软件测试在将来的相当长一段时间仍然将是软件质量保证的有效方法。
关键词: 软件测试;面向对象测试
中图分类号:TP3文献标识码:A文章编号:1671-7597(2010)0810094-01
1 软件测试的目的
软件测试是为发现错误而执行程序的过程;测试是为证明程序有错,而不是证明程序无错误;一个好的测试是在于它能发现至今未发现的错误;一个成功的测试是发现至今为止未发现的错误的测试。软件测试的目的不仅仅是为发现程序中存在的错误,它还是软件质量保证至关重要的一个环节。软件测试不同于程序员在代码编写完成后简单的使用、调试,软件测试需要遵循一定的原则,软件测试的原则大致包括以下内容:确定预期输出是测试必不可少的一部分,程序员应避免测试自己编写的程序,程序设计机构不应测试自己的程序,彻底检查每一个测试结果,对非法的和非预期的情况也要象对合法的预期输入一样编写测试用例,检查程序是否做了要它做的事仅仅是成功的一半,另一半是程序是否做了不要它做的事,除了真正没有用的程序外,一定不要扔掉测试用例,一段程序中存在错误的概率与在这段程序中已发现的错误成比例,在规划测试时,不要设想程序中不会查出错误,所有的测试都应当追溯到用户需求,应该在测试工作真正开始前就开始计划测试,测试应该从“小规模”开始逐步转到“大规模”,测试发现错误中80%的错误属于20%的程序模块,穷举测试是不可能的,但充分覆盖程序逻辑是可能的,测试是一件非常复杂,具有创造性的和需要高度智慧的挑战性任务。
2 面向对象特征对软件测试的影响
面向对象技术是一个全新的开发模式,具有以下特点:
1)它要综合考虑软件开发过程所有阶段。
2)在软件开发的整个生存周期中,每个阶段之间是连续的。
3)开发过程分为面向对象分析(00A)、面向对象设计(OOD)、面向对象编程(OOP)、面向对象测试(OOT)四个连续的部分。
如果一个软件系统是使用这样4个概念设计和实现的,则认为这个软件系统是面向对象的。一个而向对象的程序的每一个组成部分都是对象,计算是通过对象和对象之间的通信来执行的。
面向对象技术的本质是定义了类的抽象,将变量和与作用于它的操作封装到一块。然后用不同的类和方法组合成一个对象系统。面向对象软件将传统软件中的一个过程或一个方法内的复杂性转移到对象之间的交互中。面向对象语言一些本质特征形成如下的一些新的故障、错误风险。
1)基本功能模块。在面向对象系统中,系统的基本构造单元是封装数据和方法的类和对象,而不再是一个个能完成特定功能的功能模型。每个对象有自己的生存期,有自己的状态。消息是对象之间相互请示或协作的途径,是外界使用对象方法及获取对象状态的唯一方式。对象的功能是在消息的触发下,由对象所属类中定义的方法与相关对象的合作共同完成,并且对象在不同状态下对消息的响应可能完全同。
工作过程中,对象的状态可能被改变,产生新的状态,即发生状态的转移。对象中的数据和方法是一个有机的整体,在软件测试过程中,不能仅仅检查输入数据产生的输出结果是否与预期结果相吻合,还要考虑对象的状态变化。因此,除了要对对象的状态与方法间的相互影响进行测试,还要进行状态测试。
2)系统的功能实现。在面向对象系统中,系统的功能体现在对象间的协作上,而不再是简单的过程调用关系。面向对象程序的执行实际上是执行一个由消息连接起来的方法序列,方法的实现与所属对象本身的状态有关,各方法之间可能有相互作用。为实现某一特定的功能,可能要激活调用属于不同对象类的多个成员函数,形成成员函数的启用链。因此,基于功能分解的自顶向下或自底向上的集成测试策略不适用于面向对象软件系统的测试。
3)封装对测试的影响。封装是指在词法单位之中或之间决定名字可见性的访问控制机制。它支持信息的隐蔽和模块化,有助于防止全局变量访问的问题。尽管封装不会直接促成错误的发生,它却给测试带来了障碍。封装使对象的内部状态隐蔽,如果类中未提供足够的存取函数来表明对象的实现方式和内部状态,则类的信息隐蔽机制将给测试带来困难。
4)继承对测试的影响。继承也是面向对象语言中的一个本质特征。继承可用于一般与特殊关系,并目方便编码。但继承削弱了封装性,产生了类似于非面向对象语言中全局数据的错误风险。由于继承的作用,一个函数可能被封装在具有继承关系的多个类中,子类中还可以对继承的特征进行覆盖或重定义。
5)多态对测试的影响。多态性是指一个引用可以与多个对象绑定的能力。多态能减少代码的复杂性和规模,同时还可以实现动态绑定。但依赖于不规则的类层次的动态绑定可能产生编程人员没有想到的结果。某些绑定能正确的工作但并不能保证所有的绑定都能正确地运行。以后绑定的对象可能很容易将消息发送给错误的类,执行错误的功能,还可能导致一些与消息序列和状态相关的错误。
3 总结
软件测试作为软件上线的最后关口,应得到高度重视。但由于思想意识和历史原因,出现重开发轻测试的现象,软件测试成为制约软件成功上线运行的瓶颈。由于对软件测试的重要性理解不够,很多人认为程序能够运行基本上就已经成功,没有必要进行专门的测试,这些都是错误的观点。
软件测试分为:单元测试(模块测试),集成测试。在进行所有的测试前,一定先要认真阅读各种相关文档,同时制定测试计划、同时进行测试用例设计,在设计测试用例时,要对待测软件进行分析,设计合理的模型,制定测试用例。在测试进行过程中,要根据实际情况修改或增加测试用例。在测试完成后,要根据测试结果填写《软件测试问题跟踪单》,在整个软件测试完成后,要分析测试结果并编写测试报告。在测试报告中要说明本次测试的结果,如各个等级的BUG的数目,在各个模块中的分布情况及评语。在整个项目完成后,将测试工作所产生的所有文档交文档管理员归档。
软件测试是对软件产品是否能够满足预期要求做出客观的技术性评价。软件测试在明确和界定清楚测试与开发的关系时,不能简单地把测试与开发看作是串行的过程。从工作流程看,测试应当从需求分析开始,测试不仅要与开发平行,而且从开始就以测试用例为需求立定客观标准。
随着我国软件业的发展和各公司测试管理过程的进一步完善,作为软件质量保证的重要组成的软件测试也越来越受到重视,如何在软件开发项目中有序地管理和分析各种问题对质量控制和过程改进也将越来越重要。本系统支持缺陷驱动的测试过程,但是对自动化的支持还比较肤浅,只是在现有CPPUNIT的基础上做了一些整合,这个是以后需要改进的地方。我们也相信,由于软件自动化测试能显著提高软件测试的有效性和效率,将在越来越多的软件测试管理工具中得到支持。
参考文献:
[1]朱少民,软件测试方法和技术,北京:清华大学出版社,2005.
[2]徐中伟,软件测试质量的度量,计算机工程与应用,2002.
关键词: 软件测试;面向对象测试
中图分类号:TP3文献标识码:A文章编号:1671-7597(2010)0810094-01
1 软件测试的目的
软件测试是为发现错误而执行程序的过程;测试是为证明程序有错,而不是证明程序无错误;一个好的测试是在于它能发现至今未发现的错误;一个成功的测试是发现至今为止未发现的错误的测试。软件测试的目的不仅仅是为发现程序中存在的错误,它还是软件质量保证至关重要的一个环节。软件测试不同于程序员在代码编写完成后简单的使用、调试,软件测试需要遵循一定的原则,软件测试的原则大致包括以下内容:确定预期输出是测试必不可少的一部分,程序员应避免测试自己编写的程序,程序设计机构不应测试自己的程序,彻底检查每一个测试结果,对非法的和非预期的情况也要象对合法的预期输入一样编写测试用例,检查程序是否做了要它做的事仅仅是成功的一半,另一半是程序是否做了不要它做的事,除了真正没有用的程序外,一定不要扔掉测试用例,一段程序中存在错误的概率与在这段程序中已发现的错误成比例,在规划测试时,不要设想程序中不会查出错误,所有的测试都应当追溯到用户需求,应该在测试工作真正开始前就开始计划测试,测试应该从“小规模”开始逐步转到“大规模”,测试发现错误中80%的错误属于20%的程序模块,穷举测试是不可能的,但充分覆盖程序逻辑是可能的,测试是一件非常复杂,具有创造性的和需要高度智慧的挑战性任务。
2 面向对象特征对软件测试的影响
面向对象技术是一个全新的开发模式,具有以下特点:
1)它要综合考虑软件开发过程所有阶段。
2)在软件开发的整个生存周期中,每个阶段之间是连续的。
3)开发过程分为面向对象分析(00A)、面向对象设计(OOD)、面向对象编程(OOP)、面向对象测试(OOT)四个连续的部分。
如果一个软件系统是使用这样4个概念设计和实现的,则认为这个软件系统是面向对象的。一个而向对象的程序的每一个组成部分都是对象,计算是通过对象和对象之间的通信来执行的。
面向对象技术的本质是定义了类的抽象,将变量和与作用于它的操作封装到一块。然后用不同的类和方法组合成一个对象系统。面向对象软件将传统软件中的一个过程或一个方法内的复杂性转移到对象之间的交互中。面向对象语言一些本质特征形成如下的一些新的故障、错误风险。
1)基本功能模块。在面向对象系统中,系统的基本构造单元是封装数据和方法的类和对象,而不再是一个个能完成特定功能的功能模型。每个对象有自己的生存期,有自己的状态。消息是对象之间相互请示或协作的途径,是外界使用对象方法及获取对象状态的唯一方式。对象的功能是在消息的触发下,由对象所属类中定义的方法与相关对象的合作共同完成,并且对象在不同状态下对消息的响应可能完全同。
工作过程中,对象的状态可能被改变,产生新的状态,即发生状态的转移。对象中的数据和方法是一个有机的整体,在软件测试过程中,不能仅仅检查输入数据产生的输出结果是否与预期结果相吻合,还要考虑对象的状态变化。因此,除了要对对象的状态与方法间的相互影响进行测试,还要进行状态测试。
2)系统的功能实现。在面向对象系统中,系统的功能体现在对象间的协作上,而不再是简单的过程调用关系。面向对象程序的执行实际上是执行一个由消息连接起来的方法序列,方法的实现与所属对象本身的状态有关,各方法之间可能有相互作用。为实现某一特定的功能,可能要激活调用属于不同对象类的多个成员函数,形成成员函数的启用链。因此,基于功能分解的自顶向下或自底向上的集成测试策略不适用于面向对象软件系统的测试。
3)封装对测试的影响。封装是指在词法单位之中或之间决定名字可见性的访问控制机制。它支持信息的隐蔽和模块化,有助于防止全局变量访问的问题。尽管封装不会直接促成错误的发生,它却给测试带来了障碍。封装使对象的内部状态隐蔽,如果类中未提供足够的存取函数来表明对象的实现方式和内部状态,则类的信息隐蔽机制将给测试带来困难。
4)继承对测试的影响。继承也是面向对象语言中的一个本质特征。继承可用于一般与特殊关系,并目方便编码。但继承削弱了封装性,产生了类似于非面向对象语言中全局数据的错误风险。由于继承的作用,一个函数可能被封装在具有继承关系的多个类中,子类中还可以对继承的特征进行覆盖或重定义。
5)多态对测试的影响。多态性是指一个引用可以与多个对象绑定的能力。多态能减少代码的复杂性和规模,同时还可以实现动态绑定。但依赖于不规则的类层次的动态绑定可能产生编程人员没有想到的结果。某些绑定能正确的工作但并不能保证所有的绑定都能正确地运行。以后绑定的对象可能很容易将消息发送给错误的类,执行错误的功能,还可能导致一些与消息序列和状态相关的错误。
3 总结
软件测试作为软件上线的最后关口,应得到高度重视。但由于思想意识和历史原因,出现重开发轻测试的现象,软件测试成为制约软件成功上线运行的瓶颈。由于对软件测试的重要性理解不够,很多人认为程序能够运行基本上就已经成功,没有必要进行专门的测试,这些都是错误的观点。
软件测试分为:单元测试(模块测试),集成测试。在进行所有的测试前,一定先要认真阅读各种相关文档,同时制定测试计划、同时进行测试用例设计,在设计测试用例时,要对待测软件进行分析,设计合理的模型,制定测试用例。在测试进行过程中,要根据实际情况修改或增加测试用例。在测试完成后,要根据测试结果填写《软件测试问题跟踪单》,在整个软件测试完成后,要分析测试结果并编写测试报告。在测试报告中要说明本次测试的结果,如各个等级的BUG的数目,在各个模块中的分布情况及评语。在整个项目完成后,将测试工作所产生的所有文档交文档管理员归档。
软件测试是对软件产品是否能够满足预期要求做出客观的技术性评价。软件测试在明确和界定清楚测试与开发的关系时,不能简单地把测试与开发看作是串行的过程。从工作流程看,测试应当从需求分析开始,测试不仅要与开发平行,而且从开始就以测试用例为需求立定客观标准。
随着我国软件业的发展和各公司测试管理过程的进一步完善,作为软件质量保证的重要组成的软件测试也越来越受到重视,如何在软件开发项目中有序地管理和分析各种问题对质量控制和过程改进也将越来越重要。本系统支持缺陷驱动的测试过程,但是对自动化的支持还比较肤浅,只是在现有CPPUNIT的基础上做了一些整合,这个是以后需要改进的地方。我们也相信,由于软件自动化测试能显著提高软件测试的有效性和效率,将在越来越多的软件测试管理工具中得到支持。
参考文献:
[1]朱少民,软件测试方法和技术,北京:清华大学出版社,2005.
[2]徐中伟,软件测试质量的度量,计算机工程与应用,2002.