一.软件测试的定义
软件测试(Software testing)是软件生存期(Software life cycle)中的一个重要阶段,是软件质量保证的关键步骤。通俗地讲,软件测试就是在软件投入运行前,对软件需求分析、设计规格说明和编码进行最终复审的活动。1983年IEEE提出的软件工程术语中给软件测试下的定义是:“使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别”。这个定义明确指出:软件测试的目的是为了检验软件系统是否满足需求。
从用户的角度来看,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,所以软件测试应该是“为了发现错误而执行程序的过程”。或者说,软件测试应该根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误或缺陷。
二.软件测试的生命周期
测试主要依据是被试系统的研制任务书和技术规格书,是对软件整体功能和性能的综合测试与评估。测试原理是软件测试活动的理论基础,测试方法是测试原理的实际应用和获得测试数据的手段。基于软件的共性,对于软件的测试要遵循一般软件的测试原理和方法。同时,针对软件的特性,必须找到合适的测试方法。测试用例的合理性对于软件的测试与评估具有关键作用,而如何使设计的用例合情、合理并且典型有效并不容易。所以应该与软件的研制人员以及最终用户一起,有针对性地研究实际操作环境并加以描述,形成合理的测试用例集。另一方面,软件运行环境的复杂程度对软件评估具有重要作用,所以应产生尽量逼真的运行背景以便于研究。软件测试的周期如图1所示。
实践证明,尽管人们在开发软件的过程中使用了许多保证软件质量的方法和技术,但开发出的软件中还会隐藏许多错误和缺陷。这对于规模大、复杂性高的软件更是如此。所以,严格的软件测试对于保证软件质量具有重要作用。
软件测试在软件生存期中横跨两个阶段。在软件编码阶段,当编写出一个模块后,通常要对它进行必要的测试(称为单元测试),这时测试与编码属于同一个阶段。在编码阶段结束后,对软件系统还要进行各种综合测试(集成测试与系统测试),这是一个独立阶段,即软件测试阶段。在这个测试阶段又有两种性质不同的测试:研制单位内部进行的集成测试和系统测试与用户(或第三方)进行的验收性测试。
在软件测试生命周期内,错误在软件开发的每个阶段都可能被带入。在软件测试中,某些错误被发现、分类、隔离,最终被纠正。由于软件不断被修改,所以这个过程是一个反复进行的过程。
三.测试方法和流程
软件测试方法主要有黑箱测试方法与白箱测试两类。黑箱测试又称功能测试、数据驱动测试或基于规格说明的测试,是在完全不考虑程序内部结构和内部特性的情况下,检查输入与输出之间关系是否符合要求。白箱测试又称结构测试、逻辑驱动测试或基于程序的测试,是在已知程序内部结构的情况下设计测试用例的测试方法。显然,白箱测试适合在单元测试中运用,而在独立测试阶段多采用黑箱测试方法。
测试用例(Test case)实际上是对软件运行过程中所有可能存在的目标、运动、行动、环境和结果的描述,是对客观世界的一种抽象。设计测试用例即设计针对特定功能或组合功能的测试方案,并编写成文档。测试用例应该体现软件工程的思想和原则。测试用例的选择既要有一般情况,也应有极限情况以及最大和最小的边界值情况。因为测试的目的是暴露应用软件中隐藏的缺陷,所以在设计选取测试用例和数据时要考虑那些易于发现缺陷的测试用例和数据,结合复杂的运行环境,在所有可能的输入条件和输出条件中确定测试数据,来检查应用软件是否都能产生正确的输出。
软件测试所得到的数据经过处理以后,可以用来作为评估软件系统是否满足用户需求的依据。
四.软件评估理论及其发展现状
软件的评估理论是进行评估的理论依据,评估方法是评估理论的实际应用和处理测试数据的方法。对于评估指标体系中的不同指标,应该根据测试数据的不同,选取相应的评估理论和方法。软件评估(Software assessment)的实质是对软件质量的度量与评价。
我们对软件质量评估的定义是:“为了确定一特定的软件模块、软件包或软件产品是否验收合格或发布而把特定的评估准则应用到该软件模块、软件包或软件产品上去的活动”。
可见,软件评估的对象是“软件模块、软件包或软件产品”,软件评估的目的是“确定被评对象是否验收合格或发布”。定义中提到的评估准则是“根据特定的软件产品和质量需求,确定产品是否通过验收或发布的一组成文的规则和条件的集合”。从广泛意义上讲,评估准则已经包括了评估方法和指标体系,即如何处理获得的测试数据与如何应用评估准则到被评估软件上。
软件可靠性评估(Software reliability assessment)的完整含义是:根据软件系统可靠性结构(单元与系统间可靠性关系)、寿命类型和各单元的可靠性试验信息,利用概率统计方法,评估出系统的可靠性特征量。
目前,软件可靠性工程是一门虽然得到普遍承认,但还处于不成熟的正在发展确立阶段的新兴工程学科。国外从60年代后期开始加强软件可靠性的研究工作,经过20年左右的研究推出了各种可靠性模型和预测方法,于1990年前后形成较为系统的软件可靠性工程体系。同时,从80年代中期开始,西方各主要工业强国均确立了专门的研究计划和课题,如英国的AIVEY(软件可靠性和度量标准)计划、欧洲的ESPRIT(欧洲信息技术研究与发展战略)计划、SPMMS(软件生产和维护管理保障)课题、Eureka(尤里卡)计划等。每年,都有大量人力物力投入软件可靠性研究项目,并取得一定成果。
国内对于软件可靠性的研究工作起步较晚,在软件可靠性量化理论、度量标准(指标体系)、建模技术、设计方法、测试技术等方面与国外差距较大。国内多数软件的生产方式还处于计算机时代的早期阶段,缺点很明显,主要表现在:1、透明度差;2、软件交付系统联调前只靠自检,质量得不到保证;3、用户对交付的软件可靠性缺乏信心。多数所谓的“软件测试”仅仅对几个预先指定的用例进行一下表演就算通过。目前还没有像硬件那样完善的检验体系,交付软件的质量不高。典型统计表明,“开发阶段平均每千行代码有50-60个缺陷,交付后平均每千行代码有15-18个缺陷”,有时会留下严重隐患。
目前,软件可靠性管理方面还没有建立起具有权威性的管理体系和规范。比如,如何描述软件可靠性、如何测试、如何评估、如何设计、如何提高等。由于目前国内外对于软件可靠性模型的研究多集中在软件的研制阶段,而很少有涉及测试与评估阶段的可靠性模型,所以从事软件可靠性测试与评估研究是一个有理论价值和实际意义、并且存在一定难度的课题。
随着计算机软件编制的规范化,必然要将软件可靠性考核纳入科学、规范的轨道。具体表现在:1、在软件系统研制任务中,制定软件可靠性量化指标,使软件考核有明确的标准;2、建立完善的软件测试、可靠性信息收集系统,使在计算机软件开发中通过科学的软件测试不断减少缺陷;3、通过研究软件可靠性考核方法,制定相应的软件考核规程、标准;4、开发软件可靠性评估软件,使软件鉴定更加方便。
文章来源于领测软件测试网 https://www.ltesting.net/