软件工程5ppt课件

上传人:仙*** 文档编号:167449336 上传时间:2022-11-03 格式:PPT 页数:99 大小:576KB
收藏 版权申诉 举报 下载
软件工程5ppt课件_第1页
第1页 / 共99页
软件工程5ppt课件_第2页
第2页 / 共99页
软件工程5ppt课件_第3页
第3页 / 共99页
资源描述:

《软件工程5ppt课件》由会员分享,可在线阅读,更多相关《软件工程5ppt课件(99页珍藏版)》请在装配图网上搜索。

1、第第5 5章章 结构化实现结构化实现5.1 5.1 编码编码 5.2 5.2 软件测试基础软件测试基础 5.3 5.3 白盒测试技术白盒测试技术5.4 5.4 黑盒测试技术黑盒测试技术5.5 5.5 软件测试过程及策略软件测试过程及策略5.6 5.6 调试调试5.7 5.7 软件可靠性软件可靠性 5.1.1 5.1.1 选择程序设计语言须考虑的因素选择程序设计语言须考虑的因素 l l 用高级语言写的程序容易阅读、测试、调试、维护用高级语言写的程序容易阅读、测试、调试、维护5.1.2 5.1.2 编程风格编程风格 l l 可读性、可理解性最重要可读性、可理解性最重要5.1.3 5.1.3 程序效

2、率程序效率 l l占用处理机的时间和存储器的容量占用处理机的时间和存储器的容量(1 1)系统用户要求;)系统用户要求;(2 2)可以使用的编译程序;)可以使用的编译程序;(3 3)工程规模;)工程规模;(4 4)程序员的知识;)程序员的知识;(5 5)软件可移植性要求)软件可移植性要求(6 6)软件的应用领域)软件的应用领域 (1)(1)源程序文档化:源程序文档化:恰当的标识符、适当的注释、良好的视觉组织。恰当的标识符、适当的注释、良好的视觉组织。(2)(2)数据说明:数据说明:次序规范;对复杂数据结构加注释。次序规范;对复杂数据结构加注释。(3)(3)语句结构:语句结构:每个语句简单而直接。

3、每个语句简单而直接。(4)(4)输入和输出:输入和输出:输入的检查;输入项组合的合法性检查;输入的检查;输入项组合的合法性检查;数据的简单格式和结束标记;交互时的提示。数据的简单格式和结束标记;交互时的提示。l l效率是性能指标,在需求分析阶段给出目标值效率是性能指标,在需求分析阶段给出目标值 l l不要牺牲程序的清晰性和可读性来提高效率不要牺牲程序的清晰性和可读性来提高效率 l l要靠良好的设计来提高效率要靠良好的设计来提高效率(1 1)程序的运行效率:)程序的运行效率:l l 详细设计阶段确定的详细设计阶段确定的算法算法是影响程序效率的决定因素。是影响程序效率的决定因素。l l 详细设计向

4、程序代码转换时的指导原则:详细设计向程序代码转换时的指导原则:化简算术和逻辑表达式;化简算术和逻辑表达式;循环嵌套中的语句尽量少;循环嵌套中的语句尽量少;数据结构尽量简单;数据结构尽量简单;使用快速的算术运算;使用快速的算术运算;少用混合数据类型;少用混合数据类型;用优化的编译程序。用优化的编译程序。(2 2)存储器效率:)存储器效率:l l大型机:大型机:考虑操作系统页式调度的特点。考虑操作系统页式调度的特点。l l微型机:微型机:采用有紧缩存储器特性的编译程序。采用有紧缩存储器特性的编译程序。(3 3)输入)输入/输出效率:输出效率:l l 设置缓冲,减少通信开销设置缓冲,减少通信开销l

5、l 辅存的辅存的I/OI/O:简单的存取方法,成块传送:简单的存取方法,成块传送5.2.1 5.2.1 软件测试概述软件测试概述5.2.2 5.2.2 软件测试准则软件测试准则 5.2.3 5.2.3 常用的测试方法常用的测试方法5.2.4 5.2.4 程序的环路复杂度程序的环路复杂度 1.1.软件测试的定义:软件测试的定义:根据软件开发各阶段的规格说明和程序的内部结构根据软件开发各阶段的规格说明和程序的内部结构 而设计一批而设计一批测试用例测试用例,并利用这些测试用例去,并利用这些测试用例去运运 行程序行程序,以,以发现设计和程序错误发现设计和程序错误的过程。的过程。测试用例(测试方案):测

6、试用例(测试方案):输入数据及预期输出结果输入数据及预期输出结果2 2软件测试过程:软件测试过程:软件开发过程是一个自顶向下、逐步细化的过程;软件开发过程是一个自顶向下、逐步细化的过程;而测试过程则是自底向上、逐步集成的过程。低一级而测试过程则是自底向上、逐步集成的过程。低一级 测试为高一级测试准备条件。测试为高一级测试准备条件。l l 软件测试横跨编码和测试两个阶段。软件测试横跨编码和测试两个阶段。测试与软件开发各阶段的关系:测试与软件开发各阶段的关系:开发:开发:自顶向下、逐步分解自顶向下、逐步分解 测试:测试:自底向上、逐步集成自底向上、逐步集成3.3.软件测试的目标:软件测试的目标:以

7、最少的时间、人力,找出软件的潜在错误和缺陷以最少的时间、人力,找出软件的潜在错误和缺陷一个一个好的测试用例好的测试用例在于能发现至今未发现的错误在于能发现至今未发现的错误一个一个成功的测试成功的测试是指发现了至今未发现的错误是指发现了至今未发现的错误(1 1)所有的测试都应该能追溯到用户需求)所有的测试都应该能追溯到用户需求(2 2)有严格的测试计划,避免随意性)有严格的测试计划,避免随意性(3 3)注意错误群集现象)注意错误群集现象(4 4)测试应该从)测试应该从“小规模小规模”开始,并逐步进行开始,并逐步进行“大规模大规模”测试测试(5 5)穷举测试是不可能的)穷举测试是不可能的(测试不能

8、证明程序无错测试不能证明程序无错)(6 6)为了达到最佳的测试效果,应该由独立的第三方来从事)为了达到最佳的测试效果,应该由独立的第三方来从事综综 合合测试工作测试工作(7 7)设计测试用例时,要包括合理的输入数据和不合理的输入)设计测试用例时,要包括合理的输入数据和不合理的输入 数据数据1.1.黑盒测试(功能测试):黑盒测试(功能测试):在在程序接口程序接口进行的测试,它只进行的测试,它只检查程序功能检查程序功能是否能按是否能按 照规格说明书的规定正常使用,程序是否能适当地接收输照规格说明书的规定正常使用,程序是否能适当地接收输 入数据产生正确的输出信息,并且保持外部信息入数据产生正确的输出

