欢迎访问发表云网!为您提供杂志订阅、期刊投稿咨询服务!

软件开发试用期工作大全11篇

时间:2022-08-14 09:27:53

软件开发试用期工作

软件开发试用期工作篇(1)

中图分类号:G642文献标识码:A文章编号:1009-3044(2011)26-6433-02

Curriculum Design of Software Testing Professional of Vocational Colleges

YU Hai-hong

(Nanjing College of Chemical Technology, Nanjing 210048, China)

Abstract: Software testing is the key to software quality assurance, which is throughout the software life cycle. At present, software testing professionals are difficult to meet the needs of the community whether quantity and quality. Based on this status, this article presents the curriculum design of software testing professional in vocational colleges to bring up rapid induction talent of the software testing for the enterprise.

Key words: software testing; vocational; curriculum design

1 课程设计背景

软件应用已渗透到各个领域,小到生活中的家电、电子消费品,大到国防、航天、医疗领域的精密仪器,软件是现代服务业发展的核心。随着软件功能的增强和应用的扩展,软件的规模越来越大,内部结构越来越复杂,软件的质量和生产率难以适应发展需求,已经成为软件企业规范管理和软件产业快速发展的绊脚石。

1.1 软件测试的重要性

软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。软件工程规范了软件开发的过程,是生产最终能满足需求且达到工程目标的软件产品的保障。软件工程中提出了软件生命周期的概念,将软件开发分阶段有序进行,软件测试是软件质量得以保证的不可或缺的一环。

软件质量正确的内涵包括三方面,完整的需求、正确的代码和最少的缺陷。软件测试就是在软件开发的整个生命周期中对这三方面进行有效控制的重要手段,是软件质量的安全副驾驶。通过必要测试,软件缺陷数可至少降低75%,而软件的投资回报率能达到350%。软件测试工作对软件项目的重要性,从今天诸如微软这样的软件巨擎的人员架构上就可见一斑。如今,在微软内部,软件测试人员与软件开发人员的比率一般为1.5~2.5左右,即一个开发人员背后,有至少两位测试人员在工作,以保证软件产品的质量。

1.2 软件测试现状

目前越来越多的软件开发机构认识到测试的重要性,并且成立了专门的测试机构,如QA小组,并且配有专门的测试人员。软件测试的过程也由最初的后期调试上升到软件开发全生命周期的质量控制,测试的重要性和规范性也不断提高。

软件测试的方式也开始由手工向自动化测试方向转变,自动化测试工具在测试过程中的应用越来越多,越来越广泛,诞生了很多自动化测试工具,诸如:QTP,Winrunner,Loadrunner等等。软件测试的蓬勃发展在促进质量提升的同时,也将软件产业带进发展的新时代。

1.3 软件测试人才供给不足

据前程无忧招聘网统计,目前,国内120万软件从业人员中,真正能担当软件测试职位的不超过5万人,软件测试人才缺口已超过20万并向30万大关急速挺进。在中华英才网近期的2010十大热门职业中,软件测试工程师也位居三甲之列。

2 课程设计目标和原则

高职教育的内涵就是以市场为导向,培养具有较强动手能力,再培养成本低,能够快速切入工作领域的蓝领人才。也就是说高职教育的培养目标是具有一定应用能力的实用性人才。

软件测试工程师一般分为以下几个等级:1)高级测试工程师。高级测试工程师不但需要掌握测试与开发技术,而且要对所测试软件对口的行业非常了解,能够对测试方案可能出现的问题进行分析和评估。2)中级测试工程师。中级测试工程师要能编写测试方案、测试文档,与项目组一起制定测试阶段的工作计划、能够在项目中合理利用测试工具来完成测试任务。3)初级测试工程师。初级测试工程师的工作通常是按照测试方案和流程对产品进行功能测试,检查产品是否有缺陷。

根据高职学生的能力特点,应该把高职学生定位在初级和准中级测试工程师,具有一定的设计方案的编写能力,能利用测试工具完成一定的测试任务,并能够执行功能测试。整个课程的重点是软件测试岗位的基本技能,主要包括:软件测试基本概念的建立;软件缺陷生命周期管理;系统测试的基本概念、方法和用例设计;典型测试工具的应用;对于典型系统的测试方法。

3 课程设计

基于软件测试工程师的工作性质和高职学生的特点,在高职院校开展软件测试方向课程,应分为三步走:第一,掌握一门软件开发语言和一种数据库应用技术,建立计算机信息系统的概念。开发语言的逻辑都是相通的,关键是通过对某一门语言的学习来建立软件开发和计算机处理信息的概念。第二,了解软件开发的过程,软件测试贯穿于整个软件生命周期中,只有对软件开发过程有了清晰的认识,软件测试的工作开展起来才会更完整,更有效,更加节省成本。第三,掌握一种自动化测试工具,软件的规模越来越庞大,测试的任务也越来越重,越来越规范,自动化测试工具的应用越来越广泛。

高职高专类学生的培养更加注重动手能力,特别是软件开发和软件测试方向学生的培养,单单靠课堂上有限的理论课程是很难建立对系统开发和测试的直观认识的,所以软件测试人才的培养实训课程的数量和质量必须有所保障。基于以上分析的这些特点,设计如下培养方案,以下设计每个环节都分几个方向,可根据学生自己的兴趣进行选择性学习。

3.1 认识测试环境

学生首先应该有一定的计算机基础,对当前比较流行的操作系统和简单的网络知识有一定的了解。测试环境这一环节的内容属于专业基础课程设计。如表1。

3.2 培养编程思想和数据库应用能力

无论从事软件开发还是软件测试,都必须掌握一门开发语言和数据库应用技术,来培养学生的编程思想和对信息系统这一概念的理解。编程语言基础众多,结合学院软件专业学生的培养方案,本文仅提出了.Net方向和Java作为参考。如表2。

3.3 软件测试的巩固

要成为合格的软件测试工程师,首先要对软件开发的整个流程有所认识,因为软件测试贯穿于整个软件生命周期过程中。无论做软件开发还是做软件测试,在当前都要有一定的标准和规范,所以软件工程这门课程在软件行业显得非常重要。如表3。

3.4 通过实训项目提高测试能力

了解软件测试的管理组织模式与实施过程。能运用所学的软件测试技术设计测试用例,执行测试,报告发现的缺陷,并给出测试结果和质量分析报告。这个模块的设计必须建立在实际的信息系统之上进行,通过实际项目掌握实际工作中开发和测试的流程,使用相关工具,提高测试能力和积累软件工程师经验。如表4。

4 小结

软件测试工程师不仅要有一定的专业技能,更重要的是有良好的逻辑思维能、耐力和毅力,所设计的课程内容首先要考虑到学生的兴趣,也要尊重当前的市场需求,所以本文只是宏观上的设计,鉴于教学实践的积累,软件测试专业的课程设计会被不断的充盈和完善,反过来,这种宏观上的课程设计为具体的授课提供依据和指导。

软件开发试用期工作篇(2)

软件的生命周期主要由软件定义、软件开发和软件维护三部分组成。对于软件的各个不同阶段,尽可能地将软件的开发设计工作划分为具体的任务,并且使任务之间的关联性降低,尽可能地相互独立,从而可以有效地降低软件开发的复杂性,利于软件开发工作的组织管理,简化其工作流程。

1.2软件定义时期

对软件进行定义的主要目的是明确软件开发工作的总目标和该软件工程的可行性,分析软件系统需要实现的具体功能及采取何种手段实现该功能,并对整个系统所需要的成本和资源进行初步的估算,设计出工程的进度表。该阶段的工作主要由系统分析员完成,其主要工作有:

(1)问题描述和可行性分析。

进行此阶段分析时,主要由软件系统的需求方和软件开发方相互协商,明确软件系统的目标及可行性。问题描述主要是明确需要解决什么问题,对问题进行准确的定位,将问题的困难程度、性质、规模及目标等内容以书面的形式进行描述,并上报给上级主管部门。对软件需求方的使用者进行走访,对问题的理解进行扼要的描述,并将写好的报告反馈给用户,查看问题的描述是否准确,统一双方的意见,直至达到最终的协议。对于可行性的分析,当前对于该定义并没有给出明确的定义,其主要目的是描述该系统是否值得去做,是否有合适的技术能够解决此问题。在该阶段的可行性相对比较简短,只是从总体上进行分析,并不涉及具体的问题。

(2)分析需求。

明确软件系统可行之后,就需要对软件的功能进行详细的分析,即:为了达到使用者的要求,软件系统必须能够做什么和具备哪些具体的功能。另外,用户当进行软件操作时,必须有个清晰的认识,利用该软件系统要达到哪个具体的目标。开发人员和使用者必须进行详细的、准确的沟通,利用数据模型、数据字典、数据流图及算法设计出整个软件系统的逻辑模型。在该阶段,必须让用户参加,并给出具体的意见。

1.3软件开发时期

对于软件的开发,主要由计划、设计、编码和测试四部分组成,计划和设计是系统设计,编码和测试是系统实现。软件的开发由计划开始,完善的计划可以为软件的开发节省大量的时间和精力;设计是在计划的基础上,进一步的完善,给出问题的每一个步骤,是对整个系统功能的完整描述;系统设计完成后,开始进行编码操作,即对问题的具体实现,在编码中,要符合编写规范的要求,保证程序的易读易维护;没有一个软件是一次编写成功的,需要反复的测试才行,当前的测试从小到大,分别是单元测试、集成测试和验收测试,每次测试都要进行详细的记录,为以后软件的维护打好基础。

1.4软件维护时期

如果说前面的步骤是软件的实现过程,那么软件的维护时期就是软件的使用过程,软件的维护时期最长,由于软件随着使用环境的不断变化,软件的功能逐渐不能满足用户的需求和无法正常使用,为了延长软件的使用寿命,必须对软件进行维护处理。对于软件的维护活动主要分为4类,分别是:改正性维护、完善性维护、适应性维护和预防性维护。根据维护的情况不同,每个维护都要有详细的报告,通过报告来进行制定维护计划、修改软件设计、代码修改和测试等一系列的过程。

2测试自动化

开发人员设计好程序之后,无法直接投入使用,需要对代码进行测试,而软件测试是一个非常烦琐的过程。据统计,软件工程人员无法及时交付软件的主要原因是在规定的时间内没有对软件进行完整的测试和修订。21世纪,时间就是金钱,时间就是企业的生命,软件投入市场越早,就越有可能提前掌握先机,从而获得更高的利润。传统的软件测试方法无疑已经无法适应当前IT行业的发展,自动化测试软件可以使测试流水化,使得在较短的时间内充分对软件进行测试,现在,越来越多的软件企业选择测试自动化。

2.1测试自动化的定义

