版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Dr. 张德珍张德珍软件测试与质量保证软件测试与质量保证第第3章章 软件测试的方法软件测试的方法第2章回顾Zhu.K软件缺陷是软件质量的对立面软件缺陷是软件质量的对立面软件缺陷软件缺陷(Bug)是什么是什么验证和确认验证和确认软件测试的分类和阶段软件测试的分类和阶段- 单元、集成、系统(性能、适用性、兼容性)、验收测试软件测试的工作范畴软件测试的工作范畴- 策略、计划、设计、执行、报告、评估第第3章章 软件软件测试的方法测试的方法Zhu.K3.1 白盒测试方法白盒测试方法3.2 黑盒测试方法黑盒测试方法3.3 静态测试和动态测试静态测试和动态测试3.4 主动测试和被动测试主动测试和被动测试3.
2、5 形式化测试方法形式化测试方法3.6 基于风险的测试基于风险的测试3.7 模糊测试方法模糊测试方法3.8 ALAC测试和随机测试方法测试和随机测试方法方法论和具体方法方法论和具体方法p 从方法论看,更多体现了一种哲学的思想,例如辩证统一的方法,在测试中有许多对立统一体,如静态测试和动态测试、白盒测试和黑盒测试、自动化测试和手工测试等。p 软件测试的方法论来源于软件工程的方法论,例如有面向对象的开发方法,就有面向对象的测试方法;有敏捷方法,就有和敏捷方法对应的测试方法。Zhu.K黑盒子和白盒子黑盒子和白盒子功能测试功能测试数据驱动测试数据驱动测试 结构测试结构测试逻辑驱动测试逻辑驱动测试 客户
3、需求事件驱动输入输出Zhu.K静态的和动态的静态的和动态的主持人主持人作者记录员列席人员内审员内审员技术专业人员用户代表不正式正式互审 走读 审查会议运行程序运行程序Zhu.K自动测试和手工测试自动测试和手工测试手工模拟用户手工模拟用户操作操作3.1白盒测试方法白盒测试方法Zhu.K白盒测试方法白盒测试方法n静态白盒法静态白盒法:是在不执行的条件下有条理地仔细审查软件设计、体系结构和代码,从而找出软件缺陷的过程。n侵入式法:侵入式法:在软件测试过程中需要对软件系统的代码进行修改的测试方法。n逻辑覆盖逻辑覆盖:以程序的内部逻辑结构为基础,分为语句覆盖、判定覆盖、判定-条件覆盖、条件组合覆盖等n基
4、本路径测试基本路径测试:在程序控制流程的基础上,分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例。Zhu.K3.1.1静态白盒法静态白盒法p静态白盒测试是在不执行的条件下有条理地仔细审查软件设计、体系结构和代码,从而找出软件缺陷的过程。u 尽早发现软件缺陷。 u 为黑盒测试员提供思路。Zhu.K静态白盒测试法分类静态白盒测试法分类n静态白盒测试法一般根据审查的严格程度分为三种:n1、同行评审也称为伙伴审查,这种方法大体类似于“如果你给我看你的,我也给你看我的”类型的讨论。同行评审常常仅在编写代码或设计体系结构的程序员,以及充当审查者的其他一两个程序员和测试员之间进行。n2、走
5、查比同行评审更正规一些的方法,在走查中,编写代码的程序员向其他程序员和测试员组成的小组作正式陈述。静态白盒测试法分类静态白盒测试法分类n3、评审评审是最正式的审查类型,具有高度组织化,要求每一个参与者都接受训练。评审与同行评审和走查的不同之处在于陈述代码的人陈述者或者宣读者不是原来的程序员。召开评审会议之后,要准备一份书面报告,明确解决问题所必需重做的工作。然后程序员进行修改,由会议协调员验证修改结果。评审经证实是从设计文档和代码中发现软件缺陷非常有效的方法。通用代码审查清单通用代码审查清单通用代码审查清单(问题举例问题举例):(1)数据引用错误及问题罗列 string sTemp; int
6、iC; foreach (DataGridViewRow DGV in csfDataGridView1.Rows) sTemp=“”; for (int i = 0; i = DGV.Cells.Count; ) sTemp= sTemp+DGV.Cellsi.Value.ToString(); iC=iC+1; MessageBox.Show(sTemp+” ”+iC.ToString(); 通用代码审查清单v数据引用错误是指使用未经正确声明和初始化的变量、常量、数组、字符串或记录而导致的软件缺陷。v是否引用了未初始化的变量?查找遗漏之处与查找错误同等重要v数组和字符串的下标是整数值吗?下
7、标总是在数组和字符串长度范围之内吗?v在检索操作或者引用数组下标时是否包含“丢掉一个”这样的潜在错误?v是否在应该使用常量的地方使用了变量例如在检查数组边界时?v变量是否被赋予不同类型的值?例如,无意中使代码为整形变量赋予一个浮点数值?v为引用的指针分配内存了吗?v一个数据结构是否在多个函数或者子程序中引用,在每一个引用中明确定义结构了吗?通用代码审查清单通用代码审查清单(问题举例问题举例):(1)数据引用错误及问题罗列n例:程序的功能为:求n以内的奇数之和及偶数和。#includemain() int n,i=1.0,sum,a,b; scanf(%d,&n); while(i 0)
8、 foreach (DataGridViewRow DGV in GV1.SelectedRows) /foreach (DataGridViewRow DGV2 in GV2.Rows) / / if (DGV2.Cells0.Value = DGV.Cells0.Value) / return; / /int a = GV2.Rows.Count; GV2.Rows.Add(); DataGridViewRow dgvr = GV2.RowsGV2.Rows.Count; for (int i = 0; i R) Q=Q-R; else R=R-Q; return Q; Zhu.K程序插桩
9、测试程序插桩测试(略略)根据程序绘制出其流程图为了记录改程序中语句的执行次数,使用插桩技术插入如下语句:C(i)=C(i)+1,i=1,2,6插桩之后的流程图如右Zhu.K在程序入口处插入在程序入口处插入对计数器对计数器C(i)的初的初始化语句始化语句在程序出口处在程序出口处加入打印语句加入打印语句程序插桩测试程序插桩测试(略略)图中虚线框中的内容并不是源程序的内容,而是为了记录语句的执行次数而插入的。虚线框中的程序就是为了完成计数。形式为 C(n)=C(n)+1 ; n = 1,2,3,n ; 该程序从入口开始,到出口执行结束。凡经历的计数语句都能记录下该程序点的执行次数。 如果在程序的入口
10、处还插入了对计数器C(i)初始化的语句,在出口处插入了打印这些计数器的语句,就构成了完整的插桩程序。它就能记录并输出在各程序点上语句的实际执行次数。Zhu.K程序插桩测试程序插桩测试(略略)Zhu.K右图为插桩之后的程序,箭头所指为插入的语句。源程序的语句已略去。程序插桩测试程序插桩测试设计插桩程序时需要考虑的问题包括: 探测哪些信息; 在程序的什么部位设置探测点; 需要设置多少个探测点; 程序中特定部位插入某些用以判断变量特性的语句。Zhu.K程序插桩测试程序插桩测试第1个问题具体问题具体分析。第2个问题,在实际测试通常在下面一些部位设置探测点: 程序块的第1个可执行语句之前 for,do
11、,do-while,do until 等循环语句处。if, else if, else及end if等条件语句各分支处。输入/输出语句之后。函数、过程、子程序调用语句之后。return语句之后goto语句之后Zhu.K程序插桩测试程序插桩测试第3个问题,需要考虑如何设置最少探测点方案。第4个问题,是如何在程序中特定部位插入断言语句。在应用程序插桩技术时,可在程序中特定部位插入某些用以判断变量特性的语句,使得程序执行中这些语句得以证实。Zhu.K程序插桩测试程序插桩测试插装技术在软件测试中主要有以下几个应用:v 覆盖分析:程序插装可以估计程序控制流图中被覆盖的程度,确定测试执行的充分性,从而设计
12、更好的测试用例,提高测试覆盖率。v 监控在程序的特定位置设立插装点,插入用于记录动态特性的语句,用来监控程序运行时的某些特性,从而排除软件故障。v 查找数据流异常程序插装可以记录在程序执行中某些变量值的变化情况和变化范围。掌握了数据变量的取值状况,就能准确地判断是否发生数据流异常。虽然数据流异常可以用静态分析器来发现,但是使用插装技术可以更经济更简便,毕竟所有信息的获取是随着测试过程附带得到的。Zhu.K断言测试断言测试v断言测试用于检查在程序运行过程出现的一些本“不应该”发生的情况。也就是在一个应该正确的地方,加一条判断来验证程序运行时,它是否真正如当初预料的那样,具有预期的正确性。 v断言
13、测试就是在程序中插入断言,插入断言的根本目的是用于帮助程序的调试与排错,因此本质上它是属于测试代码,是一种特殊的插桩语句,而不是属于真正的应用程序模块的一部分。 Zhu.K断言测试断言测试v例:Zhu.K缺陷种植测试缺陷种植测试缺陷种植测试是一种用来估计驻留在程序中的缺陷数量的技术。工作原理是向一个软件中“种植”缺陷,然后运行测试集,以检查发现了多少个种植的缺陷,还有多少个种植的缺陷没有被发现,以及已经发现了多少个新的非种植的缺陷。然后就可以预测残留的缺陷数量。Zhu.K缺陷种植测试案例缺陷种植测试案例如果种植了100个种子缺陷,而在测试中只找到75个种植的缺陷,那么种子发现率为75%。如果已
14、经发现了450个真实的缺陷,那么可以通过种子发现率,推出这450个真实的缺陷只代表了现在存在所有真实缺陷的75%。那么,真实的缺陷总数估计为600个。所以还有150个真实的缺陷需要测试出来。Zhu.K白盒测试是根据程序内部的结构来测试程序。程序的内部结构可以用流程图来表示。从流程图上,可以看出,程序的内部结构包含以下这些元素:语句,判定,条件,循环,路径等,通过对这些元素的测试就形成了以下不同的白盒测试方法:v语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖(统称为逻辑覆盖法)。v循环测试v基本路径测试Zhu.K3.1.3语句覆盖语句覆盖p语句覆盖法的基本思想是设计若干测试
15、用例,运行被测程序,使程序中的每个可执行语句至少被执行一次Zhu.K3.1.3语句覆盖语句覆盖Zhu.Kdbas入口入口返回返回(y1)&(z=0)(y=2)|(x1)x = x / yx = x +1ceTTFF3.1.3语句覆盖的测试用例语句覆盖的测试用例Zhu.K语句覆盖并不充分:语句覆盖并不充分: 当第一个判定中的当第一个判定中的&写成写成|时,对于时,对于CASE1程序仍按程序仍按sacbed执行。执行。dbas入口入口返回返回(y1)&(z=0)(y=2)|(x1)x = x / yx = x +1ce3.1.4判定覆盖判定覆盖p判定覆盖法的基本思想是设计若
16、干用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断真假值均曾被满足。p一个判定往往代表着程序的一个分支, 所以判定覆盖也被称为分支覆盖。Zhu.K3.1.4判定覆盖判定覆盖Zhu.K判定判定覆盖包含语句覆盖,覆盖包含语句覆盖,判定覆盖也不充分:判定覆盖也不充分: 当第当第2个判定中的个判定中的x1写成写成x1)&(z=0)(y=2)|(x1)x = x / yx = x +1ce3.1.5条件覆盖条件覆盖p条件覆盖的基本思想是设计若干测试用例,执行被测程序以后,要使每个判断中每个条件的可能取值至少满足一次。Zhu.K3.1.5条件覆盖条件覆盖目标目标: 保
17、证测试到每个逻辑条件取值为保证测试到每个逻辑条件取值为 true 和和 false简单条件简单条件:(a rel-op b) where rel-op= (和NOT连用), 即 ab; NOT(ab)组合条件组合条件: 由 AND, OR连接的多个简单条件,即(ab) AND (c(a+b+c)测试发现的错误测试发现的错误:布尔操作符 关系操作符布尔变量 算术表达式布尔括弧Zhu.KZhu.Kv对判定1:(y1)&(z=0) 条件 y1 取真、假分别记为 T1 ,-T1 条件 z=0 取真、假分别记为 T2 ,-T2v判定2:(y=2)|(x1) 条件 y=2取真、假分别记为 T3 ,
18、-T3 条件 x1 取真、假分别记为 T4 ,-T4条件覆盖并不能包含条件覆盖并不能包含判判定定覆盖覆盖,对于下述测试用对于下述测试用例,分支例,分支bd并未出现。并未出现。3.1.6判定判定/条件覆盖条件覆盖p判定-条件覆盖是判定和条件覆盖设计方法的交集,即设计足够的测试用例,使得判断条件中的所有条件可能取值至少执行一次,同时,所有判断的可能结果至少执行一次Zhu.KZhu.K判定判定/条件覆盖的测试用例条件覆盖的测试用例v对判定对判定1:(y1)&(z=0) 条件条件 y1 取真、假分别记为取真、假分别记为 T1 ,-T1 条件条件 z=0 取真、假分别记为取真、假分别记为 T2
19、,-T2v判定判定2:(y=2)|(x1) 条件条件 y=2取真、假分别记为取真、假分别记为 T3 ,-T3 条件条件 x1 取真、假分别记为取真、假分别记为 T4 ,-T4判定判定/条件条件覆盖同时包含覆盖同时包含判定判定覆盖覆盖,和条件覆盖。和条件覆盖。3.1.7条件组合测试条件组合测试p条件组合覆盖的基本思想是设计足够的测试用例,使得判断中每个条件的所有可能至少出现一次,并且每个判断本身的判定结果也至少出现一次。p它与条件覆盖的差别是它不是简单地要求每个条件都出现“真”与“假”两种结果,而是要求让这些结果的所有可能组合都至少出现一次所有可能组合都至少出现一次Zhu.K条件组合覆盖的测试用
20、例条件组合覆盖的测试用例条件组合覆盖条件组合覆盖包含包含前述前述4种覆盖。种覆盖。逻辑覆盖法各覆盖标准的包含关系逻辑覆盖法各覆盖标准的包含关系Zhu.K组合覆盖判断/条件覆盖判断覆盖条件覆盖语句覆盖3.1.8路径覆盖路径覆盖p顾名思义,路径覆盖就是设计所有的测试用例,来覆盖程序中的所有可能的执行路径。Zhu.KZhu.K路径覆盖的测试用例路径覆盖的测试用例路径覆盖实际上考虑了程序中各种判定结果的所有可能路径覆盖实际上考虑了程序中各种判定结果的所有可能组合,但它并未考虑判定中的条件组合。因此,虽然说组合,但它并未考虑判定中的条件组合。因此,虽然说路径覆盖是一种非常强的覆盖度量标准,但并不能代替路
21、径覆盖是一种非常强的覆盖度量标准,但并不能代替条件组合覆盖。条件组合覆盖。课堂练习课堂练习1void DoWork (int x,int y,int z) int k=0,j=0; if ( (x3)&(z5) ) j=x*y+10; /语句块语句块2 j=j%3; /语句块语句块3对上述程序试用逻辑覆盖法设计测试用例。对上述程序试用逻辑覆盖法设计测试用例。画出流程图画出流程图X3 & z5执行语句块执行语句块3FFTTabdce(1)语句覆盖测试用例语句覆盖测试用例n测试用例输入为: x=4、y=5、z=5 n程序执行的路径是:abdX3 & z5执行语句块执行语句块
22、3FFTTabdce(2)判定覆盖测试用例判定覆盖测试用例n要实现DoWork函数的判定覆盖,需要设计两个测试用例:测试用例的输入为: x=4、y=5、z=5; x=2、y=5、z=5程序执行的路径分别是:abd;aceX3 & z5执行语句块执行语句块3FFTTabdce(3)条件覆盖测试用例条件覆盖测试用例1对DoWork函数的各个判定的各种条件取值加以标记。对于第一个判定( (x3)&(z3 取真值记为T1,取假值记为-T1 条件z5) ): 条件x=4 取真值记为T3,取假值记为-T3 条件y5 取真值记为T4,取假值记为-T4(3)条件覆盖测试用例条件覆盖测试用例2对
23、DoWork函数的各个判定的各种条件取值加以标记。对于第一个判定( (x3)&(z3 取真值记为T1,取假值记为-T1 条件z5) ): 条件x=4 取真值记为T3,取假值记为-T3 条件y5 取真值记为T4,取假值记为-T4(4)判定判定/条件覆盖测试用例条件覆盖测试用例X3 & z5执行语句块执行语句块3FFTTabdce(5)条件组合覆盖测试用例条件组合覆盖测试用例组合覆盖的目的是要使设计的测试用例能覆盖每一个判定的所有可能的条件取值组合。对DoWork函数中的各个判定的条件取值组合加以标记: 1、x3, z3, z=10 记做T1 -T2,第一个判定的取假分支 3、x=
24、3, z10 记做-T1 T2,第一个判定的取假分支 4、x=10 记做-T1 -T2,第一个判定的取假分支 5、x=4, y5 记做T3 T4,第二个判定的取真分支 6、x=4, y5 记做-T3 T4,第二个判定的取真分支 8、x!=4, y3 & z5执行语句块执行语句块3FFTTabdce课堂练习课堂练习 2(1)语句覆盖测试用例语句覆盖测试用例(2)判定覆盖测试用例判定覆盖测试用例(3)条件覆盖测试用例条件覆盖测试用例(4)判定判定/条件覆盖测试用例条件覆盖测试用例(5)条件组合覆盖测试用例条件组合覆盖测试用例(6)路径覆盖测试用例路径覆盖测试用例3.1.9 基本路径测试基本
25、路径测试Zhu.Kv完成路径测试的理想情况是做到路径覆盖,但对于复杂性大的程序要做到所有路径覆盖(测试所有可执行路径)是不可能的。v在不能做到所有路径覆盖的前提下,如果某一程序的每一个独立路径都被测试过,那么可以认为程序中的每个语句都已经检验过了,即达到了语句覆盖。这种测试方法就是通常所说的基本路径测试方法。 基本路径测试并不是测试所有路径的组合,仅仅保证每条基本路径被执行一次3.1.9 基本路径测试基本路径测试依据代码绘制流程图确定流程图的圈复杂度(cyclomatic complexity )确定线性独立路径的基本集合( basis set )设计测试用例覆盖每条基本路径Zhu.K(1)控
26、制流图控制流图v控制流图(可简称流图)是对程序流程图进行简化后得到的,它可以更加突出的表示程序控制流的结构。v控制流图中包括两种图形符号:节点和控制流线。节点由带标号的圆圈表示,可代表一个或多个语句、一个处理框序列和一个条件判定框。控制流线由带箭头的弧或线表示,可称为边。它代表程序中的控制流。常见结构的流程图与控制流图常见结构的流程图与控制流图控制流图实例控制流图实例其中,包含条件的节点被称为判定节点判定节点(也叫谓词节点),由判定节点发出的边必须终止于某一个节点,由边和节点所限定的范围被称为区域区域5节点边区域2如何根据流程图得到控制流图?如何根据流程图得到控制流图
27、? 136258(a)程序流程图)程序流程图(b)控制流图)控制流图25836如何根据流程图得到控制流图?(续)如何根据流程图得到控制流图?(续) (a) (b)关于复合条件的处理关于复合条件的处理n如何画复合条件的控制流图 ?如何由源程序直接得到控制流图?如何由源程序直接得到控制流图?1main ()23 int num1=0, num2=0, score=100;4 int i;5 char str;6 scanf (“%d, %cn”, &i, &str);7 while (i 0 )n5 n6 If ( iType=0 )n7x=y+2;break;n8 elsen9
28、If ( iType=1 )n10 x=y+10;n11 elsen12 y=x+20;n13 n14 printf(“x=%d,y=%d”,x,y);基本路径测试案例基本路径测试案例1(续)(续)v画出控制流图: 467910121314void Sort ( int iRecordNum, int iType )1 2 int x=0;3 int y=0;4 while ( iRecordNum- 0 )5 6 If ( iType=0 )7x=y+2;break;8 else9 If ( iType=1 )10 x=y+10;11 else12 y=x+20;13 14 printf(“
29、x=%d,y=%d”,x,y);基本路径测试案例基本路径测试案例1(续)(续)计算环形复杂度: 10(条边)- 8(个节点)+ 2 = 4导出独立路径(用语句编号表示) 路径1:414 路径2:46714 路径3:46910134 路径4:46912134注:“”表示后面剩下的路径是可以选择的。原因在于存在循环结构。467910121314基本路径测试案例基本路径测试案例1 (续)(续)设计测试用例:设计测试用例:案例案例2下例程序流程图描述了最多输入50个值(以1作为输入结束标志),计算其中有效的学生分数的个数、总分数和平均值。开始 i =1,n1=n2=0,sum=0Score i -1
30、AND n20 AND scorei0average=sum/n1average= 1 返回FFFTTT12和345和6789101112123456789111012R1R2R3R4R5R6开始 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 返回FFFTTT12和345和6789101112步骤1:导出程序的流图。步骤2:确定环形复杂性度量V(G):1)V(G)= 6 (个区域)2)V(G)=EN+2=1612+2=6其中E为流图中的边数,N为结点数;3)V(G)=P+1=5+1=6 其中P为
31、谓词结点的个数。在流图中,结点2、3、5、6、9是谓词结点。123456789111012R1R2R3R4R5R6步骤3:确定基本路径集合(即独立路径集合)。于是可确定6条独立的路径:路径1:1-2-9-10-12路径2:1-2-9-11-12路径3:1-2-3-9-10-12路径4:1-2-3-4-5-8-2路径5:1-2-3-4-5-6-8-2路径6:1-2-3-4-5-6-7-8-2注: “”表示后面剩下的路径是可以选择的。原因在于存在循环结构。123456789111012R1R2R3R4R5R6步骤4:为每一条独立路径各设计一组测试用例,以便强迫程序沿着该路径至少执行一次。1)路径1
32、(1-2-9-10-12)的测试用例:不满足条件2,满足条件9 score1=60; score2=-1; 期望结果:根据输入的有效分数算出正确的分数个数 n 1 = 1 、 n 2 = 1 、 总 分s u m = 6 0 和 平 均 分average=60。n1:有效分数;n2:所有分数。开始 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 返回FFFTTT12和345和67891011122)路径2(1-2-9-11-12)的测试用例:不满足条件2,不满足条件9 score 1 = 1 ;
33、期望的结果:average = 1 ,其他量保持初值。开始 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 返回FFFTTT12和345和67891011123)路径3(1-2-3-9-10-12)的测试用例:满足条件2,不满足条件3,满足条件9输入多于50个有效分数,即试图处理51个分数期望结果:n1=50、且算出正确的总分和平均分。开始 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 返回FFFT
34、TT12和345和67891011124)路径4(1-2-3-4-5-8-2)的测试用例:满足条件2,满足条件3,不满足条件5 s c o r e 1 = - 0 . 5 ;s c o r e 2 = 6 0 , score3=-1 ;期望结果:根据输入的有效分数算出正确的分数个数n1=1、总分 s u m = 6 0 和 平 均 分average=60。开始 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 返回FFFTTT12和345和67891011125)路径5(1-2-3-4-5-6-8-2)的测试用例:满足条件2,满足条件3,满足条件5,不满足条件6 score1=101 score2=60, score3=-1 ; 期望结果:根据输入的有效分数算出正确的分数个数n1=1、总分sum=60和平均分average=60。开始 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 返回FFFTTT12和345和67891011126)路
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 会计事务所实习日记
- 会计人员培训心得体会
- 幼儿教育的教学随笔汇编12篇
- 关于销售类生产实习报告4篇
- 乡镇雪亮工程公共视频应用联网项目综合视频监控系统功能介绍
- 法律的作用(醉驾版)
- 2025年运载火箭控制系统仿真实时处理系统项目发展计划
- 《职场沟通》电子教案 项目六 职场面试沟通
- 商铺出租合同模板
- 杭州市房屋租赁合同
- 【9历期末】安徽省合肥市包河区智育联盟2023-2024学年九年级上学期1月期末历史试题
- 2024年度专业外语培训机构兼职外教聘任合同3篇
- 个人的车位租赁合同范文-个人车位租赁合同简单版
- 2025-2025学年小学数学教研组工作计划
- 水族馆改造合同
- 湖南省益阳市2022-2023学年高三上学期数学期末试卷
- 拌合站安全事故案例
- 《红色家书》读书分享会主题班会课件
- 2025年广东省春季高考数学仿真模拟试卷试题(含答案解析+答题卡)
- 新媒体运营工作年终总结
- 【MOOC】电子技术-北京科技大学 中国大学慕课MOOC答案
评论
0/150
提交评论