9、信息,并且保持外部信息(如,数如,数 据库或文件据库或文件)的完整性。的完整性。2.2.白盒测试(结构测试):白盒测试(结构测试):按照按照程序内部的逻辑程序内部的逻辑测试程序,测试程序,检查程序中的每条检查程序中的每条 通路通路是否都能按预定要求正确工作。是否都能按预定要求正确工作。1.1.流图(程序图):流图(程序图):一种退化的程序流程图,描述程序的控制流程一种退化的程序流程图,描述程序的控制流程 流图的画法:流图的画法:程序流程图中每个处理符号退化成一个结点。程序流程图中每个处理符号退化成一个结点。程序流程图中的流线变成有向边。程序流程图中的流线变成有向边。一组顺序处理框可以映射为一个

10、单一结点一组顺序处理框可以映射为一个单一结点 分解复合逻辑分解复合逻辑程序流程图程序流程图2a V b4351TFF流图流图b1,2a435TFT2.2.程序的环路复杂度的求法:程序的环路复杂度的求法:(1)(1)方法一:方法一:V(G)E N+2 l l E E 表示流图中有向边的数目;表示流图中有向边的数目;N N 表示结点数目。表示结点数目。(2)(2)方法二:方法二:V(G)P+1 l l P P 是流图中判定结点的数目是流图中判定结点的数目(3)(3)方法三:方法三:V(G)流图中的区域数流图中的区域数程序流程图程序流程图2a V b4351TFF流图流图b1,2a435TFTV(G

11、)=3 l l设计测试方案是测试阶段的关键技术问题:设计测试方案是测试阶段的关键技术问题:(1 1)所谓测试方案包括具体的)所谓测试方案包括具体的测试目的测试目的(例如,预定要测试的(例如,预定要测试的 具体功能),应该具体功能),应该输入的测试数据输入的测试数据和和预期的结果预期的结果。通常又。通常又 把测试数据和预期的输出结果称为测试用例。把测试数据和预期的输出结果称为测试用例。l l设计测试方案的基本目标:设计测试方案的基本目标:确定一组最可能发现某个或某类错误的测试数据。确定一组最可能发现某个或某类错误的测试数据。(2 2)最困难的问题是设计测试用的输入数据:)最困难的问题是设计测试用

12、的输入数据:不同的测试数据发现程序错误的能力差别很大,为了提高测不同的测试数据发现程序错误的能力差别很大,为了提高测 试效率降低测试成本,应该选用高效的测试数据。因为不可试效率降低测试成本,应该选用高效的测试数据。因为不可 能进行穷尽的测试,能进行穷尽的测试,选用少量选用少量“最有效的最有效的”测试数据测试数据,做到尽,做到尽 可能完备的测试就更重要了。可能完备的测试就更重要了。5.3.1 5.3.1 逻辑覆盖逻辑覆盖5.3.2 5.3.2 基本路径测试基本路径测试 5.3.3 5.3.3 循环测试循环测试 l l有选择地执行程序中某些最有选择地执行程序中某些最有代表性的通路有代表性的通路是对

13、穷尽是对穷尽 测试的唯一可行的替代办法。测试的唯一可行的替代办法。l l根据覆盖的目标和程度不同,逻辑覆盖可分为以下几类:根据覆盖的目标和程度不同,逻辑覆盖可分为以下几类:l l覆盖主要有两种方法:覆盖主要有两种方法:一种称为一种称为逻辑覆盖法逻辑覆盖法,另一种称为,另一种称为路径覆盖法路径覆盖法。除此以外,对循环的测试,可采用除此以外,对循环的测试,可采用循环覆盖法循环覆盖法。l l覆盖是对一系列测试过程的总称,这组测试过程逐渐覆盖是对一系列测试过程的总称,这组测试过程逐渐 进行越来越完整的通路测试。进行越来越完整的通路测试。(1 1)语句覆盖:)语句覆盖:选择足够多的测试数据,使被测程序中

14、选择足够多的测试数据,使被测程序中 每一可执行语句至少执行一次每一可执行语句至少执行一次。l l执行路径(执行路径(ace)可满足要求,)可满足要求,取条件取条件:(A=2)and(B=0)l l 测试用例:测试用例:输入数据输入数据(A,B,X)取值(取值(2 2,0 0,4 4)输出结果输出结果(A,B,X)的)的预期值为(预期值为(2 2,0 0,3 3)两个判定语句为两个判定语句为 “F F”的情况没有测试的情况没有测试 X=X+1abd dcTFTFe(A1)(B=0)X=X/A(A=2)(X1)(2)(2)判定覆盖:判定覆盖:使每个判定的每种可能结果至少执行一次。使每个判定的每种可

15、能结果至少执行一次。l执行路径(执行路径(a ac ce e)和()和(a ab bd d)可满足要求,取条件:可满足要求,取条件:(A=2)and(B=0)(A=2)and(B=0)和和(A1)and(X1)(A1)and(X1)l 测试用例测试用例1:1:(A,B,X)(A,B,X)的输入值取的输入值取(2,0,4);(2,0,4);预期输出值为预期输出值为(2,0,3)(2,0,3)l 测试用例测试用例2:2:(A,B,X)(A,B,X)的输入值取的输入值取(1,1,1);(1,1,1);预期输出值为预期输出值为(1,1,1)(1,1,1)判定覆盖包括语句覆盖判定覆盖包括语句覆盖两个判定

16、语句的两个判定语句的 “F F”和和“T T”的情况组合没有测试的情况组合没有测试,即未覆盖所有的逻辑路径即未覆盖所有的逻辑路径X=X+1abd dcTFTFe(A1)(B=0)X=X/A(A=2)(X1)(3)(3)条件覆盖:条件覆盖:每个每个判定表达式中每个条件判定表达式中每个条件的可能取值至少执行一次。的可能取值至少执行一次。l 每个判断条件的可能取值:每个判断条件的可能取值:第一个判定表达式中条件第一个判定表达式中条件1 1:A1 A1 和和 A1A1 第一个判定表达式中条件第一个判定表达式中条件2 2:B B0 0 和和 B0B0 第二个判定表达式中条件第二个判定表达式中条件1 1:

17、A2A2 和和 A A2 2 第二个判定表达式中条件第二个判定表达式中条件2 2:X1 X1 和和 X1X1 l 测试用例测试用例1 1 (取条件取条件A1A1、B B0 0、A2A2、X1X1,通过路径通过路径a ac ce e):):(A A,B B,X X)的输入值取()的输入值取(1 1,0 0,3 3),预期输出值为(),预期输出值为(1 1,0 0,4 4)l 测试用例测试用例2 2(取条件取条件A1A1、B0B0、A=2A=2、X1X1,通过路径通过路径a ab be e):):(A A,B B,X X)的输入值取()的输入值取(2 2,1 1,1 1),预期输出值为(),预期输