当前,对于测试自动化的定义比较多,但总结起来为:能够通过自动化的测试工具,针对软件测试,在预设条件下运行系统或应用程序,评估运行结果,预先条件应包括正常条件和异常条件。从而达到减轻手工测试的劳动量,节省测试时间的目的。测试自动化在很多情况下都具有非常大的使用价值,例如在进行脚本测试时,可以产生许多重复调用的代码,在进行压力测试时,可重用很多次该脚本。如果利用手工测试方式进行压力测试,那么可能要花费相当长的时间,而且有时有些软件的缺陷还不能及时地发现,测试自动化保证了软件的稳定性和准确性。

2.2测试自动化的生命周期

进行自动化测试的工具也是一种软件,有其自身的生命周期,主要分为需求分析、计划、设计、实现、集成、维护和终结等过程。对于需求分析阶段,主要是对测试的用例进行详细的分析,明确测试用例的可行性,考察用例是否可以重复利用,对测试有何价值;在计划阶段,设计测试的进度和生成相关的文档;设计主要是描述自动化测试的模块,而描述是对这些模块的实现;对写好的软件模块进行集成,生成相应的具有特定功能的测试包;最后对软件的测试自动化工具进行维护,随着时间的推移,结束自动化测试生命周期。

3测试自动化软件的实现

3.1需求分析阶段

在该阶段,测试工程师和手机终端使用者要一起参加需求分析的讨论,分析测试的环境和过程,测试不同的环境下手机的使用情况。在进行手机通信测试的需求分析里,假定使用300个测试用例,分析其自动化测试的流程,形成书面的需求规格说明文档,并进行专门的评审,对测试用例进行审查。

3.2计划阶段

主要完成计划进度表的建立。例如整个手机终端测试需要五周时间完成,计划和设计需要半周,开发和执行需要三周,测试需要一周半。在规划测试计划时,在对每一次进行操作进行相关文档的说明,其中文档的完成工作也需要在计划时间以内,建立和维护一个测试环境文档是非常重要的。

3.3设计阶段

对于手机通信系统来说,软件的升级不会带着新的错误,即功能是不变的,由于测试的脚本具有共用性,模块化的设计是非常有必要的。在设计的过程中,要注重命名规则,以免发生混淆,使得模块发生混乱。

3.4实现和集成阶段

实现主要是在设计的基础上,进行编码,最终完成软件,每次代码更改运行要记录初始状态和运行后状态,及时进行备份。对软件进行集成分块测试,将生成的测试包提交给组装集成测试人员,对其进行评审和验证,详细记录其结果。

3.5维护和终结阶段

软件自动化测试生成后,要根据使用环境和用户的不同进行维护处理,并不断对其进行改进,这个过程可以通过问题跟踪工具来完成。随着新技术的来临,软件会越来越不适应企业的要求,就要对其进行终结,重新研发新的测试软件。

软件开发试用期工作篇(3)

1 软件测试现状分析

随着计算机软、硬件技术的发展,计算机技术已经渗透到社会各行各业中,什么都离不开计算机,而且计算机软件的功能非常强大,无处不在,无所不能,计算机软件也变得多样化、复杂化,软件运行出现的错误和缺陷的几率越来越大,为了保证软件的质量,需要测试人员反复测试论证,软件测试工作在软件项目生命周期中的重要性日益突出。当前,我国的软件开发能力比欧美发达国家差不了多少,主要差距就是软件质量。国外的大型软件开发公司中软件测试人员和软件工程师一般是1:1的比例,我国目前还不是很规范,但也正在向这方面靠拢。软件测试在我国越来越趋于标准化科学化,是一个很有发展前途的职业。

2 软件开发与软件测试

通常我们理解的软件开发可能只是程序员通过一定的专业技术,如编程语言、数据库技术创造出一个新的应用程序。其实软件开发是一个系统的工程,包括需求分析、设计、编码、测试、维护等等几个环节。软件测试是整个软件开发流程中的一个重要的环节,主要包括白盒测试、灰盒测试和黑盒测试。白盒测试一般用于单元测试,需要测试人员对于代码结构有很好的理解,黑盒测试也就是我们通常说的功能测试,主要检测软件功能是否满足用户的功能需求。灰盒测试则是界于白盒和黑盒测试之间的一种测试方法。在现代软件开发流程中,测试工作是贯穿于整个开发流程,并不是在程序员编码完成以后才开始的。在软件开发前期,测试人员需要根据用户的需求,编写测试计划,准备测试方案,编写测试用例,甚至根据业务需要编写不同的测试工具,为后续的测试工作做好准备。在软件开发中后期,测试人员需要利用测试工具按照测试方案、测试用例和流程对软件产品进行功能和性能测试。在执行完测试方案、测试用例和流程后,需要跟踪软件缺陷,以确保最后开发出来的成果能够真正满足用户的需求,尽量以最小的代价来发现尽可能多的错误。

在整个软件开发过程中,软件测试要尽可能早的参与到项目活动中,最好是项目初期就要界入其中,这样就可以尽可能早的并且多的发现软件缺陷。如果在软件研发后期发现框架问题,可能会导致很多功能模块需要返工,越晚开始,测试人员对软件的了解就会越少,就无法深入测试,可能漏测掉很多重要的功能,可能会在短时间内发现大量的软件缺陷,不利于软件的版本稳定。

软件测试不象编程技术那样发展那么迅速,可参考借鉴的东西非常少,软件中每一个功能模块的测试方案都需要测试人员多方面的考虑,所以这意味着测试更需要人的创新能力。验证程序的正确性,远不象普通人想象的机械重复性的操作那样简单。验证程序的正确性更是需要人们大量的创造性劳动。

3 软件测试策略

要做好软件测试工作,会遇到很多挑战和困难。这就需要我们软件测试人员通过自己专业的知识和想法不断提高自己。通常认为软件测试人员具备的基本素质按重要等级依次是:技术、沟通能力、自信心、责任心、耐心和细心等。

首先技术是基础,作为测试人员,测试人员应该比开发人员掌握更多的知识,在测试过程中,你必须了解软件的生命周期,知道什么阶段进行什么类型的测试。

其次是沟通能力,沟通能力是测试工作顺利进行的保障。在技术基础的保障下,测试人员必须充分了解用户的需求,知道哪些问题是软件问题,能够清楚描述软件出现问题的场景,最好是知道为什么会出现问题,最最好是知道如何修复这个问题,这样的话,就会更好的与开发人员进行沟通,测试工作也就会进行的更加顺利。

再次,测试人员必须有自信,软件测试是一项技术要求很高的工作,测试虽然基本不实现编码(当然,也会写测试脚本或测试代码),但特别要求对系统的整体把握能力。测试其实是很有内容的,只是目前没有受到足够的重视,没有被提高到它应有的地位。在技术基础的保障下,你应该非常自信地进行自己的测试工作,理直气壮地向开发人员提出软件问题,并坚持自己的观点,明确各方责任。最后,测试工作非常重要,你担负着软件质量验收责任,你必须有责任心,耐心和细心地工作,争取不放过任何一丝一毫的软件错误和缺陷。

在整个软件测试过程中,是否能够准确充分的发现足够多的软件错误和缺陷,软件的测试管理工作非常重要。

第一,严格遵行测试过程。首先进行需求分析,了解用户的需求,并且充分了解软件的测试范围和测试内容,准备好测试所需要的数据,然后经过评审,这一个过程可以避免测试人员对测试需求的理解错误,遗漏测试内容。其次进行软件测试用例的设计,明确对每一项功能应该怎样进行测试,包括选择什么样的测试工具、操作流程、输入数据和输出结果等,再次评审。这一过程可以避免测试人员选择工具错误,操作流程或输入数据错误,遗漏测试内容等。第三个阶段是执行测试用例,在执行过程中最好详细记录测试结果,在什么样的输入情况下产生什么样的输出结果,仔细比对软件原始需求,确定软件是否发现问题。测试用例执行完毕后,也需要进行评审,主要检测测试是否进行充分,记录是否准确,软件问题提出是否正确。

第二,真实模拟客户环境。随着开发技术的不断进步,诸如多线程,虚拟化,大数据量的并发,安全性,软件间、不同系统平台间的交互响应这类环境的搭建,对测试人员来讲都很有挑战。在执行测试前,我们得尽可能真实的模拟客户的使用环境。这样才能真正的发现软件的缺陷。

第三,有效验证程序正确性。测试人员要比开发人员考虑更多的东西,在设计测试用例的时候,要充分考虑到其他功能以及本功能的关联关系,要有大局观。需要扎实的软件测试理论,尽量自己分析问题,多涉猎一些项目之外的知识.

第四,积极跟踪软件缺陷。测试不仅仅是发现程序中的缺陷,更重要的是跟踪解决这些缺陷,因为只有缺陷被解决了,软件质量才有可能提高,我们的成绩才能得以真正的体现。事实确实是这样,测试人员提交了软件缺陷,如何说服开发人员修复这个缺陷,才是关键。只有缺陷被修复,软件的质量才会提高,这样才能体现测试人员的工作价值。

4 总结

总之,软件测试是整个软件开发流程中重要并且不可缺少的环节,做好了软件测试工作,才能保障软件的质量。

参考文献

[1]朱少民.全程软件测试[M].北京:电子工业出版社,2007(09).

软件开发试用期工作篇(4)

一、软件测试的定义

软件测试(Software testing)是软件生存期(Software life cycle)中的一个重要阶段,是软件质量保证的关键步骤。通俗地讲,软件测试就是在软件投入运行前,对软件需求分析、设计规格说明和编码进行最终复审的活动。1983年IEEE提出的软件工程术语中给软件测试下的定义是:"使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别"。这个定义明确指出:软件测试的目的是为了检验软件系统是否满足需求。

从用户的角度来看,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,所以软件测试应该是"为了发现错误而执行程序的过程"。或者说,软件测试应该根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误或缺陷。

二、影响软件测试的因素

影响测试效率的因素除了测试方法之外,主要因素还有人为因素、软件类型、错误类型、测试充分度等。下面对这些因素作一个简要分析。

1. 人为因素

软件测试中的许多工作是由人来完成的,因此,人为因素是影响测试效率的一个重要方面。这样的差异并非偶然,这是因为测试人员在应用一个测试方法时具有很大的灵活性,从而使测试人员的经验和学习能力可以有较大的发挥余地。所以只能采用越来越严格的测试方法和过程来有效地避免人为因素对测试效率的影响。

2. 软件类型

软件类型也是影响测试效率的一个重要因素。即使是同一个测试者,测试不同类型的软件的效率和发现软件错误的能力也是不尽相同的。测试什么类型的软件的效率较高则因人而异,这往往与测试者的相关知识、经验与专业训练有关。

