《软件工程》教学测试员入门培训唐滔2009.10.10《软件工程》教学•本文编写目的•这是为培训专业测试人员参加测试工作,•而编写的包含测试基础知识的入门培训教材。《软件工程》教学•读者范围•将来参加测试工作的测试人员或者将来参加开发的程序员。《软件工程》教学软件缺陷软件中含有符合下面5条规则之一的问题称为软件缺陷:•软件未达到产品说明书标明的功能。•软件出现产品说明书指明不会出现的错误。•软件功能超出产品说明书指明的范围。•软件未达到产品说明书未指出但应达到的目标。•软件测试人员或用户认为软件难以理解,不易使用,运行速度缓慢等问题。《软件工程》教学•测试案例•测试用例的别名。《软件工程》教学•黑盒测试•指测试人员通过各种输入和观察软件的各种输出结果来发现软件的缺陷,而不关心程序•具体如何实现的一种测试方法。《软件工程》教学•静态测试•指测试不运行的部分,例如测试产品说明书,对此进行检查和审阅。《软件工程》教学•静态白盒测试•指在不执行的条件下有条理地仔细审查软件设计,体系结构和代码,从而找出软件缺陷的过程。有时称作结构分析。《软件工程》教学动态测试•通过运行和使用软件进行测试。《软件工程》教学探索测试•通常用于没有产品说明书的测试,这需要把软件当作产品说明书来看待,分步骤逐项探•索软件特性,记录软件执行情况,详细描述功能,综合利用静态和动态技术来进行测试。《软件工程》教学等价区间•指测试相同目标或者暴露相同软件缺陷的一组测试用例。《软件工程》教学测试设计•提炼测试方法,明确指出设计包含的特性和相关测试。如果要求完成测试还明确指出测试案例和测试程序,指定特性通过/失败的规则。《软件工程》教学软件QA•QA=QualityAssessment质量评价。防止软件缺陷称为软件QA。《软件工程》教学TQM或者TQC原理•TQM(全面质量管理)或者TQC(全面质量控制)。其原理是,用集中的质量评判团队来负责质量是不实际的,因为工作的人不负责质量,所以他们不会设法实现质量评判目的。•要想制造高质量产品,需要创立从管理开始自上而下的质量意识,使全体成员共同承担质量责任。《软件工程》教学SQC•软件质量控制(SQC)是测试团队很常用的名称。该名称来源于制造行业,其中QC检验•员对生产线上的产品进行采样、检测,如果测试失败,他有权停掉生产线或者整个工厂。•测试团队很少有这种授权。软件QC团队也是如此。《软件工程》教学Murphy法则•永远不会有足够的时间把事情做好,但是总有时间返工。软件开发小组需要遵循一个过程,花费一些时间,变得有条理,一开始就设法作对。《软件工程》教学测试人员的目标•找出软件缺陷,尽可能早一些,并保证其得到修复。《软件工程》教学测试工作过程要点•利用组织良好的测试计划、测试案例和测试报告正确交流和制定来完成的测试工作,是测试员达到目标的保障。《软件工程》教学检查代码1.静态白盒测试•进行静态白盒测试的首要原因是尽早发现软件缺陷,以找出动态黑盒测试难以揭示或遇到的软件缺陷。•独立审查代码的人越多越好,特别是在开发过程初期从底层进行。•另外可以为黑盒测试人员提供思路,他们不必了解代码的细节,但是根据审查备注,可以确定似乎有问题或者存在软件缺陷的特征范围。《软件工程》教学•开发小组没有专人负责白盒测试,一般由程序员组织和执行审查人员,软件测试人员被当作独立的观察者。也有测试人员是该任务执行人,要求编写代码的程序员和其他同事帮助审查。•静态白盒测试常见问题是不能善始善终。很多小组认为费用太高,没有产出。这是不正确的,很多公司已经招聘和培训程序员和测试员进行白盒测试了。《软件工程》教学正式审查•正式审查有四个要素:•确定问题。审查的目标是找出软件问题,包括出错项目和遗漏项目。•遵守规则。审查需要固定的规则,如审查代码的行数,花的时间,那些内容需要备注等。•准备。每个合作者需要知道自己的职责,很多问题是在准备期间发现的。•编写报告。必须有书面报告,使报告便于开发小组使用。《软件工程》教学同事审查•这是一种最简单的方法,一般由一两个程序员和测试员一起进行,为了不至于成为闲聊,需要遵守正式审查的四个要素。这种聚集起来讨论代码也可以找出软件缺陷。《软件工程》教学公开陈述•编写代码的程序员向5人小组或者其他类似程序员和测试员正式表述。审查人员之中应该有一名资深程序员是很重要的。《软件工程》教学检验•最正式的审查类型,参与者称为检验员,职责从不同角度包括用户,测试员和产品支持人员角度来审查产品。•有些检验员被委任为会议主席和会议记录,保证检验过程遵守规则及审查。会议后可能检验员要碰头讨论发现的不足,程序员进行修改。•最后由主席检验修改结果。检验被证明为在设计文档和代码中发现软件缺陷最有效的方法。《软件工程》教学编码规范和标准•可以运行并且测试中也表现稳定的代码被称为有问题,令人不易理解。一般有三个重要原因需要坚持标准和规范:•可靠性。事实证明按照某种标准或者规范写的代码更加可靠。•可读性/维护性。符合设备标准的规范代码容易阅读、理解和维护。•移植性。如果代码符合设备标准,移植将很轻松。《软件工程》教学静态白盒测试可能遇到的问题类型•数据引用出错•数据声明错•计算错误•比较错误•控制流程错误•子程序参数错误•输入/数出错误•其他《软件工程》教学动态白盒测试•基本测试内容:1、直接测试底层功能、过程、子程序和库。2、以完整程序方式从顶层测试软件,然后根据软件运行了解和调整测试案例。3、从软件获得读取变量和状态信息的访问权,以便确定测试与预期结果是否相等。4、估算执行测试时命中的代码量和具体代码,然后调整测试。《软件工程》教学动态白盒测试和调试•两者不能混为一谈,虽然会有交叉,调试是程序员做的,目的是修复问题。测试是为了找到缺陷。•测试员可能要使用代码级调试器单步执行,观察变量,设置断点等。•对于要求合法性检查的独立代码模块,还要编写测试程序进行测试。《软件工程》教学黑盒与白盒•黑盒与白盒进行白盒测试之前,要根据说明书建立黑盒测试案例,这种方法可以真正理解测试用途。•否则会偏向模块的工作方式,程序员的说明也许包含错误,所以测试案例可能出现问题。《软件工程》教学数据范围•白盒测试合理的方法是把软件分成数据和状态(或者程序流程)。同时可以把白盒信息映射到已经写完的黑盒案例中。•首先考虑数据:包括所有变量、常量、数组、数据结构、键盘鼠标输入、文件、屏幕输入输出。以及调制解调器、网络等其他设备的输入/输出。•数据可以分成如下类型:•数据流。观察数据在各个模块甚至整个程序中的各种状态值。•次边界。寻找次边界条件。比如2的乘方。•公式和等式。比如被0除问题。•错误强制。有的错无条件不好模拟,需要制造错误。但是不要制造实际无法出现的错误。《软件工程》教学代码覆盖•为了全面,必须测试程序的状态及其中的程序流程,设法进入和退出每一个模块,执行每一行代码,追踪每一条逻辑和决策分支。•最简单的方法是利用编译环境单步执行。大多数程序要用专门的代码范围分析器。•需要注意的是,全部语句都执行一遍,不等于走遍了软件的所有路径。所以需要分支覆盖。分支覆盖也不完全,还要考虑条件范围问题。•如果测试了所有可能的条件,达到了分支覆盖,顺便达到了语句覆盖。《软件工程》教学配置测试•因为无法保证用户的设备都符合通用的标准,所以需要把软件放在用户使用比较广泛的硬件上进行测试。•测试要点:•确定需要测试的硬件类型。•明确硬件标准。•确定可能的硬件属性,模式和选项。•分离配置缺陷。•等价分配。•只测试各种硬件不交叉的部分。《软件工程》教学文档测试•软件测试员不仅要测试软件同时需要测试文档,因为他要负责整个软件产品的各个部分的质量。《软件工程》教学文档的类型•包装文字和图形。•市场宣传资料、广告和其他资料。•授权/注册登记表。•EULA即最终用户许可协议,一般要求用户不经同意不可以复制软件,如果受到软件缺陷的损害,不得向生产厂家起诉。•标签和不干胶。•安装和设置指导。•用户手册。•联机帮助。•指南,向导和CBT(计算机基础训练)。•样例、示例和模板。•错误提示信息。《软件工程》教学文档测试的重要性•如果安装指导有问题,不正确的错误提示信息把用户引入歧途,他们会认为这是软件缺陷。文档和代码对于用户来说是一样的。《软件工程》教学文档测试问题类型•文档面对的听众级别是否合适。•术语是否适用于听众,是否用法一致,所有术语是否可以被正确索引。•内容和主题是否有遗漏或者多余。材料深度是否合适。•所有信息是否准确。产品说明是否过时,技术支持网站链接和电话是否准确。•逐步执行。象用户一样来按步骤使用,看看是否遗漏某些说明。•图表和屏幕抓图。来源和表现是否正确。•样例和示例。向客户一样使用样例,如果是代码就要执行。样例如果不能运行给客户印象特别不好。•拼写和检查。《软件工程》教学其他测试•以下测试内容被省略:•兼容性测试•本地化测试•易用性测试•网站测试•自动测试及测试工具《软件工程》教学借助他人测试•不同人的角度不同,可以有效打破杀虫剂现象。•请产品支持或者客户服务帮助测试是很有效的一种方法。《软件工程》教学测试共享•如果几个测试员来测试,常用方法是在一定时间内简单互换测试任务。《软件工程》教学测试轰炸•测试人员同时停下工作,选择软件的某一块区域,集中进行测试。称为测试轰炸。《软件工程》教学Beta测试•他是一种外部测试方法。该过程中,软件分发给选定的潜在用户,他们在实际环境中使用软件。•Beta测试需要考虑的几个问题:•1、谁是Beta测试者•Beta测试有不同的目标,所以必须了解测试者的类型。比如测试人员想要找出测试中残存的易用性错误,如果Beta测试者是技术人员的话,将更关心底层的技术,对于易用性不是很关心,这样测试效果将不是很好。《软件工程》教学•2、如何知道Beta测试者用过软件•1000个Beta测试者拿到Beta一个月后,没有任何错误报告,是否可以认为没有缺陷还是用户没有收到软件,还是过些时间才开始测试。测试执行者需要追问参加者,保证他们在使用软件并符合计划的目标。《软件工程》教学•3、Beta测试的优缺点•Beta测试可以成为寻找配置和兼容性软件缺陷的好方法。•Beta测试对易用性测试非常有好处。•Beta测试对于寻找其他软件缺陷方面出人意料的差。《软件工程》教学第三方测试•提交给其他公司进行转包测试,看上去比较麻烦,费用也高,但是如果做的好,可能成为共享测试的有效途径。《软件工程》教学计划测试工作•测试过程不可能在真空里工作,程序员编写代码,不说明它的功能,如何工作,何时完成,执行测试任务就难了。测试员之间不交流测试的对象,需要什么资源,进度如何安排,项目很难成功。•计划测试工作主要目的是交流软件测试小组的意图、期望以及对将要执行的任务的理解。而编制的测试计划通常成为空架子,以后不会有人看。所以计划工作的目标应该从建立文档转移到计划建立过程。《软件工程》教学•1、测试计划主题•由于测试一般都有模板,所以很容易作出计划文档,然而如果只有文档,当产品小组的人没人知道测试员在做什么,或者为什么做的时候,测试的弊端就出来了。《软件工程》教学•1.1明确测试目标•测试计划过程和软件测试计划的目的是什么?程序员和技术作者及管理部门知道吗?•测试的产品是什么?是一个完全重写一个产品还是仅仅维护和升级,是独立程序还是很多小程序的组合?是自行开发的还是外包出去的,它的到底是什么东西?•产品质量和可靠性目标是什么?•测试计划过程的结果必须是产品质量和可靠性目标的清晰、简洁和一致通过的定义。《软件工程》教学•2.测试的组织工作•测试计划中应该包括项目中所有主要人员的清单和联系方式。同时,文档存放的位置,测试工具从那里得到,使用什么硬件如果必要都需要指出。这些内容最好类似于“测试新手问题指南”。通常是新手负责的绝好部分,