18、出值为(2 2,1 1,2 2)条件覆盖不一定满足判定覆盖条件覆盖不一定满足判定覆盖X=X+1abd dcTFTFe(A1)(B=0)X=X/A(A=2)(X1)(4)(4)判定判定/条件覆盖:条件覆盖:每个判定表达式中每个条件的可能取值至少执每个判定表达式中每个条件的可能取值至少执 行一次;同时每个判定表达式的可能判定结行一次;同时每个判定表达式的可能判定结 果至少执行一次。果至少执行一次。l测试用例测试用例1 1(取条件取条件A1A1、B B0 0、A=2A=2、X1X1,通过路径,通过路径a ac ce e):):(A A,B B,X X)的输入值取()的输入值取(2 2,0 0,4 4

19、),预期输出值为(),预期输出值为(2 2,0 0,3 3)l每个判断条件的可能取值:每个判断条件的可能取值:第一个判定表达式中条件第一个判定表达式中条件1 1:A1 A1 和和 A1A1 第一个判定表达式中条件第一个判定表达式中条件2 2:B B0 0 和和 B0 B0 第二个判定表达式中条件第二个判定表达式中条件1 1:A2A2 和和 A A2 2第二个判定表达式中条件第二个判定表达式中条件2 2:X1 X1 和和 X1X1l测试用例测试用例2 2(取条件取条件A1A1、B0B0、A2A2、X1X1,通过路径,通过路径a ab bd d):):(A A,B B,X X)的输入值取()的输入

20、值取(1 1,1 1,1 1),预期输出值为(),预期输出值为(1 1,1 1,1 1)两个判定语句的两个判定语句的 “F F”和和“T T”的情况组合没有测试的情况组合没有测试,即未覆盖所有即未覆盖所有 的逻辑路径的逻辑路径X=X+1abd dcTFTFe(A1)(B=0)X=X/A(A=2)(X1)(5)(5)条件组合覆盖:条件组合覆盖:每个判定表达式中的所有可能的每个判定表达式中的所有可能的条件取值组合条件取值组合 至少执行一次。至少执行一次。l 第一个判定表达式第一个判定表达式 组合组合1 1:A1A1和和 B B0 0;组合组合2 2:A1A1和和 B0B0;组合组合3 3:A1A1

21、和和 B B0 0;组合组合4 4:A1A1和和 B0B0;l 第二个判定表达式第二个判定表达式 组合组合5 5:A A2 2和和 X1X1;组合组合6 6:A=2A=2和和 X1X1;组合组合7 7:A2A2和和 X1X1;组合组合8 8:A2A2和和 X1X1l测试用例测试用例1 1(取组合取组合1 1和和5 5,执行路径执行路径a ac ce e):):(A A,B B,X X)的输入值取()的输入值取(2 2,0 0,4 4),预期输出值为(),预期输出值为(2 2,0 0,3 3)l测试用例测试用例2 2(取组合取组合2 2和和6 6,执行路径执行路径a ab be e):):(A

22、A,B B,X X)的输入值取()的输入值取(2 2,1 1,1 1),预期输出值为(),预期输出值为(2 2,1 1,2 2)l测试用例测试用例3 3(取组合取组合3 3和和7 7 ,执行路径,执行路径a ab be e):):(A A,B B,X X)的输入值取()的输入值取(1 1,0 0,3 3),预期输出值为(),预期输出值为(1 1,0 0,4 4)l测试用例测试用例4 4(取组合取组合4 4和和8 8 ,执行路径,执行路径a ab bd d):):(A A,B B,X X)的输入值取()的输入值取(1 1,1 1,1 1),预期输出值为(),预期输出值为(1 1,1 1,1 1)

23、X=X+1abd dcTFTFe(A1)(B=0)X=X/A(A=2)(X1)(6)(6)路径覆盖:路径覆盖:覆盖程序中所有可能的路径。覆盖程序中所有可能的路径。程序复杂时,路径测试不易做到程序复杂时,路径测试不易做到 L1(ace)L1(ace)L2(abd)L2(abd)L3(abe)L3(abe)L4(acd)L4(acd)X=X+1abd dcTFTFe(A1)(B=0)X=X/A(A=2)(X1)覆盖程度的强弱:覆盖程度的强弱:条件组合覆盖条件组合覆盖条件覆盖条件覆盖判定覆盖判定覆盖语句覆盖语句覆盖判定条件覆盖判定条件覆盖弱弱强强在使用逻辑覆盖法设计测试用例时,步骤如下:在使用逻辑覆

24、盖法设计测试用例时,步骤如下:1)1)选择逻辑覆盖类型;选择逻辑覆盖类型;(测试目的?测试目的?)2)2)选择测试路径以满足选定的覆盖程度;(选择测试路径以满足选定的覆盖程度;(分析过程?分析过程?)3)3)获得一组获得一组测试用例测试用例:选择测试选择测试输入数据输入数据以满足选定的测试路径和覆盖程度;以满足选定的测试路径和覆盖程度;根据测试输入数据和测试路径计算根据测试输入数据和测试路径计算预期结果预期结果。例:设有下列语句序列例:设有下列语句序列:read(x,y);if(x1)and(y1)and(y1)and(y1)取取“T”或或“F”;条件条件2(y1)(x1)、(y=5)(y1)