3. 测试充分度

测试充分度反映了一个测试是否得到了良好的执行,它直接关系到测试的效率。1993年Frankl和Weiss发现,只有当充分度十分接近100%时,才能使测试发现错误的能力得到发挥。因此,在测试软件时,必须设法使充分度十分接近100%,否则将难以保证测试质量。

三、加强对测试工作的组织和管理

随着软件开发规模的增大、复杂程度的增加,以寻找软件中的错误为目的的测试工作就显得更加困难。然而,为了尽可能多地找出程序中的错误,生产出高质量的软件产品,加强对测试工作的组织和管理就显得尤为重要。

从软件的生存周期看,测试往往指对程序的测试,这样做的优点是被测对象明确,测试的可操作性相对较强。但是,由于测试的依据是规格说明书、设计文档和使用说明书,如果设计有错误,测试的质量就难以保证。即使测试后发现是设计的错误,这时,修改的代价是相当昂贵的。因此,较理想的做法应该是对软件的开发过程,按软件工程各阶段形成的结果,分别进行严格的审查。

虽然测试是在实现且经验证后进行的,实际上,测试的准备工作在分析和设计阶段就开始了。

1. 测试的过程及组织

当设计工作完成以后,就应该着手测试的准备工作了,一般来讲,由一位对整个系统设计熟悉的设计人员编写测试大纲,明确测试的内容和测试通过的准则,设计完整合理的测试用例,以便系统实现后进行全面测试。

在实现组将所开发的程序经验证后,提交测试组,由测试负责人组织测试,测试一般可按下列方式组织:

(1) 首先,测试人员要仔细阅读有关资料,包括规格说明、设计文档、使用说明书及在设计过程中形成的测试大纲、测试内容及测试的通过准则,全面熟悉系统,编写测试计划,设计测试用例,作好测试前的准备工作。

(2) 为了保证测试的质量,将测试过程分成几个阶段,即:代码审查、单元测试、集成测试和验收测试。

(3) 代码会审:代码会审是由一组人通过阅读、讨论和争议对程序进行静态分析的过程。会审小组由组长,2~3名程序设计和测试人员及程序员组成。会审小组在充分阅读待审程序文本、控制流程图及有关要求、规范等文件基础上,召开代码会审会,程序员逐句讲解程序的逻辑,并展开热烈的讨论甚至争议,以揭示错误的关键所在。实践表明,程序员在讲解过程中能发现许多自己原来没有发现的错误,而讨论和争议则进一步促使了问题的暴露。例如,对某个局部性小问题修改方法的讨论,可能发现与之有牵连的甚至能涉及到模块的功说明、模块间接口和系统总结构的大问题,导致对需求定义的重定义、重设计验证,大大改善了软件的质量。

(4) 单元测试:单元测试集中在检查软件设计的最小单位-模块上,通过测试发现实现该模块的实际功能与定义该模块的功能说明不符合的情况,以及编码的错误。由于模块规模小、功能单一、逻辑简单,测试人员有可能通过模块说明书和源程序,清楚地了解该模块的I/O条件和模块的逻辑结构,采用结构测试(白盒法)的用例,尽可能达到彻底测试,然后辅之以功能测试(黑盒法)的用例,使之对任何合理和不合理的输入都能鉴别和响应。高可靠性的模块是组成可靠系统的坚实基础

(5) 集成测试:集成测试是将模块按照设计要求组装起来同时进行测试,主要目标是发现与接口有关的问题。如数据穿过接口时可能丢失;一个模块与另一个模块可能有由于疏忽的问题而造成有害影响;把子功能组合起来可能不产生预期的主功能;个别看起来是可以接受的误差可能积累到不能接受的程度;全程数据结构可能有错误等。

2. 测试的人员组织

为了保证软件的开发质量,软件测试应贯穿于软件定义与开发的整个过程。因此,对分析、设计和实现等各阶段所得到的结果,包括需求规格说明、设计规格说明及源程序都应进行软件测试。基于此,测试人员的组织也应是分阶段的。

软件开发试用期工作篇(5)

中图分类号: TP311.52 文献标识码:A

1 引言(Introduction)

随着软件产品需求的增长与软件开发能力的增强,软件质量问题亦变得尤为重要。近年来,以软件测试为中心的软件质量保障技术在软件开发中得到迅猛发展,已成为必不可少的软件质量保障手段。软件开发是一个系统工程,软件测试的目标是力求以最少的人力、物力、财力、开发时间,尽可能多地检测、分析、预测出软件开发中潜在的各种错误和缺陷。一个好的软件测试模型和测试方法是有效实施软件测试的基础,将直接影响测试结果的准确性和有效性。

为提高测试模型的有效性,本文阐述了在基于CMM的项目开发过程中,研究一种基于工作流技术的较为高效的软件测试模型及软件测试流程。该模型及测试流程能合理地将测试过程划分为各个测试阶段,并有效实施测试各阶段中的测试活动,使测试工作覆盖整个软件项目的开发生命周期。

2 CMM概述(CMM summarize)

自20世纪70年代中期以来,随着软件开发行业的不断发展,软件开发规模越来越大,而软件开发质量却越来越难以保证,因而出现了严重的软件危机。提高计算机软件产品的生产率和质量成为了软件工程领域研究的一个焦点,探索新的软件开发方法和软件测试技术势在必行。1987年前后,美国卡内基・梅隆大学软件工程研究所的Watts Humphrey等人,为了进一步提高软件开发质量,提出了软件过程、软件能力成熟度等级等概念及SW-CMM,即目前简称的CMM(Software Capability Maturity Model软件能力成熟度模型)。

CMM可以科学地评价软件开发单位的软件能力成熟等级,客观地反映其软件在开发水平,同时,CMM能帮助软件开发单位进行软件能力自检,促使软件在开发过程不断完善和改进。这种内外共用的评价机制,确保了软件开发质量,提高了软件开发效率。在软件开发领域,CMM已经越来越受到重视。

CMM共分为5个级别,以目前业界的通行标准,软件质量可用每千行源代码所包含的Bug数来衡量。在CMM各等级中,一级11.95个,二级5.52个,三级2.39个,四级0.92个,而五级则只有0.32个[1,2],可见,随着CMM级别的提高,软件开发的可靠性也有了数量级的改进。目前,在参加了CMM认定的中小软件开发单位中,大多数通过CMM二级或三级。

3 工作流技术(Workflow technology)

工作流管理技术拥有可分离性、可重用性等特点,有着独特的业务逻辑与过程逻辑。为了进一步提高产品生产率,工作流技术已经被逐步应用于过程自动化以及应用系统集成中。在软件开发领域中引入工作流技术与工作流管理系统,不但能够降低软件开发风险,而且能够使业务流程的实现代码集中统一,不再是散落在各种各样的系统中,加快应用开发,代码更容易维护,提高对迭代开发的支持。在工作流管理系统中,可以较容易地部署新业务流程,通常采用迭代的方式开发,因此,把工作流技术应用在敏捷开发与测试中,能增强有效性,使开发风险更低[3]。

4 软件测试过程模型和选取策略(Software testing process model and selection strategy)

目前,比较常用的软件测试过程模型主要有 V 模型、W模型等。

V模型清晰地描述了测试和开发过程各个阶段之间的对应关系,是最具代表意义的测试模型。但V模型容易让人认为测试只能在软件开发之后进行,其原因是,V模型把系统开发过程划分为具有固定边界的不同阶段。同时,V模型也没有明确测试设计,使得直到最终的验收测试阶段才发现软件开发初期的错误,造成更大的开发代价。

W模型虽说在V模型基础上有改进。但实质上,V模型和W模型所出现的问题也都是相似的,两者都认为软件开发是需求、设计、编码等固定行为和活动,这类项目中,所有开发和测试人员都要按照事先定义好的软件开发顺序开展工作。而实际上,软件开发不可避免地会产生阶段性需求变动,文档亦要求时时更新,软件开发活动在大部分时间内可以交叉,这样V模型和W模型就难以实施,二者只适用于那些需求非常明确的项目。

H模型较好地体现了敏捷测试原则,提倡“尽早测试”“全程测试”“独立测试”和“迭代测试”。H模型运行中,只要测试准备活动完成了,测试执行活动就可以开始,其测试流程可以是任意的开发流程,其他流程的进展可以及时地触发测试就绪点。H模型很好地解决W、V模型存在的问题,达到更好的测试效果。H模型对软件测试过程作了定义,将软件测试过程划分为测试需求、策划、设计、执行、总结五个阶段,如图1所示。

H模型虽然兼顾效率和灵活性,但它没有提出具体的应用模型,而单纯的理论测试模型只能实现对软件测试过程进行抽象描述,因此必然存在有未被此测试模型涉及的特性,而工作流技术能很好地解决测试管理环境中的测试流程定义、测试流程解释执行和监控等相关问题,从而实现预期的业务目标。基于H模型的理论,将工作流引入到H模型中,重新对软件测试的流程进行系统的分析,提出一种适用CMM软件项目开发的软件测试流程,并构造出一个以任务分配为驱动的CMM软件测试管理应用模型。

5 基于工作流的CMM软件测试H模型(The CMMsoftware testing H model based on workflow)

CMM在提高软件开发质量方面的作用已经得到广泛认可,但CMM只是对项目开发提出了要求,至于具体实施过程,还需要更加行之有效的实施方法、技术和工具的支持,为使开发业务过程的部分或全部实现自动执行,引入工作流技术。

5.1 工作流元模型[3]

工作流管理联盟定义的过程元模型PDM(Process Definition Meta-mode)的结构, 定义工作流语义模型的构造和规则,描述工作流模型内部包含的各个对象以及对象之间的关系和属性,如图2所示。

5.2 CMM软件测试H模型

在CMM开发模式下,结合可行性和易用性,以H模型为基础,结合工作流技术,针对CMM中小软件开发的实际工作情况,在原有研究基础上建立软件测试管理应用模型[4],如图3所示。

这个模型中,软件开发与测试并发执行,构成H模型结构,核心部件为工作流引擎,它负责执行任务分配,该模型强调尽早测试等敏捷软件测试原则,其测试基本流程为:

(1)测试用例。由测试及设计人员共同建立合格的测试用例库,作为测试任务分配的对象。

(2)工作流引擎。测试工作流引擎由任务分配触发,制定相关工作流各阶段的测试方案,并由专家进行测试方案评审,评审通过后,由测试员进行测试执行。若测试结果无错误,则执行相关的测试评估与度量,填写相关文档,相关测试用例关闭;若测试有错误则产生相关缺陷。

(3)缺陷审核。产生的缺陷如果经审核是一个待修正缺陷,则作为修正的任务分配对象。

