版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件测试技术基础第1章软件测试概述ch1软件测试概述ch2白盒测试技术ch3黑盒测试技术ch4软件测试计划、文档及测试用例ch5软件自动化测试ch6面对对象的软件测试ch7Web网站测试ch8JUnit测试ch9性能测试工具LoadRunnerch10测试管理平台主要内容软件测试的背景软件缺陷软件测试的复杂性与经济性分析软件测试的认识软件测试人员的素质知识的分析重点:
软件缺陷的原因软件缺陷软件测试的复杂性难点:
软件测试的背景userdeveloperproductqualityinspection随着软件产业的日益发展,软件系统的规模和复杂性与日俱增,软件的生产成本和软件中存在的缺陷故障造成的损失也大大增加,甚至会带来灾难性的后果。测试是最有效的排除和防止软件缺陷与故障的手段,并由此促进了软件测试理论与技术实践的快速发展。软件测试发展历史70年代以前:与调试没有区分。70年代末~80年代中期:测试基础理论和实用技术形成,测试作为软件质量保证(SQA)的主要职能。80年代末~90年代中期:测试工具在质量和数量上不断增长,测试与SQA(注重于过程和质量监督)分离。注重于工具对测试效率的影响。90年后期~目前:关注有效的过程管理对于软件测试的重要性,形成各种测试模型、测试能力成熟度模型。软件测试的现状目前软件测试行业的“缺口”已经基本饱和最基础的功能测试的岗位需求已经越来越少软件测试行业的门槛,也从真正的零基础,到现在的要求具备计算机专业能力软件测试在企业中,特别是在互联网行业的企业中,也从可有可无发展到不可或缺软件测试发展现状把测试行业按照发展时期来分,可分为以下2个阶段:1)2010年以前,在绝大多数企业中,测试实践的重心都放在系统功能的验收阶段,测试人员的主要工作基本都围绕着基于业务的黑盒测试,对编码能力、系统理解能力要求不多;2)2010年后,随着互联网产品的快速发展,各行各业对软件质量的强需求,以及大数据、云计算、AI人工智能等前沿技术的涌入,传统的测试工作模式和工作范围越来越无法满足行业的需要和产品的质量要求。-美迪斯尼公司的狮子王游戏软件bug
-美航天局火星登陆探测器缺陷
-北京奥运会门票暂停第二阶段的门票销售。
-诺基亚Series40手机平台存在缺陷案例分析软件缺陷兼容性衔接性访问量大漏洞软件缺陷①软件未达到产品说明书要求的功能。②软件出现了产品说明书指明不会出现的错误。③软件功能超出了产品说明书规定的功能。④软件未实现产品说明书虽未明确指出但应该实现的目标。⑤软件难以理解,不易使用,运行缓慢或者最终用户认为使用效果不好。定义软件缺陷产生的原因软件产品说明书(需求)56%设计27%编写代码7%其他10%
需求设计编码与测试维护A开发前期出现错误扩展
需求设计实现测试维护错误修正费用软件缺陷在不同阶段发现时修复的费用示意图
软件测试的复杂性与经济性分析不可能对程序实现完全的测试杀虫剂现象软件测试的代价不能修复所有的软件故障复杂性测试工作量.软件缺陷故障数量测试费用遗漏缺陷数目太少的测试是不负责任,过多的测试是一种浪费。100%的测试是不可能的复杂性测试测试项测试资源运行平台测试周期开发费用的40-60%,甚至80%软件测试的复杂性与经济性分析经济性测试的时机软件的功能目标用户的数量潜在缺陷造成的影响开发机构的业务能力测试费用
软件测试的复杂性与经济性分析经济性
软件测试的复杂性与经济性分析对任何软件都存在有限的充分测试集合。软件测试的单调性。软件测试的非复合性。软件测试的非分解性。软件测试的充分性与软件的需求、软件的实现都相关。软件测试的复杂性。软件测试具有回报递减性。充分性准则软件测试完全与开发人员无关自动化测试可完全替代人工测试软件测试对技术要求不高软件测试是开发后期的一个阶段误区软件测试的认识大量的实验贯穿整个项目技术含量高与开发对立统一软件测试的认识足够的耐心和责任感超强的记忆力和良好的洞察力充分的自信心具备怀疑精神和学习能力
良好的沟通能力掌握比较全面的技术
软件测试人员的素质息了休!软件测试技术基础第2章白盒测试技术白盒测试技术逻辑覆盖测试路径分析测试白盒测试综合策略循环测试代码检查法白盒测试的基本概念
白盒测试又称结构测试、逻辑驱动测试或基于程序本身的测试,也可称为程序员测试。voidDoWork(intx,inty,intz){intk=0,j=0;if((x>3)&&(z<10)){k=x*y-1;j=sqrt(k);}//语句块1if((x==4)||(y>5)){j=x*y+10;}//语句块2j=j%3;//语句块3}白盒测试的基本概念白盒测试的基本概念主要用于软件验证,使用程序设计的控制结构导出测试用例。按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能。测试方法:穷举路径的测试方法白盒测试的基本概念白盒测试的原则一个模块中的所有独立路径至少被测试一次所有逻辑值均需测试真和假情况检查程序内部数据结构,保证其结构的有效性在上下边界及可操作范围内运行所有循环独立路径逻辑值内部数据结构边界白盒测试的基本概念路径分析测试逻辑覆盖测试白盒测试技术白盒测试的基本概念判定-条件覆盖条件覆盖条件组合覆盖路径覆盖判定覆盖语句覆盖逻辑结构白盒测试技术—逻辑覆盖测试方法IF(A>1)AND(B=0)THENX=X/A;IF(A=2)OR(X>1)THENX=X+1;开始(A>1)AND(B=0)(A=2)OR(X>1)返回X=X/AX=X+1FFTTabdce逻辑覆盖测试逻辑覆盖测试-语句覆盖可执行语句测试输入:A=2,B=0,X=4开始(A>1)AND(B=0)(A=2)OR(X>1)返回X=X/AX=X+1FFTTabdce开始(A>1)AND(B=0)(A=2)OR(X>1)返回X=X/AX=X+1FFTTabdce逻辑覆盖测试-判定覆盖(分支覆盖)判定(A>1)AND(B=0)真:T1假:-T1(A=2)OR(X>1)真:T2假:-T2测试输入:A=2,B=0,X=3覆盖T1,T2A=1,B=0,X=1覆盖-T1,-T2开始(A>1)AND(B=0)(A=2)OR(X>1)返回X=X/AX=X+1FFTTabdceA>1真:T1
假:-T1B=0
真:T2
假:-T2A=2真:T3
假:-T3X>1真:T4
假:-T4逻辑覆盖测试-条件覆盖条件测试输入:A=2,B=0,X=3覆盖T1,T2,T3,T4A=1,B=-1,X=1覆盖-T1,-T2,-T3,-T4判定条件逻辑覆盖测试-判定/条件覆盖开始(A>1)AND(B=0)(A=2)OR(X>1)返回X=X/AX=X+1FFTTabdce判定条件判定条件条件测试输入:A=2,B=0,X=3覆盖:条件:t1,t2,t3,t4;判定:T1,T2A=1,B=1,X=1覆盖:条件:-t1,-t2,-t3,-t4;判定:-T1,-T2逻辑覆盖测试-条件组合覆盖A>1,B=0组合记:1A>1,B≠0组合记:2A≯1,B=0组合记:3A≯1,B≠0组合记:4A=2,X>1组合记:5A=2,X≯1组合记:6A≠2,X>1组合记:7A≠2,X≯1组合记:8开始(A>1)AND(B=0)(A=2)OR(X>1)返回X=X/AX=X+1FFTTabdce条件组合测试输入:A=2,B=0,X=3A=2,B=1,X=1A=1,B=1,X=1A=1,B=0,X=3覆盖的组合:1,52,64,83,7针对同一判定中的各条件的组合!!路径:abdaceabeacd
逻辑覆盖测试-路径覆盖开始(A>1)AND(B=0)(A=2)OR(X>1)返回X=X/AX=X+1FFTTabdce路径测试输入:A=2,B=0,X=3A=2,B=1,X=1A=1,B=0,X=1A=3,B=0,X=3FTTdce语句覆盖:设计若干个测试用例,运行被测程序,使程序中的每一条可执行语句至少执行一次。判定覆盖(也称为分支覆盖):设计若干个测试用例,运行被测程序,使程序中每个判定的取真分支和取假分支至少执行一次。逻辑覆盖测试小结条件覆盖:设计足够多的测试用例,运行被测程序,使程序中每个判定包含的每个条件的每个可能取值至少执行一次。逻辑覆盖测试小结判定/条件覆盖:设计足够多的测试用例,运行被测程序,使程序中每个判定包含的每个条件的所有可能取值至少执行一次,并且每个可能的判定结果也至少执行一次。条件组合覆盖:设计足够多的测试用例,运行被测程序,使程序中每个判定的所有可能的条件取值组合至少执行一次。路径覆盖:设计足够多的测试用例,运行被测程序,要求覆盖程序中所有可能的路径。逻辑覆盖测试小结逻辑覆盖的强弱关系图逻辑覆盖测试小结467810111314程序流程图
控制流图467148101113节点边4白盒测试的基本概念-控制流图控制流图是对程序流程图进行简化后得到的,它可以更加突出的表示程序的控制流的结构。组成:节点和控制流线。(1)节点由带有标号的圆圈表示,可以代表一个或多个语句、一个处理框序列和一个条件判定框(假设不包含复合条件)。(2)控制流线由带箭头的弧或线表示,可称为边。它代表程序中的控制流。白盒测试的基本概念-控制流图小结常见结构的控制流图
判定节点:包含条件的节点,其发出的边必须终止于某一个节点。
区域:边和节点所限定的范围。白盒测试的基本概念-控制流图
复合条件:条件语句中用到一个或多个布尔运算符(逻辑OR,AND,NAND,NOR)。!!!对于复合条件,可将其分解为多个单个条件.1ifaorb
2x
3else
4y白盒测试的基本概念-控制流图控制流图voidDoWork(intx,inty,intz){intk=0,j=0;if((x>3)&&(z<10)){k=x*y-1;j=sqrt(k);}//语句块1if((x==4)||(y>5)){j=x*y+10;}//语句块2j=j%3;//语句块3}例题31245语句块3语句块2语句块121011430315课堂练习思考题目下例程序流程图描述了最多输入50个值(以–1作为输入结束标志),计算其中有效的学生分数的个数、总分数和平均值,请画出其控制流图。
路径分析测试路径覆盖简化
在不能做到所有路径覆盖的前提下,如果某一程序的每一个独立路径都被测试过,那么可以认为程序中的每个语句都已经检验过了,即达到了语句覆盖。路径分析测试独立路径独立路径程序中至少引进一个新的处理语句集合或一个新条件的任一路径。在控制流图中必须至少包含一条在本次定义路径之前不曾用到的边。环形复杂度(圈复杂度)值=独立路径数量,即提供了确保所有语句至少执行一次的测试数量的上界。基本概念路径分析测试方法计算方法包括:
1、控制流图中区域的数量=环形复杂度(V(G))。
2、控制流图的环形复杂度V(G)=E-N+2,E是边的数量,N是节点数量。
3、控制流图的环形复杂度V(G)=P+1,P是判定节点的数量。环形复杂度路径分析测试例:圈复杂度,计算如下:V(G)=10条边-8结点+2=4;V(G)=3个判定结点+1=4。流图中有四个区域;467148101113边和节点所限定的范围计算区域时应包括图外部的范围
1234画出程序的控制流图环形复杂度独立路径测试用例控制流图计算程序的环形复杂度。导出基本路径集,确定程序的独立路径。据各条独立路径,设计测试用例。独立路径测试步骤路径分析测试voidSort(intiRecordNum,intiType)1{2intx=0;3inty=0;4while(iRecordNum-->0)5{6 If(iType==0)7 x=y+2;8else9 If(iType==1)10x=y+10;11else12x=y+20;13}14}例题467910121314467149101213程序流程图
控制流图第一步:画出控制流图路径分析测试-基本路径测试V(G)=10条边-8结点+2=4;V(G)=3个判定结点+1=4。流图中有四个区域;第二步:计算圈复杂度467149101213得出的独立路径如下:路径1:4-14路径2:4-6-7-14路径3:4-6-8-10-13-4-14路径4:4-6-8-11-13-4-14
第三步:导出独立路径467148101113路径1:4-14输入数据:iRecordNum=0,或者取iRecordNum<0的某一个值预期结果:x=0 路径2:4-6-7-14输入数据:iRecordNum=1,iType=0预期结果:x=0路径3:4-6-8-10-13-4-14输入数据:iRecordNum=1,iType=1预期结果:x=10路径4:4-6-8-11-13-4-14输入数据:iRecordNum=1,iType=2预期结果:y=20第四步:设计测试用例 简单循环嵌套循环串接循环无结构循环循环测试的目的:检查循环结构的有效性。循环测试(1)测试简单循环(循环的最大次数为n):跳过整个循环;只循环一次;只循环两次;循环m
次,其中m<n;分别循环n-1、n和n+1次。循环测试(2)嵌套循环测试从最内层循环开始测试,所有外层循环次数设置为最小值;对最内层循环按照简单循环的测试方法进行;由内向外进行下一个循环的测试,本层循环的所有外层循环仍取最小值,而由本层循环嵌套的循环取某些“典型”值;重复上一步的过程,直到测试完所有循环。循环测试(3)串接循环测试
若各个循环都相互独立,则可分别采用简单循环的测试方法;若循环不独立,则推荐使用嵌套循环的方法进行测试。循环测试(4)非结构循环测试按结构化程序设计的思想将程序结构化后,再进行测试。循环测试Z路径覆盖是将程序中的循环结构简化为选择结构的路径覆盖。目的:限制循环的次数,简化后的循环测试只考虑执行循环体一次和零次(不执行)两种情况。循环测试-Z路径覆盖要么执行要么跳过
代码检查法方式:桌面检查、代码审查和走查。内容:
检查代码和设计的一致性代码对标准的遵循、可读性代码逻辑表达的正确性代码结构的合理性程序编写与编写标准的符合性程序中不安全、不明确和模糊的部分编程风格问题等
代码检查-代码审查代码审查小组组成主持人记录员作者评论员开发组内部进行的,采用讲解、提问并使用Checklist方式进行的查找错误的活动。一般有正式的计划、流程和结果报告。代码检查-代码审查代码检查-代码审查审查前代码计划概述审查会议准备审查报告返工跟进跟进审查后代码代码审查步骤特点:代码审查并不专注于修正,而是专注于缺陷的检测。审查人员要为审查会议预先做好准备,制订一份他们发现的已知问题检验单。参与者都要被赋予明确的角色。审查的主持人不能由被检查产品的作者担任。代码检查-代码审查审查的主持人应该已经接受过主持审查会议方面的培训。所有与会者都做好准备之后才召开审查会议。每次审查所收集的数据都会被应用到以后的审查中,以便对审查进行改进。高层管理人员不参加审查会议。核对表关注的是审查者过去所遇到的问题。通过对源程序代码进行分析、检验来发现程序中的错误。桌面检查关注的是变量的值和程序逻辑。方式:表格代码检查-桌面检查表格的设计如下:第一列是源程序的行号。待检查程序中使用的每个变量占据一列。变量名作为列标题,最好按照字母顺序排列。随着程序流程的执行,新的变量值填入对应的表格中。条件(Conditions)列。条件的结果可能为真(T)或假(F)。随着程序的执行,条件值被计算出来并记录到表格中。输入/输出(input/Output)列。这列用来记录需要用户输入的值和程序输出的值。输入数据可以表示为:变量名+“?”+变量值,例如,price?200;输出数据可以表示为:变量名+“=”+变量值,例如discount=180。代码检查-桌面检查程序4_4:包含顺序执行语句。程序描述:将华氏温度转化为摄氏温度。代码:1publicclassFahrenheitToCelsius{2publicstaticvoidmain(String[]args){3StringfahrenheitString=JOptionPane.showInputDialog(null,"请输入一个华氏温度:","华氏温度转化为摄氏温度",JOptionPane.QUESTION_MESSAGE);4doublefahrenheit=Double.parseDouble(fahrenheitString);5doublecelsius=(5.0/9.0)*(fahrenheit-32);6System.out.println("摄氏温度为"+celsius+"度");7System.exit(0);8}9}例题LfahrenheitStringfahrenheitcelsiusInput/Output123“41”fahrenheitString?“41”441.05(5.0/9.0)*(41.0-32)=5.06celsius?5.0789程序4_5:包含选择语句if-else。程序描述:根据收入计算税费。代码:1publicclassCalcTax{2 publicstaticvoidmain(String[]args){3 Scannerscanner=newScanner(System.in);4 doubletax;5 System.out.println("Enteraninteger:");6 intincome=scanner.nextInt();7 if(income<2000)8 tax=0;9 else{10 if(income<6000)11 tax=(income-2000)*0.1;12 else13 tax=4000*0.1+(income-6000)*0.2;14 }15 System.out.println("Thetaxis:"+tax);16 }17}例题LincometaxConditionsInput/Output1::5Enteraninteger68000income?800078000<2000?isF89108000<6000?isF1112134000*0.1+(8000-6000)*0.2=8001415Tax=8001617开发组内部进行的,采用讲解、讨论和模拟运行的方式进行的查找错误的活动。代码检查-代码走查代码审查-代码走查代码审查是一种正式的评审活动,而代码走查的讨论过程是非正式的。代码走查与代码审查不同,不是简单地读程序和对照核对表进行检查,而是让与会者“充当”计算机。首先由测试者为所测程序准备一批有代表性的测试用例,提交给走查小组。在会议上,与会者集体扮演计算机的角色,让测试用例沿程序的逻辑运行一遍,随时记录程序的踪迹和状态(也就是各变量的值),供分析和讨论用。白盒测试综合策略在测试中,应尽量先用测试工具进行静态结构分析。测试中可采取先静态后动态的组合方式。利用静态分析的结果作为引导,通过代码检查和动态测试的方式对静态分析结果进行进一步的确认,使测试工作更为有效。覆盖率测试是白盒测试的重点。在不同的测试阶段,测试的侧重点不同。最少测试用例的计算最少测试用例数计算(续)测试用例?4a+b->2c+d->22*2=4最少测试用例数计算(续)估算最少测试用例个数的原则:如果在N-S图中存在有并列的层次A1、A2,A1和A2的最少测试用例个数分别为a1、a2,则由A1、A2两层所组合的N-S图对应的最少测试用例数为a1×a2。如果在N-S图中不存在有并列的层次,则对应的最少测试用例数由并列的操作数决定,即N-S图中除谓词之外的操作框的个数。最少测试用例数计算(续)例:如下图所示的两个N-S图,至少需要多少个测试用例完成逻辑覆盖?最小测试用例:3最小测试用例:5最少测试用例数计算(续)如下图所示的N-S图,至少需要多少个测试用例完成逻辑覆盖?
分析该N-S图:找出并列的层:2345和67是并列的两层。计算并列层的最小的测试用例个数:5(2345)×3(67)=15计算总的最小测试用例个数:15+1=16。例题
本节就到这里,下节见!软件测试技术基础
第5章黑盒测试技术黑盒测试技术教学目标理解黑盒测试方法的基本概念教学目标掌握黑盒测试的等价类划分法、边界值分析法、因果图测试法和决策表法技能要求运用等价类划分法、边界值分析法、因果图测试法与决策表法进行软件测试主要内容黑盒测试概述等价类划分法边界值分析法决策表法因果图法测试方法的选择知识的分析重点:
等价类的划分决策表化解测试方法的选择等价类划分法边界值分析法决策表法因果图法难点:
黑盒测试又称功能测试、数据驱动测试或基于规格说明的测试,也可被称为用户测试。黑盒测试法概述黑盒测试概述purposeprogramfunctionHumanInterfacetoComputerInitializeterminateRequirementsSpecification
?测试用例设计方法实例应用常见的划分形式等价类划分法划分原则等价类划分原则划分等价类的标准完备性无冗余性所有等价类的并集就是整个输入域,提供一种形式的完备性。等价类是输入域的某个子集合,子集互不相交,保证一种形式的无冗余性。假设一个程序P有输入量X和Y及输出量Z,在字长为32位的计算机上运行。若X、Y取整数,按穷举进行测试。穷举法测试:测试数据组:232×232=264时间:5亿年1毫秒/组,365×24小时/年实现一个对所有实数进行开平方运算(y=sqrt(x))的程序的测试。提示:逐一测试,采用穷举法!局部代表整体!正实数:+1.4444负实数:-2.3450等价类划分等价类测试输入域划分1234少数、代表性测试思想子集1子集3子集4子集2等价类等价类划分法有效等价类无效等价类有意义的、合理的输入数据所组成的集合无意义的、不合理的输入数据所构成的集合等价类等价类划分程序输入条件为小于100大于10的整数x,求其有效等价类和无效等价类。解答:有效等价类为:10<x<100;两个无效等价类为:x≤10和x≥100程序输入条件为取值为奇数的整数x。有效等价类为:x的值为奇数的整数,无效等价类为:x的值不为奇数的整数。例题程序输入条件为以字符‘a’开头、长度为8的字符串,并且字符串不包含‘a’~‘z’之外的其它字符。
有效等价类:满足了上述所有条件的字符串;无效等价类:不以‘a’开头的字符串、长度不为8的字符串和包含了‘a’~‘z’之外其它字符的字符串。
等价类划分-课堂练习课堂练习程序要求密码非空。有效等价类:为非空密码;无效等价类为:空密码
等价类划分-课堂练习课堂练习(1)按照区间划分
有效等价类:1个;无效等价类:2个。(2)按照数值划分
有效等价类:n个;无效等价类:1个。(3)按照数值集合划分有效等价类:1个;无效等价类:1个。
等价类划分法划分依据(4)按照限制条件或规则划分
有效等价类:1个;无效等价类:n个。(5)输入是布尔表达式有效等价类:1个;无效等价类:1个(6)细分等价类在确知已划分的等价类中各元素在程序中的处理方式不同的情况下,则应再将该等价类进一步划分为更小的等价类,并建立等价类表。划分依据编号有效等价类无效等价类为每一个等价类规定一个唯一的编号。设计一个新的测试用例,使它能够尽量覆盖尚未覆盖的有效等价类。设计一个新的测试用例,使它仅覆盖一个尚未覆盖的无效等价类。设计步骤等价类划分法少而全多而专
某网站用户申请注册时,要求用户必须输入用户名、密码及确认密码,对每一项输入条件的要求如下:用户名要求为4~12位,只能使用英文字母、数字、“-”、“_”这几种字符组合,并且首字符必须为字母或数字;密码要求为6~12位,只能使用英文字母、数字以及“-”、“_”这几种字符组合,并且区分大小写。等价类划分法例题等价类划分法1)确定等价类,列出等价类表等价类划分法
2)确定测试用例针对以下问题:某一种8位计算机,其十六进制常数的定义是以0x或0X开头的十六进制整数,其取值范围为-7f~7f(不区分大小写字母),如0x13、0x6A、-0x3c。请采用等价类划分的方法设计测试用例。
课后思考针对是否对无效数据进行测试,可以将等价类测试分为标准等价类测试和健壮等价类测试。标准等价类测试——不考虑无效数据值,测试用例使用每个等价类中的一个值。健壮等价类测试——主要的出发点是考虑了无效等价类。对有效输入,测试用例从每个有效等价类中取一个值;对无效输入,一个测试用例有一个无效值,其他值均取有效值。
常见等价类划分测试法
在三角形问题中,有四种可能的输出:等边三角形、等腰三角形、一般三角形和非三角形。利用这些信息能够确定下列输出(值域)等价类。R1={<a,b,c>:边为a,b,c的等边三角形}R2={<a,b,c>:边为a,b,c的等腰三角形}R3={<a,b,c>:边为a,b,c的一般三角形}R4={<a,b,c>:边为a,b,c不能组成三角形}标准等价类测试用例健壮等价类测试用例例题三角形问题测试用例abc预期输出Test1101010等边三角形Test210105等腰三角形Test3345一般三角形Test4412非三角形三角形问题的4个标准等价类测试用例三角形问题测试用例abc预期输出Test1567一般三角形Test2-155a值超出输入值定义域Test35-15b值超出输入值定义域Test455-1c值超出输入值定义域Test510155a值超出输入值定义域Test651015b值超出输入值定义域Test755101c值超出输入值定义域三角形问题的7个健壮等价类测试用例思考题目假设一个文本输入区域允许输入1个到255个字符。分析:输入1个和255个字符作为有效等价类;输入0个和256个字符作为无效等价类,大量的故障往往发生在输入定义域或输出值域的边界上,而不是在其内部。通常情况下,软件测试所包含的边界检验有几种类型:数字、字符、位置、质量、大小、速度、方位、尺寸、空间等相应地,以上类型的边界值应该在:最大/最小、首位/末位、上/下、最快/最慢、最高/最低、最短/最长、空/满等情况下边界值分析测试法思考题目假设一个文本输入区域允许输入1个到255个字符。分析:输入1个和255个字符作为有效等价类;输入0个和256个字符作为无效等价类,不输入字符内部边界值条件或子边界值条件小结:在实际中需要结合基本边界值条件和内部边界值条件来设计有效的测试用例。确定边界选取边界值通常输入或输出等价类的边界就是应该着重测试的边界情况。5个边界值:min、min+、nom、max、max-单故障设计步骤边界值分析测试法有两个输入变量x1(a≤x1≤b)和x2(c≤x2≤d)的程序F,其边界值为
{<x1nom,x2min>,<x1nom,x2min+>,<x1nom,x2nom>,<x1nom,x2max>,<x1nom,x2max->,<x1min,x2nom>,<x1min+,x2nom>,<x1max,x2nom>,<x1max-,x2nom>}x1x2abcd边界值分析测试法例2:有二元函数f(x,y),其中x∈[1,12],y∈[1,31]。
边界值分析法设计的测试用例:{<1,15>,<2,15>,<11,15>,<12,15>,<6,15>,<6,1>,<6,2>,<6,30>,<6,31>}推论:对于一个含有n个变量的程序,采用边界值分析法测试程序会产生4n+1个测试用例。边界值分析测试法例题健壮性测试健壮性测试它除了对变量的5个边界值分析取值外,还需要增加一个略大于最大值(max+)以及略小于最小值(min-)的取值。x1x2abcd健壮性测试边界值分析测试法对于有n个变量的函数采用健壮性测试需6n+1个测试用例。实例1在三角形问题描述中,除了要求边长是整数外,没有给出其它的限制条件。在此,我们将三角形每边边长的取范围值设值为[1,100]。实例2在NextDate函数中,隐含规定了变量mouth和变量day的取值范围为1≤mouth≤12和1≤day≤31,并设定变量year的取值范围为1912≤year≤2050。测试用例测试用例例题测试用例abc预期输出Test1Test2Test3Test4Test560606050506060605050126099100等腰三角形等腰三角形等边三角形等腰三角形非三角形Test6Test7Test8Test960605050129910060605050等腰三角形等腰三角形等腰三角形非三角形Test10Test11Test12Test1312991006060505060605050等腰三角形等腰三角形等腰三角形非三角形测试用例mouthdayyear预期输出Test1Test2Test3Test4Test5Test6Test766666661515151515151519111912191319752049205020511911.6.161912.6.161913.6.161975.6.162049.6.162050.6.162051.6.16Test8Test9Test10Test11Test12Test13666666-112303132200120012001200120012001day超出[1…31]2001.6.22001.6.32001.7.1输入日期超界day超出[1…31]Test14Test15Test16Test17Test18Test19-112111213151515151515200120012001200120012001Mouth超出[1…12]2001.1.162001.2.162001.11.162001.12.16Mouth超出[1…12]因果图法多种输入条件的组合会相应产生多个动作因果图测试法
一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法。
适合于检查程序输入条件的各种组合情况。因果图法因果图因果关系的符号c1e1恒等c1e1非~或c1e1c2c3∨与c1e1c2∧因果11因果图法ab异Ea和b中最多有一个可能为1,即a和b不能同时为1。约束关系|输入abcI或a、b、c中至少有一个必须为1,即a、b、c不能同时为0。因果图法ab唯一ORab要求约束关系|输入a和b必须有一个且仅有一个为1。
a是1时,b必须是1,即a为1时,b不能为0。因果图法Ma强制约束关系|输出若结果a为1,则结果b强制为0。因果图法10b因果图判定表测试用例据程序规格说明书,分析并确定因(输入条件)和果(输出结果或程序状态的改变),画出因果图。
将得到的因果图转换为判定表。为判定表中每一列所表示的情况设计一个测试用例。设计步骤因果图法
输入的第一个字符必须是#或*,第二个字符必须是一个数字,此情况下进行文件的修改;如果第一个字符不是#或*,则给出信息N,如果第二个字符不是数字,则给出信息M。解题步骤:(1)列出原因和结果。(2)找出因果关系、约束关系,画出因果图。(3)将因果图转换成决策表。(4)根据(3)中的决策表,设计测试用例。因果图法例题(1)列出原因和结果:因果图法结果
e1:给出信息Ne2:修改文件e3:给出信息M原因c1:第一个字符是#c2:第一个字符是*c3:第二个字符是一个数字(2)画出因果图:因果图法c1c2c3e110e2e3~E~∨∧中间节点第一个字符是#第二个字符是一个数字第一个字符是*给出信息N修改文件给出信息M(3)将因果图转换成如下所示的决策表:12345678条件:C1C2C310111110101110010111010100100000动作:e1e2e3不可能√√√√√√√√√规则选项因果图法(4)根据决策表中的每一列设计测试用例:测试用例编号输入数据预期输出1#3修改文件2#A给出信息M3*6修改文件4*B给出信息M5A1给出信息N6GT给出信息N和信息M因果图法12345678条件:C1C2C310111110101110010111010100100000动作:e1e2e3不可能√√√√√√√√√规则选项决策表法多个逻辑条件下执行不同操作!!条件项动作项决策表法条件的取值条件取值下的动作规则条件项条件项动作项动作项动作桩条件桩组成组成决策表法决策表动作桩条件桩决策表法规则数初始决策表简化决策表确定规则的个数。
列出所有的条件桩和动作桩;填入条件项;填入动作项,得到初始决策表。简化决策表,合并相似规则。设计步骤决策表法条件:n规则:
2n规则数:两条以上动作:相同;条件项:相似超市中如果某产品销售好并且库存低,则继续销售并增加该产品的进货;如果该产品销售好,但库存量不低,则继续销售;若该产品销售不好,但库存量低,则该产品下架;若该产品销售不好,且库存量不低,如有空货架,则继续销售,如果没有空货架,则该产品下架。例题决策表法构造初始决策表决策表测试法12345678条件:C1:销售好?C2:库存低?C3:有空货架?TTTTTFTFTTFFFTTFTFFFTFFF动作:a1:增加进货?a2:继续销售?a3:产品下架√√√√√√√√√√例题规则:23=8简化初始决策表决策表法123,45,678条件:C1:销售好?C2:库存低?C3:有空货架?TT-TF-FT-FFTFFF动作:a1:增加进货?a2:继续销售?a3:产品下架√√√√√√例题规则数:两条以上动作:相同;条件项:相似决策表法-课堂练习NextDate函数。NextDate函数包含三个变量month、day和year,函数的输出为输入日期后一天的日期。例如,输入为1989年5月16日,则函数的输出为1989年5月17日。要求输入变量month、day和year均为整数值,并且满足下列条件:(1)1≤month≤12(2)1≤day≤31(3)1920≤year≤2050若条件(1)~(3)中任何一个条件失效,则NextDate函数都会产生一个输出,指明相应的变量超出取值范围,比如“month的值不在1-12范围当中”。显然还存在着大量的year、month、day的无效组合,NextDate函数将这些组合作统一的输出:“无效输入日期”。monthdayyearNextDate12月小月二月大月本月外输出本月内输入决策表测试法提示动作桩和动作项a1:不可能;a2:day加1;a3:day复位;a4:month加1;a5:month复位;a6:year加1决策表测试法条件桩和条件项(等价类)monthdayyearM1:{month有30天};M2:{month有31天,12月除外};
M3:{month是12月};M4:{month是2月};D1:{day:1≤day≤27};D2:{day:day=28};D3:{day:day=29};D4:{day:day=30};D5:{day:day=31};Y1:{year:year是闰年};Y2:{year:year不是闰年}决策表测试法
12345678911M1M1M1M1M1M2M2M2M2M3D1D2D3D4D5D1D2D3D4D1——————————
条件:c1:month在c2:day在c3:year在动作:A1:不可能A2:day+1A3:day=1A4:month+1A5:month=1A6:year+110M2D4
—√√√√√√√√√√√√√初始决策表初始决策表(续)
12131415161718192022M3M3M3M3M4M4M4M4M4M4D2D3D4D5D1D2D2D3D3D5—————Y1Y2Y1Y2—
条件:c1:month在c2:day在c3:year在动作:A1:不可能A2:day+1A3:day=1A4:month+1A5:month=1A6:year+121M4D4
—√√√√√√√√√√√√√√√
1~3456~91011~1415161719M1M1M1M2M2M3M3M4M4M4D1~D3D4D5D1~D4D5D1~D4D5D1D2D3—————---Y1Y1
条件:c1:month在c2:day在c3:year在动作:A1:不可能A2:day+1A3:day=1A4:month+1A5:month=1A6:year+118M4D2
Y2√√√√√√√√√√√√√2021~22M4M4D3D4D5Y2-
√√√√√√简化的决策表决策表测试法结论分析和表达多逻辑条件下执行不同操作的情况。在黑盒测试方法中,基于决策表(也称判定表)的测试是最为严格、最具有逻辑性的测试方法。适用的应用程序:if-then-else逻辑突出;输入变量之间存在逻辑关系;涉及输入变量子集的计算;输入与输出之间存在因果关系。决策表测试法小结小结适用于使用决策表设计测试用例的条件:规格说明以决策表形式给出,或较容易转换为决策表。条件的排列顺序不会也不应影响执行的操作。规则的排列顺序不会也不应影响执行的操作。当某一规则的条件已经满足,并确定要执行的操作后,不必检验别的规则。如果某一规则的条件要执行多个操作,这些操作的执行顺序无关紧要。小结决策表测试法遵循原则:根据程序的重要性和一旦发生故障将造成的损失来确定测试等级和测试重点。认真选择测试策略,以便能尽可能少的使用测试用例,发现尽可能多的程序错误。测试方法的选择任何情况下都必须采用边界值分析法必要时采用等价类划分法采用错误推断法再追加测试用例。对照程序逻辑,检查已设计出的测试用例的逻辑覆盖程度。若程序的功能说明中含有输入条件的组合情况,则应一开始就选用因果图法。息了休!软件测试技术基础
第6章软件测试计划、文档和及测试用例教学目标了解测试文档的种类了解各个测试阶段可交付的文档教学目标理解测试计划在软件测试过程中的地位理解测试用例的特点技能要求学会制定测试计划学会设计和撰写测试用例软件测试文档及测试用例主要内容测试计划测试文档测试用例设计知识的分析重点:
测试计划的内容各个测试阶段要交付的文档测试用例的着眼点测试计划的定义测试计划的内容测试用例的定义测试用例的撰写难点:
测试计划-地位测试计划IEEEStd829-2008Testdocumentationoverview测试计划一个叙述了预定的测试活动的范围、途径、资源及进度安排的文档。它确认了测试项、被测特征、测试任务、人员安排,以及任何偶发事件的风险。
测试计划定义测试计划基本信息具体目标策略通过标准停测标准内容1284测试用例基本支持部门责任分工人力资源分配进度安排风险估计和危机处理5739106A明确测试的目标,增强其实用性
B坚持“5W”规则,明确测试的内容与过程
C采用评审和更新机制,保证其满足实际需求
D分别创建测试计划与测试详细规格、测试用例
测试计划编制原则测试计划模板测试计划测试文档测试用例测试报告测试计划测试文档核心需求分析审查需求定义中问题列表,批准的需求分析文档、测试计划书的起草RequirementsReview设计审查DesignReview设计问题列表、批准的各类设计文档、系统和功能的测试计划和测试用例测试文档单元测试缺陷报告、跟踪报告;完善的测试用例、测试计划UnitTesting功能测试缺陷报告、代码完成状态报告、功能验证测试报告UnitTesting系统测试IntegrationTesting缺陷报告、系统性能分析报告、缺陷状态报告、阶段性测试报告测试文档集成测试IntegrationTesting缺陷报告、跟踪报告;完善的测试用例、测试计划;集成测试分析报告版本发布当前版本已知问题的清单、版本发布报告Release维护Maintance缺陷报告、更改跟踪报告、测试报告
测试文档验收测试AcceptanceTesting用户验收报告、缺陷报告审查、版本审查最终测试报告
测试文档项目计划测试项实际测试项【Y】项【P】项【N】项【N/A】项备注数量百分比测试结果统计表问题号问题描述问题级别问题分析与策略避免措施备注问题程度严重问题一般问题微小问题其他统计项问题合计数量百分比测试问题表问题统计表测试文档测试项目计划起始时间计划结束时间实际起始时间实际结束时间进度描述项目编号项目名称项目开发经理项目测试经理测试人员测试环境(软件、硬件)软件总体描述:测试工作总结:测试进度表测试总结表
测试文档测试用例测试用例是为特定的目的而设计的一组测试输入、执行条件和预期的结果。测试用例定义测试用例最有可能抓住错误的;不是重复的、多余的;一组相似测试用例中最有效的;既不是太简单,也不是太复杂。测试用例特征基本准则代表性可判定性可再现性测试用例稀有一般用户着眼点其他设备特殊基本功能极端“多、快、好、省”测试用例书写标准测试项测试环境标识符输出标准输入标准测试用例间的关系测试用例测试用例息了休!软件测试技术基础
第5章软件自动化测试教学目标了解常用的软件自动化测试的工具教学目标理解软件自动化测试的基本概念理解软件自动化测试生存周期方法学及其应用技能要求学会用Selenium进行测试软件自动化测试主要内容软件自动化测试基础软件自动化测试方法软件自动化测试工具自动化测试工具Selenium知识的分析重点:
自动化测试流程自动化测试工具的选用自动化测试的定义自动化测试的方法难点:
软件自动化测试基础没有测试手工测试自动测试手工测试的局限性.软件自动化测试基础手工测试自动测试自动化测试的好处关联自动化测试并不能完全取代手工测试。自动化测试的目的着重于发现旧的软件故障,手工测试的目的则在于发现新的软件故障。软件自动化测试基础小结软件自动化测试方法
借助于自动化测试工具或其他手段,按照预定的计划进行自动测试的活动。自动测试回归测试大量不同的数据输入的功能测试手工测试难以完成软件自动化测试方法自动化测试选用软件自动化测试方法
借助于自动化测试工具或其他手段,按照预定的计划进行自动测试的活动。自动测试录制-回放脚本自动生成软件自动化测试方法人工完成一遍需要测试的流程,记录下这期间客户端和服务器的通信信息(通常是一些协议和数据)形成特定的脚本(Script)。运行该脚本,测试的流程重复执行测试流程,实现程序的自动运行和测试。软件自动化测试工具测试用例的生成。测试的执行与控制。测试结果与标准输出的对比。不吻合测试结果的分析处理。测试状态的统计和报表的产生。自动化测试与开发中产品每日构件的配合。采用自动比较技术。运用软件自动化测试工具确定系统最优的硬件配置。检查系统的可靠性。检查系统硬件和软件的升级情况。检测软件和硬件对系统性能的影响有多大。评估新产品。作用记录业务流程、生成脚本的能力。对各种终端的模仿能力。用有限的资源生成高质量虚拟用户的能力。对于整个系统中各个部分的监控能力。对于测试结果的表现和分析能力。优势软件自动化测试工具产生的问题.不现实的期望缺乏测试经验测试工具本身会影响测试质量存在安全性的错觉自动测试的维护软件自动化测试工具软件自动化测试工具白盒测试工具黑盒测试工具静态测试工具动态测试工具Telelogic的LogiscopePerforce的PRQACompuware的DevPartnerRational的Purify功能测试工具性能测试工具Rational的TeamTestCompuware的QACenterRadview的WebLoadMicrosoft的WebStressRational的Robot分类性能测试工具测试管理工具数据库测试工具性能优化测试工具TestBytesEcoScopeMercuryInteractive的TestDirectorIBMRational的ClearQuest负载测试工具LoadRunner软件自动化测试工具分类自动化测试工具Selenium
Selenium是一个Web应用的自动化框架。通过它,测试人员可以写出自动化程序让其像人一样在浏览器里操作web界面,如点击界面按钮,在文本框中输入文字等。
Selenium也能从web界面获取信息,如获取招聘网站职位信息,财经网站股票价格信息等等,然后用程序进行对相关信息进行分析处理。Selenium的介绍自动化测试工具Selenium
测试人员写的自动化程序需要使用客户端库。而程序的自动化请求都是通过这个库里面的编程接口发送给浏览器的。举个例子,如果要模拟用户点击界面按钮,自动化程序里面就应该调用客户端库相应的函数,发送点击元素的请求给浏览器驱动。然后,浏览器驱动再转发这个请求给浏览器。Selenium的原理自动化程序Selenium客户端浏览器驱动浏览器自动化测试工具SeleniumSelenium的安装1.命令行安装pipinstallselenium2.在其他IDE中进行安装常见的PythonIDE如pycharm可以在IDE中安装对应的python库函数。自动化测试工具SeleniumSelenium的安装3.安装浏览器驱动可以在这个网站上下载对应的浏览器/mirrors/chromedriver/,我们以chrome为例,找到对应浏览器的驱动。自动化测试工具SeleniumSelenium的简单demo#引用seleniumfromselenium.webdriverimportChrome#定义一个浏览器对象browser=Chrome()#打开百度browser.get('')上述代码可以通过selenium打开百度页面。自动化测试工具SeleniumSelenium中元素的选择1、在浏览器中按下f12进入开发者模式自动化测试工具SeleniumSelenium中元素的选择2、选取到输入框,对应到网页上的dom元素(右键,然后选择“Copy”再选择“Copyselector”,关于元素选择我们会在下文详细介绍)自动化测试工具SeleniumSelenium中元素的选择3、使用selenium工具选取到网页,输入关键字。引用seleniumfromselenium.webdriverimportChrome#提供模拟键盘操作的方法frommon.keysimportKeys#定义一个浏览器对象browser=Chrome()#设置隐式等待时间5sbrowser.implicitly_wait(5)#进入中国日报网browser.get('/')#选取到输入框,输入经济,敲下(模拟)键盘回车键browser.find_element_by_css_selector('#searchText').send_keys('经济',Keys.ENTER)自动化测试工具SeleniumSelenium中元素的选择4、在这里我们调用了“find_element_by_css_selector”这个api,它是通过选取CSS表达式来定位到元素的,CSS表达式的值为“#searchText”。CSS表达式是我们常见的选择元素方法之一,但除了CSS表达式外我们还有很多种选择器可以方便我们定位到元素。自动化测试工具Selenium基本元素定位文本值
find_element_by_link_text()id值
find_element_by_id()name属性
find_element_by_name()CSS表达式
find_element_by_css_selector()Xpath选择器find_element_by_xpath()自动化测试工具Selenium其他操作思考时间设置browser.implicitly_wait(时间)点击操作
browser.find_element_by_xpath(Element).click()模拟键盘输入
browser.find_element_by_xpath(Element).send_keys(字符串)下拉框
Select(browser.find_element_by_xpath(Element)).select_by_visible_text(匹配文本)自动化测试工具Selenium习题1.简述软件测试自动化的意义和作用。2.简述自动化测试和手工测试有什么主要区别。3.自动化测试工具大致可以分为几类?举例说明几种与之相对应的测试工具。4.简述对常用自动化测试工具的认识。5.试从网络上免费下载自动化测试工具,并在客户机或服务器上安装和运行。6.下载本章所介绍的白盒测试、黑盒测试、负载测试等工具,学习其主要功能及使用方法,尝试进行实例测试。7.安装selenium并尝试执行本章介绍的案例。课外思考息了休!软件测试技术基础
第5章面对对象的软件测试面对对象的软件测试教学目标理解面对对象的基本概念教学目标掌握面向对象的类测试、面对对象交互测试、面对对象系统测试技能要求运用类测试、面对对象交互测试、面对对象系统测试进行软件测试主要内容面向对象的软件测试基础类测试面对对象交互测试面对对象系统测试知识的分析重点:
类测试交互测试系统测试类测试交互测试系统测试难点:
目前面向对象软件已经获得了越来越广泛的应用,在面向对象的分析、设计技术及面向对象的程序设计语言方面,也获得了很丰富的研究成果与工程实际应用。
与之相比较,面向对象软件测试技术的研究还相对薄弱。面向对象技术给软件开发带来了巨大的变化,而这些变化又对软件测试方面产生了很大的影响。面对对象的软件测试基础测试视角从测试视角的角度看待面向对象的概念从测试视角看待面向对象测试面向对象软件的不同测试面向对象软件的不同从编程语言看,面向对象编程的特性显然会对测试的某些方面有影响。面向对象的开发过程及分析和设计方法也对测试产生了影响。测试视角测试视角包含以下几个方面:质疑:想验证软件的质量。客观:确保不能凭空想象。彻底:确保不要遗漏重要的部分。系统:检查是可再现的。从测试视角的角度看待面向对象的概念
面向对象技术主要包括以下的基本概念:对象、消息、接口、类、继承、多态。对象:对象是指包含了一组属性及对这些属性的操作的封装体。消息:消息描述了对象执行操作的规格说明。接口:接口是行为声明的集合。类:类是具有相同属性和相同行为的对象的集合。继承:继承是在已有类的基础上定义新类的机制,新类可以复用已有类的接口或实现。多态:多态是指同一个操作作用于不同的对象可以有不同的解释,产生不同的执行结果。面向对象测试的层次
如果把类看做单元,则变成了三层测试,即类、集成和系统测试。类测试:等价类划分法、因果图法、边值分析法、逻辑覆盖法、路径分析法等。集成测试:只能对整个编译后的程序做基于黑盒的集成测试。系统测试:功能测试、强度测试、性能测试、安全测试、恢复测试、可用性测试、安装/卸载测试等。面向对象的软件测试模型
面向对象的软件开发模型突破了传统的瀑布模型,将开发分为面向对象分析、面向对象设计和面向对象编程3个阶段。可以把面向对象的软件测试模型分为:面向对象分析的测试(OOATest)。面向对象设计的测试(OODTest)。面向对象编程的测试(OOPTest)。面向对象的单元测试(OOUnitTest)。面向对象的集成测试(OOIntegrateTest)。面向对象的系统测试(OOSystemTest)。面向对象分析的测试
传统的面向过程分析是一个功能分解的过程,把一个系统看成可以分解的功能的集合。
OOA直接映射问题空间,全面地将问题空间中的现实功能抽象化。因此对OOA的测试应从以下方面考虑:对认定的对象的测试。对认定的结构的测试。对认定的主题的测试。对定义的属性和实例关联的测试。对定义的服务和消息关联的测试。OOA中认定的对象是对问题空间中的结构、其他系统、设备、被记忆的事件、系统涉及的人员等实际实例的抽象。面向对象分析的测试对属性和实例关联的测试从如下方面考虑:定义的属性是否对相应的对象和分类结构的每个现实实例都适用。定义的属性在现实世界是否与这种实例关系密切。定义的属性在问题空间是否与这种实例关系密切。定义的属性是否能够不依赖于其他属性被独立理解。定义的属性在分类结构中的位置是否恰当,低层对象的共有属性是否在上层对象属性中体现。在问题空间中每个对象的属性是否定义完整。定义的实例关联是否符合
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 借用店铺合同范例
- 夜场小吃合同范例
- 建筑木工机械安装合同范例
- 委托出书劳务合同范例
- 小区强电安装合同模板
- 单位培训合同范例版
- 化工防腐合同范例
- VTV空调合同范例
- 工地买卖地皮合同范例
- 广告围墙拆除合同模板
- 2024年安徽交通控股集团招聘笔试参考题库含答案解析
- GB/T 37356-2019色漆和清漆涂层目视评定的光照条件和方法
- GB/T 25744-2010钢件渗碳淬火回火金相检验
- 【公开课课件】高考英语读后续写10
- 《孔乙己》公开课一等奖PPT优秀课件
- 美的中央空调故障代码H系列家庭中央空调(第一部分多联机)
- 物料承认管理办法
- 业主委员会成立流程图
- (完整版)全usedtodo,beusedtodoing,beusedtodo辨析练习(带答案)
- 广联达办公大厦工程施工组织设计
- 疑难病例HELLP综合征
评论
0/150
提交评论