25、(x1)、(y=5)(y1)and(y1)and(y=5)then z then zx x*y y else z else zx+y;x+y;if z if z12 then z12 then z2 2*z;z;若采用判定条件覆盖法进行测试若采用判定条件覆盖法进行测试,则应选用(则应选用()为测试用例。为测试用例。A.x=1,y=12;x=4,y=7 B.x=2,y=6;x=3,y=3 A.x=1,y=12;x=4,y=7 B.x=2,y=6;x=3,y=3 C.x=3,y=4;x=1,y=9 D.x=4,y=5;x=1,y=6 C.x=3,y=4;x=1,y=9 D.x=4,y=5;x=1,

26、y=6l l程序中的程序中的路径路径是指:是指:程序从程序从入口入口开始,执行各个语句,直到开始,执行各个语句,直到出口出口。l l在实际中,即使一个不太复杂的程序,其路径条数都是在实际中,即使一个不太复杂的程序,其路径条数都是 一个庞大的数字。采用穷举测试是不现实的。因此,只一个庞大的数字。采用穷举测试是不现实的。因此,只 能选择有关路径进行测试。能选择有关路径进行测试。基本路径测试的步骤:基本路径测试的步骤:(1)(1)根据详细设计结果画出相应的根据详细设计结果画出相应的流图流图,求,求环路复杂性环路复杂性。(2)(2)确定线性确定线性独立路径独立路径的基本集合的基本集合:l l环路复杂性

27、取值表示程序的独立路径条数环路复杂性取值表示程序的独立路径条数 l l独立路径:独立路径:包括一组以前没有处理的语句或条件的一条路径包括一组以前没有处理的语句或条件的一条路径(3)(3)生成生成测试用例测试用例,确保基本路径集合中的每条独立路径的执行。,确保基本路径集合中的每条独立路径的执行。例题例题1 1 例题例题2 基本路径覆盖是一种很强的覆盖标准,它使得程序中的每个条件基本路径覆盖是一种很强的覆盖标准,它使得程序中的每个条件 至少取得一次真值和假值,使得每条语句至少执行一次。至少取得一次真值和假值,使得每条语句至少执行一次。被测模块的被测模块的PDL描述:描述:Procedure:pro

28、cess records1.Do While records remain2.Read record;3.If record field1=04.Then store in buffer;5.increment counter;6.Else If record field2=07.Then reset counter;8.Else store in file;9.End If10.End If11.End DoEnd流图:流图:环路复杂度:环路复杂度:V(G)=412,387694,51011Region 1Region 2Region 3Region 4流图:流图:独立路径:独立路径:Pat

29、h1:1-11 Path2:1-2-3-6-8-9-10-1-11 Path3:1-2-3-6-7-9-10-1-11 Path4:1-2-3-4-5-10-1-1112,387694,51011被测模块程序流程图:被测模块程序流程图:独立路径:独立路径:19101124578361910112457836 Path1:1-11 Path2:1-2-3-6-8-9-10-1-11 Path3:1-2-3-6-7-9-10-1-11 Path4:1-2-3-4-5-10-1-11 PROCEDURE averageINTERFACE RETURNS average,total.input,tot

30、al.validINTERFACE ACCEPTS value,minimum,maximumTYPE value1:100 IS SCALAR ARRAYTYPE average,total.input,total.valid IS SCALARTYPE minimum,maximum,sum IS SCALARTYPE i IS INTEGERi=1total.input=total.valid=0sum=0DO WHILE valuei-999 AND total.input=minimum AND valuei 0 THEN average=sum/total.valid ELSE a

31、verage=-999ENDIFEND average例例1 1、用基本路径法,对求平均值的过程设计测试用例。、用基本路径法,对求平均值的过程设计测试用例。(1 1)由过程描述导出流图,求环路复杂性:)由过程描述导出流图,求环路复杂性:对过程描述定义对过程描述定义结点结点 导出导出流图流图 环路复杂性:环路复杂性:V V(G G)6 6 12345678910111213FTFFFTTTFT(2 2)确定独立路径(共)确定独立路径(共6 6条)条):path1:path1:1-2-10-11-13 1-2-10-11-13 path2:path2:1-2-10-12-13 1-2-10-12-

32、13 path3:path3:1-2-3-10-11-13 1-2-3-10-11-13 path4:path4:1-2-3-4-5-8-9-2 1-2-3-4-5-8-9-2 path5:path5:1-2-3-4-5-6-8-9-2 1-2-3-4-5-6-8-9-2 path6:path6:1-2-3-4-5-6-7-8-9-2 1-2-3-4-5-6-7-8-9-2 (3 3)设计测试用例,使每条独立路径执行一次。)设计测试用例,使每条独立路径执行一次。path1:path1:1-2-10-11-13 1-2-10-11-13 需要满足的条件需要满足的条件:点点2 2遇到遇到value

33、i=-999;valuei=-999;点点1010遇到遇到 total.valid0total.valid0 测试用例设计如下:测试用例设计如下:l l输入数据:输入数据:valuek=valuek=有效值,有效值,kiki valuei=-999,2i100 valuei=-999,2i100 l l预期输出结果:预期输出结果:输入总个数;输入的有效值个数及平均值。输入总个数;输入的有效值个数及平均值。path5:path5:1-2-3-4-5-6-8-9-21-2-3-4-5-6-8-9-2(-10-11-13-10-11-13)需要满足的条件需要满足的条件:点点2 2遇到遇到valuei

34、-999;valuei-999;点点3 3遇到遇到total.input100;total.input=min;valuei=min;点点6 6遇到遇到valueimax;valueimax;点点2 2遇到遇到valuei=-999;valuei=-999;点点1010遇到遇到total.valid0;total.valid0;测试用例设计如下:测试用例设计如下:l l输入数据:输入数据:valuei=valuei=有效值,有效值,i100;imax,kmax,ki l l预期输出结果:预期输出结果:正确的输入总个数、输入的有效值个数及平均值。正确的输入总个数、输入的有效值个数及平均值。结构化