(4)缺陷修正。任务分配触发缺陷修正工作流引擎,由软件设计人员进行修正执行,修正确认完成后进入回归测试。待回归测试的缺陷又成为任务分配的新对象。

(5)迭代测试。回归测试再次触发工作流引擎,回到(2)迭代执行,如此往复直至无缺陷并关闭。

5.3 测试任务分配

依照计划、执行、检查、调整的原则进行测试任务的分配,要求在执行任何测试前必须有相应的测试计划和测试用例,明确测试活动以及测试评估所需要的时间和资源,然后进行测试人员安排和测试任务分配等[5]。如图4所示。

当测试任务发起人发起一项测试任务后,将该任务将传递给测试任务承接人,由承接人进行任务处理。承接人完成任务处理后,交还给测试任务发起人确认,如果测试任务确实已完成,由测试任务发起人关闭该测试任务。如图5所示。

5.4 测试用例缺陷状态变迁

把测试用例分静态和动态两种状态,这样可以支持多轮测试。当一个测试用例经过任务分配后,测试用例状态则由静态转为动态,在该模型中,只有动态测试用例才参与真正的测试。动态测试用例主要包括测试用例的状态信息、测试报告内容、测试结果确认等信息,可用NO Run(尚处在设计阶段或尚未被执行)、Passed(已成功)、Failed(已失败)、 Blocked(设计出问题)四个状态来跟踪测试用例的执行情况,而静态测试用例只包括测试逻辑和测试数据。

软件缺陷的产生可能发生在软件生命周期的每个阶段,而且这种软件缺陷可能是由上一个阶段的工作失误造成,所以,对软件缺陷实行跟踪管理在整个软件开发过程中都是非常必要的。在理想状态下,能够根据测试人员的预定要求,在测试之前对软件缺陷的状态以及缺陷状态之间的流换路径进行设置[6]。

缺陷状态周期分成可分为六个态,分别是open态、working态、verify态、cancel态、defer态和close态。其中open态标识新出现的缺陷或没被修改的缺陷;working态标识软件开发人员正在修改和纠正的缺陷;verify态标识软件设计人员已修改完缺陷,并请求结果验证;close态标识缺陷已被修正,否则将其状态重置为open态;cancel态标识的是由测试人员发现并填报的一个存在的缺陷;defer态说明,如果该缺陷在当前条件下修正则系统代价过高,如果该缺陷的优先级不高,则缺陷修正可以推迟。如图6所示。

6 结论(Conclusion)

基于工作流的CMM软件测试H模型将测试过程从开发过程中适当的抽象出来,作为一个独立的过程进行管理,在CMM规则框架下较好地体现了尽早、全面、全过程、迭代测试等敏捷测试思想。该模型能很好地解决CMM测试管理环境中的测试流程定义、解释执行和监控等相关问题,使整个测试过程更加清晰,节约了开发时间,使测试活动更加合理,有效保证整个软件产品的质量,对中小型软件开发的测试有着很好的适用性。

参考文献(References)

[1] 俞磊,等.基于CMM-3的软件测试过程模型的研究[J].计算机与数字工程,2011(7):79-82.

[2] 郑晓霞.基于CMM的工作流管理系统的研究与实现[D].西安:西安理工大学,2007.

[3] 赵瑞东,等.工作流与工作流管理技术综述[J].科技信息,2007(8):105-107.

[4] 张晓雯,徐东.基于工作流的软件测试H模型研究[J].软件导刊,2013(2):24-26.

[5] 郑小军,等.基于工作流技术的软件测试流程定义与监控[J].计算机应用研究,2007(2):43-45.

软件开发试用期工作篇(6)

中图分类号:G64 文献标识码:A 文章编号:1009-3044(2014)34-8215-02

软件企业已经逐步从“手工作坊”式的运作模式发展为工程化开发,企业的规模和管理水平不断提高。截至2014年9月底,累计信息产业部认定软件企业达到9968家,登记的软件产品达到20192个。目前,通过CMM2级以上的企业超过了100家。其中,通过3级的有50多家,通过4到5级的有9家[1]。基于面向产业化、规模化和标准化方向的转变,软件企业需要大量软件工作者从事基础工作。软件生产如同传统产业的流水线作业,需要大量软件测试人员按照规范测试整个工程。一名合格的软件测试工程师,不仅仅要有扎实的测试基础,更需要具备进行自动化测试的能力。针对这些第一线从事软件测试的应用型人才的培养,主要通过高职计算机专业教育。

在我国,大部分的高职院校都开设了计算机科学与技术专业,在这些高校的专业培养计划与方案中,基本都设置了《软件测试》课程[2]。通过《软件测试》课程的学习,使学生了解软件测试领域的基本职业活动,掌握软件测试的技能以及相应知识,培养学生较强的逻辑思维能力以及动手能力。对高职学生而言,这样的课程设置无疑明确定向未来的职业角色。然而目前,在软件测试教学开展中仍然面临大量实际问题需要相关教师来关注和解决。笔者结合近年来的教学实际,就高职院校《软件测试》课程的教学中存在的问题进行一些研究与探讨,提出了教改思路,并给出了一些实际的改革方案,以期提高软件测试的教学水平。

1 课程教学中存在的主要问题

对高职《软件测试》课程培养侧重,主要在于尽快让学生接触软件测试的基本职业活动,缩短了学生进入职业角色的适应期。然而,事与愿违,目前大学软件测试教学中存在很多问题:

1.1教材

目前市面上涉及软件测试方面的教材质量良莠不齐,种类繁多。大部分教材知识结构不够合理,偏重理论,测试工具方面实验指导内容普遍偏少,可操作性差。测试实例设计存在不规范性,测试项目多为简易应用程序,距离实际项目差距很大。

1.2重开发轻测试

软件测试课程多为计算机专业必修课,但是学生普遍存在重开发轻测试的偏见。很多学生认为软件测试就是简单的找茬,一项纯粹辅助软件开发的工作,技术要求低,内容简单重复,效率低。

1.3重理论轻实践

软件测试课程需要将理论和实践两个部分紧密结合起来,而且实践性较强。然而,教学过程中知识结构往往不够合理,对实践的重视程度不够,缺乏具体的实践操作指导。高校计算机教师通常侧重基础理论知识,忽视测试自动化和测试管理等相关高级层面知识,很少为学生提供较完整的测试项目实操方面的知识。

另外,课程最后的考核方式往往采用闭卷考试形式,考核内容侧重零散的基础理论知识点,而无法体现综合的测试实操能力。这样无疑导致学生对软件测试课程形成“重理论轻实践”的错误看法。

1.4测试案例单一,重功能测试轻其他种类测试

在实际课程教学过程中,测试系统简易单一,不是图书馆管理系统,就是学生作业难度的电子商务网站。学校往往缺乏时下的测试项目实例。测试项目大多属于公司内部资料,获取不易,不像通用应用程序一样可以随意搜索。

通常的软件系统测试不仅仅需要功能方面的测试,而且还需要很多其他种类的测试工作,比如性能测试、安全测试等,这类测试难度往往高于功能测试。然而,教学过程中的软件测试实验,往往集中在QTP等软件测试工具的简单录制层面,缺少系统的性能等其他种类测试的实操和分析能力,导致学生产生“软件测试等于功能测试”的错误认识。

1.5自动化程度低

一名合格的软件测试工程师,不仅需要掌握基本的软件测试技能,而且必须熟悉主流的自动化软件测试工具。然而在教学过程中,自动化测试工具往往作为锦上添花的教学内容,只教授简单的使用知识。学生对各类测试自动化工具明显掌握不够,测试脚本编写能力不足,测试自动化程度低,进而测试效率也必然很低。这样不具有分析能力和创新意识的学生,必然不具有职业竞争力。

由以上分析可见,我们必须对测试课程加以改进。只有这样,才能使得软件测试课程更加符合满足现实职业需求的发展需求,促进学校计算机相关专业的快速发展。

2 教学改革方案

多年来高职学生的软件测试课程现状不容乐观,各式各样的教学问题需要引起重视。针对我院学生的软件技术水平及现有教学存在的弊端,笔者根据多年教学实践和思考,就教学改革提出以下措施。

2.1 开课阶段选择

就原则而言,C语言、面向对象程序设计等编程课程是软件测试课程的先修课程。高职院校通常选择在第二学年开设该课程,这是因为学生已经经历过了相关程序设计课程,编程能力和专业理解能力已经有了一定的基础。建议根据学生的情况,提前对学生进行软件测试理念的灌输。例如在相关程序设计课程中,要求学生对教材程序示例和习题进行测试,并且对测试用例进行点评。同时即可挑选一些综合素质程度较好的学生提前学习。面向这些低年级学生,学习兴趣较浓厚,重点介绍软件测试入门知识,可以适当降低软件测试理论难度,引导进行自动化测试。

2.2教材选择

就高职学生而言,他们的计算机专业基础相对薄弱,很多同学对软件测试课程存在偏见。在教学过程中,建议选择使相对直观且简单、理论性略弱,操作性较强的教材,以便教学难度适中,提高教学的质量。另外,教材不要单纯是枯燥的理论阐述,最好搭配丰富的图表和多样的例题,激发学生的学习兴趣。

另外,建议不要恪守教材,应该尽量量体裁衣。根据专业培养方向的不同,选择不同的教材内容和授课方式。例如就软件方向学生而言,补充实用性的技术,例如强调一些针对某种具体语言的专业测试工具。

2.3引导学生正确认识软件测试

如前面所述,学生对软件测试职业存在很多偏见,需要教师对具体问题具体分析,给予学生正确引导。例如针对很多学生反映“软件测试不如软件开发”的问题。教师应将软件测试和软件开发职业现状进行对比分析。从事软件开发职位的人员往往需要某种具体编程技术,而且不轻易改变。发展趋势是要求人员技术逐步深而精。于此对照,软件测试职位则要求人员技术广而泛。测试人员往往需要完成产品线上多个子产品的测试工作,测试范围涉及文档、代码、平台环境等多个对象。后期,功能测试工作一般要求自动化,而且需要开展性能、安全等多种测试项目,工作挑战性和难度并不逊色于软件开发。

另外,教师可以授课过程中,适度介绍就业前景,引导学生多关注软件测试行业的发展动态,建议学生访问例如CSDN、51Testing技术论坛,使学生了解与国际前沿同步的知识。总之,让学生摒除偏见,明晰软件测试行业的职业要求和个人发展空间,进而激发学习主动性,提高职业认知程度。

2.4适度选择理论教学内容,合理安排实践教学进程

