测试总体流程图F验收测试B单元测试C整合测试D系统测试E性能测试A测试计划、测试设计立项结束测试分类.黑盒测试.白盒测试.灰盒测试软件中的难题1.开发的不是客户需要的2.计划赶不上变化,进度无法按期完成3.挖坑还是开渠?永远的资源不足4.不能正确实现功能5.如何维护大量的已有软件?软件与硬件的区别软件硬件易变确定,需求和产物非组件化组件化,由构建组成随时间而消退随时间而磨损成本在研发上,copy过程几乎没有成本生产工程成本高软件工程1.软件工程是为创造高质量软件提供的一个框架2.将系统化,规范化,可度量的方法应用于软件的开发,运行和维护,即将工程化应用于软件中3.包括过程,方法和工具三个层面4.过程,方法和人对质量的影响过程1.过程是项目管理的基础2.定义关键过程区域框架3.CMM中的KPA方法1.技术上需要如何做?2.方法涵盖一系列的任务:需求,设计,编码,测试,维护工具1.为工程,方法提供自动,半自动化的支持2.组建起来被另外一个工具使用3.组成软件工程环境过程篇—关于CMMCMM(CapabilityMaturityModel)能力成熟度模型用于软件开发过程和开发能力的改进与评估的模型对软件工程的全过程进行考察和评估不告诉你怎么做,但告诉你不用成熟度应该关注的关键过程何为CMM/CMMICMMI,目标:第一个是质量,第二个是时间表,第三就是要用最低的成本。与原有的能力成熟度模型CMM相比,CMMI涉及面更广,专业领域覆盖软件工程、系统工程、集成产品开发和系统采购CMMI即CMM集成,是系统工程和软件工程的集成成熟度模型,CMMI更适合于信息系统集成企业。CMMI是在CMM基础上发展起来的,它继承并发扬了CMM的优良特性,借鉴了其他模型的优点,融入了新的理论和实际研究成果。它不仅能够应用在软件工程领域,而且可以用于系统工程及其他工程领域。CMMI阶段模型5.优化级:持续过程改进,组织性快速重新配置4.量化管理级:过程和产品被量化度量并控制,组织性能提升3.已定义级:组织内项目改进和执行2.已管理级:能重复以前的成功,有纪律性1.初始级:过程能力不可预测,无秩序Level1在级别1:过程是随机,混乱和无序的。这种通常没有一个稳定的环境,它的成功依赖于组织中个人的能力和英雄主意,而不是依赖使用经过验证的过程。尽管这种混乱,无序的环境,对成熟度1的组织也经常能制造出能工作的产品和服务,但是,他们的项目经常是超成本和进度的。它们有过度承诺的趋势,在危机时放弃过程,不能重复他们过去的成功。Level21.组织中的项目确保需求得到管理,过程已经计划,执行,度量和控制。2.即使在时间压力下,依然能够保留现有的实践。3.管理层在某些已定义点上对工作产品的状态和提交的服务具有可视性。4.在干系人(风险承担者)之间建立了承诺,在必要的时候进行修正。Level3工程得到很好地表现和理解,被描述成标准,规程,关键和方法。作为3级基础的组织标准过程集已经简历和不断改进。2,3级的区别在于标准,过程和规程的范围3级比2级的描述更具体和更严格Level4使用统计和量化技术进行控制建立了质量和过程性能的量化目标,作为过程管理的准则收集了过程性能的详细度量,进行统计分析质量和过程性能度量数据组成组织的度量库,来支持将来的基于事实的决策3,4级的区别在于过程性能的可预测性。Level5基于对过程中的固有偏差的一般原因的定量理解,持续的进行过程改进通过渐进的和革新的技术改进,集中在持续地过程性能改进上指出过程偏差的一般原因和可测地改进组织过程的过程改进得到识别,评估和实施敏捷和创新的过程优化依赖于授权员工的参与,他们与业务价值和组织目标保持一致Level2CMM2:可重复性KPA:软件配置管理软件质量保证子合同管理Level2软件项目跟踪和监控软件项目计划需求管理配置管理1.定义并文档化配置项的功能和物理属性2.控制这些属性的变更3.记录和报告变更处理结果和实施状态4.遵从制定的需求进行验证同行评审为什么进行评审?.促进文档化,提升可读性,易理解性等.查找错误,收集建议.扩散知识,产生后备力量评审什么?.项目中的一系列计划.项目各阶段的输出:文档,代码等谁来评审?项目组成员,PPQA,上级领导,客户等同行评审.评审的输入--待评审的文档,代码--《XXX评审检查表》.评审的输出--《评审报告》--《评审过程检查表》正确看待文档.文档是所有事情能够继承的保证.如果认为不必要,多一分也是多,如果认为必要,多少都不够.文档是一个人水平高低的体现.需要提高每个人的写作能力,练好内功软件开发模型—瀑布型1.需求2.设计3.代码4.测试5.运行/维护软件开发模型—原型1.用户需求不明确是采用2.快速设计,快速开发3.迭代的过程4.与用户一起明确需求5.最终会被抛弃软件开发模型—演化模型.线性迭代.每个线性过程产生一个版本.分阶段提供给用户敏捷式开发1.是一种以人为核心、迭代、循序渐进的开发方法。2.在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。决定软件质量的因素1.过程2.方法3.工具4.人测试目的在产品投入使用前,通过综合的智力活动,发现程序中的显性和隐形的错误和缺陷。控制发布产品的质量,提升客户满意度测试目的测试的目的是发现和确认系统有问题,而不是验证系统没有问题确认软件生命周期中的各个阶段的产品是否正确确认最终交付的产品是否符合用户需求使用测试数据检验系统运行的行为是否是按照预期目标执行的测试原则所有测试都应该追溯到用户需求应该在测试工作真正开始的较长时间内就进行测试测试中发现的80%的问题可能集中在模块的20%中测试原则测试顺序应从简单到复杂,从模块到集成,从白到黑穷举测试是不可能的Bug不可避免常用的测试技术1.在产品成型前,对规约,设计,代码进行Review,确认与需求是否一致---静态测试2.了解产品内部结构,确认内部逻辑是否符合需求,且内部构件被充分利用---白盒测试3.如果了解特定的功能,在各种功能中寻找错误—黑盒测试静态测试和动态测试1.静态测试:指不用执行程序的测试。主要采用Review,代码走查,同级评审,checklist检查单的方法对软件产品进行测试。2.动态测试:通过执行程序,找出产品问题的测试过程。黑盒,白盒都是动态测试。白盒测试白盒测试发现的错误类型:1.语法错误2.编译错误3.逻辑错误4.判定条件问题5.编程规范6.MemoryLeak7.PerformanceProblem白盒测试逻辑驱动测试基本路径测试逻辑驱动测试逻辑驱动测试:主要是测试覆盖率,以程序内在逻辑结构为基础的测试。包括以下6种类型:1.语句覆盖2.判断覆盖3.条件覆盖4.判定-条件覆盖5.条件组合覆盖6.路径覆盖逻辑驱动测试主要是测试覆盖率,以程序内在逻辑结构为基础的测试。包括以下6种类型:1.语句覆盖:语句覆盖就是设计若干个测试用例,运行测试程序,使得每一条可执行语句至少执行一次2.判断覆盖:也叫分支覆盖设计若干个测试用例,运行测试程序,使得每个判断的取真分支和取假分支至少执行一次3.条件覆盖:设计足够多的测试用例,运行测试程序,使得每个判断的每个条件的每个可能取值至少执行一次4.判定-条件覆盖:设计足够多的测试用例,运行测试程序,使得每个判断的所有可能的条件取值组合至少执行一次5.条件组合覆盖:设计足够多的测试用例,运行测试程序,使得程序中每个判断的所有可能的条件取值组合至少执行一次6.路径覆盖:设计足够多的测试用例,运行测试程序,要覆盖程序中所有可能的路径ForExampleVoidDoWork(intx,inty,intz){intk=0,j=0;if((x3)&&(z10)){k=x*y-1;//语句块1j=sqrt(k);}if((x==4)||(y5)){j=x*y+10;//语句块2}j=j%3;//语句块3}流程图如下:开始(x3)&&(z10)执行语句块1Yes(x==4)||(y5)No执行语句块2Yes执行语句块3结束No语句覆盖为了说明简略,分别对各个判断的取真,取假分支编号为b,c,d,e为了测试语句覆盖率只要设计一个测试用例就可以把三个执行语句块中的语句覆盖。测试用例输入为:{x=4,y=5,z=5}程序执行的路径是:abd该测试用例虽然覆盖了可执行语句,但是并不能检查判断逻辑是否有问题,例如在第一个判断中把&&错误的写成||,上面的测试用例仍然可以覆盖所有的执行语句。可以说语句覆盖率是最弱的逻辑覆盖准则判定覆盖如果设计两个测试用例则可以满足分支覆盖的要求:测试用例的输入为:{x=4,y=5,z=5}{x=2,y=5,z=5}虽然可以满足分支覆盖的要求,但是也不能对判断条件做完整的检查条件覆盖对于这个简单例子的所有条件取值加以标记。如:对于第一个判断:条件x3,取真值为T1,取假值为-T1条件z10,取真值为T2,取假值为-T2对于第二个判断:条件x=4,取真值为T3,取假值为-T3条件y5,取真值为T4,取假值为-T4设计测试用例如下:测试用例通过路径条件取值覆盖方式x=4,y=6,z=5abdT1,T2,T3,T4bdx=2,y=5,z=5ace-T1,T2,-T3,-T4cex=4,y=5,z=15acdT1,-T2,T3,-T4cd上面的测试用例不但覆盖了所有分支的真假两个分支,而且覆盖了判断中的所有条件的可能值测试用例如下:但是如果设计了下面的测试用例,则虽然满足了条件覆盖,但是只覆盖了第一个条件的取假分支和第二个条件的取真分支,不满足分支覆盖的要求测试用例通过路径条件取值覆盖分支x=2,y=6,z=5acd-T1,T2,-T3,T4cdx=4,y=5,z=5acdT1,-T2,T3,-T4cd分支条件覆盖根据定义只需要设计以下两个测试用例便可以覆盖8个条件值以及4个判断分支测试用例通过路径条件取值覆盖分支x=4,y=6,z=5abdT1,T2,T3,T4bdx=2,y=5,z=11ace-T1,-T2,-T3,-T4ce分支条件覆盖条件分支覆盖从表面上看,它测试了所有条件的取值,但是实际上某些条件掩盖了另外的一些条件,例如对于条件表达式(x3)&&(z10)来说,必须两个条件都满足才能确定表达式为真。如果(x3)为假,则一般的编译器不再判断是否(z10了,对于第二个表达式(x==4)||(y5)来说,若x==4测试结果为真,就认为表达式的结果为真,这是不在检查(y5)的条件了。因此,采用分支条件覆盖,逻辑表达式的错误不一定能够查出来了。条件组合覆盖设计足够多的测试用例,运行测试程序,使得程序中每个判断的所有可能的条件取值组合至少执行一次。现在对例子中的各个判断的条件取值组合加以标记如下:x3,z10记做T1,T2,第一个判断的取真分支x3,z=10记做T1,-T2,第一个判断的取假分支x=3,z0记做-T1,T2,第一个判断的取假分支x=3,z=10记做-T1,-T2,第一个判断的取假分支x=4,y5记做T3,T4,第一个判断的取真分支x=4,y=5记做T3,-T4,第一个判断的取真分支x!=4,y5记做-T3,T4,第一个判断的取真分支x!=4,y=5记做-T3,-T4,第一个判断的取假分支条件组合覆盖测试用例通过路径条件取值覆盖组合号x=4,y=6,z=5abdT1,T2,T3,T41和5x=4,y=5,z=15acdT1,-T2,T3,-T42和6x=2,y=6,z=5acd-T1,T2,-T3,T43和7x=2,y=5,z=15ace-T1,-T2,-T3,-T44和8上面的测试用例覆盖了所有条件的可能取值的组合,覆盖了所有判断的可取分支,但是却丢失了一条路径abe。基本路径测试1.根据源代码导出流程图2.分析程序逻辑复杂度3.导出测试Case基本路径测试举例-PDL分析计算不超过100个数字的平均值,使用PDL语言INTEFACERETURNSaverage,total.input,total.