35、程序中通常有结构化程序中通常有3 3种循环:种循环:(1)(1)简单循环的测试:简单循环的测试:应该使用下列测试集来测试简单循环,其中应该使用下列测试集来测试简单循环,其中n n是允许通过是允许通过 循环的最大次数。循环的最大次数。跳过循环。跳过循环。只通过循环一次。只通过循环一次。通过循环两次。通过循环两次。通过循环通过循环 m m 次,其中次,其中 mnmn一一1 1。通过循环通过循环 n-1n-1,n n,n+1n+1次。次。(2)(2)嵌套循环的测试:嵌套循环的测试:从最内层循环开始测试,把所有其他循环都设置为最小值。从最内层循环开始测试,把所有其他循环都设置为最小值。对最内层循环使用

36、简单循环测试方法,而使外层循环的迭对最内层循环使用简单循环测试方法,而使外层循环的迭 代参数代参数(例如,循环计数器例如,循环计数器)取最小值,并为越界值或非法取最小值,并为越界值或非法 值增加一些额外的测试。值增加一些额外的测试。由内向外,对下一个循环进行测试,但保持所有其他外层由内向外,对下一个循环进行测试,但保持所有其他外层 循环为最小值,其他内层嵌套循环为循环为最小值,其他内层嵌套循环为“典型典型”值。值。继续进行下去,直到测试完所有循环。继续进行下去,直到测试完所有循环。(3)(3)串接循环的测试:串接循环的测试:如果串接的各个循环彼此独立,可以使用简单循环的测试如果串接的各个循环彼

37、此独立,可以使用简单循环的测试 方法。方法。如果两个循环串接,而且第一个循环的循环计数器值是第如果两个循环串接,而且第一个循环的循环计数器值是第 二个循环的初始值,则两个循环并不是独立的。可以使用二个循环的初始值,则两个循环并不是独立的。可以使用 嵌套循环的测试方法。嵌套循环的测试方法。l l黑盒测试主要试图发现下列几类错误黑盒测试主要试图发现下列几类错误:1 1、功能功能不正确或遗漏;不正确或遗漏;2 2、界面界面错误;错误;3 3、数据库数据库访问错误;访问错误;4 4、性能性能错误;错误;5 5、初始化初始化和和终止终止错误等。错误等。5.4.1 5.4.1 等价划分等价划分 5.4.2

38、 5.4.2 边界值分析边界值分析 5.4.3 5.4.3 错误推测错误推测 1.1.等价划分的定义:等价划分的定义:把程序的可能的输入数据(把程序的可能的输入数据(或输出数据或输出数据)划分成若干)划分成若干 部分(部分(等价类等价类),然后从每一部分中选取少数有代表性的),然后从每一部分中选取少数有代表性的 数据作为测试用例。数据作为测试用例。l l 一个假定:一个假定:测试某等价类的代表值就等价于对这一类测试某等价类的代表值就等价于对这一类 其它值的测试。其它值的测试。2.2.两种等价类:两种等价类:有效等价类:有效等价类:合理的、有意义的数据构成的集合。合理的、有意义的数据构成的集合。

39、无效等价类:无效等价类:不合理、无意义的数据构成的集合。不合理、无意义的数据构成的集合。使用等价划分法设计测试方案时,首先研究程序的功能说使用等价划分法设计测试方案时,首先研究程序的功能说 明,从而确定明,从而确定输入数据输入数据的的有效等价类有效等价类和和无效等价类无效等价类。在确。在确 定输入数据的等价类时常常还需要分析定输入数据的等价类时常常还需要分析输出数据输出数据的等价类,的等价类,以便根据输出数据的等价类导出对应的输入数据等价类。以便根据输出数据的等价类导出对应的输入数据等价类。3.3.划分等价类需要经验,指导原则如下划分等价类需要经验,指导原则如下 :若输入条件若输入条件规定了取

40、值范围或取值个数规定了取值范围或取值个数,则可确定,则可确定 一个有效等价类一个有效等价类和和两个无效等价类两个无效等价类。in rangegreater than rangeless than range若若规定了输入数据的一组值规定了输入数据的一组值,而且程序,而且程序要对每个值要对每个值 分别处理分别处理,则可,则可为每个输入值确立一个有效等价类为每个输入值确立一个有效等价类;为这一组值确立一个无效等价类为这一组值确立一个无效等价类。个人月收入:个人月收入:x 税率税率 x=1600 0%1600 x 2100 5%2100 =x 3600 10%3600 =x 6600 15%6600

41、 =x 21600 20%21600 =x 101600 45%若若规定了输入数据必须遵守的规则规定了输入数据必须遵守的规则,则可确立,则可确立一个有一个有 效等价类效等价类(符合规则)和(符合规则)和若干个无效等价类若干个无效等价类(从不同(从不同 角度违反规则)。角度违反规则)。若若输入数据为整型输入数据为整型,则可划分出,则可划分出正整数正整数、零零和和负整数负整数 三个有效等价类三个有效等价类若程序的处理对象是若程序的处理对象是表格表格,则应该使用,则应该使用空表空表、含、含一项一项、含含多项多项的表。的表。设计一个新的测试用例,使其设计一个新的测试用例,使其仅覆盖一个尚未仅覆盖一个尚

42、未 被覆盖的无效等价类被覆盖的无效等价类(重复这一步,直到所有(重复这一步,直到所有 的无效等价类都被覆盖为止)的无效等价类都被覆盖为止)4.4.如何确立测试用例:如何确立测试用例:设计一个新的测试用例,使其设计一个新的测试用例,使其尽可能多地覆盖尽可能多地覆盖 尚未被覆盖的有效等价类尚未被覆盖的有效等价类(重复这一步,直到(重复这一步,直到 所有的有效等价类都被覆盖为止)所有的有效等价类都被覆盖为止)(2 2)确定测试用例:)确定测试用例:l l一个测试用例可以覆盖多个合理等价类一个测试用例可以覆盖多个合理等价类 l l一个测试用例只能覆盖一个不合理等价类一个测试用例只能覆盖一个不合理等价类