在软件测试课程授课过程中,我们探索应用型课程结构,使软件测试实现“理实一体化”课程。在教学内容上加以调整,适度选择理论教学内容,以软件测试基本理论为基础;与此同时,合理安排实践教学进程,重视培养学生实操能力。整个教学过程分为理论讲授、上机实验、实训三个部分。全课平时课时64学时,每周4课时,前两个课时授课,后两个课时上机,理论授课与上机实验穿插同步进行,两者相辅相成;学期期末设置为时一周的实训,以期达到理论与实践紧密结合的教学效果。

首先,课堂教学打好理论基础,主要介绍软件测试基本概念、各种测试技术和方法、测试用例的设计、软件测试项目的组织和管理等相关知识。讲授过程中,向学生案例教学,组织学生讨论测试方案;其他类型的测试,与功能测试并重。根据时下软件测试发展趋势,选择主流工具进行讲解,掌握软件的使用,简要介绍其他工具。整个软件测试课程分为10个学习单元,授课安排详见表1。

通过上机实践,重视实际操作能力的培养。首先,安排一些基础实验,仅限简单操作性范围,设计与教学相配套的上机实验内容,包括白盒测试、黑盒测试等。这样帮助学生掌握测试的基本方法,加深对相关基本概念的理解。之后,遵循尽量接近行业使用的原则,适度选择主流的自动化测试工具实验。另外,安排性能测试工具上机实验,引导学生分析测试结果,提高其解决性能问题高含金量技能。相关自动化测试工具和重点知识点的使用详见表2:

2.QTP检查点

3.QTP数据驱动\&2\&性能测试工具\&1.LoadRunner的使用

2.负载数据分析\&3\&C#程序单元测试\&1.VS2010环境下单元测试\&4\&Java程序单元测试\&1.Junit的使用\&5\&C程序单元测试\&1.Cunit的使用\&6\&Selenium的使用\&1.Selenium测试脚本的录制回放

2.Selenium+Junit的使用\&]

实习在学期末集中进行,为时一整周,培训学生对各知识点的综合应用。将学生编为几个小组,按行业实际将他们分配角色,选择一个实际的软件测试项目来开展测试工作。该过程中,强调学生的测试专业技能,让学生掌握各种测试方法的实施,熟悉测试项目的工作流程。另外,现在我国软件测试业务已经扩展到各个行业的软件系统,学生在校期间只能接触通用软件系统。未来能够通过校企合作,扩展测试对象,希望能够引进结合地方经济、具有行业特色的软件系统,让学生实操测试技术。

2.5作业和考核方式

软件测试课程实践性较强,为了更加明确学习目标,激发学生学习热情,建议采用更加灵活的作业,比如在课后设置思考题。课程考试方式可以改革为报告形式,要求学生对某项流行软件产品提供测评报告。

2.6 积极开发校外实习实训基地

为了增加学生的工作经验,我校积极开发与软件测试相关的校外实习实训基地。近些年来,高校计算机专业就业情势不容乐观,计算机相关校企合作工作难度不小。但是出于深化软件测试课程改革、切实提高学生就业率和测试行业相关率,在院系领导的努力下,与酷派、丝路等软件公司建立实习实训基地。学生通过进入工学交替的实习实训岗位,参与到企业项目测试实践过程中,切实提升学生实操能力,逐步成为技能型人才。

3 结束语

软件测试行业的发展,给软件测试课程带来了机遇和挑战。针对软件测试课程的现状进行了分析,提出了教改思路并给出了一些实际的改革方案,力求切实提高学生软件测试实操能力,以期提高软件测试的教学水平。

参考文献:

[1] 20年中国软件大盘点万家企业60万从业人员[EB/OL]. .

[2] 杨鹏. 高职软件测试课程的教学探索与实践[J]. 番禺职业技术学院学报,2005(2).

[3] 杨鹏,贺平. 高职软件测试专业的构件与探索[J]. 教育与教学研究,2008(2).

软件开发试用期工作篇(7)

中图分类号:TP311 文献标识码:A 文章编号:1674-7712 (2013) 04-0075-01

一、引言

现在,软件测试已经成为一个很有潜力的专业,软件测试可以提高质量,降低维护成本。

对于大型相对复杂的软件项目,做好软件测试就会相对困难,因此,为了尽可能提高软件质量,减少错误,必须有效对测试工作进行计划和管理。

要想对测试工作进行有效策划和管理,需要采取系统的方法建立软件测试管理体系,对测试活动进行监管和控制,以确保软件测试在软件质量保证中发挥应有的关键作用。

二、建立测试管理体系

软件测试的过程及应用即测试规划,设计,执行,配置与资源管理,缺陷管理等。从项目管理的角度来说,这些过程里,前一过程的输出是后一过程的输入。其中,配置与资源管理是这些过程的支持,测试管理对其他测试过程进行监视、测试和管理

三、测试管理过程和基本内容

(一)测试团队管理

做好软件测试需要一个独立的团队,测试团队独立于开发团队之外去做测试工作,可以更加公正的进行测试。虽然测试人员可能需要花时间去熟悉被测对象然后才能设计出测试用例,但是测试人员具备了专业的测试理念和设计技术,而这些测试技术是一个开发人员所没有的或测试前必须花时间去学习掌握的。

测试团队管理的主要任务:确定测试队伍的组织模式,确定测试需求和组织测试设计,估计测试工作量,安排测试任务,确定应交付的测试文档,管理测试工具。

(二)测试过程管理

软件测试贯穿于软件开发整个生命周期,在软件开发的每一个阶段,都有相对应的测试任务,从计划、设计、执行到缺陷管理、总结等步骤,构成了一个测试过程。(如图1)

因此,软件测试过程管理主要集中在测试准备、测试计划、测试用例设计、测试执行、测试结果分析,以及如何开发和使用测试过程管理工具上。

(三)资源和配置管理

1.资源管理包括人力资源和环境资源

人力资源:测试人员的数量及其测试技能,在测试的各个阶段中对人员和技能要求不同。

环境资源:建立测试环境所需要的计算机软件资源和硬件资源。硬件提供了一个支持操作系统、应用系统和测试工具等运行的基本平台,软件资源则包括操作系统、第三方软件产品、测试工具等。

2.配置管理

配置管理是是指通过执行版本控制、变更控制等规程,以及使用合适的配置管理软件,来保证所有配置项的完整性和可跟踪性。配置管理是对工作成果的一种有效保护。

(四)事件(缺陷)管理

事件即缺陷管理,为了有效地管理缺陷(事件),在项目内应该引入规范、高效的缺陷(事件)管理系统。

软件测试的任务就是寻找缺陷,缺陷从被发现、分析、修改,到修改的确认形成了一个缺陷的生命周期(lifecycle)。在缺陷周期内要对缺陷进行跟踪。缺陷可能会在开发过程中被发现,也可能在评审和测试过程中发现,甚至在系统最后使用过程还会发现缺陷。缺陷可能在代码内、在运行的系统中、也可能在各种文档内。缺陷与软件的版本、运行的环境有关。缺陷与人员有关:测试员、开发人员、管理者和客户等

四、总结与展望

测试管理涉及的范围非常广泛,如测试组织管理、测试过程管理、事件管理、人力资源与配置管理、风险管理、进度管理等。软件测试贯穿于软件开发整个生命周期,软件开发周期模型为我们提供了软件测试的流程和方法,为测试过程管理提供了依据。但实际的测试工作是复杂而烦琐的,不会有哪种模型完全适用于某项测试工作。因此,在实际工作中,我们要考虑实际情况灵活地运用测试过程管理理念,依据这些理念来策划测试过程,以不变应万变。

参考文献:

[1]杨小平,王胜开.面向对象软件测试探讨[J].计算机科学,2009,36(11).

[2]王文东,耿国华,张根耀.软件可靠性保证与评测技术[J].微机发展,2004(11).

软件开发试用期工作篇(8)

中图分类号:TP311.52 文献标识码:A 文章编号:1007-9599 (2012) 09-0000-02

软件事故是我们最不愿意看到的现象,一旦出现软件事故则其带来的损失是非常巨大的,早期有美国的火箭爆炸,近年又有温州的动车追尾。所以由此可见软件测试在软件开发过程中是非常重要的。

一、认识软件测试

软件工程中,软件测试就是在软件正事投入行业使用前,对软件的需求分许、系统设计和程序源代码进行最后的复查检测,是确保软件质量的关键。是为了发现软件错误而执行程序的过程。是利用测试工具按照测试方案和流程对产品进行功能和性能测试,甚至可以根据需要编写不同的测试工具,设计和维护测试系统,对测试方案可能出现的问题进行分析和评估。执行测试用例后,需要跟踪故障,以确保开发的产品适合需求。

软件测试在软件生存期中有两个主要的阶段:一个是在编写出每一个模块之后就对其进行测试,亦可称为单元测试或者模块测试。这一阶段主要是对某模块的程序段进行测试或者对其体现的单一功能进行测试。第二个阶段是对软件系统进行的各种综合测试。

二、软件测试的对象

软件测试并不是简单的程序测试,测试程序能不能运行是不够的。软件测试应该贯穿于软件定义与开发的整个期间。所以,软件的需求分析、系统设计、程序编码以及各阶段产生的说明文档,如规格说明、概要设计等都应列入软件测试的对象。另外由于程序的各个开发阶段是相互衔接的,前一阶段的工作如果出现的问题不及时解决的话很自然的会影响到下一阶段的。为了把握好没一阶段的正确性,我们需要进行各种确认和验证的工作。

确认包括需求规格说明的确认和程序的确认,而程序包括静态和动态的确认,静态的确认一般经过人工的分析,动态的确认主要是通过动态分析和程序测试来检查程序的执行情况。

验证就是要想办法证明该软件在软件生存期各个阶段中的逻辑协调性、完备性和正确性。例如测试用户的要求和程序运行的结果是否相符、测试用户的需求与系统分析员的报告是否准确、测试需求说明书和设计说明书是否匹配、设计说明书和源程序是否吻合。

三、软件测试的目的及应把握的原则

在说此问题之前我们先来认识下基于不同的立场时存在的两种测试目的,一个是用户角度,一个是软件开发者角度。从用户角度出发,用户总是希望通过软件的测试尽可能的发现软件中的隐蔽错误和缺陷,以此作为是否接受该软件的度量。另外以软件开发者角度来测试,他们则希望测试那些成为在软件产品中没有错误的过程,验证该软件已正确地实现了用户的要求,增强用户对软件质量的认可。所以他们多会选择一些导致程序失效概率小的测试模块,回避那些容易暴露程序错误的测试用例。也不会刻意去检查排除程序中可能存在的副作用语句。可见这样的测试对于软件的质量来说是毫无意义的。因为在程序中会存在着许多预料不到的问题,而这些问题往往要在特定的环境下才能体现出来。如果不把重心放在力求找出这种错误的基础上,便会把这些错误遗留到运行阶段中。所以软件测试时要多站在用户的角度思考,把目标确定为揭露程序中存在的错误。要力求以最少的时间和人力找出软件中隐藏的各种错误和缺陷。

