时间:2022-05-10 03:20:40
绪论:在寻找写作灵感吗?爱发表网为您精选了1篇软件测试论文,愿这些内容能够启迪您的思维,激发您的创作热情,欢迎您的阅读与分享!
摘要:嵌入式计算机是计算机行业中一种比较先进的计算机技术。随着科学技术的不断发展,嵌入式计算机的使用范围也越来越广,在嵌入式计算机使用的过程中,能够有效地保证对需要的功能的实现。但是,由于嵌入式计算机软件的结构相对于其他类型的计算机来说比较复杂,这就要求我们要能够按照使用需要,及时对嵌入式计算机软件技术进行测试。文章根据现阶段嵌入式计算机与嵌入式计算机软件的概念,针对开发使用的技术进行分析,找出如何使用相关的技术对嵌入式计算机的软件进行测试。
关键词:嵌入式;计算机软件;测试;关键技术
前言
随着我国的工业不断地进步,科学技术的不断发展,嵌入式计算机技术也得到了很大程度的提升。我们身边普通的计算机并不是嵌入式计算机,嵌入式计算机指的是专门针对某一个项目或者是某一个行业进行开发的专业计算机。嵌入式计算机不仅仅能够实现对需求开发的功能,有效地提升工作的效率。嵌入式软件是嵌入式计算机中安装的软件,一般情况下,嵌入式软件都需要根据不同的工作需要,完成相应的功能,这就要求嵌入式软件要具备一定的稳定性,对嵌入式计算机软件进行测试,能够很好地保证嵌入式软件的正常工作。
1什么是嵌入式计算机
嵌入式计算机指的是针对某一种技术,或者是某一种网络、某一种功能等专门开发的计算机系统,利用计算机技术,加入嵌入式系统,能够实现对计算机硬件和软件功能的增多,能够更加适合实际运用的需要。嵌入式计算机针对某一种功能的需要进行开发,对开发的成本、功能的可靠性以及计算机的大小等因素,都有十分严格的要求。通过对计算机处理器、硬件、系统、应用等进行嵌入式技术的操作,能够更加有效地保证计算机技术的实现。嵌入式计算机大多被应用在工业生产中,能够提升工作效率,保证工作的质量[1]。
2什么是嵌入式计算机软件
嵌入式计算机软件指的是在嵌入式计算机中使用的软件,能够进行独立功能的操作,嵌入式计算机软件包括嵌入式微处理器、传感器、控制器、定时器、储存器等等。在嵌入式计算机中使用的电子芯片或是电子器件,将嵌入式计算机软件安装到嵌入式计算机中,能够有效地实现常规计算机不具备的功能,比如:实时监控功能、对设备的管理功能、数据处理功能、进行移动计算等等,真正地实现了现代化自动化的电子处理,是实现现阶段自动化与智能化的社会生产力的重要途径,嵌入式计算机软件就是自动化的核心部分[2]。我们可以将嵌入式计算机软件分为:简单嵌入式系统和复杂嵌入式系统两种。简单的嵌入式系统只能够完成一项功能,比较典型的简单嵌入式系统就是单片机。单片机通过ROM技术就能够实现对系统的使用,能够达到对程序控制的目的。复杂嵌入式系统的功能与普通的计算机系统功能并没有什么过大的区别,只不过在复杂的嵌入式系统中,安装了一些微型的嵌入式操作系统,以及嵌入式应用软件在计算机中,能够使计算机的功能得到相应的完善,这就是嵌入式计算机软件的作用[3]。
3什么是嵌入式计算机软件的测试
嵌入式计算机软件相比普通的计算机软件来说,更具有专业性,嵌入式计算机软件只能够在某一个制定的平台或者系统中运行。但是嵌入式计算机软件的开发环境与运行的环境还存在很大的差异,不能够使用同一网络环境。嵌入式计算机软件需要使用交叉开发的形式,在进行开发的计算机中,安装并运行开发工具,开始对软件进行编译,再将编译完成的软件通过下载的方式,将软件发送到目标计算机中,当开发计算机与目标计算机都有了嵌入式软件,就能够建立通讯连接,并且能够对软件下达命令、下载数据等等。两台计算机的操作系统不同,计算机的处理器也有着一定的差异,这样的方式会增加嵌入式软件开发过程的步骤,增加了开发步骤的复杂性[4]。我们将对嵌入式软件进行开发的计算机称为宿主机,对软件进行接收并运行的称为目标机。宿主机对使用开发工具,利用宿主机的操作系统对计算机软件进行开发,通过通信连接将计算机软件发送到目标集中,尽管这一系列的操作看似很简单,但是却需要强大的系统和硬件的支持。在这种形式下进行运行的嵌入式计算机软件开发的活动,一般情况下,宿主机都是我们平时工作生活中使用的通用计算机,也可以是开发微机或者是软件工作站等等。目标机与宿主机不同,目标机能够承载宿主机开发的嵌入式计算机软件的运行,将嵌入式计算机软件安装在目标机中,就能够实现嵌入式软件的功能[5]。
4对嵌入式软件测试关键技术进行研究
4.1对宿主机进行测试的技术研究
宿主机指的是对嵌入式软件进行开发的计算机,对宿主机进行测试的方式有两种,即静态测试与动态测试两种,这两种方式使用的是代码逻辑的方式对宿主机进行测试。4.1.1静态测试技术很多计算机软件开发的专家,在对计算机软件进行检测的时候,通常使用的都是人工检查的方式,由设计人员组成一个小组,小组的成员之间互相交流对软件开发使用了哪些程序、使用的是什么算法进行的计算,并交代设计数据与软件的模块之间有什么样的关系等。这样的方式虽然能够在一定程度上找出软件中是否存在相关的问题。但是,由于现阶段嵌入式计算机软件的结构越来越复杂,设计的步骤越来越繁琐,软件设计的规模也在逐渐扩大,这就要求在一款软件的设计过程中,可能会有很多的软件设计师、工程师等一起参与到软件的开发工作当中,每个工作人员的分工也大有不同,再使用从前的方式对软件进行检查,就会加重检查工作的负担[6]。这就要求我们,要根据现阶段的计算机软件开发的实际情况,找出最合适现阶段软件开发的检测技术,对原始的计算机软件的检测工作进行优化升级,能够使计算机软件的检查工作更加简便。在检查的过程中,加入适当的检测技术,先对整个嵌入式计算机软件的开发软件系统框图进行整理,并且对其设置自动连接的相关量,软件的源代码编程能够通过自动化技术进行查找。这样的方式能够使软件审查工作的工作效率有很大的提升,能够使验证工作的结果更加准确有效。我们可以通过静态测试的方式,得到软件中相关信息[7]。(1)软件的源代码程序绘制过程的逻辑图,以及对软件进行控制的工作流程。(2)软件系统完整的逻辑框图,系统内部关系调节的网络图。(3)软件程序运行的路径分析图。(4)软件生成的不同部分的显示图。(5)软件不同部分显示图的位置信息,操作的频率等信息。这些信息都能够在静态测试中得到实现,首先要使用静态测试的系统对软件的操作逻辑和控制系统进行分析,能够有效地将软件分析的更加精确,在进行软件测试的过程中,能够使测试的结果更加准确,并且能够将测试结果更加精准的表现出来,检测出软件系统中是否存在相关的问题,并以此对软件的系统进行改善。4.1.2动态测试技术对宿主机的动态测试主要指的是对软件的代码进行测试,能够有效地检测出代码的执行能力,并且分析软件代码的覆盖率,能够有效地检测出软件的功能。能够有效地了解到软件的性能,还能够通过分析更加了解软件中代码的执行情况,这样的检测方式能够促进对软件系统的改进,推进了软件系统的发展,可以根据检测的结果,对软件的功能进行优化和完善[8]。动态测试技术还能够对软件设置的完成程度进行测试,能够对其中已经开发完毕的数据进行检测,检查其中是否存在缺少的数据,这样的方式能够为软件的开发工作提供重要的依据。动态测试技术能够将软件中的每个函数的情况,以及对内存的分配情况等进行检测,能够将软件中各种元素的分配情况进行显示,并且能够同时对相对应的数据、代码、函数等进行显示。
4.2对仿真机进行测试的技术研究
仿真机作为宿主机与目标机之间重要的环节之一,通过仿真机的使用,能够有效地完善计算机软件测试的功能以及软件自身的性能,比对宿主机的测试更加直观、更加真实,并且能够对软件中主要的技术进行仿真测试,使测试的结果更具有说服力。其测试的结果既能够作用于宿主机,还能够作用于目标机。4.2.1仿真机测试数据获取技术现阶段,针对仿真机的数据监测,一直都是技术上很难实现的问题之一,很多对嵌入式软件的检测都需要在测试的过程中先提供软件设计的源代码,这样的方式需要使用的数据量比较大,这就要求我们要针对这类数据的准确性进行技术的提升,才能够保证检测数据的精准性。仿真机监测技术能够从一定程度上保证数据信息的完整性,在对数据进行完全的缓存后,再使用测试工具进行修改,能够从很大程度上保证数据的正常输入,在测试结束之后,还能够对已经进行缓存的数据进行读取,并将数据整理保存到计算机中。但是,需要注意的是,使用这种方式进行测试,还要保证数据缓存的大小不会超过测试的容量,测试才能够顺利的运行[9]。4.2.2仿真机仿真测试技术对嵌入式计算机软件进行仿真测试,能够在测试的过程中,对数据进行集中地管理和处理。仿真测试需要一定的技术支持,能够将数据进行仿真模拟,在模拟的过程中,能够看到技术的使用过程,再按照每款软件不同的性质,分类仿真,使测试的结果更加真实可靠。还要保证在对数据的检测过程中,传输信号是能够稳定运行的,才能够保证仿真测试的数据是实时的。
4.3对目标机进行测试的技术
目标机相对于其他部分来说,在测试的过程中,更需要注意目标机的综合能力,还要能够测试软件自身的交互能力,并且测试软件是否安全可靠,目标机测试的结果能够更加真实地体现计算机软件的性能[10]。4.3.1故障注入技术嵌入式计算机软件在计算机中运行的状态,可以通过人为的方式进行设置。但是,这就要求目标机的部件能够具备一定的功能,能够按照设置的时间、设置的运行方式等进行运作。故障注入技术指的是在目标机中,通过对某一部分的测试,能够更加有效地检验目标机中的性能,比如:鲁棒性测试、边界测试等等。使软件在运行时的状态能够表现的更加明显。4.3.2内存分析技术嵌入式计算机的系统,一般情况下内存都会比较小。使用内存分析技术,能够有效地保证在分析的过程中,找出计算机内存存在的问题。在问题的分析过程中,能够防止内存中的某些内存会产生分配错误的问题,很多的计算机软件故障都是因为内存分配的错误造成的。这就要求我们要通过内存分析的技术,来对内存进行判定。一般情况下,我们都会选择硬件的方式进行分析,但是硬件分析的方式需要耗费的资金比较多,而且分析工具具有一定的环境限制,但是软件分析会对计算机的代码产生一定的影响,并且会影响内存的运行。这就要求我们在进行内存分析的过程中,要能够按照不同的情况对测试的方式进行选择[11]。4.3.3程序性能分析技术在嵌入式计算机运行的过程中,还有一个十分重要的因素就是程序的性能。一般情况下,嵌入式计算机对程序的性能都有一定的要求,能够在已经设置的时间内,对某一数据进行中断处理或者是生成处理,这就要求我们要在测试的过程中,要能够根据实际情况决定先对那一部分的代码进行优化,因为嵌入式计算机的优化程序的时间是很宝贵的,要尽可能地避免对一些没有必要的程序的优化工作。使用程序性能分析技术,能够将计算机内的数据进行整理,并按照消耗的时间,消耗的类型,消耗的历时等进行分析。按照这些数据,能够对计算机中的数据进行判断,决定先对哪一部分的程序进行优化,才能够保证对数据检测的工作效率,保证对程序的优化是有效的。使用程序性能分析的工具,不仅仅能够显示计算机中每一部分的优化需要多少时间,还能够按照需要优化的程度进行排序,引导工作人员对系统程序进行优化分析[12]。在对程序进行测试的过程中,可以先对计算机软件中的代码进行分析,能够找出已经被使用的代码,以及计算机接口的工作效率等等。可以在测试的过程中使用插桩的方式进行测试,分析完毕后在可执行的代码当中适当地融入嵌入式软件,并将二者进行综合测试,得到的结果就能够明确地看出,其中的代码哪些已经执行,哪些被遗漏,或者是哪些数据的信息覆盖还不够全面。需要注意的是,使用这类分析工具进行分析,很可能会影响到计算机软件代码的运行,导致软件运行出现故障问题。
5结束语
嵌入式计算机与我们的生活之间的关系十分紧密,能够产生巨大的影响,我们身边很多部分都使用了嵌入式计算机进行功能的完成和实现,比如:飞机的飞行控制器,或者是我们家中很多的家用电器,冰箱、洗衣机等等,都在一定程度上使用了嵌入式软件技术。随着科学技术的进步越来越快,嵌入式技术也越来越繁琐。这就要求我们要在不断地使用中对嵌入式技术进行完善,对嵌入式技术进行优化升级,能够从一定程度上保证嵌入式技术的发展,对软件进行测试,能够大大地提升嵌入式计算机软件的稳定性。
作者:王琨 单位:西安外事学院工学院
1软件工程中的软件测试
1.1软件测试的含义
软件测试根据用户的使用目的,将成功开发的软件进行相应的纠错动作,从而披露该软件的各种问题及缺失因素,促进研发人员进行相应的改进,从而达到完善软件的目的。
1.2软件测试的关键性阶段
主要有以下两个关键性的检测阶段。第一阶段是软件开发过程中各主要单元模块完成后进行测试。这一阶段测试可以将缺陷控制在最小单元模块内,给研发人员最快的测试反馈,促使其完善单元模块的功能,达到用户的使用要求;第二阶段测试是软件系统全部完成后,进行全方位的综合测试,查找系统在使用过程中可能存在的问题。此时,需要根据系统要实现的功能进行多种测试工具的应用,以其找到系统不符合要求的功能或性能瑕疵。
1.3软件工程中软件测试的方法
对软件工程进行软件测试时,不同软件可以运用不同的测试方法。现阶段,主要以软件测试在测试过程中是否需要将程序进行完全运行来判断测试方法,不需要系统程序运行就能完成测试的方法称为静态方法;需要系统时时传送相应数据,并通过相应程序检测系统是否达到用户的期望值,是否存在运行逻辑上的问题和算法上的缺陷等的测试方法称为动态方法。目前,静态测试方法应用较广的有静态排演法、软件检查法和软件审查法。随着软件测试方法的不断创新和完善,新兴的测试方法如静态自动分析、分析模型等方法不断得到应用;动态测试方法随着精细化测试进程的深入逐渐细分为单元测试方法、集成测试方法、系统测试方法。这些测试方法相较于静态测试方法,具有范围广、测试成功率高、内容覆盖面大、应用程度高等特点。如白盒测试、代码覆盖测试等。
2软件测试在软件工程中的作用分析
2.1软件工程项目需要软件测试进行全方位的辅助管理
所谓软件工程项目就是将用户的要求进行立项管理,通过建立项目组、研究用户的使用目标来确立项目目标,对目标现状进行系统研究与分析、总体目标细分阶段性目标以及规划项目总体方案等,将软件开发过程建立在项目管理过程中。在这一过程中,各阶段性成果都需要软件测试来校验其可行性,从而辅助软件工程项目步入更完善的项目管理中。首先,软件工程项目需要精细化项目管理和集中项目管理两者协调统一。因此,需要设立软件测试机构,能够对项目细分的各阶段、各模块进行软件测试。其次,项目组人员组成和责任落实要依照规章制度实施。要体现软件测试的重要性和实际意义,测试机构负责人为项目组组长的最佳人选。其组员为各项目负责人和其他测试人员组成。软件测试结果必须立即反馈到软件研发人员、程序员及系统分析人员等相关人员手中,以期促进其团结协作,将软件各部分呈现出的问题解决。最终满足用户的使用要求,实现软件设计的目标。可见,软件测试的辅助作用,对于软件工程项目的精细化管理、软件相关技术的综合管理等至关重要。
2.2软件工程项目实施反促软件测试发展
研发一个新的软件系统时,其核心内容包括目标确定、框架设计、分支设计和编码应用等,这些核心内容均需要软件测试来实现其统一性和兼容性。系统目标是软件测试的最终目的,软件测试需要围绕系统目标进行缺陷的发现和反馈,从而实现各阶段测试的统一性和完整性,从而促进系统的协调和完善。经过软件测试的系统,必须保证达到项目目标,且在长时间运行下无重大bug。从这一过程来看,软件测试是在软件工程项目实施中得以发展的。软件测试机构并不是真正意义上的独立,其“独立”仅是功能上的独立。实际上,在进行软件工程项目实施的整个过程中,无论是整体设计还是精细化管理,都需要软件测试参与其中,以测试角度对软件工程项目的设计和实施进行指导和辅助,从而纠正一些设计上的错误和细节上的缺陷。这种参与的直接性促进软件测试必须紧跟项目研发现状,才能提出及时有效的参考意见,促进项目顺利开发。软件编码规范是软件研发团队必须规范执行的,而这种规范的编码刚是软件测试机构的首要任务,制定规范要严肃,执行规范要严格,才能给用户呈现出高质量的软件产品。
2.3软件测试原则
软件测试的原则是在其测试的基本目的和要求下产生的,因此,在进行软件测试时,必须注意其原则性。(1)坚持用户使用目的,坚持项目总体目标和阶段性目标的实现原则;(2)测试“精细化”即细分分支、单元模块、阶段性成果、系统全面测试等随时进行;(3)测试时间要越早越好,频率越高越好;(4)测试中逻辑性检测和算法检测要注重;(5)测试要结合数据检测进行;(6)保证测试的严肃性;(7)测试坚持第三方进行原则;(8)不合理条件值都要进行测试;(9)测试过程、方法、用便、结果、完善等都要记录在案,便于故障定位和日常维护。
3自动化软件测试技术分析
随着智能化技术和自动化技术的不断深入应用,在软件测试中,自动化软件测试技术得到创新和发展,并在软件开发中应用得越来越广泛。所以,人们将各种自动测试的效果进行评估,将成功案例进行相似引用,来判断检测的可行性。最初的自动化测试具有较严格的针对性,运用特定的测试原则和测试方法,将统计指标运用其中,从而得到测试结果,并对其进行全面评估,从而得出自动化测试的严密性。随着自动化测试的不断深入推进和创新,其测试准则和自动测试技术越来越成熟,逐渐过渡到自动测试模型化阶段。逐渐形成自动测试的等级制度,使得自动软件测试技术成为测试控制能力高低优劣的一个重要判断依据。
4结语
总之,软件测试已经发展成为软件工程中一个必不可少的重要组成部分,软件测试不仅能够对软件的质量进行一个系统的评价,而且是目前确保软件质量的主要途径之一。并实现软件产品整体质量与企业经济效益的整体提高,进而提升软件企业的核心竞争力。。
作者:栾新亮 单位:鄂尔多斯市特种设备检验所
1嵌入式软件的特点
嵌入式系统的应用软件是实现嵌入式系统功能的关键,其主要特点如下:
1.1软件开发环境和运行环境不同
嵌入式系统软件的开发通常采用交叉编译方式,即软件的开发在通用计算机上进行,而软件的运行环境却是在嵌入式专用设备上。开发环境被认为是主机平台,运行环境为目标平台,相应的测试被称为主机测试和交叉测试。
1.2缺乏可视性
嵌入式软件缺乏可视性主要表现在两个方面:(1)数据的可视性方面:嵌入式系统通常没有显示设备和存储设备,只有在线实时观测或是将数据传输到主机上才能进行结果分析;(2)编程的可视性方面:由于嵌入式软件的开发环境和运行环境不同,在进行开发时,一方面不能实时观察程序的运行效果,另一方面程序在仿真环境和目标设备中的运行效果可能存在差异。
1.3实时性要求较高
多任务嵌入式系统中,对重要性各不相同的任务进行统筹兼顾的合理调度是保证每项任务及时执行的关键,单纯通过提高处理器速度是无法完成和提高效率的,这种任务调度只能由优化编写的系统软件来完成,因此实时性是系统软件的基本要求。
1.4软硬件紧密结合
在嵌入式系统软硬件体系结构内部,各层次、模块之间的耦合度比通用计算机更强,这是嵌入式系统要求高效的结果,而通用计算机出于可扩展等要求更强调系统的模块化、层次化和标准化。
2嵌入式软件仿真测试环境
嵌入式软件测试不同于传统的通用软件测试,由于其嵌入性、实时性、反应性、专用性等特点,它比一般的通用软件测试更加困难。因此,根据不同测试阶段的需求,建立恰当的测试环境是避免嵌入式软件测试瓶颈、提高测试效率、保证测试质量的唯一出路。由于嵌入式系统通常采用软硬件并行开发的方式,在进行软件设计与测试时,真实目标设备常常不能及时提供,而且对于单片机、DSP这些深嵌入式系统来说,数据的显示采集、测试用例输入等都需要专门的软件来实现,因此在进行嵌入式软件测试前,必须首先建立嵌入式软件仿真测试环境。嵌入式软件是软硬件耦合系统,把软硬件分离开来,建立嵌入式软件独立的运行环境是建立嵌入式软件仿真测试环境的关键。一个完整的嵌入式系统包括处理器、I/O接口以及各种外部设备,在建立嵌入式软件仿真测试环境时,需要考虑软硬件的分离原则,即哪些采用真实硬件设备,哪些需要用软件仿真实现,哪些需要用硬件仿真实现,不同的嵌入式系统以及软件测试阶段,需要建立的仿真测试环境也不相同。
3嵌入式软件仿真测试环境分类
根据运行环境和实际环境的差异,嵌入式软件仿真测试环境可分为全数字仿真测试环境、半物理仿真测试环境和全物理仿真测试环境。
3.1全数字仿真测试环境
全数字仿真测试环境是指仿真嵌入式系统硬件及外围环境的一套软件系统。全数字仿真环境是通过CPU、控制芯片、I/O、中断、时钟等仿真器的组合在宿主机上构造嵌入式软件运行所必需的硬件环境,为嵌入式软件的运行提供一个精确的数字化硬件环境模型。
3.2半实物仿真测试环境
半实物仿真测试环境是利用仿真模型来仿真被测系统的外围系统,而被测系统采用真实的系统。测试环境模拟被测软件运行所需的真实环境的输入和输出,并且能够组织被测软件的输入来驱动被测软件运行,同时接收被测软件的输出结果。外部仿真设备:为目标机提供激励信号输入,接收并处理目标机输出数据,保证软件的连续、不间断运行,实现自动化测试;可以采用软件仿真或硬件仿真(ADS2等)。并不是所有的外设都采用仿真实现,可以随着项目的进展以及根据外设的复杂性,有选择性的加入真实外部设备。
3.3全实物仿真测试环境
在全实物仿真测试环境中,被测软件处在完全真实的运行环境中,直接将整个系统和其外围的物理设备建立真实的连接,形成闭环进行测试。全物理仿真测试环境是基于真实目标机的系统测试,是对整个嵌入式系统软硬件的综合测试,只有在系统研制的后期,所有硬件研制工作都已完成后才能进行。
4嵌入式软件仿真测试环境的构建方法
根据嵌入式软件及测试环境的特点,不同测试阶段的测试环境搭建方法如下:
4.1单元测试
单元测试是针对软件设计最小单位模块而进行的内部测试。由于目标机环境资源少、实现难度大,因此嵌入式软件的单元测试主要采用白盒测试的方法,一般在宿主机上,利用集成开发环境或测试工具(Clockwork、TestBed、Cantata++等)的全数字仿真模拟器来进行,找出单元编码时产生的错误以及与软件需求设计的偏差。在极特殊情况下,也可以在目标机上进行,利用单元测试中的驱动模块和桩模块进行。
4.2集成测试
集成测试是把经过单元测试的模块按软件的结构组合在一起作为一个软件部件或部件集来进行的综合测试。嵌入式软件的集成测试可在宿主机环境上利用Clockwork、TestBed、Cantata++等测试工具来完成,也可在目标机上搭建仿真测试环境来完成,具体依赖于软硬件耦合程度和集成级别。
4.3软硬件集成测试
软硬件集成测试主要是在软件集成测试完成后,形成独立的配置项,加载到相应的硬件平台上测试其运行情况,以确定软硬件能够正确协调工作,实现软件需求规定的功能、性能等要求。软硬件集成测试必须在目标机环境下进行,交联设备可以采用仿真模型替代。可以利用半实物仿真测试工具搭建测试环境来进行确认测试,比如:ADS-2、dSPACE等。
4.4系统测试
系统测试是将被测软件和硬件资源都综合起来构成完整的应用系统进行测试,确保整个系统达到研制任务书的要求。嵌入式软件的系统测试对测试环境有严格的要求,必须在真实目标机环境下进行,包括运行平台、交联设备都要是真实的,目的是要确保嵌入式软件能够在最终的真实硬件环境下正确运行。
5结束语
嵌入式系统在人类生活中发挥着重要的作用,软件所占的比重越来越大,也越来越复杂,保证嵌入式软件的可靠性正面临严峻的挑战。由于嵌入式系统的实时性和嵌入式特性,使得嵌入式软件的测试也面临一些特殊的问题。根据嵌入式软件设计过程中不同阶段的测试需求,建立合适的测试环境,才能提高嵌入式软件的测试效率,保证软件设计工作的顺利进行。另外,虽然日前已经有一些针对嵌入式软件的测试和调试工具,但是在有些方面仍存在不足,需要进一步对嵌入式软件的测试环境和测试技术进行研究,完善和研制更先进的测试工具。
作者:于慧媛 单位:中国人民解放军91413部队
1软件测试对于软件开发工作的重要意义
软件测试是软件开发中不可缺失的工作内容,通过有效的软件测试步骤,能够帮助软件开发工程人员减轻工作负担,在很大程度上提升了软件的实用性能。因为电子软件的生产过程极为复杂,在开发的过程中需要经历许多环节,每个环节的数据要求都极为严格,很有可能因为极小的差异造成软件应用的失误。软件测试就是为了实现对于软件开发后的使用作出初步的评估,保证下一个生产环节能够正常执行,也为了确认软件的使用具有质量保证。软件的测试能够涉及整个软件设计、开发,以及未来升级的过程。首先,能够帮助软件开发商确认软件的使用质量。其次,还能够为工程师提供有效的信息反馈,帮助工程师进行软件系统操作的风险预警评估。还有,就是实现为未来软件系统升级奠定基础,能够保证软件在未来的开发计划中添加有效的性能价值[1]。软件测试的工作具有相当高的行业地位,能够帮助工程师和开发商尽早发现问题,并且给予充足的时间去解决问题,进而提升了大众对软件的使用效果,满足了推动科学技术进步的时代要求。
2软件测试的具体步骤和方法
2.1软件测试的对象
软件测试的对象主要是针对于软件使用过程中出现的逻辑操作,其中包含软件的使用规则,还有在软件应用中的程序设定是否满足人们的应用习惯,还要考虑到软件开发的初期设计是否能够满足社会大众的需求,能够实现广泛的普及,并且获得大众的喜爱。因为软件测试与其他方式的应用测试不同,软件的测试需要遍布整个软件的设计完成过程,要求软件能够实现具体使用的功能性。
2.2软件测试的种类
软件的测试工作也分成两种形式,一种是静态的检测试验,另外一种是动态的检测试验[2]。首先进行静态种类的具体划分解释,其中的工作内容具体实施不必要展开软件的运行功能,只要进行人力的代码查询工作审核就可以了。这期间可以对整个软件的设计脚本进行分析,得到房中数据的编码,保证在网络中展开的数据时正确有效的。与此同时能够展开对软件编程的评估,其中的数据值都在控制范围内,不能超过最低的数值要求。编写数据程序的人员在结束初始工作后还要展开对程序的审查,其中的大部分工作内容需要依靠合作完成。专业的人员通过技术手段结束数据的参考值评估,要求在人工审查的途径中实现数据的核对工作。总结的角度来评定静态测试的作用,就是通过人工和数据参考工具实现对编程的审核。另外一种就是动态的测试种类,这种方式需要进行软件的启动,在运行的过程中通过既定的数据进行测试评估。按照专业的白盒与黑盒方式进行测试实验,达到动态测评的目的。白盒的功能就是测试软件的逻辑性,能够满足人们使用的正常运作,黑盒则更倾向与想软件的使用功能,以及软件的数据管理进行测试。白盒与黑盒的测试功能满足了对于软件测试的基本要求,实现了为软件后续开发提供数据的重要任务。
2.3软件测试的方法步骤
将软件的测试方法进行归纳和综合,发现主要的测试方法来源于对于测试种类的需求。将白盒和黑盒的测试程序运用到软件的测试中去,实现人工和技术的双层数据收集,实现对于软件的数据编程、应用操作,以及未来升级的发展需求都进行监管。由白盒协助人工进行数据的整理,达成数据外接的基础使用。再由黑盒的运行操作达成对于内置程序、数据的检测和观察,保证软件进入正式使用中的功能性。软件测试的整体步骤,都由数据的支持进行操作,具体的步骤首先是进行功能性检验,然后将外因排除后执行内因运行,之后找寻可能导致程序出现问题的原因,最后结合参数的运算和总结,达成软件测试的目的[3]。
3软件测试在软件开发过程中的应用实施
软件的开发是一个十分复杂的过程,为了成功的实现软件的应用和升级,就需要工程师进行严密的设计、开发,以及研制,最后成就的科学技术产品。因为人们日益增长的科学需求,完美的软件必须还要经过不断的推敲和升级。
(1)软件测试的应用主要考察软件的实用性和需求。软件的创作和制造都是为了满足人们生活的需求,在开发的过程中要考虑产品的功能性,还要考虑开发商的开发成本是否能够支持整个软件的制作完成。
(2)软件的整体设计是否合理,需要通过软件测试得到论证。工程师进行软件的数据编写,是为了满足人们的生活需要,各项开发和功能的深入研究都是为了实现软件的实用性。软件的测试能够检测出软件开发中的问题,进行及时的补救工作实施,尽量做到不浪费开发成本的目的。
(3)要求在软件测试应用实际作用于软件的后期拓展。无论是学习软件还是工作软件,甚至于游戏软件,都必须要满足未来的发展和升级要求,实现能够无限开发和研制的目的,保证软件具有创新性。软件测试很大程度上也是为了找寻软件的功能延续性,促进软件的再开发和再创造。
(4)软件的测试需要应用到软件的最终检测和维护环节中去。每款软件开发后都应该得到检测,只有质量能够达到标准才能保证软件的出售。再者就是应用到软件出售后的软件维护,保证软件高质量运行[4]。
4结语
在信息技术不断摸索前进的过程中,软件的应用托陈出新不断进步,实现了人们生活、工作,以及学习的全面提速。为了保证软件在人们生活中的使用质量,以及适用程度,进行软件开发前期的软件测试是必须严格执行的工作步骤。
作者:丁旻昊 单位:中国特种飞行器研究所
软件测试是保证软件质量的重要手段之一。目前社会上对软件测试人才需求非常旺盛,据报道其人才缺口高达30万人[1],高校学生毕业后直接从事软件测试工作的占据了软件测试行业从业人员的48%[2],许多高校都开设了软件测试课程,如苏州大学[3],北京工业大学[4]等,以培养相应的软件测试人才。我校计算机科学与技术专业2008版教学设计中新增了软件测评课程,含理论课28学时及实验课8学时,于2011年首次在大四上学期开设。软件测试主要是一门技能型课程[5],其理论性相对较弱,且和软件工程概论课存在较多内容的重复。吸取了首次授课时重理论轻实践的教训,我们将软件测试课程的目标定位为在一定理论基础的指导下使学生熟练掌握软件测试的技能,因此2012年第二次授课时将理论课减少为24学时,实验课增加到12学时。借鉴同济大学朱少民教授[6-7]的经验,实验课着重讲述一些常用开源软件测试工具的使用,包括功能测试工具Selenium和AutoIT,单元测试工具Junit,代码覆盖工具Emma以及性能测试工具Jmeter等。Jmeter是Apache组织开发的一个用于压力测试和性能测试的纯Java桌面工具,可用于对服务器、网络或对象等模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能[8]。性能测试是保证应用程序后能够稳定可靠运行的必要手段之一。以我们为某机场开发的战略规划管理系统为例,由于前未进行全面的性能测试,客户使用一段时间后经常反映系统响应速度慢。利用Jmeter对主要模块进行了性能测试,结合测试结果对数据库进行了优化,此后客户再也没有反映过响应速度慢的问题。本着科研服务于教学的宗旨,以该系统为原型,完善了基于Jmeter的性能测试及数据库优化实验教学设计。
1Web应用程序性能测试实验
这部分实验目的是使学生熟练掌握使用Jmeter测试Web应用程序的一般流程和方法。实验任务测试绩效考核子系统中的评分模块。评分人登录系统后进入评分环节,选择其未完成的评分项目(若有多个未评分项,则需要全部对其评分)。每个评分项中包含对多个部门的评分,部门数大于等于3个时需符合正态分布,如可评出优秀3个、良好6个、合格4个、基本合格2个,否则可任意评分。按照循序渐进的原则,设计了3个步骤:一是Jmeter的基本应用,包括脚本录制、添加http请求、添加断言以及查看测试结果等;二是Jmeter的逻辑控制结构,如分支和循环等;三是Jmeter的高级应用,如参数值可变以及参数个数可变等。
1.1Jmeter的基本应用
Jmeter可以手工添加脚本,但更方便的是使用脚本录制软件Badboy[9]。Badboy录制的脚本可以保存为Jmeter格式,然后在Jmeter中直接打开和修改。脚本主要是一系列的http请求,其中可以设置请求的URL,请求方法(get/post)及请求参数等,如图1所示。通过添加断言(如是否含有特定字符串)检查请求是否返回正确结果。添加查看结果树并运行测试脚本查看程序的测试结果。
1.2Jmeter的控制结构
Jmeter具有丰富的逻辑控制结构,包括控制器,switch控制器,while控制器以及forEach控制器等。实验重点练习控制器和forEach控制器。控制器判断Jmeter变量是否满足给定条件,若满足则执行其包含的测试元素,否则不执行。ForEach控制器对Jmeter变量的每一个取值都执行一遍其包含的测试元素。图2是一个控制器,其条件为变量COUNT小于10且变量VAR等于字符串“abcd”。图2Jmeter的控制器图Jmeter的变量引用使用${变量名}的方式,变量一般提取自返回页面中的某些信息,如满足特定条件记录的行数或某个特定位置的字符串取值等。变量提取可采用正则表达式或Xpath进行匹配,讲解其匹配原则并现场演示。图3利用正则表达式提取需评选优秀的单位个数,其中引用名称youxiu就是变量名。匹配失败则取设置的缺省值0。如对于页面中返回的html代码“…您当前可以评出优秀<spanid="ltYSMsg">3</span>个…”可提取出优秀个数为3。
1.3Jmeter的高级应用
本部分着重解决实际测试过程中的一些常见问题,如参数内容可变及参数个数可变等。测试登录环节时需模拟不同的用户登录行为,即图1的http请求中txtUserName一项的值应是变化的。Jmeter提供的CSVDataSetConfig可解决这一问题,如图4所示。将所有评分人的信息存储在一个CSV文件中,把其中的列名填入VariableNames项,之后将图1中的txtUserName值改为userAccount(即CSV文件的第1列)实现参数值的动态变化。进入评分项后需根据情况选择优秀和良好等的个数,且要反映在http请求的参数中。由于参评单位的个数因评分人和评分项各异,因此无法在GUI界面中一一添加。需动态添加的参数包括评分列表中的name及其value,value的取值从优秀到基本合格依次为1234。为简单起见,我们按顺序对单位进行评分。如系统要求评出3个优秀,则测试中前3个部门打优秀,其余依次类推。由于同一部门的优秀良好等单选按钮的name值相同(如图5所示),我们选择提取该组唯一的ID号,然后将其转换为name,其对应关系是用$代替下划线(如ID号为gbBSCExamList_ctl02_rbExamerLevel,name为gbBSCExamList$ctl02$rbExamerLevel)。Jmeter的Beanshellpreprocessor可在提交http请求前动态调整参数个数及参数值。下面给出了Beanshellpreprocessor的代码。其中ExamerLevel_matchNr为Jmeter的系统变量,提供了正则表达式匹配项ExamerLevel匹配成功的个数(即参评单位的个数)。如前所述匹配数量小于3时可任意评分,为简单起见我们均将其评为优秀。N=Integer.parseInt(vars.get("ExamerLevel_match-Nr"));(N>=3){YX=Integer.parseInt(vars.get("youxiu"));LH=Integer.parseInt(vars.get("lianghao"))+YX;HG=Integer.parseInt(vars.get("hege"))+LH;BHG=Integer.parseInt(vars.get("jibenhege"))+HG;for(i=1;i<=N;i++){item=vars.get("ExamerLevel_"+i);item=item.replace("_","$");(i<=YX){sampler.addArgument(item,"1");}else(i<=LH){sampler.addArgument(item,"2");}else(i<=HG){sampler.addArgument(item,"3");}else(i<=BHG){sampler.addArgument(item,"4");}}}else{for(i=1;i<=N;i++){item=vars.get("ExamerLevel_"+i);item=item.replace("_","$");sampler.addArgument(item,"1");}}设计了含35个并发线程的线程组,模拟实际35个评分人的评分过程。全部线程在1秒钟之内启动,比实际情况更严格。得到聚合报告如图6所示,其中点击考核评分页面响应时间最长,为335毫秒。且测试过程中无错误发生,说明系统评分模块可靠。
2数据库性能优化实验
除应用程序外,数据库设计的优劣亦影响系统性能。这部分实验目的是使学生熟练掌握使用SQLServer测试数据库性能的一般流程和方法,并进行简单的数据库调优。为减少复杂性,设计一个简单的由三张表组成的人员组织结构数据库:user、or-gan及userorgan表。其中user表含4586条记录,or-gan表含1722条记录,userorgan表含6804条记录(一人可在多部门任职)。实验任务根据账号查询其姓名及所在单位信息。
2.1SQL语句执行计划对应用程序中频繁执行的SQL语句检查执行计划非常重要。初始时,三张表均未建立任何索引,下面SQL语句的执行计划如图7所示。由图7知,三张表均采用全表扫描的方式。对大表全表扫描可能涉及多次磁盘I/O,非常费时,应尽力避免此种情况。SQLServer报告由于缺少索引影响了查询性能,并给出了相关建议。selectA.vcAccount,A.vcName,C.vcNamefromtest.dbo.[user]Ainnerjointest.dbo.[useror-gan]BonA.vcAccount=B.cnvcempidinnerjointest.dbo.organConB.cnvcorgid=C.nNodeIDwhereA.vcAccount='testuser'为表格建立以下索引:indexIND_USERACCOUNTontest.dbo.[user](vcAccount)clusteredindexPK_ORGANontest.dbo.[organ](nNodeID)indexIND_USERORGANontest.dbo.[userorgan](cnvcempid,cnvcorgid)再次运行后显示执行计划如图8所示。可见所有表扫描均已替换为相应的索引查找,且SQLServ-er未报告缺少索引影响查询性能。两次执行查询的磁盘I/O和CPU时间见表1,可见为表添加正确的索引可提高查询性能。
2.2索引建立原则总结
建立索引的一般满足原则如下[10](篇幅所限,未给出实例):(1)为主键所在的列创建索引。为经常进行连接但未指定为外键的字段建立索引。(2)在频繁进行排序或分组的字段上建立索引。(3)在条件表达式中经常用到的不同值较多的字段上建立索引,在不同值较少的字段上不建立索引,如性别字段。不在查询很少引用的列上创建索引。(4)若经常同时使用多个字段排序,可在这些字段上建立复合索引。要尽量使关键查询形成索引覆盖,其前导字段一定是使用最频繁的字段。(5)查看索引并删除不使用的索引。需频繁进行数据查入操作的数据库应有较少的索引,需频繁进行读取操作的数据库应有更多的索引。(6)在聚集索引中,避免包括不必要的列,尽可能使用较小的数据类型。(7)在支持排序和范围查询的字段上考虑使用聚集索引。(8)具有高选择性的列是索引的好候选列,具有高密度的列是索引最糟糕的候选列。
3结语
软件测试是保证软件质量的关键步骤。在软件正式前一般都需要经过性能测试,以保证软件在一定负荷下的平稳可靠运行。Jmeter是一款优秀的开源性能测试工具,可测试繁重负载下的系统表现。软件性能表现还取决于数据库设计的优劣,建立适当的索引可减轻数据库查询和处理负担,进而提高系统处理能力。通过本教学设计实验学生普遍反映认识到了性能测试的重要性,了解了执行计划在数据库性能优化中的作用。
作者:张志远冯兴杰单位:中国民航大学
摘要:
在IT行业,人们对于软件开发与测试关系的研究热度不减;同时软件的开发与测试,也一直是软件项目团队的中坚力量,要想保证软件开发产品的质量,就要有测试人员对于质量进行验证,所以测试人员也相当于质检人员,但是两者之间的关系还有更加深入的关系,对此本文就软件测试与软件开发关系展开分析,希望对于软件设计水平的提升,起到积极促进的作用。
关键词:
软件测试;软件开发;关系
0前言
软件开发是一个系统性的过程,包括概念阶段、计划阶段、开发阶段等,而软件开发工程与软件测试工程师分别对应着软件产品生命周期的开发与验证阶段。表面看似两者是一个上下游的关系,但是不同工程师所占的立场不同们对于软件的认识也呈现差异化,对此需要工程师共同讨论等,继而确定最佳的产品方案。
1概念分析
软件开发与软件测试是软件工程的重要阶段,前者是在客户需求的基础上进行软件系统制造的过程,也包括系统设计、编码程序等内容。而后者主要是将前者各个阶段,存在的漏洞等利用测试用例找出,是对于软件需求等的最终审核,也是对于产品的质检。
2工作内容
2.1开发人员
其工作内容主要体现在以下几点;第一、加强软件需求分析,明确软件开发方向。第二、编写软件详细设计文档,包括程序流程、函数等内容;还包括单元、集成测试等文档的编写。另外只有审核完写好的文档后,才能进行代码的编写。第三、代码编写是非常重要的,直接关系着软件程序的功能发挥;而软件开发不仅仅就是写代码,还包括很多其他的内容。第四、程序编码结束后,需要由开发工程师,对其进行系统自测,保证程序正确编写;自测合格后,以及文档编写好后,一并交给软件测试人员进行检测。
2.2测试人员
第一、通过对于软件需求说明书的审核,明确软件功能开发方向。第二、积极建立测试环境,也就是指软件运行的条件,包括软硬件设施的设置等。对于软件实际工作环境的模拟,也是测试环境构建的主要内容,继而保证软件的实际应用不会出现问题,对此可见测试环节还原现场环境的重要性。第三、将配套软件进行运行,检查其是否存在缺陷、功能是否充分的发挥,对于检查出来的问题,组织相关的工程师进行软件问题的修正工作。第四、协助并指导工作人员安装软件程序。
3关系
软件开发和软件测试主要的工作目标在于用户需求的实现,保证交付软件的质量,开发与测试并存,首先由开发人员进行软件实现,然后由测试人员找出软件中存在的程序问题,最后提交开发修复,两者之间是相互合作、相互影响的关系,继而除去软件开发中的的程序问题,保证软件的高品质。两者的工作交集,在于软件缺陷,但是软件开发工程师、软件测试工程师,工作岗位不同、对于软件的看法不同,对此难免会存在意见分歧,所以测试工程师加强与软件开发师之间的关系处理尤为重要,继而更好的形成向心力,保证软件开发的高效性和该品质性。好的软件开发,不仅仅要狠抓软件开发与软件测试两个环节,更要注重产品开发的全过程;另外更不能倾向于某个环节,而要让软件开发和测试都要硬,从而更好的保证后续工作的顺利进行。
4关系处理办法
4.1尊重开发成果
测试人员的综合素养、综合技能等,直接影响着软件开发的进度与质量等,为了更好地处理测试与开发之间的关系,测试人员要抱有一定岗位职责、职业素质,本着公平、公正的心理尊重软件开发环节的工作成果;软件开发会可能会存在一系列的隐藏程序漏洞等,这都是非常正常的,而测试工程师的主要职责就是找出这些漏洞,提高开发进行修正,从而另一个角度来说也是在帮助开发工程师成长;但是实际上,部分的测试人员在检查开发提交的测试软件时,会因为发现问题而出现一系列消极的情绪,对于软件开发工程师进行谩骂侮辱等,不仅降低了软件开发工程师的工作积极性,也影响了两个工作层面的关系,最终延长了软件交付的日期,以及软件的质量。开发工程工作内容繁琐且任务重,不可能全面顾及,导致程序开发存在一定的问题,而测试人员作为软件品质完善的关键,要在尊重软件开发作品的同时,积极的进行漏洞检查,实现良好的团队协作氛围。
4.2缺陷技巧的提交
由于软件开发与软件测试工作埃的交集就是程序缺陷,对此测试人员就要做到以下几点,继而保证缺陷技巧的有效提交,保证软件开发人员的更好接受。
4.2.1换位思考测试
人员在接受软件开发提交的作品时,首要的就是了解软件开发工程师对于测试结果的关注内容、范围以及关键点等;一般软件开发人员对于测试结果最注重的就是软件逻辑、数据流转等方面的内容,对此测试人员就要合理的采用测试技巧,有效的调整程序漏洞的提交方案。软件测试也是一个复杂且繁琐的过程,首先测试工程师要按照指定的测试流程,对软件作品进行系统逻辑的测试,找出影响系统正常运转的错误逻辑问题,将其第一时间反馈给开发工程师;测试环节接触到的其他问题,但并不是影响系统逻辑的漏洞点,按照漏洞提交顺序进行依次提交更容易被开发工程师所接受。
4.2.2漏洞描述要精准
测试人员的测试结果,是开发人员漏洞改进的关键,一个精准的的Bug描述,对于开发人员来说帮助性是非常大的,能够帮助开发人员更加精准的进行漏洞定位。这就要求测试人员在进行Bug描述时,要注重语言的干练简明,语气要肯定,避免使用好像、不确定等词汇,继而模糊开发人员的工作思路。其次描述的内容要突出重点,忌讳全面开花。最后根据以往的经验,给软件开发人员提出一系列的建议,像可能会出现漏洞的部位等,继而实现软件的高品质。
4.2.3注重普遍问题的提交
软件开发人员一般工作都非常的忙碌,而重复漏洞或是无效漏洞的提交,会大大的影响其工作的心情、工作量与工作进度等,对此测试人员在测试系统漏洞时,要养成Bug分析的好习惯,分清其问题的独立性还是普遍性,若是普遍问题可以提交一个。这就要求测试时人员要加强对于软件系统的熟练度,包括业务要求、操作以及使用等,当测试人员也不确定漏洞是否存在时,可以与其他测试人员进行沟通,或是与开发工程师进行沟通,继而精准定位程序漏洞。
4.2.4加强有效沟通
考虑到测试人员与开发人员之间的矛盾问题,主要的原因在于缺乏沟通或是交流无效,对此首先测试热源就要占到用户的角度上,正确的表达出自己的想法,让开发人员也占到用户的角度进行讨论。其次由于两者工作理念不同,对此难免会存在争议,对此测试人员保持自己观点,可在下个版本中完善。最后加强两者之间的沟通,明确对方的工作想法,保证系统认知的更加深入、全面,并灵活的运用测试手段,从而更好的保证软件高品质。
5总结
综上所述,通过对于软件测试与软件开发关系的分析,发现作为软件产品全生命周期的关键环节,更要加强沟通合作,提升企业研发的凝聚力,做到就事论事奔着相同目标共同努力,从而更好的保证软件产品的进度和质量。
作者:侯中原 单位:商丘医学高等专科学校
[摘要]
随着我国计算机网络的不断普及和发展,无论是人们的日常生活还是工作,甚至是休闲娱乐,都离不开互联网的支持,可以说,计算机软件已经受到越来越多人的应用,并且逐步成为了影响人们生活的重要技术。随着人们对计算机应用软件需求量的不断增加,计算机应用软件的开发也越来越频繁,因此,要对其开发流程以及开发需求进行深入的分析。文章将对计算机软件测试技术与开发应用进行了研究。
[关键词]
计算机软件;测试技术;开发应用;相关研究
计算机软件测试技术对于软件开发而言具有重要的作用,能充分保障软件的精确性,为软件开发工作带来安全保证。笔者将从计算机软件开发的重要性、计算机软件开发流程、计算机软件测试技术在软件开发中的有效应用,三个部分进行阐述。
1分析计算机软件开发的重要性
相对于应用软件而言,计算机仅仅只是作为一种辅助工具,计算机之所以能够帮助人们有效地解决这类问题,促进社会迅猛发展,最重要的就是计算机内的软件应用,可见,软件的开发极为重要。随着国家经济体系的不断改革,各行各业已经逐步面向现代化发展,互联网的普及无疑为人们的发展奠定了结实的基础,也给应用软件的进一步研究开发提供强有力的保障,计算机软件的应用已经在人们的生活中得以普及,而人们的日常生活也已经离不开网络的支持。计算机软件的应用不断丰富了人们的日常生活,使人们更加重视精神的自我培养,此外,计算机网络也在不断推动着人们前进。
2计算机软件开发流程
2.1分析开发需求和设计概要
在开发计算机软件之前,对其进行需求分析是开发应用软件的首要环节,亦是最重要的环节之一。软件开发需求分析质量,会直接对应用软件开发造成影响,一般情况下研究人员要根据软件需求内容,对软件的概要进行设计,并且结合软件的功能需求情况设计出软件程序流程图,若是利用类似于C语言等的高级语言实施程序编写,还应当根据软件模块设计各模块的应用功能。概要设计为软件的开发提供了程序框架,后续的开发工作都是在这个框架基础上进行操作,可见这个框架不但能够决定计算机软件程序功能,而且还能对软件运行的效率产生一定的影响。在基于软件程序具体的开发过程中,想要实现其特定功能,可选择多个语句或者逻辑关系等来实现,但不同的逻辑关系与语句也会从一定程度上影响软件。软件开发及其需求越来越复杂,如何编写简洁而又不会存在漏洞的应用程序,已经成为了各软件开发人员最终的目标,因此,在实际研究过程当中,研究人员要十分重视概要设计环节的工作,并且保持思路清晰,设计完程序流程图之后要进行全方位的审核,不断简化软件的逻辑关系,最终实现科学合理的软件逻辑关系。
2.2详细的编码与设计
紧跟需求分析和概要设计后的一个环节就是进行程序的具体编写工作。在编写程序的过程当中,首先应当选择计算机语言,经过长时间的发展,高级计算机语言出现提高了软件的开发效率。人们按照开发软件的实际需求,有针对性地研究了很多种类的计算机语言,例如:如常见有JAVA、C语言等,到了现在出现了VF与VB等可视化的编程软件,这类软件的研发使研究人员即便没有专业知识也可完成简单的软件开发。此外,在实际编码前,研究人员应进行详细设计,在已设计的框架上,按特定的逻辑关系将软件所需实现的一些功能进行设计,根据详细设计流程进行编码。目前,计算机软件设计使用最多的是C语言,这种语言的模块形式较为简单、语句便于理解,所以非常适合在开发、维护软件过程中运用,受到研发人员的青睐。
3计算机软件测试技术在软件开发中的有效应用
软件程序的编写完成之后,研发人员还要对其实施相应测试,监测这款软件的应用效果以及功能等是否能够达到预期效果,一般情况下,测试软件的方法就是随机输入一些数据到计算机中,然后再看结果是否达到要求,为了能够确保软件功能的精准性,常常会选择几组随机数据配合一些特殊参数进行检测。如果检测出来的结果和软件功能相符合,那么则说明通过测试,反之,则不符合。近几年以来,计算机的软件开发技术得到迅猛发展,研究人员也开发了一些专门针对软件测试的程序,但是由于受到技术水平因素的影响,使用测试软件受到一定的局限,比如:一个测试软件只能对一种软件实施检测,并且测试结果只能当作参考,测试结果的准确率还需要提升,但是不管怎样,测试软件的研发就足以标志着计算机软件程序的未来发展方向。新开发软件通过检测以后,需要交予需求方进行使用,为了保证软件能满足人们的实际使用需求,使用方也会进行验收,软件验收方要求极为严格,但是验收方式基本和测试方法相似,同样采取输入参数来进行验收,因此,就增加了不必要的验收程序。研发人员还应当继续研究,争取研发出更多的测试软件,使软件的测试结果更加精确。软件测试技术作为软件开发过程中最为重要的组成部分,该技术主要目的是为了将软件产品中存在的问题及时找出,并将测试报告交给软件开发人员予以修改。可见,在软件开发工作中,软件检测技术的应用是不可缺少的环节。
4结语
总而言之,计算机网络技术已经在人们的生活中得以广泛应用,而软件就是应用计算机的关键,随着人们各类需求不断增加,开发计算机软件已经成为了研究人员的日常工作,在具体的软件研究过程中,软件测试技术的使用是必不可少的,因此软件开发人员还应切实做好相关工作,解决软件开发所面临的困境,不断提升自己的开发水平,对软件开发工作进行深入研究,促进软件事业的持续发展。
作者:高俊 邹金萍 单位:江西生物科技职业学院
摘要:
本文针对软件测试课程的教育现状,结合软件测试的课程特点和培养目标,从面向应用型人才的培养方式出发,提出了以案例式教学为主导,走教学产业化发展的软件测试改革方案。
关键词:
软件测试;应用型人才;案例式教学;教学产业化
随着我国IT行业的发展,越来越多的企业意识到软件测试的重要性,因此软件测试人员成为当前IT业界亟需的热门人才。面对软件测试人员紧迫的需求形势,应用型人才培养单位应该扩大软件测试人员的人才培养规模,提高培养质量。
一、《软件测试》课程教育现状
我国软件测试技术发展已有十余年,但IT市场对于测试人员仍然呈现出供不应求的势态。目前国内高校对软件工程专业几乎都会开设软件测试课程,甚至有些高校已经设置有软件测试专业。2011年11月,教育部主办了“2011年高等学校软件测试课程教学论坛”,对测试人才的培养及测试领域的全面发展起到了积极地推动作用[1]。高校系统化的专业教育体系为学生奠定了扎实而科学的学科基础,并对软件测试技术的理论化和系统化发展起到了不可替代的作用。利弊相依,传统的人才培养模式对软件测试课程设置和培养方案上还是会存在以下不足。
1.重理论轻实践在传统的软件测试课程设置中,大多采用教师在课堂上讲授理论知识,学生上机时完成实验操作的教学方式。实验的目的只是为了检查学生知识点的理解和掌握,实验题目大多比较陈旧,不能与时俱进地与当前的最新技术或最热门的应用相结合,使得学生的测试知识体系过于单薄。
2.重学生个体知识积累,轻团队协作能力培养团队协作在软件工程中的重要性无须多述。软件测试作为软件工程中重要一个环节,贯穿于整个软件生命周期,测试人员与系统分析员、软件设计师、程序员、维护人员之间的沟通必不可少,良好的团队协作才能有助于项目的进行,有助于高效、正确地开发出高质量的软件产品。传统的教学模式中,很少引入分组协作的环节去锻炼学生的沟通和交流能力,更不能设计出测试人员和开发人员的沟通场景,不能满足学生在项目中去加深理解、巩固提高的需求。
3.重即有知识,轻科学创新一直以来,软件测试课程在高校的课程体系中受到重视并不多,课程结束后并没有延续测试知识的后续课程。因此,学生不能在后面的学习和实践中进行总结提升。知识在母体中是要经过消化、适应、转化、演进、创新、融合、活化,而后才称为组织的“行动知识”,现有的教学模式不能很好的产生知识发酵效果。
二、《软件测试》课程特点和培养目标
软件测试是一门应用型较强的学科,应注重理论联系实践。一个合格的软件评测师除了要掌握即有的测试理论和软件知识外,还必须具备对软件测试行业的深刻理解,必须具备对计算机专业知识,包括编程技能、数据库、网络、中间件等知识的系统掌握,必须具备沟通能力、团队协作精神。软件测试是为了尽可能多地发现并排除软件中潜藏的错误,最终把一个高质量的软件交给用户,这并不是一项简单的工作。要做好软件测试,测试人员不仅需要站在客户的角度思考问题,真正理解客户的需求,具备良好的分析能力和创造性思维能力,完成功能测试和界面测试,而且要能理解软件系统的实现原理和各种使用场景,具备扎实的技术功底,能使用测试工具完成相应的性能测试、安全性测试、兼容性测试和可靠性测试等更具挑战性的任务[2]。从这个角度看,一个优秀的测试工程师需要掌握更多的知识和技能。
三、《软件测试》课程教学改革方案
以上可以看出,当前高校对于测试课程的不重视,以及当前的软硬件设施及教学方法都不能满足对应用型测试技术人才的培养要求。为了适应软件产业发展对测试人才的迫切需要,实现软件人才培养的持续性发展,针对软件测试课程调整培养方案,展开深入的教学改革和实践活动十分迫切和必要。
1.加大师资力量,构建完善的软硬件测试平台教师素养的提高是软件测试教学改革得以顺利开展的前提。此前,国内对软件测试并不重视,致使国内软件测试人才短缺,大部分高校内虽然有计算机系,但多以重开发轻测试,测试教师的专业素质和数量都远远不够。因此,不仅要重视对教师测试专业技术的培训,提供更多的学习机会,也应该认真开展软件测试教学研究,构造专业的软件测试教学团队。作为一门实践性较高的课程,软件测试必须建议专门的、完备的实验教学体系和环境。目前,高校普遍缺乏软件测试的软、硬件环境,致使学生无法通过项目实践来深入理解和提高测试相关知识和技能。
2.运用案例教学,丰富软件测试项目实战案例在教学活动中,学生总是对最新、最流行的项目和案例感兴趣,陈旧的案例既不能满足当前市场上对测试人才的技术需求,又不能很好的激起学生的兴趣。运用案例教学最重要的环节就是丰富案例素材,保持案例的“鲜活性”与“生命力”。高校可以采用历年本科毕业设计中运用了流行的技术、难度适中、功能较为完整的应用作为软件测试课程的测试案例,不但可以保证素材的延续性,也使得学生毕业设计完成的质量有所提高。
3.加强校企合作,走教学产业化发展之路[3]企业需要人才,高校为企业输送人才,校园中学习的技能最终要接收用人单位的考验。所以与软件企业合作,建立对口的学生实训基地,是应用型人才培养的重要途径。软件测试技术的掌握与提高离不开项目实战,让学生在真正的软件工程过程中从事测试工作,不仅能使学生深刻体会到软件测试在整个项目中的作用,掌握测试方法和技巧,对于学生的沟通交流能力、团队协作能力都有积极的促进作用。
四、小结
软件测试是保障软件质量,验证软件可靠性的重要环节,其重要性不言而喻。重视软件测试应从企业用人的实际需求出发,高校应加强面向企业需求的软件测试改革,切实培养学生的动手操作能力,使学生掌握最新的测试方法和技巧,让企业需求促进和推动高校教学发展。
作者:于营 单位:三亚学院
1测试流程不合理
1.1测试设计重点偏离使用QC软件测试发现bug统计,如表1所示。根据表1工作量统计,25人/日为5个中级测试工程师一周的工作量,但是根据测试用例发现的bug数量仅占bug总量的44.18%,该比例显示测试用例的设计重点严重出现偏离。需要在测试用例设计的方向上进行调整。
1.2测试过程不可控QC软件测试计划中测试执行阶段为2013.3.8-2013.3.27,执行三轮测试;实际测试时间为2013.3.23-2013.4.20,执行测试三轮,计划完成时间严重偏离,表2为原计划与实际计划的对比。表2显示测试计划进行了较大调整,计划截止时间比原计划延迟23天。延迟原因经分析主要为开发提交测试时间延迟,开发提交版本问题较多,测试计划安排不合理,在两轮测试间为安排开发修改bug时间等。想要解决该问题,不仅需要对测试过程进行管理,同时也需要对开发提交的测试版本质量进行管理。
2软件质量管理改进对策
2.1需求工程管理软件开发过程中,需求不明确会带来需求的频繁变更,浪费了很多时间。针对此项问题,可对需求相关的活动进行统一管理,其需求管理结构图如图2所示。加强需求开发和需求管理的有机结合,不仅减少了需求的变更次数,还解决了工程师对需求不能理解到位的问题。需求开发和需求管理同样重要,只有两者互相配合才能做出用户满意的产品。
2.2立项管理为了使有限的资源发挥更高的价值,公司可通过立项管理流程进行立项管理,立项管理流程分为立项建议、立项评审和立项筹备三个阶段,其具体流程图3所示。
2.3测试流程管理针对测试流程中发现的问题,可对整体的测试流程做如下的改变:(1)测试部门可进行需求学习及需求讨论,对理解不清楚及有疑问的需求,由研发设计部门进行解答,研发设计部门不能解答的由其联系用户确认后作出解答;(2)需求确认后,针对系统功能和性能等指标,由测试工程师进行测试测用例的设计,设计从两个方面进行,一方面测试工程师根据需求进行测试用例的编写,另一方面测试工程师可根据用户反馈问题进行分析汇总;(3)使用QC功能测试工具对应用软件兼容性、操作系统兼容性进行测试,以便于使用测试工具完成多种环境下的功能和兼容性测试;(4)进行自由测试以便于对系统测试用例进行补充,分析测试用例未覆盖问题的原因;(5)定期分析缺陷库中的问题,分析问题产生的原因,进行测试用例的修改。
3结论
本文指出了软件质量管理过程中可能会引起软件质量问题的原因,对软件质量管理的相关问题进行了分析,归纳和总结,这些问题在软件开发人员中具有一定的普遍性。实践表明,通过对这些问题进行分类,开发人员可以清楚地知道在软件设计中容易出现的问题,能够及时采取相应的措施,推动软件质量的全面提高。
作者:翁婕丁铁乔扬单位:南京莱斯信息技术股份有限公司质量与技术管理部
根据权威机构统计部门调查数据显示可知,在常用的软件开发项目环节中,软件测试工作大约能够占到软件开发工作总量的42%以上,而软件测试所需投入的研究经费成本也将占到总额数的50%。由此可知,软件测试环节对于整个软件工程开发应用具有十分重要的意义。然而,如何建立一支高效软件测试团队对于构建更加完善的软件工程起着直接导向性作用。BarryBoehm曾阐述了人的因素在软件测试中的重要作用,人为所占因素甚至超过了其他环节性因素,其代表理论构造性成本模型认为由于软件测试分析师与程序员的原因会导致其工作效率相差数倍。因此,加强软件测试团队的高效率建设对于构建高质量软件应用程序具有重要作用。
1高效软件测试团队建设的可行性策略
1.1软件测试团队的特质建设
软件测试团队的素质建设对于整个软件工程质量而言具有非常重要的作用,人是测试工作中最具价值也是最重要的资源。因此,应该积极构建合格的、高质量的合作团队。(1)软件测试以及软件工程开发都需要程序员具备足够的自信心,对软件检测结构以及程序的缺陷要如实汇报。对于软件项目工程中出现的各种问题要认真处理,以此减少客户可能遇到的种种问题。(2)软件测试人员还要具备足够的怀疑精神,对可能存在的漏洞性错误要及时予以检测和纠正,进而提高其自我创造力。(3)软件测试团队要积极构建沟通协调能力。可以通过与客户进行必要的沟通来及时发现软件运行中存在的不足之处,其中测试者可以针对模拟环境下用户对于软件环境的应用情况进行科学分析,以此对软件编写过程和总结文档进行反复检查检测,提高软件的运行效率和正确性。(4)必备的检测技术能力。软件测试团队必须具备重要的专业技能,需要精通数据库、通信、网络、GUI测试、测试工具、自动化测试脚本和相关业务领域等,以此全面提升他们的测试能力和测试积极性。
1.2软件测试团队的制度性建设举措
一个优秀的软件测试团队必定拥有一套完善的团队管理制度,拥有明确的职责分工和高端测试人员,通过不断规范团队管理制度,做到扬长避短,及时提升整体测试质量。其中,软件测试团队需要不断加强汇报制度建设、工作总结制度建设、奖惩制度建设、测试审核制度建设、会议制度建设等,通过科学合理地分配职责关系来进一步强化团队成员的素质建设。在此过程中,还要注重对于资深测试人员的正确引导和建设,加强彼此间的沟通交流,不断丰富团队的测试知识库,通过科学吸收先进的测试管理知识来提升整体测试技能和技巧,以此减少开发团队协同工作中的一些领域瓶颈。
2结语
综上所述,本文对目前国内软件工程的发展应用现状以及其中出现的漏洞不足之处进行了分析。只有不断加强对软件测试团队的整体素质和综合开发技能的教育,才能从根本上提升其软件测试技能,要在不断建立健全团队管理制度的基础上加强相关软件工程建设,以此全面提高测试人员的软件工程技术水平。
作者:段炼单位:郑州银行科技开发部
1软件工程提升软件健壮性分析
软件工程目前一直缺少一个明确的定义,但是目前业内专家都一致认为软件工程一般分为需求分析、设计、编码及测试4个环节。其中前面3个环节是整个软件的编写,而最后1个环节的软件测试,则是通过各种专业测试方法来测试软件是否满足软件工程下的10种特性:可修改性、有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性。
2当前软件测试的现状
从对软件工程的分析来看,软件测试是保证软件最终健壮性的最后一个工序。但是,当前很多软件设计公司,在软件测试方面投入的人力物力都非常低,甚至没有专门的软件测试部门,而是由一些软件设计人员兼职。虽然这样也有了所谓的软件测试这道工序,显然因为软件设计人员本身的先入为主,所以在软件测试的过程中,往往不容易发现潜在的问题。另外有的软件测试人员仅仅把软件推到市场上,部分使用人员来进行测试,虽然这也是一种测试方法,但是这种由用户测试的软件测试环节,更多的是在软件的操作体验的测试,并不能够发现软件潜在的bug,正确的软件测试流程,应该设计专业的测试软件,通过白盒测试的方法来针对软件代码进行测试。而上述的仅仅测试界面和操作,那只是软件测试中的黑盒测试法,只有综合白盒和黑盒,才可能获得更好的软件测试效果。但是,目前能够综合这2种测试方法的专业软件测试部门,还是非常稀缺的。这自然导致了国内整个软件行业的软件健壮性存在缺陷的主要原因之一。
3软件测试重要性分析
3.1软件危机下凸显软件测试的重要性
软件危机一直是IT行业的最重要的话题,其实在软件危机这个名词出来之前,软件工程就已经初步有了核心流程,不过正是因为很多专家有着自己的理论,所以让软件工程这门技术的解释出现了很多不同的版本,不过在众多版本中,软件测试始终占据一个重要的模块。软件危机常见的表现就是因为软件在开发的过程中,成本失控、时间跳水、稳定性和兼容性欠缺等诸多问题,而不得不一而再再而三的重新开发,特别是软件在设计的过程中,对于可维护性、可修复性不重视,导致维护的成本占据了整个软件生存周期的90%以上,这很明显是不正常的。通常而言,软件维护的成本应该是软件生存周期的70%以下,超过70%,这个软件最终的结局一定会失败。软件测试的过程,除了针对软件的运行是否稳定,同样也会对软件的可维护性进行有效的判断,尽可能的避免软件危机的产生,所以从软件危机的角度上来看,软件测试在软件工程中的地位无疑是非常重要的。
3.2软件测试的必要性
(1)是交流的问题,容易导致软件接口处的错误。现代软件设计已经不是单人作战的模式,已经上升到团队甚至全球软件工程师通过互联网这个大平台进行合作,这种方式显然对软件工程规范要求更高。其中交流往往就成了一个很重要的问题,很多软件工程师在设计的过程中,尽可能的将自己负责的模块做到完美,甚至也能够考虑到模块间的借口问题。但是因为交流上的不便,或者忽视交流,往往会产生2个模块接口不兼容,甚至还会发生软件需要重新改写的问题。
(2)软件结构有越来越复杂的趋势。虽然软件开始实施模块化设计方式,将一个软件整体拆解成无数个小的系统模块进行设计,然后将设计好的模块进行统一封装。这种化整为零的软件设计方式的确有效的改善了软件复杂性的问题,但是同样也面临着模块间的兼容问题,不同设计师的设计风格可能会导致软件可维护性降低及可移植性降低,特别是一些软件开发公司,根本就没有软件工程的概念,其研发的软件产品,更是漏洞百出,自然很难保证软件产品的健壮性。
(3)程序代码的设计问题。目前一个软件的诞生,往往会有好几千万行的代码,而且在软件正式代码编写之前,还需要撰写概要设计代码和详细设计代码,这些往往都给错误埋下伏笔。如果程序设计代码撰写不规范,没有相应的注释,没有相应的模块设计,往往计算式发现了软件的错误,最终维护起来,也很难让维护工程师定位,甚至连测试工程师也很难找到错误的地方。
(4)设计文档的组成非常少。一个软件产品的诞生,除了优秀的代码设计之外,还要一份完善的代码文档,包括软件的可行性研究、需求分析、详细设计、代码编写,以及软件测试等工作流程中所需要的一切的代码文档。如果代码文档贫乏,甚至没有,那么一旦在软件测试环节,或者在软件使用环节,出现错误时,那就很难进行维护调试了。这时候的维护成本往往会比重新编写一款软件的成本还要低,可见设计文档的错误撰写给软件健壮性的影响。
(5)一些软件测试工具和开发工具本身的问题,往往导致软件出现严重的bug。而且在设计阶段,还很难发现,因为是本身软件测试工具和软件开发工具引起的,因为软件测试工具和开发工具实际上也是一种软件,如果这些软件的健壮性有问题,自然也会导致测试结果出现偏差,最终影响到软件的健壮性。
3.3软件测试成本过半证明了软件测试的重要性
软件工程虽然在很多专家和权威机构的定义有所偏差,但是无一例外,对于软件成本构成的分析上,软件测试的成本一直占据了主要部分,最低的认为,软件测试成本要占据30%,最高的则认为占据到50%。如果将后期维护成本也放在软件测试板块中,那么这个测试成本就会变得更高。因为软件进入维护期时,一旦出现软件需要进行调试,那么修复后的软件依然要进行软件测试,否则很难保证调试后软件依然能够保证健壮性。作为一个软件系统的所有代码,都是牵一发而动全身,修改了某处代码,可能会影响到另外一个模块的功能,所以在维护期内,对软件的任何变动,都需要进行软件测试,才能够保证软件接下来的健壮性。但很明显,如果将软件测试工作放在软件推出市场之前,就来进行有效的测试,那么对于软件整个生命周期的成本,将能够得到有效的降低。软件测试的成本的高低,往往和软件的质量成正比,而软件质量提升了,后期的维护成本就能够有效的降低,所以综合起来,软件测试这部分的成本支出是非常有必要的。
4软件测试流程分析
(1)建立独立的软件测试部门,测试部门领导应该对这个专业非常精通,而不是简单的由开发人员兼职,这个测试部门需要从可行性研究开始就应该着手对软件研发进行测试,可行性研究的最终确认应该也有软件测试主管部门的签字确认才能够进行下一步的工作。
(2)软件测试工作不是等到软件全部开发完毕才来进行测试,而是跟随软件设计的整改生命周期,针对每一个环节进行测试,软件测试部门应该拥有独立的物理部门和独立于开放环境的测试环境,这样才能够提供更加完善的软件测试,尽可能的将软件bug扼杀在摇篮里。
(3)软件模块测试,因为现在软件设计都已经进入模块化设计标准,比如一个完整的软件是S,它有A、B、C、D等模块构成,那么对于A模块的软件设计过程中,就应该有独立的软件测试人员进行跟踪,直到A模块被测试证明没有隐患。以此类推,分别对B、C、D等模块分别进行测试,合格以后,组装后的软件依然进行测试,这样才能够最终提升软件健壮性。在软件设计的过程中,其实测试人员是和软件开发人员并行工作的,而不是等到软件设计完毕之后,再来对模块进行测试,这种方法才能够提升软件测试的效果。
5结语
软件测试随着软件系统复杂性的不断提升而变得越来越重要,如果现在的软件设计公司依然按照传统的软件研发,只注重软件的功能设计,而忽视软件测试,通过不断的压缩测试成本,希望以此来提升软件最终的利润作法已经行不通了,只有将软件测试做好、做精,才能够提升软件的健壮性,才能够提升软件的生存周期,才能够降低软件的整体成本。
作者:董倩范亚斌单位:石家庄学院
1关于软件测试的认识
在软件开发的每一个阶段中,人员的参与都是离不开的部分,而人的工作以及人们之间的通信质量有很难做到完美无缺,这就导致了错误是不可避免的。另外,伴随着计算机控制对象越来越复杂,且软件的功能及规模也在不断的提升,这也使得错误相对而言更容易发生,比如对于WindowsNT操作系统来说,其代码约为3200万行。总体来看,在软件设计阶段,人们所犯的错位是引起软件失效的主要原因,而软件缺陷的根源则在于软件的复杂性。在确保软件可靠性以及质量的过程中,软件测试属于最为主要的手段,以当前的软件工程来看,多以结构化分析及设计作为核心,因此在开发阶段,需求分析以及设计都是以工程管理以及技术评审作为质量的保障手段,而工程管理以及技术评审又存在着主观上的缺陷,很容易遗漏错误使其延续至开发阶段。客观来说,软件测试在发掘软件中隐藏缺陷的过程中的确有着很好的效果,以英国的SHOLIS项目来看,这一项目使用形式化方法对软件规约进行描述及证明,而且利用程序正确性证明方法对前期的很多缺陷进行排除,但是通过软件测试却依旧发现了整个过程15.175%的缺陷。此外,随着人们对软件测试重要性的认识越来越深,其所在软件开发周期中所占的比例也越来越高,当前很多软件开发机构已经将其40%的研制力量投放到了软件测试中,而对一些比较重要的软件来说,其测试的费用往往会高达其他阶段费用的3至5倍,由此可见,不管从哪个角度出发,软件测试都是非常重要的。
2软件测试分类
当前的软件测试技术主要可以分为动态测试以及静态测试,其中,静态测试主要是指在不执行程序代码的情况下找到程序中有可能存在的缺陷或者对程序代码进行评估的过程中,广义上看,静态测试还包括软件需求分析以及技术评审。至于动态测试,则是通过抽样测试数据对程序进行运行以起到检查程序中存在的缺陷。在动态测试的过程中,其核心内容主要包括测试用例、运行正与以及对于程序运行结果进行验证这3部分内容,此外还包括一些数据管理、文档编制、操作规程等辅助方面的工作。
3软件测试的对象
在软件测试的过程中,不单单进行一些比较简单的程序测试,也就是说仅对程序能否运行进行测试是远远不够的。具体来看,软件测试要贯穿在软件定义以及开发的整个过程中,因此软件测试的对象包括需求分析、系统设计、程序编码以及各阶段说明文档。此外,因软件开发过程中各个阶段之间有着非常金敏的衔接,因此如果前一阶段出现问题必然会对下一阶段段的工作造成影响,所以为了确保每一个阶段的正确性,我们要做好确认及验证工作。具体来看,确认主要是对需求规格以及程序进行确认,这既含有静态确认,又有动态确认,其中静态确认大多数是由人工进行分析,而动态确认则是利用动态分析以及程序测试对程序执行的情况进行检查。至于验证,则主要是采取一定手段对程序执行情况进行检查,进而证明软件各阶段中的完备性、正确性以及逻辑协调性。举例来说,我们验证的对象包括测试用户需求和系统分析员报告是否想和、设计说明书和测试需求说明书是否匹配等。
4软件测试目的及原则
4.1软件测试目的
测试目前因立场的不同又可以分为两种,从客户角度来看,总是会希望通过测试来发现软件中的缺陷及隐蔽错误。而从软件开发者角度来看的话,则是希望产品少出现错误,对软件已经符合客户需求进行验证,在这种思路下,测试人员会使用一些导致程序失效概率小的测试模块进行测试,并对容易导致错误暴露的测试用例进行回避,而且对于有可能出现副作用的语句也并不会去刻意的检查。基于此,在程序中,还存在很多预料不到的问题,而这类问题往往要在一些比较特殊的环境之下才能够表现出来。从以上分析我们可以看出,在对软件进行测试的过程中还是要更多的站在用户角度对问题进行考虑。
4.2软件测试原则
(1)“尽早和不断的进行软件测试”,只有时刻牢记这一原则才能够降低软件开发中由于工作多样化、人员配置复杂化所带来的不利影响。具体实践的时候,我们首先要端正态度,对各阶段技术审核要认真进行,另外,我们还要将软件测试贯彻到每一个环节中,进而早对错误进行发现和预防。
(2)测试用例选择的过程中要有输入数据和以及和输入数据相对应的预期输出结果,具体来看,在我们进行软件测试的过程中要选择比较适合程序段的测试用例,这些用例可以对程序员所编制的程序是否存在错误进行分析,而给出预期的输出结果则可以对程序段是否存在错误进行更为快捷的判断。
(3)要避免程序员对自己的程序进行测试,在软件测试的过程中,冷静的情绪以及客观的态度是不可避免的,而人又很难对自己的劳动成果进行否定,因此在程序员对自己程序进行检查的过程中会从主观上出现偏差,导致测试结果不准确、不客观。
(4)设计测试用例的过程中要注意使用不合理输入套件,所谓不合理输入条件主要包括输入异常或者会导致异变的条件。在软件正常使用的过程中,不合理输入是不可避免的,轻则会导致运算错误,严重的时候甚至会使软件失效。
(5)对测试工作中的群集现象进行注意,针对测试过程中错误较多的程序段,要对其进行详细认真的检查,这是因为从经验上看,程序段中残存的错误于已发现的错误往往会成正比。
(6)对测试要认真执行,这是指我们要做好一个详细的规划,具体来说,规划主要包括:软件功能、输入、输出以及每一功能测试的进度安排等。
(7)对测试计划、用例、出错统计以及分析报告等进行妥善的保管,进而为日后的软件维护提供更为便捷的服务。总体来看,在我们的工作中如果能够把握住以上原则必然能够对提升测试工作的效果起到很强促进作用。
5结语
在软件开发工程中,软件测试属于一个重要的环节,一旦缺乏了这一环节,所开发出的产品必然难以满足用户的要求。本文关于软件测试必要性的分析还存在很多不足之处,也希望各位测试人员能够对其进行补充及指正,进而共同促进这方面研究水平的提升。
作者:楼炜单位:同济大学软件学院
按照软件特征分类,软件测试可分为:功能测试和性能测试。功能测试是黑盒测试的1个方面,它检查实际软件功能是否符合用户的需求。一般分为:逻辑功能测试、易用性测试、安装测试和兼容性测试等。性能测试主要有时间性能测试和空间性能测试2种。通常还包括:一般性能测试、可靠性测试、负载测试、压力测试。其它分类还包括:回归测试、冒烟测试、随机测试。回归测试是指对软件的新版本测试时,重复执行上一版本测试时的用例。冒烟测试是指对一个新版本进行系统大规模的测试之前,先验证一下软件的基本功能是否实现,是否具备可测性。随机测试是指测试中所有的输入数据都是随机产生的,其目的是模拟用户的真实操作,并发现一些边缘性的错误。
软件测试过程一般来说,软件测试工作从立项后就开始了,主要经历以下几个主要环节,如图1所示。需求分析是软件测试的1个重要环节,测试人员对这一环节的理解程度将直接影响后续测试工作的开展。一般而言,需求分析包括软件功能需求分析,测试环境需求分析,测试资源需求分析等。测试计划的依据主要是项目开发计划和测试需求分析结果而制定,测试计划指导整个测试过程。测试设计在测试活动的各个阶段,对测试策略、测试方法、测试用例进行制定和编写。测试环境搭建要尽可能模拟实际应用场景,满足项目的设计要求,从而达到理想的测试效果。测试执行和测试记录由测试工程师完成,主要是查找软件的错误和缺陷,并记录测试活动中出现的问题。缺陷管理是对测试活动中出现的BUG进行管理和跟踪,保证每个BUG得到及时修复。软件评估是在测试活动的最后,对软件进行全面地分析和总结。
铁路产品开发过程中容易忽视软件测试
铁路产品供应商普遍重视占领市场份额,追求利益的最大化,提升产品的服务质量,但是却容易忽视保证产品质量的软件测试,这给铁路安全运输带来巨大安全隐患。项目的开发过程通常是确定项目负责人和项目参与人、项目的方案以及项目需要完成的时间,然后投入项目的开发。研发过程中采用团队协作,项目分工到人,经过程序编写、调试,最后集成为产品,并在实验室和现场环境下进行测试实验。对于项目进展情况的掌握是通过不定期的召开会议和单独询问主要开发人员以及研发人员汇报来实现的。
在这种开发模式下,因为项目的开发过程中没有系统和独立的测试过程,所进行的测试也是以正向思维为主,重点验证软件是否实现了相应的功能,而不是软件在异常情况下的响应和处理。软件开发和软件测试本来就是不同的活动,开发人员的工作目标是创建相应模块,实现特定功能,从而会不自觉地朝这个方向努力,挑选那些使程序出错可能性较小的测试数据和手段,无法保证软件被全方位进行测试,会给项目带来隐患。正是认识到这一情况,才大力主张产品开发应进行科学和规范性管理,加强软件测试队伍建设,任命专职人员从事测试工作。利用软件领域中的相关技术,对软件进行科学、合理的测试。
如何在企业内部实施软件测试
企业想要在产品开发过程中,对产品软件展开相关测试,首先应建立合适企业特点和开发模式的测试流程;其次,对不同测试阶段和不同产品的软件和硬件的特点,拟采用不同的测试技术和策略。另外,在产品开发过程中,项目的配置管理、质量保证的等方面都应形成明确的制度。
1测试流程
企业应全面规范项目开发管理流程,对项目进展的各个阶段进行明确划分。软件测试是建立在软件开发的成果之上,即测试的对象就是软件开发的阶段性成果,如设计文档、程序代码和可执行的程序。
软件测试和硬件测试的侧重点有所不同。对于软件测试,采用比较通用的测试流程,如图2所示。软件项目的开发从项目立项开始,测试人员介入项目组,明确需求分析阶段的用户需求,针对不同测试阶段的工作重点,制定各阶段的测试计划。在设计测试阶段,测试人员需要确定各测试阶段的测试方法和必要的测试工具,搭建测试环境,编写相应的测试用例。接下来,按照测试计划分别进行单元测试、集成测试和系统测试,形成各阶段的测试报告,对测试过程中发现的缺陷进行跟踪,保证缺陷得到及时修复。为了保证软件在现场环境下能够正常运行,测试人员针对现场实际情况,制定现场验收计划,确定现场验收策略,对软件进行现场验收和评估。当软件通过了各阶段的测试,且全部缺陷得到修复,将进入到软件的阶段。软件阶段通过对软件版本的管理和控制,实现软件、维护和升级等。
对于硬件测试,需要面向硬件编程,即在硬件环境下,编写代码,实现采集、控制、通讯等功能。由于硬件产品的开发不能脱离硬件环境,因此,测试活动与硬件产品开发、过程调试、硬件联调都是密不可分的,软件测试作为硬件产品开发过程中的重要环节,“验证”和“确认”产品满足项目的设计需求,硬件产品开发流程如图3所示。硬件产品的开发,首先要明确硬件需求,预计产品达到的效果。在硬件总体设计阶段,获取硬件需求,并根据功能进行模块划分,定义模块之间的接口。在详细设计阶段,对各模块进行编程,搭建相应的硬件电路。过程调试可分为:软件过程调试和硬件过程调试两种,软件过程调试指的是在硬件电路的环境下,进行软件调试的过程,保证软件能够正确控制硬件电路和读取相应数据;硬件过程调试指的是产品电路部分的调试过程,验证电子器件之间逻辑是否符合系统设计要求,保证硬件产品稳定、可靠,不受干扰。各硬件功能模块调试成功后,需要进行整体硬件联调,各硬件模块被连接成1个整体,形成产品的雏形,在此阶段,主要验证各模块之间的接口是否符合设计要求,是否能够实现系统设计的各项功能。硬件产品经过整体联调后,形成样机。测试工程师根据产品的硬件需求说明,制定测试计划,确定测试方案和测试方法,并搭建测试环境,对样机进行硬件测试,确认产品符合硬件产品设计要求。
2软件测试技术在各阶段的运用
在软件测试实施的各个阶段,所采用的测试方法和测试策略也各不相同。下面对于测试过程的各阶段进行分别叙述。
2.1设计和代码审查
设计审查是由项目组和测试组成员组成评审组对软件设计和开发的输出进行评价,以判断确定设计和开发的输出能否实现软件产品预先定义的规格,同时通过审查标识出与项目需求之间的偏差。设计审查按《项目计划》所规定的评审点进行。因临时变更引起的突发性的评审随时进行。代码审查实际上属于静态测试。在代码审查之前,首先要对代码进行静态分析,其目的是通过对源程序分析、目测,但不执行程序,找出源代码中可能存在的错误和缺陷,对程序设计的结构属性,如分支、路径、转移等进行审查,尽可能地掌握程序的结构,为单元测试的测试用例的设计和执行提供信息。代码审查的目的是检查源程序编码是否符合详细设计的编码规定,确保编码与设计的一致性和可追踪性。检查的方面主要包括:书写格式、子程序或函数的入口和出口,数据,参数,程序语言的使用,存储器的使用,可读性,逻辑表达式的正确性,代码结构合理性等。静态分析和代码审查通常可以同时进行,通过静态分析掌握源程序结构,通过代码审查,尽量减少书写错误和隐含的逻辑错误,为单元测试提供比较稳定的环境。
2.2单元测试
单元测试是软件测试的基础,集成测试、系统测试都是建立在单元测试之上。单元测试是用来检验每个软件单元能否正确地实现其功能,满足性能和接口要求,还要验证程序和详细设计说明的一致性。从广义上来讲,单元测试包括静态测试和动态测试。静态测试就是上面介绍的“代码审查”,而动态测试则是通过测试用例、测试工具来执行程序,检验程序是否存在缺陷的过程。单元测试一般采用白盒测试方法,手工测试和自动测试相结合,针对程序内部的结构和逻辑来展开,单元测试工具一般针对不同编程语言和开发环境而设计开发的,种类很多。我们利用白盒测试进行代码测试,利用黑盒测试进行功能性测试,利用回归测试保证维护代码的完整性。单元测试工具固然有用,更重要的是测试策略,以及测试用例的设计。这也提醒我们在做单元测试的过程中,不可避重就轻,要抓住项目核心,进行科学、有效的测试,只有这样才能达到事半功倍的效果。
2.3集成测试
集成测试阶段采用白盒测试和黑盒测试相结合的方式,将每个独立的功能模块进行关联和集成,便于进行功能测试、界面测试、结构测试、数据正确性测试等。在进行集成测试前,测试工程师要搭建测试所需的硬件和软件环境,尽量模拟设备实际的工作环境。结合项目的不同特点,测试过程可以采用手工或自动测试。在进行多次重复测试和回归测试的情况下,可采用自动化测试工具对软件进行功能性检测。
2.4系统测试
在系统测试阶段,不仅要进行功能测试,还要对系统的性能、安全性、兼容性和可靠性等进行测试,系统测试涉及人机交互和复杂逻辑,因此系统测试多采用黑盒测试的手工测试方法。系统兼容性测试要考虑软、硬件的兼容性。项目开发的硬件和软件要在指定的环境下,进行多次反复的安装和反安装测试,以验证接口数据调用和驱动程序是否达到设计标准。安全性测试和软件的安全策略密切相关,安全性测试主要包括:用户访问权限、数据库安全性、文件安全性等。性能测试、负载测试等必须借助测试工具来实现。过分强调测试工具的作用,极力追求各种软件测试工具,是软件测试本末倒置的表现。实际上,测试过程中80%以上的缺陷是手工测试发现的,仅有不到20%的缺陷是靠工具测试发现的,而且这还得要求测试人员合理地使用工具。
3采用的测试模型
企业对产品开发应重点关注产品开发的过程控制,以及测试、管理。保证产品质量从源头开始。因此,测试过程更适合采用W模型,如图4所示。在W模型中,测试过程和开发过程都贯穿项目开发过程的整个生命周期,两者同时开始,同时结束,相辅相成、始终保持着同步的关系。这样做的原因是:测试工作尽早介入,软件存在问题的可能性就会降低。项目正式立项后,测试人员既可参与到项目组中,通过学习和阅读相关文档,加强对项目的了解,对项目有个整体认识,形成初步的测试思路。同时测试越早介入项目就能够越早发现问题,解决问题所花费的成本越小。如果在软件的最后阶段进行测试,发现功能设计不合理或性能不好,需要修改需求和设计,不得不返工到系统设计或需求定义阶段,会造成很大的代价,所以有必要将软件测试延伸到需求、设计阶段,对需求、设计进行验证。有资料表明,60%以上的软件错误不是程序错误,而是分析和设计错误。若把软件分析、设计上的问题遗留到后期,可能造成设计、编码的部分甚至全部返工,从而增加软件开发成本及延长开发周期等后果。同时,需求和设计阶段所产生的缺陷具有放大效应,严重地影响软件质量。因此,为了更早地发现并解决问题,降低修改错误和缺陷的代价,有必要将测试延伸到需求分析和设计阶段中去,使软件测试贯穿于整个生命周期,提倡软件生命周期测试的理念,即软件测试是对软件形成过程中的所有工作产品(包括程序以及相关文档)进行的测试,而不仅仅是对程序的运行进行测试。测试在对需求和设计阶段的测试活动主要是通过需求评审和设计评审来实现,可以更早发现问题,及时修改问题。即对软件开发阶段中的阶段性产品进行评审、走读或者回忆评审,发现其中的问题,是一种静态测试。通过静态测试,可以更早地发现问题,把问题消灭在萌芽中,将每个阶段产生的缺陷及时清除。
总结
软件测试作为专业性比较强的技术在我国起步较晚,受重视程度不够,但它是保证软件质量的终极手段,目前越来越受到了人们的关注。铁路行业的生产企业,认真做好产品质量把关,合理运用相关检测技术,将软件缺陷消灭在萌芽阶段,保证铁路运输和人们生命财产的安全。
作者:朱剑辉单位:哈尔滨铁路局科学技术研究所