43、 5.5.等价划分法测试步骤:等价划分法测试步骤:(1 1)确定等价类(包括合理等价类和不合理等价类)并)确定等价类(包括合理等价类和不合理等价类)并 顺序编号;顺序编号;例例:某报表处理系统,要求用户输入处理报表的日期。:某报表处理系统,要求用户输入处理报表的日期。(1 1)假设)假设日期限制在日期限制在19901990年年1 1月至月至19991999年年1212月月,即输入,即输入 系统的日期不在该时间段内,则显示输入错误。系统的日期不在该时间段内,则显示输入错误。(2 2)规定)规定日期由日期由6 6位数字字符组成位数字字符组成:前四位代表年,后:前四位代表年,后 两位代表月。两位代表

44、月。请用等价类划分法设计测试用例,测试程序的请用等价类划分法设计测试用例,测试程序的“日期日期 检查功能检查功能”。解:解:一、划分等价类并顺序编号一、划分等价类并顺序编号 二、为合理等价类设计测试用例:二、为合理等价类设计测试用例:三、为每个不合理等价类至少设计一个测试用例:三、为每个不合理等价类至少设计一个测试用例:l l 经验表明,程序在处理边界情况时最容易发生错误,从而经验表明,程序在处理边界情况时最容易发生错误,从而设计使设计使 程序运行在边界情况附近的测试方案程序运行在边界情况附近的测试方案、暴露出程序错误的可能性、暴露出程序错误的可能性 会更大些。会更大些。例如,许多程序错误出现

45、在下标、常量、数据结构和循环等等的例如,许多程序错误出现在下标、常量、数据结构和循环等等的 边界附近。边界附近。l l边界值分析法主要用来边界值分析法主要用来选择等价类的边界值作为测试用例选择等价类的边界值作为测试用例检查程检查程 序边界运行情况,是一种补充等价分类法的测试用例设计技术。序边界运行情况,是一种补充等价分类法的测试用例设计技术。l l取输入等价类和输出等价类的边界值及边界附近的值做测试用例:取输入等价类和输出等价类的边界值及边界附近的值做测试用例:应当选取正好等于、刚刚大于、刚刚小于边界的值作为测试数据。应当选取正好等于、刚刚大于、刚刚小于边界的值作为测试数据。l l 通常联合使

46、用等价划分和边界值分析两种技术通常联合使用等价划分和边界值分析两种技术例:例:有一个计算程序,它的输入量只有一个有一个计算程序,它的输入量只有一个X X,其取值范围是,其取值范围是 -100-100,5050。现在从输入的角度设计如下现在从输入的角度设计如下4 4个测试用例,输入值个测试用例,输入值X X分别取:分别取:-99-99,-100-100,4949,5050 设计这组测试用例的方法是设计这组测试用例的方法是()()。A)A)条件覆盖法条件覆盖法 B)B)等价分类法等价分类法 C)C)边界值分析法边界值分析法 D)D)错误推测法错误推测法错误推测法在很大程度上靠直觉和经验进行。它的基

47、本想法错误推测法在很大程度上靠直觉和经验进行。它的基本想法 是是列举出程序中可能有的错误和容易发生错误的特殊情况列举出程序中可能有的错误和容易发生错误的特殊情况,并且根据它们选择测试方案。并且根据它们选择测试方案。对于程序中容易出错的情况也有一些经验总结出来,例如:对于程序中容易出错的情况也有一些经验总结出来,例如:(1 1)输入数据为)输入数据为 0 0 或字符为空;或字符为空;(2 2)当软件要求输入时)当软件要求输入时(比如在文本框中比如在文本框中),),根本没有输入任何内容,根本没有输入任何内容,按了按了EnterEnter键;(这种情况在产品说明书中常常忽视,设计人员键;(这种情况在

48、产品说明书中常常忽视,设计人员 也可能遗忘,但是在实际使用中却时有发生。)也可能遗忘,但是在实际使用中却时有发生。)(3 3)如果输入或输出的数目允许变化)如果输入或输出的数目允许变化(例如,被检索的或生成的表的项例如,被检索的或生成的表的项 数数),则输入或输出的数目为,则输入或输出的数目为O O和和1 1的情况的情况(例如,表为空或只有一例如,表为空或只有一 项项)是容易出错的情况。是容易出错的情况。l l 软件测试的过程:软件测试的过程:(1)(1)单元测试:单元测试:集中对用源代码实现的集中对用源代码实现的每一个程序模块每一个程序模块进行测试。进行测试。检查每个单元(模块)检查每个单元

49、(模块)控制结构中的特定路径控制结构中的特定路径,以确保,以确保 做到完全覆盖并发现最大数量的错误。做到完全覆盖并发现最大数量的错误。检查各个程序模块是否正确地实现了检查各个程序模块是否正确地实现了规定的功能规定的功能。主要发现主要发现编码和详细设计的错误编码和详细设计的错误。(2)(2)集成测试:集成测试:把把模块装配模块装配(即集成即集成)在一起形成完整的软件包,在装配在一起形成完整的软件包,在装配 的同时进行测试。集成测试同时解决的同时进行测试。集成测试同时解决程序验证程序验证和和程序构程序构 造造这两个问题。这两个问题。模块相互间的协调和通信模块相互间的协调和通信是集成测试过程中的主要

50、问题。是集成测试过程中的主要问题。集成测试中将发现集成测试中将发现软件设计中的错误软件设计中的错误,也可能发现,也可能发现需求需求 说明中的错误说明中的错误。(3)(3)确认测试:确认测试:在软件集成完成之后,必须测试在需求分析阶段确定下在软件集成完成之后,必须测试在需求分析阶段确定下 来的确认标准,确认测试是对软件满足所有来的确认标准,确认测试是对软件满足所有功能的、行功能的、行 为的和性能的需求为的和性能的需求的最终保证。的最终保证。验收测试的目的是验证系统确实能够验收测试的目的是验证系统确实能够满足用户的需要满足用户的需要,以及以及软件配置软件配置是否完全、正确。是否完全、正确。确认测试

51、中发现的往往是确认测试中发现的往往是需求说明书中的错误需求说明书中的错误。(4)(4)系统测试:系统测试:把已经经过确认的软件纳入实际运行环境中,把已经经过确认的软件纳入实际运行环境中,与其他系与其他系 统成分组合统成分组合在一起进行测试。在一起进行测试。(5)(5)平行运行:平行运行:同时运行新开发出来的系统和将被它取代的旧系统,以同时运行新开发出来的系统和将被它取代的旧系统,以 便便比较新旧两个系统比较新旧两个系统的处理结果。的处理结果。集成集成测试测试单元单元测试测试单元单元测试测试单元单元测试测试被测模被测模块块被测模被测模块块设计设计信息信息已测试已测试的模块的模块确认确认测试测试已