根据上述的软件测试目的在软件测试中我们要把握以下几个原则:

(一)把“尽早和不断的进行软件测试”牢记于心

由于软件开发各个阶段工作的多样性,以及人员的配伍关系等因素,使得每个环节都有可能产生错误,所以要把软件测试贯穿到每一个软件开发的环节中去,端正态度认真的完成各个阶段的技术审核,这样才能尽早的发现和预防错误,把出现的错误掐死在萌芽阶段没从而提高软件质量。

(二)测试用例要包含输入数据和与输入数据相对应的预期输出结果

测试前要根据测试的要求选择适合该程序段使用的测试用例,这种测试用例主要用来检验程序员编制的程序是否有误。所以采用输入数据和与输入数据相对应的预期输出结果作为测试用例能更快捷的指出程序片段是否有误。

(三)程序员应避免测试自己的程序

测试工作需要客观的态度和冷静的情绪,人们通常不愿意否定自己的劳动成果。正是因为出于此种心理影响,如果程序员检查自己的程序时难免会对软件规格说明的理解产生偏差。因此由其他程序员来检查应该会更客观,更有效果。当然在此我们不能把测试程序和调试程序相混淆。

(四)设计测试用例时不可忽略不合理的输入条件

合理的输入条件是指能验证程序正确性的条件,而不合理的输入条件则包含输入异常、临界或者容易引起异变的条件。人们在进行测试时往往过多的考虑正常的条件而忽视不太合理的输入条件。在软件的正常使用中,人们常会应为操作的失误而对该程序输入各种不合理的输入比如打错键盘或非法输入等。这种错误轻则导致错误的运算,严重会导致软件的失效。因此不合理的输入条件不可忽略。

(五)注意测试中的群集现象

测试时如果某些程序段出现的错误较多,则应加大力度对该程序段进行详细认真的检查,因为据经验表明测试后的程序残存错误与该程序段中已发现的错误的数目成正比。

(六)认真执行测试,杜绝测试的随意性

指定详细的测试计划。计划应包括:软件的功能,输入和输出,各功能测试的进度安排,测试用例的选择等等,还需多查阅相关文献力求全面。

(七)妥善的保管测试计划、测试用例、出错统计和分析报告等,为日后的软件维护提供便捷的服务。

总之,在软件开发工程中软件测试是一个必不可少的工作环节,如果没有此环节的支撑,开发出来的软件产品注定会很快被淘汰。所以为了对用户负责,对国家和人民负责软件开发者特别是大中型软件的开发项目必须要严格的的对软件开发的一系列活动进行妥善的软件测试,这样才能更好的确保软件的质量,提高软件的健壮性和可移植性。

参考文献:

[1]解敏.软件测试技术的管理与预测研究,陕西师范大学,2010

软件开发试用期工作篇(9)

1 概述

彩超研发是一项涉及生物学、医学、物理学和计算机等多学科交叉的工作,对该领域的研究需要投入巨大的人力、物力和财力,而且一些基础研究的投入需要一定周期。在一些发达国家,许多科研机构和跨国企业做了大量前瞻性的基础研究工作,为彩超技术不断的深化与完善,奠定了一定的理论和实践基础。随着整个超声行业技术的发展和企业自身研发能力的提高,海鹰医电实现了从黑白超声到彩色超声的跨越,成为国内能够完全自主完成彩超研发、生产为数不多的企业之一。彩超软件与以往的黑白超软件相比具有更多的软件功能、提供更复杂的用户操作,如何保证规模庞大的彩超软件的质量成为一大挑战性问题。保证软件的质量的重要途径就是制定和实施贯穿于开发全过程的技术与管理规范,实施工程化管理,运用软件工程的原理、思想和标准,通过技术规范与管理规范的有效实施来提高软件产品的可靠性及开发效率[1][2]。

2 软件生命周期分析

软件生命周期是软件的产生直到报废的生命周期,周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段,这种按时间分程的思想方法是软件工程中的一种思想原则,即按部就班、逐步推进,每个阶段都要有定义、工作、审查、形成文档以供交流或备查,以提高软件的质量。但随着新的面向对象的设计方法和技术的成熟,软件生命周期设计方法的指导意义正在逐步减少[1][3]。常用瀑布模型来描述软件生存周期的各项内容,如下图1:

图1 软件瀑布模型

结合软件生存周期和企业实际研发、生产水平,彩超软件质量控制可以在软件计划、软件实现、软件测试三个过程着重把关,控制软件质量。

3 在软件计划过程中控制软件质量

软件计划以软件需求分析为母体分解实施。软件产品以满足用户需求为软件开发的主要任务,而需求分析正是用户需求的提炼。在项目初期及开发过程中,经常会碰到不能很好理解用户需求及用户需求频繁变更的情况,正确地对待这些变更并在计划中灵活安排可以保证软件产品在预计的进度内完成,可以保证计划工作的严肃性,可以维护软件计划、产品和活动与需求的一致性,从而从制度上控制软件质量。

4 在软件实现过程中控制软件质量

软件的实现过程对于软件产品的质量有着重要影响。统一软件过程(RUP)框架和面向对象(OO)程序方法在软件开发中的运用能明显提高软件开发效率,降低整个项目风险,从而提高软件质量。

4.1 RUP框架。RUP框架由Ratinnal公司在吸取多种软件过程和模型的长处的提出,利用用例驱动、以系统架构为中心、迭代增量的开发模型,能全面支持面向对象的开发方法,所以一经推出市场,就迅速得到业界广泛的认同[4]。

传统的软件开发模型瀑布式模型是一个单维的模型(如图1所示),在RUP框架中,软件开发生命周期根据时间和RUP的核心工作流,划分为二维空间,可以用二维坐标来描述。横轴通过时间组织,体现开发过程的动态结构,用“周期”、“阶段”、“迭代”、“里程碑”等术语描述;纵轴以内容来组织,体现开发过程的静态结构,即在某一时刻软件开发所要进行的工作,可以用“活动”,“工作流”,“产品”,“工作者”等概念来表示[3][4]。

RUP中的软件生命周期在时间上被分解为四个顺序的阶段,分别是:初始阶段、细化阶段、构造阶段和交付阶段。每个阶段结束于一个主要的里程碑,在每个阶段的结尾执行一次评估以确定这个阶段的目标是否已经满足。如果评估结果令人满意的话,可以允许项目进入下一个阶段。

在彩超软件中,初始阶段的目标是根据医生对彩超的软件需求建立模型并确定模型的边界条件。本阶段具有非常重要的意义,在这个阶段中关注的是整个超声软件中总体需求的风险。细化阶段的目标是分析超声软件各模型领域,建立健全的体系结构基础,编制超声软件计划。在构造阶段,实现所有模块并集成为产品,所有的软件功能被详细测试。交付阶段的重点是确保软件对最终用户是可用、易用、好用。交付阶段可以跨越几次迭代,包括为做准备的产品测试,基于用户反馈的少量的调整。

4.2 OO程序方法。OO程序方法一个重要的优点是支持信息隐蔽、数据抽象与封装,使得软件的开发、修改和维护易于进行;OO程序方法的另一个重要优点是,它可以在整个软件生命周期达到概念、原则、术语及表示法的高度一致,这种一致性使得各个系统成分尽管在不同的开发与演化阶段有不同的形态,但可具有贯穿整个软件生命周期的良好映射[3]。

在彩超软件制作过程中,采用这两种开发过程和开发方法可以使整个超声软件开发、维护、升级更为容易,提高软件生产效率、降低软件生产成本,控制软件质量从而提高软件的整体质量。

5 在软件测试过程中控制软件质量

软件测试是保证软件质量和可靠性的重要手段。在西方软件发达国家,软件测试受到普遍重视。在国际著名软件企业中,软件测试的费用占到了整个开发过程费用的40%以上。特殊情况下,对于性命枚关的软件,如飞行控制、核反应堆监控软件等,其测试费用甚至高达所有其他软件工程阶段费用总和的3-5倍[3][5]。

5.1 彩超软件的测试项目。针对彩超软件,需要制定和不断修订严格的测试项目,其主要包括性能测试和功能测试两大部分。每个测试项目由可定量描述的测试项组成。

超声软件的性能测试包括每个探头的黑白分辨率,选取标准模块两个不同深度对横向分辨率和纵向分辨率进行定量检测;性能测试还包括每个探头的频谱分辨率,选择人体两个不同器官进行血流定性检测。

超声软件的功能测试包括每个探头的功能调节的测试,有声功率、发射频率、扫描密度、动态范围、平滑处理、帧平均、二次谐波、焦点数、扫描范围、图像优化、边缘增强、灰阶曲线、深度、扫描范围、2B切换、4B切换、黑白翻转、图像旋转等测试项目;探头的预设值测试;测量功能测试,有2D常规测量、M常规测量、Doppler测量、产科测量、男科测量、妇科测量、泌尿科测量、外周血管测量、多胞胎测量、小器官测量、矫形外科测量、心脏测量等测试项目;内置工作站测试,有妇科、男科、泌尿科、小器官、血管、心室、二尖瓣、主动脉、左心室、常规报告、检索、诊断模板、等测试项目;其他功能测试,有回放功能(自动\手工,速度调节)、语言调节、日期、时间设置、图像存储格式选择、图像存储模式、体标目录、患者信息输入、iTouch(预设值)保存/回调、穿刺功能、体标选择、Dicom传输、3D/4D、宽景成像、注释功能、字符输入、输入法切换等测试项目。

5.2 彩超软件的测试主体。彩超软件的测试主体包含软件开发人员内部自测、研发团队总体测试、生产检验二次把关三级。不同的测试主体使用同样的测试标准,但合理的测试结果是,不同的测试主体发现的问题应该不尽相同。软件开发人员内部测试的工作重点是软件功能错误的检测,在内部自测将绝大多数功能错误解决的基础上提交研发团队总体测试;研发团队总体测试的工作重点是软件性能指标的检测,在将绝大多数性能误差解决的基础上提交生产检验进行二次测试;而二次测试的工作重点是绝对软件在批量生产过程中的问题。

6 总结

随着彩超的发展,功能越来越复杂,彩超软件的总体规模越来越大。通过在计划、实现过程、测试三个环节的科学管理,可以有效控制彩超软件的质量,提高产品的可靠性。

参考文献:

[1]张海藩.软件工程导论[M].北京:清华大学出版社,2012.

[2]赵爱静.软件质量评价在航天测控软件中的应用[J].无线电工程,2009,39(8).

[3]熊策.软件质量控制技术的研究与应用[D].长沙:中南大学,2004.

