一、需求分析阶段
测试介入的要越早越好,而最有效的测试应该始于项目的开始阶段,远远早于程序代码的编写阶段。消除需求工作中的缺陷能够有效的降低后续的返工工作成本。
(1)测试人员及早进入;
(2)验证需求的正确性和完整性,正确性要根据用户的需求来进行检验。而完整性则用于保证需求中没有遗漏任何必须的元素;
(3)需求就绪后马上设计测试过程,和软件工程师根据需求撰写设计文档一样,测试组也需要根据需求来设计测试过程;
(4)确保需求变化的传递,当测试过程根据需求定义好了以后,在需求发生变更时把这种变化通知到测试组成员是非常重要的;
(5)注意在现存系统上进行开发和测试,使用确定的应用程序版本;把现存应用程序文档化;对现存应用程序的更新也要形成文档;从此实现有效的开发过程。
二、制定测试计划
有效的测试计划是测试流程成功的基石。
(1)首先需要了解手头的任务和相关的测试目标;
(2)其次考虑风险,在制定有效的测试策略之前,必须理解测试计划中的假定、先决条件和风险。这包括不利于按照进度实现和执行测试纲要的任何事件、行为和环境;
(3)根据功能优先级来安排测试工作;
(4)牢记软件方面的问题,当制定测试计划的时候,测试组应该了解影响项目开发和交付的一些软件问题,这是非常重要的。其中包括:预发行版本,新技术和不完善的技术,分阶段实现,缺陷,补丁和服务包;
(5)获得有效的测试数据,测试数据的设计必须使得每个系统级的需求都能得到测试和验证。测试数据的需求评审应该关注数据的几个关键方面,其中包括:深度(数据库记录的数量和规模)、宽度(数据数值的变化)、范围(与数据精确度、相关、完整程度是有关的)、测试执行期间的数据完整性、条件;
(6)规划测试环境,测试环境是由支持测试工作的所有物质元素组成;
(7)估计测试准备和执行所需的时间。
三、测试组
测试组能力的高低会极大的影响测试工作的成败。
(1)定义角色和职责;
(2)测试技巧、行业知识和经验三者缺一不可;
(3)评估测试人员的有效性。
四、系统构架
了解整个系统的组件和模块,就可以减轻测试组的工作量,而且测试组可以把注意力集中在有缺陷的特定区域或者层次上,从而提高开发人员修正缺陷活动的有效性。
(1)了解系统构架和基本组件,测试工程师对对应用程序的构架和基本组件有所了解,这些知识会有助于他们查明产生特定测试结果的应用程序中的各个部分。这些了解可以指导测试人员进行灰盒测试,补充黑盒测试。提高缺陷报告的质量,提高进行探索式测试的能力,增加测试的精确度;
(2)确认系统的可测试性,当应用程序的构架还只停留在文档上面而没有付诸实施时,对构架可测试性的研究,可以极大的减少随后的测试工作中可能出现的意外;
(3)使用日志增加系统的可测试性,增加应用程序可测试性最常用的方法就是实施日志机制即跟踪机制,这种机制提供的信息有:组件正在做什么、应用程序的状态或者应用程序运行中遇到的错误。在执行测试过程期间,测试工程师可以利用这些信息来跟踪处理流程,他们还可以利用这些信息对系统中发生的错误进行定位。一个形式良好的日志条目会包含以下一些信息:类名和方法名,主机名和进程id,条目的时间戳(最好精确到毫秒),消息;
(4)验证系统支持调试和发行两种执行模式,调试模式的作用是当遇到问题是帮助开发人员和测试人员诊断问题。而发行模式是去掉大对数或者全部与调试相关的特性,并经过优化的系统版本。常用的调试方法:源代码检查、输出日志、实时调试。
五、测试设计和测试文档
(1)分而治之,应该测试什么,何时开发测试过程,测试过程应该如何设计,谁应该负责测试开发工作;
(2)使用测试过程模板和其他测试设计标准,为了测试过程的可重复性、完备性和一致性,在适用的时候应该运用测试过程模板,包含以下关键元素:测试过程ID,测试名称,执行日期,执行人员,编写人员,测试目标,需求编号,前置条件,验证方法,用户动作,预期的结果,跟踪日志信息,实际结果,需要的测试数据;
(3)根据需求得到有效的测试用例;
(4)把测试过程当做“动态”的文档,大对数软件项目采用了迭代式和渐进式的开发方法,测试过程的开发也经常使用这种方法。在一个迭代式和渐进式的开发生命周期中,根据工作版本开发计划时间表,需要交付大量的软件工作版本,所以想让测试过程保持不变是很困难的。和任何动态的或者发展中的文档一样,测试过程也应该存储在一个版本控制系统中;
(5)利用系统设计和系统原型,原型有多种用途。它们可以让用户预先看到某个功能的实现结果,并且让用户预先对应用程序有所体验。通过原型用户可以提出对正在开发的软件的反馈意见,这些意见可以用于改进原型并且使最终的产品对用户来说更满意;
(6)设计测试用例场景时采用经过检验的测试技术;
(7)在测试过程中避免包含限制和详细的数据元素,无论是手动还是自动测试过程,都应该把数据元素和他们的测试脚本分开保存,在脚本中使用变量而不是使用硬编码的数值;
(8)运用探索式测试,在当今软件开发环境下,定义了所有关系和依赖的完整而详细的需求是非常罕见的。因此经常要求测试人员运用分析能力来确定应用程序的本质。有时为了获得高效的测试设计工作所需要的知识,我们需要进行探索式的测试工作。
六、单元测试
(1)用结构化的开发方法来支持有效的单元测试;
(2)在实现之前或者与实现同时开发单元测试;
(3)使单元测试的执行成为生成过程的一部分。
七、自动测试工具
(1)了解各类测试支持工具;
(2)自主生成一个工具,在有些情况下,除了制作工具我们别无选择:操作系统不兼容;应用程序不兼容;专项测试的需要;
(3)了解自动测试工具对测试工作的影响,自动测试工具只是解决方案的一部分,不能完全替代手工测试,不能代替指导测试工作的分析能力,不能解决所有测试工作中的问题;
(4)关注组织的需要,到底哪种测试工具最佳,这取决于组织的需要和系统工程环境;
(5)在应用程序的原型上对工具进行测试。
八、自动测试:选择最好的实践
(1)不要过分依赖记录/回放工具,只通过记录/回放直接创建的脚本有一些严重的局限和缺点:硬编码的数值;非模块化的、不易维护的脚本;缺乏可重用性的标准;
(2)必要时自制开发一个测试工具(难度较大,一般情况不需要);
(3)使用经过考验的测试脚本开发技术;
(4)尽量使回归测试自动化,回归测试确定的是:在修改先前的错误或者向应用程序添加新功能时,是否引入了新的错误,这些错误影响以前运行正常的功能。
(5)实现自动生成和烟雾测试。自动生成通常每天执行一次或者两次(可能在晚上),它们会使用最新的和稳定的代码。烟雾测试不是手动的反复执行所有测试,而是有针对性的验证软件中的主要功能是否任然能够正常运转。
九、非功能性测试
是否满足非功能性需求决定了应用程序是勉强实现了它的功能,还是不仅最终用户和技术支持人员对它的接受程度很高,而且系统管理员也愿意对它进行维护。
(1)不要事后才考虑到非功能性测试,最好早在应用程序的构架和设计阶段就开始研究;
(2)用产品级数据库进行性能测试,数据库和应用程序的优化技术能够极大的降低这种性能的退化;
(3)为预期受众定制可使用性测试,可通过下面几种方法确定目标受众的需求:行业专家,专题组,调研,对同类产品的研究,观察用户的操作;
(4)特定需求和整个系统都需要考虑安全性;
(5)研究系统对并发性测试计划的实现,并发性指的是对多个用户试图同时访问相同数据的处理;
(6)为兼容性测试建立高效的环境。
十、管理测试的执行
(1)明确定义测试执行周期的开始和结束,不管是哪个测试阶段,为软件测试周期定义测试开始时间测试完成时间都是十分重要的;
(2)隔离测试环境和开发环境;
(3)实现缺陷追踪生命周期;
(4)追踪测试工作的进行。
网友评论