52、集成的已集成的模块模块系统系统测试测试已确认已确认的软件的软件可交付可交付的软件的软件软件软件需求需求系统其系统其他元素他元素第一步第一步第二步第二步第三步第三步第四步第四步软件测试的过程软件测试的过程 5.5.1 5.5.1 单元测试单元测试 5.5.2 5.5.2 集成测试集成测试 5.5.3 5.5.3 确认测试确认测试 5.5.4 5.5.4 系统测试系统测试 1 1单元测试集中检测软件设计的最小单元单元测试集中检测软件设计的最小单元模块模块 l l在编写出源程序代码并通过了编译程序的语法检查之后,在编写出源程序代码并通过了编译程序的语法检查之后,就可以用就可以用详细设计结果作指南详细

53、设计结果作指南,对,对重要的执行通路重要的执行通路进行测进行测 试,以便发现模块内部的错误。试,以便发现模块内部的错误。l l各模块可平行、独立进行单元测试各模块可平行、独立进行单元测试 l l单元测试方法:单元测试方法:主要使用白盒测试技术、辅助使用黑盒测试技术主要使用白盒测试技术、辅助使用黑盒测试技术2.2.单元测试的内容:单元测试的内容:(1 1)模块)模块接口接口测试(数据流、全局数据、测试(数据流、全局数据、I/OI/O)(2 2)局部数据结构局部数据结构测试(数据类型、初始化、类型匹配)测试(数据类型、初始化、类型匹配)(3 3)内部逻辑内部逻辑测试(基本执行路径和循环)测试(基本

54、执行路径和循环)(4 4)错误处理错误处理的测试(出错预见、出错处理)的测试(出错预见、出错处理)(5 5)边界边界测试(数据流、控制流的边界)测试(数据流、控制流的边界)(6 6)某些)某些性能性能测试测试 3.3.单元测试的步骤:单元测试的步骤:(1 1)测试用例设计:)测试用例设计:利用设计文档,设计利用设计文档,设计验证程序功能验证程序功能、检查逻辑路径检查逻辑路径、找出程序错误的多个测试用例。对、找出程序错误的多个测试用例。对 于每一组输入、应有预期的正确输出结果。于每一组输入、应有预期的正确输出结果。(2 2)设计)设计辅助模块辅助模块(测试软件):(测试软件):测试一个模块时,应

55、考虑该模块与外界的联系,通常测试一个模块时,应考虑该模块与外界的联系,通常 用一些用一些辅助模块辅助模块去模拟与被测模块相联系的其他模块。去模拟与被测模块相联系的其他模块。(3)(3)进行测试运行、分析测试结果进行测试运行、分析测试结果l l辅助模块就是驱动模块和桩模块(存根模块):辅助模块就是驱动模块和桩模块(存根模块):驱动模块:驱动模块:相当于被测模块的上级调用模块;接收测试数据并传给相当于被测模块的上级调用模块;接收测试数据并传给 被测模块;输出实测结果。被测模块;输出实测结果。桩模块(存根模块):桩模块(存根模块):代替被测模块调用的子模块;桩模块使用被它代替的模代替被测模块调用的子

56、模块;桩模块使用被它代替的模 块的接口,可能做最少量的数据操作。块的接口,可能做最少量的数据操作。被测模块、与被测模块相关的驱动模块和桩模块共同被测模块、与被测模块相关的驱动模块和桩模块共同 构成了一个构成了一个“测试环境测试环境”:软件结构图软件结构图 模块模块B B 的测试环境的测试环境 1.1.集成测试:集成测试:将所有模块按照设计要求组装起来将所有模块按照设计要求组装起来的同时进行测试的同时进行测试2.2.集成测试的内容:集成测试的内容:发现发现与接口有关的错误与接口有关的错误 将各模块连接时,通过接口的数据是否丢失。将各模块连接时,通过接口的数据是否丢失。不同模块的功能之间是否产生不

57、利影响。不同模块的功能之间是否产生不利影响。组装后,系统的功能和性能是否满足预期要求。组装后,系统的功能和性能是否满足预期要求。全局数据的正确性。全局数据的正确性。各模块的误差积累情况。各模块的误差积累情况。3.3.集成测试策略集成测试策略 :(1 1)非渐增式集成测试)非渐增式集成测试(一次性组装一次性组装)(2 2)渐增式集成测试:)渐增式集成测试:边连接边测试,以随时发现连接中产生的问题。边连接边测试,以随时发现连接中产生的问题。自顶向下集成自顶向下集成 自底向上集成自底向上集成 渐增式集成测试策略的选择渐增式集成测试策略的选择 自顶向下集成测试与自底向上集成测试各有优缺点,自顶向下集成

58、测试与自底向上集成测试各有优缺点,其中一种策略的优点就是另一种策略的缺点。其中一种策略的优点就是另一种策略的缺点。将两种渐增式策略组合起来是一种最好的折衷,这将两种渐增式策略组合起来是一种最好的折衷,这 种折衷策略是:种折衷策略是:在程序结构的高层使用自顶下向策略,在程序结构的高层使用自顶下向策略,而在低层则使用自底向上策略而在低层则使用自底向上策略,这种测试策略也称为三,这种测试策略也称为三 明治测试(明治测试(sandwich testing)。)。集成测试时集成测试时,应特别关注应特别关注关键模块关键模块的测试。关键模块应的测试。关键模块应 尽早测试,回归测试时也应集中在关键模块的功能上

59、。尽早测试,回归测试时也应集中在关键模块的功能上。关键模块是指具有下列一个或多个特征的模块:关键模块是指具有下列一个或多个特征的模块:1 1)与多个软件需求有关;)与多个软件需求有关;2 2)含有高层控制(位于程序结构的高层);)含有高层控制(位于程序结构的高层);3 3)本身是复杂的或是容易出错的;)本身是复杂的或是容易出错的;4 4)含有确定的性能需求。)含有确定的性能需求。自顶向下渐增式集成测试步骤自顶向下渐增式集成测试步骤1.1.测试主模块(其直属下层模块用存根模块代替)测试主模块(其直属下层模块用存根模块代替)2.2.采用采用深度优先(或广度优先)策略深度优先(或广度优先)策略,逐步