[4]丁峰,等.RUP软件工程过程研究及应用[J].计算机工程,2000,

26(10).

软件开发试用期工作篇(10)

优势不言而喻

自动化测试相对于手工测试,其优势主要体现在:对新版本执行回归测试、更多更频繁的测试、替代有困难的手工测试、具有一致性和可重复性、更好的利用资源、解决测试与开发之间的矛盾等等。

对新版本执行回归测试 对于产品型的软件,每一个新的版本,其中大部分功能和界面都和上一个版本相似或完全相同,这部分功能特别适合于自动化测试, 从而达到测试每个特征的目的。

更多更频繁的测试 每款产品面向市场前都会有一个周期,在测试期间是每天或者每两天都要一个版本供测试人员测试。如果一个系统的功能点有几千甚至上万个,手工测试就显得非常耗时和繁琐,这样必然会使测试效率低下。

替代困难的手工测试如果用户有些非功能性方面的测试:如:压力测试、并发测试、大数据量测试、崩溃性测试,用手工测试是不可能达到的。

具有一致性和可重复性 由于每次自动化测试运行的脚本是相同的, 所以每次执行的测试具有一致性, 手工测试是很难做到的。由于自动化测试的一致性,很容易发现被测软件的任何改变。

更好的利用资源 理想的自动化测试能够按计划完全自动的运行,在开发人员和测试人员不可能实现24小时轮流工作的情况下, 自动化测试可以胜任这个任务。这样充分的利用了公司的资源,也避免了开发和测试之间的等待。

解决测试与开发之间的矛盾 通常在开发的末期,进入集成测试阶段, 在每一个版本的初期,测试系统的错误比较少,这时开发人员有等待测试人员测试出错误的时间. 事实上在叠代周期很短的开发模式中,存在更多的矛盾, 但自动化测试可以解决其中的主要矛盾。

防止自动化测试误区

虽然自动化测试能为开发企业带来许多好处,但仍然有一些局限,我们应当尽量避免以下误区。

期望自动化测试能取代手工测试 我们永远不能期望自动化测试能够取代手工测试, 毕竟自动化测试没有人工更智能。

期望自动测试发现大量新缺陷 同样不能期望自动化测试去发现更多新的缺陷, 事实证明新缺陷越多,自动化测试失败的几率就越大。

技术、组织和脚本维护 自动化测试的推行,存在很多阻力,比如是否受到重视,是否成立一个专门的测试团队,是否有这样的技术水平,对于测试脚本的维护工作量很大,是否值得维护等等问题都必须考虑。

避免不适合的自动化测试

自动化测试并不是适合所有的公司,以及所有的项目。

定制型项目 为客户定制的项目,维护期由客户方承担的,甚至采用的开发语言、运行环境也是客户特别要求的,即公司在这方面的测试积累就少,这样的项目不适合进行自动化测试。

短周期的项目 如果项目周期很短,测试周期也很短,那么该项目就不应该做自动化测试。花大量精力建立的测试脚本,如果不能得到重复利用就是一种浪费,也是不现实的。

业务规则复杂的对象 对业务规则复杂的对象,有很多的逻辑关系、运算关系,自动化测试就很难进行。

美观、声音、易用性测试 界面的美观、声音的体验、易用性的测试等属于主观方面的,而不是客观的,所以也只能通过人工测试。

测试很少运行 如果测试很少运行,对自动化测试就是一种浪费。自动化测试就是要不断循环地运行才有效率。

软件不稳定 如果软件运行不稳定,则会由于这些不稳定因素导致自动化测试的失败。只有当软件达到相对的稳定,没有界面性严重错误和中断错误才能开始自动化测试。

涉及物理交互 工具很难完成与物理设备的交互,如刷卡的测试等。

选择适合的自动化测试

自动化测试之所以能在很多大公司实施起来,主要是它具有适合自动化测试的特点和高的投资回报率。

产品型项目 每个项目只改进少量的功能,但每个项目必须对那些没有改动过的功能进行反反复复的测试。这样的测试完全可以自动化, 同时可以把新加入的功能的测试也慢慢地加入到自动化测试当中。

增量式开发、持续集成项目 由于这种开发模式是频繁的新版本进行测试,也需要利用自动化测试来频繁的测试。

能够自动编译、自动的系统 要能够完全实现自动化测试,必须能够具有自动化编译,自动化系统进行测试的功能。 当然,不能达到这个要求也可以在手工干预下进行自动化测试。

回归测试 回归测试属于自动化测试的强项,它能够很好的确保是否引入新的缺陷,老的缺陷是否修改。在某种程度上可以把自动化测试工具叫做回归测试工具。

多次重复、机械性动作 自动化测试的优势就是那些多次重复、机械性动作的测试。

需要频繁运行测试 在一个项目中需要频繁的运行测试,测试周期按天算,就能最大限度的利用测试脚本,提高工作效率。

自动化测试的目的在于发现老缺陷,而手工测试的目的在于发现新缺陷。因此,我们应该针自己公司的实际情况来决定是否采用自动化测试,充分利用自动化测试所带来的优势。

手工测试面临挑战

自动化测试与传统的手工测试在所有的方面都有很大的不同,尤其是在执行测试和产生测试报告的方面,手工测试的劣势就暴露无遗。

迭代式的开发过程已经显示了比瀑布式开发的巨大好处,取代传统的瀑布式开发成为了目前最流行的软件开发过程。在迭代开发中强调在较短的时间间隔中产生多个可执行、可测试的软件版本,这就意味着测试人员也必须为每个迭代产成的软件系统进行测试。测试工作的周期被缩短,频率被增加。因此,传统的手工测试已经严重的满足不了软件开发的需求。

随着软件开发过程的进展,测试工作变得越来越繁重,如果使用手工测试的方法,将很难保证测试工作的进度和质量。在这种情况下应用良好的自动测试工具将势在必行。通过使用自动化测试工具,测试人员只要根据测试需求完成测试过程中所需的行为,自动化测试工具将自动生成测试脚本,通过对测试脚本的简单修改便可以用于以后相同功能的测试。

同时,现代的 GUI 开发技术已经非常先进,它提供给开发人员快速开发的能力。这就意味着开发人员能够非常快速的改变应用程序,并将新的版本交给测试人员进行测试。实际上,很多公司每天都会有多个应用版本产生。如果还是使用传统的手工测试的方法,是根本不可能符合软件快速开发的要求的。

度量测试工具

――评估自动化性能测试工具三大指标

陈彦卓

使用自动化性能测试工具,可以有效缩短测试周期,在新的版本和补丁的最后阶段按时交付高质量应用软件。目前常见的自动化性能测试工具如Mercury公司的LoadRunner、IBM公司的Rational Robot和Compuware公司的QALoad等,这些性能测试工具在不同方面分别具有一定的优势,因此用户在选择这些产品时必须建立一种比较合理的评测方法,并根据自己的实际需要选择一种合适的产品。

功能指标

对自动化性能测试工具进行有效评估的功能指标主要包括:脚本制作能力、脚本调试能力、场景制作和管理、场景监控、数据分析能力和测试结果管理等等。

脚本制作能力 脚本制作用于制作性能测试自动化所需脚本,应该同时具备界面录制、手工编制、通信包录制三种方法。

脚本调试能力 录制脚本后,工具会用某种开发语言生成相应的脚本,这时制作者可以使用调试功能对脚本进行调试、排错、检查变量值,调试方法包括单步执行、设置中断点等。

场景制作和管理 场景制作是指以脚本的组合形式整体运行,包括制作手工场景、制作目标场景、设置脚本运行位置、定义场景属性等。。

场景监控 在场景的运行过程中,提供对各服务器、网络设备、应用平台等资源和状态的监控。

数据分析能力和测试结果管理 提供监控数据的汇总报告、监控数据的精确值、各种图形用于分析被测系统的性能,提供多种报告形式,将监控数据以报告的形式进行组织。

性能及可靠性指标

对自动化性能测试工具进行有效评估的性能及可靠性指标主要包括可靠性、易用性和可集成性。

可靠性 保证不出现死机、数据处理错误、主业务流程断点、软件错误导致数据丢失等现象,否则会导致系统无法运行。

易用性 菜单、工具栏随所进行的操作变化,无效的菜单项应变灰或隐藏;应具有联机帮助功能,功能所对应的操作都有相应的联机帮助;对用户操作的实时引导,对用户的每一步关键性操作都有相应的提示。

可集成性 与配置管理工具、项目管理工具、缺陷管理工具集成。

文档指标

对自动化性能测试工具进行有效评估的文档指标主要考察用户文档完整程度、描述与实际功能一致和用户文档的易理解程度。

用户文档完整程度 用户文档中应包括全部软件功能、业务流程和计算过程的说明,并可以提供在线帮助。

描述与实际功能一致 用户文档描述的功能与软件实际功能应一致。

用户文档的易理解程度 用户文档的文字描述应条理清晰、易于理解,用户文档对关键的操作应配以例图说明,用户文档采用中文编写,对主要功能和关键操作应提供应用实例。

因此,对于自动化性能测试工具进行一定程度的评估,才能作出比较适合自身需求的选择。

相关链接

为什么需要软件测试?

Standish group 报告表明,80% 以上的项目都是不成功的,或者是因为超过预算或延期未完或缺失功能,或者几种因素都有。此外,30%的软件项目执行得十分糟糕,以至于在完成之前就被取消了。因此,进行软件测试就显得非常必要。

迄今为止,软件质量仍然主要靠软件测试来验证和确认,而且由于测试工作特别耗费资源,在软件开发的总成本中,用在测试上的开销要占30%~50%。在极端的情况下,例如在关系到人的生命安全的软件中(如飞机控制或核反应监控等软件),测试费用可能相当软件生存周期所有其它阶段费用总和的3~5倍。

软件测试工具选型

IBM Rational Robot:全方位检测平台

Ratioanl Robot 可以帮助用户实现有效的自动化测试,Robot 可以监测到测试人员与应用程序之间的所有交互行为,并可以产生相应的测试脚本。

目前,Robot 对几乎所有流行的应用环境多有良好的支持和工作表现。尤其是对象HTML、Java和.NET应用、Visual Basic、PowerBuilder、Delphi、Oracle表单和MFC控件(控件最常用在C和C++的应用中)有着非常强大的支持。可以说,使用Robot能过满足几乎所有的测试环境要求。

通常的情况下,Robot的通用录制机制可以支持多数的自定义控件。但是也存在Robot本身无法访问到被控件的属性或者数据的情况。即使出现这种情况,Robot可以通过其良好的扩展接口来解决,这个扩展接口使IBM Rational的合作伙伴可以扩展Robot的功能,可以支持几乎任何的控件。使测试人员从问题控件中解脱出来,将精力放到测试任务之中。

Borland Optimizeit ServerTrace:性能优化专家

Borland Optimizeit ServerTrace 从根本上对性能管理进行优化,这个过程将遍及J2EE 应用软件在被部署前所进行的测试阶段。通过提供详尽而准确的诊断信息来描述性能问题产生的精确位置和原因,Optimizeit ServerTrace在测试团队和开发团队间建立了强有力的沟通桥梁,其提供的有建设性、明确的反馈信息有助于开发人员在其基础上采取有效行动,最终达到缩短应用软件测试周期的效果。

Optimizeit ServerTrace为企业级Java 系统的性能表现提供了端到端的可视性,这是一种关键的业务需求。一个简单易懂的途径是在测试和开发团队中对相关性能问题进行隔离、文档记录和有效沟通,降低了在部署阶段形成风险的可能。Optimizeit ServerTrace降低风险和节省开发、部署、运行J2EE系统的费用通过提供全面的技术,以及对J2EE性能的高度洞察力,可以帮助用户加速企业应用软件生命周期中的测试阶段。

Mercury WinRunner:企业级应用的保护者

Mercury WinRunner是一种企业级的功能测试工具,用于检测应用程序是否能够达到预期的功能及正常运行。通过自动录制、检测和回放用户的应用操作,WinRunner能够有效地帮助测试人员对复杂的企业级应用的不同版进行测试,提高测试人员的工作效率和质量,确保跨平台的、复杂的企业级应用无故障及长期稳定运行。

随着时间的推移,开发人员会对应用程序做进一步的修改,并需要增加另外的测试。使用WinRunner,用户不必对程序的每一次改动都重新创建测试。WinRunner可以创建在整个应用程序生命周期内都可以重复使用的测试,从而大大地节省时间和资源,充分利用你的测试投资。

Telelogic TAU第二代:开放的测试环境

Telelogic TAU 第二代是一套面向实时及其他复杂系统与软件开发的集成的、灵活的工具。它包含三个最新的、最强大的技术用来加速大规模软件开发和测试:统一建模语言 (UML) 及它的许多最新修订版本中的特性,UML2.0;功能强大的测试语言TTCN-3 和新的构造系统的方法:Model Driven Architecture (模型驱动构架)。这三个新的业界标准结合成TAU 的已经过认可的软件开发平台,形成了一个系统,一个一流的稳定可靠的工具解决方案。

Telelogic TAU是一个开放的开发环境,基于标准如UML、SDL、TTCN 和XML。TAU还是流程独立的并且可以和任何已有开发流程,无论是内部的还是公开的进行平滑集成。为形成一个完整灵活的开发环境,TAU提供了和其他领先工具的紧密集成,包括需求管理系统,如市场上的Telelogic DOORS和领先的变更和配置管理解决方案,如Telelogic SYNERGY。

软件开发试用期工作篇(11)

中图分类号:TP311文献标识码: A 文章编号:

引言

“可测试性”这一概念于1975年在《设备自动测试性设计》一文中第一次被提出。从此,可测试性便在电子产品诊断电路设计及研究等各个领域得到了广泛应用。

随着人们对产品质量标准的要求不断提高,作为产品质量重要特征之一的可测试性也受到越来越大的重视。因此,如何提高产品的可测试性成为了人们关注的焦点。在硬件电路的设计方面,有许多方法和工具来辅助增加电路的可测试性,从而降低测试工作的强度。但是在软件开发的领域,可测试性设计方面的研究工作还很缺乏,这是由于软件产品的多样性和灵活性所决定的。

根据软件产品可测试性的特征,在软件生命周期的各个阶段,把可测试性的要求考虑进去,在目前不失为一个经济有效的办法。作为软件设计人员,应该在软件的设计过程中,充分考虑到可测试性的要求,这样既可以减少软件设计过程中的错误,又可以大大降低软件测试人员的工作量和测试费用。

二、软件可测试性的特征

在理想的情况下,软件设计师在设计计算机程序时应该考虑可测试性,这就使得负责测试的人能够更容易地设计有效的测试用例。什么是软件的可测试性呢?软件的可测试性就是软件能够被测试的容易程度。它依赖于软件本身的结构和描述该软件的文档资料的明确性。

为了提高软件的可测试性,首先要了解具有可测试性的软件的基本特征。软件设计师可运用以下属性来检查软件所具有可测试性的程度。

可操作性——“运行得越好,被测试的效率越高。”

可观察性——“所看见的,就是所测试的。”

可控制性——“对软件的控制越好,测试越能够被自动执行与优化。”

可分解性——“通过控制测试范围,能够更好地分解问题,执行更灵巧的再测试。”

简单性——“需要测试的内容越少,测试的速度越快。”

稳定性——“改变越少,对测试的破坏越小。”

易理解性——“得到的信息越多,进行的测试越灵巧。”

三、软件测试过程中的常见问题

软件系统的开发包括一系列生产活动,其中由人带来的错误因素非常多。错误可能出现在设计最初的规划阶段,由于目标错误或文档描述不完整;也可能在后期的设计和开发阶段,因为人们不能做到完全的交流。所以,软件开发过程中必须伴有质量保证活动。软件测试是软件质量保证的关键元素,代表了规约、设计和编码的最终检查。在软件测试的过程中,会发现如下所述的一些常见问题。

开发软件产品的文档不完整、不清晰、不准确。产品文档信息的缺乏造成测试者无法对软件产品的性能做出合理、充分的测试,从而无法达到预期的测试目标。

隐藏故障的代码难以测试。如果输入引起的故障没有直接通过一个可观察的故障输出状态表现出来,这样的软件错误就非常难于发现并将其独立出来。如果数据状态错误通过几次中间过程仍然未被检测,那么当故障引起失效时,想查清产生它的原因就几乎是不可能的,此类问题经常存在。另一类问题是可能产生了数据状态错误,但是输出状态表现出来是正常的。这种情况的发生是由于多个不同的输入产生了相同的输出结果,对于测试来说就会变得更加困难。

四、软件的可测试性设计

与硬件的可测试性类似,软件的可测试性强调自身的设计特征。要求软件在理论研制和设计阶段就必须考虑可测试性,而且在调试、使用、维护过程中也必须进行不断的可测试性分析与验证。事实说明,软件的可测试性越好,软件存在的错误越容易被及早发现,修复费用越低。在20世纪70年代,GTE、TRW和IBM三家公司对这个问题单独作了研究,最后的结果表明,需求分析阶段修复一个错误的费用还有编码阶段的1/5到1/10,而在维护阶段做同样的工作所付出的代价却是编码阶段的20倍。可见,在软件生命周期的早期就确定软件的可测试性,在设计时就充分考虑可测试性的问题,就可以既省时又省力地提高软件的可测试性。

由于企业及用户对软件质量的重视程度越来越高,使得测试在软件开发过程中的地位也越来越重要。而且测试也是目前用来验证软件是否能够完成所期望的功能的有效方法。因此,如何提高软件的可测试性就显得尤为重要。

4.1 软件文档的准确性

在软件测试过程中,经常发现程序代码与其文档描述不相符的问题。这是因为早期没有做好软件的详细需求分析。就像其他事物一样,早期规划将设计问题纳入远景规划,提供好的策略,并且为后期修改或添加功能部件做好充分的准备。

在早期定义阶段,预期的变动是确定的、优先的,此时改变软件体系结构是可以接受的。系统的功能应该分解为合理的片段,使其适于建立软件模块。这些模块的格式应该标准化,使代码可以添加、删除或修改,从而适应预期的和无法预料的变动。同时,在早期定义阶段确定预期的变动,并为无法预料的变动保留余地,将有助于生产出稳定性、维护性更好的软件产品。

4.2 合理的软件构架

软件构架是系统设计和开发的核心,是系统设计师在充分分析最终用户的要求、开发组织、现有的技术水平的限制等因素的基础上,根据自己的开发经验而作出的系统初步框架。构架不是强调组成系统的单个元素,而是元素之间的安排及其相互关系。

软件构架设计对于能否形成恰当的体系结构和达到系统的预期目标尤其重要。所以,在软件设计的早期阶段更应该强调构架设计的重要地位。在形成整个软件的逻辑模型的设计阶段,应该把构架设计作为主要的工作。只有运用合适的软件构架设计,才能设计出目标明确、功能完善的软件系统,以保证软件的可测试性和开发过程的顺利进行。

4.3 一致性约定

软件编码标准和命名约定对于产生可测试性的代码十分重要。因此,它们必须在开发前期确立。在开发和维护阶段,所有的新代码产品都必须遵循这一标准,包括程序扩展和修补工作。这一做对于从事维护工作的程序员是有利的,了解系统软件的一部分程序的形式特征和命名约定,就能了解其他程序段的特征和约定。通过深入理解程序逻辑,即使在处理新的程序段时,维护工作也会变得容易一些。

4.4 减少模块之间的耦合

模块耦合表示模块间的联系程度。模块间的耦合作用强,会降低软件的可测试性水平。因此在软件设计时,尽可能的强调测试功能模块之间的相对独立性。

工程实际中,可以采取以下方法来降低耦合度,提高可测试性水平。

减少全局变量的个数,全局变量作为一种公共数据变量,在模块间进行传递,容易降低模块之间的耦合度;

定义过程、函数,通过过程调用、函数引用来代替直接引用,从而有效提高模块之间的独立性;

DLL技术,采用动态链接库技术,可以有效提高软件执行的速率和相互独立性,降低关键模块之间的耦合度。

一般认为,模块的大小要考虑模块的内聚作用和模块在整个软件体系结构中的地位和功能。对于一个经常被调用的单元来说,无论其大小和内聚作用如何,在设计过程中,一般定义为一个独立的模块,从而提高软件整体的可测试性。

4.5 统一的编码标准、注释和风格

很明显可读性好的代码对软件测试是一个有利条件,因此一系列编码标准应该应用于文档管理、模块接口以及模块和变量的命名。这种一致性促进了对程序的全面理解。

规范编码的排版和缩进;

软件的开发者在满足需求的基础上,在设计时应当尽量使功能简单化,设计结构简单,编写的代码简单;

减少单个函数的长度;

调用其它接口和函数时首先对返回值进行检查;

所有的函数和变量应有他人容易理解的名字,名字要清晰表达含义,不要怕长;

注释代码不是单纯解释语句,这种注释毫无意义;

异常处理一定要注意资源的释放,异常处理要关注日志的详细记录,便于后续BUG分析;

不用假设用户会正确输入数据,要做好各种完整性和边界的检验;

另外,程序员应该避免自己检查自己的程序,测试工作应该由独立的专业的软件测试人员来完成。

五、结束语