60、用实际模块替换,逐步用实际模块替换 存根模块(同时用新的存根模块代替实际模块的直接下属存根模块(同时用新的存根模块代替实际模块的直接下属 模块),与已测试模块组成新的子系统。模块),与已测试模块组成新的子系统。3.3.进行回归测试进行回归测试 回归测试:回归测试:相对原始测试而言,部分或全部重复已经进行过的测试相对原始测试而言,部分或全部重复已经进行过的测试 4.4.判断所有模块是否组装到系统中(结束测试或转到判断所有模块是否组装到系统中(结束测试或转到2 2执行)执行)ABCDEF软件结构软件结构As1s2s3测试测试AABs2s3E加入加入EABs2s3s4加入加入BABCDEF加入加入F

61、ABCDEs5加入加入DABCs3E加入加入C 自顶向下渐增式组装(深度优先)自顶向下渐增式组装(深度优先)自底向上渐增式测试步骤自底向上渐增式测试步骤1.1.把底层模块组合成若干个实现某个特定子功能的簇(为每把底层模块组合成若干个实现某个特定子功能的簇(为每 个子功能簇设计驱动模块,协调测试数据的输入和输出),个子功能簇设计驱动模块,协调测试数据的输入和输出),对各子功能簇分别进行测试对各子功能簇分别进行测试2.2.用实际模块代替驱动模块组装成更大的子功能簇(需为用实际模块代替驱动模块组装成更大的子功能簇(需为 新增实际模块设计相应驱动模块),进行测试新增实际模块设计相应驱动模块),进行测试

62、3.3.判断是否组装到主模块(结束测试或转到判断是否组装到主模块(结束测试或转到 2 2 执行)执行)自底向上渐增式测试示例自底向上渐增式测试示例McMaMb簇簇1簇簇2簇簇3D1D3D2驱动模块驱动模块簇簇4簇簇5ABCDEF软件结构软件结构 自底向上渐增式组装自底向上渐增式组装 d1Ed2Cd3F(1)Bd4BEd5DF(2)ABCDEF系统结构系统结构(3)1 1、确认测试:、确认测试:验证软件的有效性(功能和性能等)是否与用户的要求验证软件的有效性(功能和性能等)是否与用户的要求 一致,即一致,即软件是否满足需求规格说明书中的确认标准软件是否满足需求规格说明书中的确认标准。l l确认测

63、试确认测试使用黑盒测试方法使用黑盒测试方法 2 2、确认测试的具体内容:、确认测试的具体内容:(1 1)系统的功能、性能)系统的功能、性能 (2 2)人机界面)人机界面 (3 3)可移植性、兼容性、错误恢复能力)可移植性、兼容性、错误恢复能力 (4 4)可维护性)可维护性 (5 5)文档的完整、准确)文档的完整、准确4 4、用户参与确认测试用户参与确认测试3 3、确认测试的另一项任务:软件配置复查确认测试的另一项任务:软件配置复查 软件配置复查的目的是保证软件配置的所有成分都齐全,软件配置复查的目的是保证软件配置的所有成分都齐全,各方面的质量都符合要求,具有维护阶段所必需的细节。各方面的质量都

64、符合要求,具有维护阶段所必需的细节。l l测试与测试与测试测试(1 1)测试(模拟测试):测试(模拟测试):在开发场所和开发人员指导下模拟实际运行环境在开发场所和开发人员指导下模拟实际运行环境 和用户进行测试和用户进行测试(2 2)测试(现场测试):测试(现场测试):组织典型用户在实际使用环境下进行测试组织典型用户在实际使用环境下进行测试1 1调试的任务:调试的任务:在测试的基础上,进一步诊断和改正程序中潜在的在测试的基础上,进一步诊断和改正程序中潜在的 错误。错误。2 2调试过程:调试过程:(图(图5.105.10)确定程序中可疑错误的确切性质和位置;确定程序中可疑错误的确切性质和位置;对程

65、序对程序(设计,编码设计,编码)进行修改,排除这个错误。进行修改,排除这个错误。3 3调试途径:调试途径:(1 1)强行排错:)强行排错:打印部分信息打印部分信息 使用程序调试工具使用程序调试工具(2 2)回溯法排错:)回溯法排错:从发现症状的位置沿程序控制流向回追溯源代码,从发现症状的位置沿程序控制流向回追溯源代码,直到找到错误根源。直到找到错误根源。(3 3)原因排除法:)原因排除法:对分查找法对分查找法 归纳法:归纳法:从一些错误征兆入手,分析它们之间的关系找出错误。从一些错误征兆入手,分析它们之间的关系找出错误。l l分析后提出假设分析后提出假设 l l证明假设证明假设 演绎法:演绎法

66、:提出可能的出错假设;排除不正确的假设;改进剩余的假设;提出可能的出错假设;排除不正确的假设;改进剩余的假设;证明假设证明假设 5.7.1 5.7.1 基本概念基本概念 5.7.2 5.7.2 估算平均无故障时间的方法估算平均无故障时间的方法 1 1软件可靠性:软件可靠性:程序在给定的时间间隔内,按照规格说明书的规定程序在给定的时间间隔内,按照规格说明书的规定 成功地运行的概率。成功地运行的概率。l l可靠性随着给定的时间间隔的加大而减少可靠性随着给定的时间间隔的加大而减少 2 2软件的可用性:软件的可用性:程序在给定的时间点,按照规格说明书的规定程序在给定的时间点,按照规格说明书的规定 成功地运行的概率。成功地运行的概率。l l可靠性与可用性的区别:可靠性与可用性的区别:可靠性意味着在可靠性意味着在0 0到到t t时间间隔时间间隔内系统没有失效内系统没有失效 可用性意味着在可用性意味着在时刻时刻t t,系统是正常运行的,系统是正常运行的l l系统的稳态可用性系统的稳态可用性A ASSSS:如果在一段时间内,软件系统故障停机时间分别为如果在一段时间内,软件系统故障停机时间分别为t td

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!