12软件工程2L.ppt
第12讲嵌入式软件工程化开发方法简介2,1.软件工程,2.软件开发模型,3.软件开发文档,4.软件开发方法,5.软件测试,6.软件质量特性和可靠性技术,软件测试,硬件的故障率曲线(浴缸曲线),软件的故障率曲线(理想情况下),软件的故障率曲线(实际情况下),软件开发工作量分配比例,40%50%,10%20%,费用分配比例,55%70%,0 引子,软件测试:成也萧何,败也萧何美国航天飞机研制成功 IBM的软件系统功不可没阿丽亚娜5运载火箭首次飞行失败?软件错误是失败的重要原因,0 引子,正反两个例子中的共同因素美国航天飞机飞行软件研制总结:认真实施软件工程特别加强软件检测阿丽亚娜5飞行故障调查报告:“信息的丢失是由于SRI(备份惯性参考系统)软件中技术指标和设计错误引起的。.测试能查出潜在的故障。,软件测试,软件测试的重要性软件测试的基本概念软件测试的工作内容软件测试的基本技术和策略软件测试阶段软件测试流程怎样做好软件测试,1 软件测试的重要性,1.1 粗劣的软件测试可怕的后果系统不能完成任务早期星球大战计划中,对空防御系统曾把月亮当成洲际导弹目标来攻击火星探测运载火箭因控制程序中错写逗号而爆炸残留错误的影响从电话拨号无响应到系统崩溃使软件开发周期延长,费用增加商业影响,如果没有充分地进行软件测试,可能会:,明天全面发布新软件!,啊!?,而系统运行时又可能这样:,千万别掉下去!,1.2 现代航天系统要求 高、精、尖系统自动化程度不断提高系统规模更大系统复杂性更高微小的错误可能导致灾难性结果大量的嵌入式软件应用,1 软件测试的重要性,1.3 当前的软件开发方法免疫力低软件是一种特殊的产品开发方法学因素人不能避免犯错误软件开发工具不完备,1 软件测试的重要性,1.4 有限的系统开发资源时间、金钱,1 软件测试的重要性,测试和集成 45%,编码 20%,需求 10%,规格说明 10%,设计 15%,1.5 软件测试保证软件质量的重要手段系统的、严密的软件测试能最大限度的发现软件中的错误,减少软件中残留的错误通过软件测试可以验证软件功能、性能、容量、约束、限制等指标满足规定的需求软件可靠性测试可得到软件可靠性指标软件测试为软件质量定量评定提供依据高层次的软件测试可以发现系统级错误,1 软件测试的重要性,1.6 软件测试 不是“芝麻,开门!”完全的软件测试是不现实的软件测试不能保证发现软件中所有的错误软件测试不能取代其它质量保证手段软件测试:巨大的效益和艰苦的工作并存,1 软件测试的重要性,一个例子程序#include main()int a,b,c;scanf(?d,%d?,1 软件测试的重要性,一个例子分析在计算机语言中,任何预定义的类型都是有值域的,在计算中应避免变量的取值超出其类型规定的值域,C的值域应超过A、B的值域。更深一层考虑,应该有全面、准确、严格的需求规格说明,这是设计、编程、测试正确进行的基础。,1 软件测试的重要性,软件测试,软件测试的重要性软件测试的基本概念软件测试的工作内容软件测试的基本技术和策略软件测试阶段软件测试流程怎样做好软件测试,2 软件测试的基本概念,2.1 GB/T 11457-1995 的定义由人工或自动方法来执行或评价系统或系统部件的过程,以验证它是否满足规定的需求;或识别出期望的结果和实际结果之间有无差别.,2 软件测试的基本概念,2.2 软件测试认识的变迁和发展历史上的一些错误认识测试和调试没有什么区别,除了支持调试外,测试没有别的目的(错误)测试的目的在于证明软件正确(错误)当前软件测试工作中的认识测试的目的在于证明软件错误(实际)测试的目的不是证明任何事情,仅是为了将已察觉的故障的风险程度减小到一个可接受的值(度量)测试是检验软件是否满足规定的需求(全面),软件测试认识的变迁和发展(续)软件测试的发展方向工具化:测试用例自动化专业化,2 软件测试的基本概念,2.3 Myers的测试原则尽早地和不断地进行测试程序员应避免测试自己编写的程序测试实例=输入数据+预期结果测试集=期望(有效)输入+不期望(无效)输入测试程序=它做该做的事+它不做不该做的事一段程序中存在错误的概率与在这段程序中已发现的错误数成比例全面检查每一个测试结果测试是一项具有很大创造性的工作,2 软件测试的基本概念,2 软件测试的基本概念,2.4 软件测试的独立性原则软件测试工作最好由独立于开发队伍的组织进行2.5 软件测试的完成准则完成测试计划规定的测试项使用规定的测试用例设计方法查出一定数目的错误标出单位时间查出的错误量,进行曲线分析某一测量值达到预期目标(如可靠性测试)考查测试充分性,2.6 软件测试的分类按测试对象:单元部件配置项系统按实施步骤:单元组装确认系统按实现技术:静态/动态,黑盒/白盒按测试完整性:程序结构和输入域覆盖按测试专题:功能测试,性能测试,可靠性测试安全性测试,强度测试,安装测试,恢复测试,余量测试,2 软件测试的基本概念,软件测试的的对象和步骤分类,2 软件测试的基本概念,部件,单元,单元,单元,单元,部件,配置项,配置项,系统,组装,确认,系统,单元,Shooman 按测试完整性的分类表 测试类型?主要成分 特点 0 完全性和连续性检查 100%语句覆盖 1 图路径测试 100%图路径覆盖 2 程序路径测试 100%程序路径覆盖 3 穷举测试 对输入参数的所有 值执行所有程序路径 4 穷举测试 比3 更强的穷举测试,包括输入序列的组合,2 软件测试的基本概念,2.7 软件测试工程化软件生命周期软件测试方法软件测试规程软件测试文档软件测试工具,2 软件测试的基本概念,软件测试,软件测试的重要性软件测试的基本概念软件测试的工作内容软件测试的基本技术和策略软件测试阶段软件测试流程怎样做好软件测试,3 软件测试的工作内容,3.1 软件测试管理测试组织 一般在小组内进行组装测试;组织单位内、外部的独立测试;建立专门的测试机构进行测试技术支持,开展独立测试在小组内进行静态分析、单元测试、自测、互测;建立有效的多层次评测体系。使用不同层次的测试手段和组织方式;在软件开发组中指定专人负责软件测试。(加关键等级图),3 软件测试的工作内容,软件测试管理(续)测试控制 a.进行测试计划评审、测试报告评审;b.测试实施的监督:测试用例获取和测试结果 的真实性资源管理 a.软件工程全过程中,测试及独立测试进 度及测试顺序安排;b.人员落实,经费落实;c.测试设备及工具管理,技术培训,3 软件测试的工作内容,软件测试管理(续)测试文档管理 a.纳入一般配置管理;b.问题报表制 问题报告更改申请修改报告回归测试;c.支持回归测试:保证与测试有关的文档被维护以 允许测试的可重复性。,3 软件测试的工作内容,3.2 制定软件测试规范、规程、操作及技 术指南等软件测试文件3.3 软件测试实施制订测试计划产生测试用例集建立测试环境,执行测试评价测试工作和被测软件编制完整的测试文档:测试计划、测试说明和测试报告,3 软件测试的工作内容,3.4 软件测试技术研究一般测试技术提供基本功能,解决基本问题,广泛的通用性。专项软件测试技术特定的软件特征、运行环境、运行方式、实现细节。如:嵌入式软件测试、网络应用软件。工程型号软件测试技术很强的专业背景,高可靠性、高安全性要求。如:飞控软件测试、故障检测软件测试3.5 软件测试工具和测试环境开发,软件测试,软件测试的重要性软件测试的基本概念软件测试的工作内容软件测试的基本技术和策略软件测试阶段软件测试流程怎样做好软件测试,4 软件测试基本技术和策略,4.1.1 静态测试概念不必动态地运行程序发挥人的优势,行之有效不需特定条件,容易开展4.1.2 静态测试具体技术代码走查代码审议技术评审桌面检查自动的静态分析,4.1 静态测试,4 软件测试基本技术和策略,4.1.2.1 代码走查手工进行,以走查小组形式进行考查程序的逻辑给出输入和预期输出当实际输出和预期输出不等时,发现错误4.1.2.2 代码审议代码评估逐行检查代码,以审议小组形式进行使用“代码检查单”,4 软件测试基本技术和策略,4.1.2.3 技术评审综合运用走查和审议技术逐页、逐节检查文档对需求、结构或设计等方面提出问题4.1.2.4 桌面检查软件编制者自我检查效果不如以小组形式进行的评审或审议,4 软件测试基本技术和策略,int func()int sum,i;for(i=0;i100;i+)sum=sum+i;return(sum);,4.1.2.5 自动的静态分析引用分析接口分析表达式分析引用分析的例子sum 未初始化就引用,4.2.1 动态测试概念使用测试用例运行程序取得程序运行的真实情况生成测试用例、分析测试结果工作量大动态测试的关键在选择测试用例主要包括黑盒测试和白盒测试,4 软件测试基本技术和策略,4.2 动态测试,4.2.2 测试数据选择是动态测试的核心问题特定的测试数据只能运行程序的某些片段要保证测试的充分性黑盒测试和白盒测试实际上是测试数据选择的两类方法基本方法,4 软件测试基本技术和策略,4.2.2.1测试数据选择测试的充分性覆盖度量语句覆盖 最基本的,要求100%单元和部件测试中分支覆盖 分支的各方向都得到执行路径覆盖 每一条路径至少执行一次 特定的路径得到执行 单元测试中,4 软件测试基本技术和策略,已运行语句数 全部语句数,测试数据选择测试的充分性错误播种在程序中插入已知数量的错误考查其中多少被发现变异测试一类中的变异程序都被分离例如算法变异:原始形态 变异形态 A=B+C A=B-C A=B*C A=B/C,4 软件测试基本技术和策略,测试数据选择测试的充分性(续)测试直至发现的错误降到规定的指标无错运行的测试数量达到规定的指标.,4 软件测试基本技术和策略,黑盒测试和白盒测试实际上是测试数据选择的两类方法基本方法,4.2.3 黑盒测试和白盒测试黑盒测试像中医:使用望、闻、问、切白盒测试像西医:使用X光、CT扫描目的都是发现病人的病症,P,IN,OUT,4 软件测试基本技术和策略,白盒测试:,黑盒测试:,4.2.4 黑盒测试:不涉及程序结构,把程序看成黑盒子用程序规格说明生成测试用例某些代码段得不到测试可适用于从单元测试到系统测试需要用白盒测试加以补充,4 软件测试基本技术和策略,4.2.4.1 黑盒测试内容?一般包括:功能测试边界测试强度测试随机测试,4 软件测试基本技术和策略,4.2.4.1.1 黑盒测试功能测试是最常见的注重检查是否按规格需求提供了功能对每一项功能进行测试确保功能得到实现并不保证功能总是正确的:各种情况是最基本的测试工作,4 软件测试基本技术和策略,4.2.4.1.2 黑盒测试边界测试是对功能测试的补充注重检查对边界值或异常值的处理4.2.4.1.3 黑盒测试强度测试在处理能力的极限测试4.2.4.1.4 黑盒测试随机测试 测试输入数据随机产生,4 软件测试基本技术和策略,4.2.4.2 黑盒测试方法具体测试用例设计方法 基于功能点 等价类划分 边值分析 因果图法 猜错法 随机数据选取,两个整数输入情况说明:,2,16,2,16,=4,294,967,296,如果每秒种完成一次测试,即包括输入,计算,输出,比对,那100年才能做完,4 软件测试基本技术和策略,4.2.4.2.1 黑盒测试基本功能点是最基本的测试用例集把每一项规格需求的功能作为测试点必要时进行功能的分类和分解注重考查“程序该做的”通常是不充分的需要一个完整、准确、严格的需求,4 软件测试基本技术和策略,4.2.4.2.2 黑盒测试等价类划分是全面考查程序输入域的方法把程序的输入域划分成若干部分,然后从每个部分选取少数代表性数据当作测试用例,这样我们用少数测试用例检验了程序在一类情况下的反应。,4 软件测试基本技术和策略,4.2.4.2.3 黑盒测试边值分析是重点考查程序的边界情况处理所选的测试数据总是在输入域(或输出域)、数据结构、过程参数等的边界或端点,因而常常包括最大值、最小值、临界值等。是对基本功能点和等价类划分的有力补充,4 软件测试基本技术和策略,4.2.4.2.4 黑盒测试因果图法是一种系统的测试用例设计方法针对那些在功能说明书中含有输入组合的情况检查程序是否有错因果图法需建立因果图、判定表,工作量较大,但它考虑到输入的各种组合及各输出条件可能出错的多种情况,对复杂的问题十分有效,4 软件测试基本技术和策略,4.2.4.2.5 黑盒测试猜错法充分发挥人们编程的经验和专业领域知识4.2.4.2.6 黑盒测试随机数据选取在输入域中随机选取测试数据自动化程度高,数据生成方便,选取的数据往往出人意料,是需要长时间运行程序以达到考查目的的测试中较多使用的方法有新的发展,4 软件测试基本技术和策略,4.2.5 白盒测试也叫“玻璃盒”测试,看得见程序内部考查程序逻辑结构发现软件设计和实现间的差异在黑盒测试后发现没有被测试到的部分用程序结构信息生成测试用例构造测试用例使特定程序部分得到运行通常适用于单元测试一般有控制流分析和数据流分析方法,4 软件测试基本技术和策略,4.2.5.1 白盒测试控制流分析语句覆盖:最基本的,要求100%分支覆盖:分支的各方向都得到执行路径覆盖:特定的路径得到执行错误处理路径覆盖:错误处理得到执行,4 软件测试基本技术和策略,控制流分析示例int func(int A,int B,int X)if(A1,4 软件测试基本技术和策略,A1andB=0,A=2 or x1,x=x/A,YES,NO,x=x+1,YES,NO,a,b,c,d,e,控制流分析示例执行路径和输入取值表 路径 A B Xabd 1 1 1acbd 4 0 4aced 2 0 2abed 2 1 2,4 软件测试基本技术和策略,A1andB=0,A=2 or x1,x=x/A,YES,NO,x=x+1,YES,NO,a,b,c,d,e,4.2.5.2 白盒测试数据流分析针对程序中数据加工进行考查在控制流路径上数据处理的正确性全定义使用路径全定义路径全使用路径状态迁移合法性,4 软件测试基本技术和策略,数据流分析的一个例子 START READ P,E D=1 X=0 C=2*P IF C=2 THEN GOTO D A IF D=E THEN GOTO C D=D/2 T=C-(2*X+D),4 软件测试基本技术和策略,IF T0 THEN GOTO B X=X+D C=2*(C-(2*X+D)GOTO AB C=2*C GOTO AC PRINT X STOPD PRINT 慐RROR STOP,4 软件测试基本技术和策略,1,2,3,5,6,7,4,READ P,E D=1 X=0 C=2*P,C=2,C2,D=E,DE,PRINT 慐RROR,PRINT X,C=2*C,T0,T=0,D=D/2T=C-(2*X+D),X=X+DC=2*(C-(2*X+D),在控制流图上考查数据流,4 软件测试基本技术和策略,全路径,全定义使用路径,全使用路径,全C使用/部分P使用路径,全P使用/部分C使用路径,全定义路径,全P使用路径,图全边,图全节点,覆盖准则强度比较,4 软件测试基本技术和策略,状态迁移合法性检查,d-定值k-消除u-使用K-无定值,先消除D-定义但未使用U-已使用A-异常,k,d,u,k,d,d,k,u,u,k,u,d,K,U,D,A,4 软件测试基本技术和策略,4.3 集成测试策略非渐增式和渐增式,4.3.1 非渐增式测试 是一种“旧式”的测试策略 也称为“Big-Bang斆膊馐 单独测试每一个单元需要桩程序和驱动程序桩(stub):模拟被调用程序,返回需要的结果驱动器(driver):调用被测程序,给出测试数据 最后把所有的单元集成为系统 单元间的接口问题直到系统集成结束才能发现容易造成混乱,错误不易隔离,4 软件测试基本技术和策略,4.3.2 渐增式测试 自顶向下方法 自底向上方法 改进的自顶向下方法“三明治”方法 改进的“三明治”方法,4.3.2.1 渐增式测试自顶向下 顶层模块 单独测试 自顶向下 进行合并 开发桩程序(未集成进来的单元)测试当前系统部件 集成下一层 较早看见系统全貌 不必开发驱动程序 需要开发桩程序 生成测试用例困难,4 软件测试基本技术和策略,Stub,Stub,Stub,1,2,4 软件测试基本技术和策略,4.3.2.2 渐增式测试自底向上 只有底层模块 单独测试 模块自底向上 集成和测试 开发驱动程序(未集成进来的单元)测试当前系统部件 集成下一层 关键单元较早测试 不必开发桩程序 最后看见系统全貌 需要开发驱动程序,Driver,Driver,1,2,4 软件测试基本技术和策略,4.3.2.3 渐增式测试改进的自顶向下方法在集成前测试每一个模块可以测试逻辑条件每一个模块都需要桩和驱动4.3.2.4 渐增式测试“三明治”方法 平行使用自顶向下和自底向上方法根据程序结构选择汇合点4.3.2.5 渐增式测试改进的“三明治”方法自底向上和改进的自顶向下结合是最好的集成测试策略之一,4.4 多层过滤测试方法完整的软件测试是分几个层次完成的计算机软件单元(CSU)测试(单元)计算机软件部件(CSC)测试(组装)计算机软件配置项(CSCI)测试(确认)系统测试体现了尽早地不断地测试的原则从各阶段全面地检查程序每一层有自己发现错误的优势符合系统构造从部分逐步到整体的规律,4 软件测试基本技术和策略,多层过滤测试方法(续)多层过滤测试方法的效果,如果一轮手工的代码审议95%的整体分支覆盖90%的调用对覆盖98%的自动回归测试50%的关键模块和/或易错模块路径覆盖则会达到:,4 软件测试基本技术和策略,4 软件测试基本技术和策略,每1000行程序代码所包含的错误数,没有进行5层过滤测试,20,进行5层过滤测试,0.2,from Edward F.Miller,4 软件测试基本技术和策略,软件与系统接口,需求分析,概要设计,详细设计,编 码,单元测试,部件测试,配置项测试,系统测试,多层过滤测试与开发前期工作的关系,4.5 按软件关键等级确定测试策略,4 软件测试基本技术和策略,测试类型,静态分析,单元测试,部件测试,配置项测试,可靠性测试,强度测试,系统测试,内部,内部,内部,正式,正式,正式,A,B,C,D,软件关键性级别,4.6 嵌入式软件测试嵌入式软件测试的特点嵌入式软件测试的基本技术嵌入式软件测试环境,4 软件测试基本技术和策略,4.6.1嵌入式软件测试特点嵌入式软件运行难于监测嵌入式软件需要实时运行嵌入式软件运行需要特殊外部设备嵌入式软件运行有时是交互的嵌入式软件测试是一类最难的测试,4 软件测试基本技术和策略,4.6.2 嵌入式软件测试基本技术交叉编译指令模拟在线模拟外部设备仿真可控制时间特性的运行环境全数字模拟目标硬件环境的数字模拟目标数据环境的数字模拟,4 软件测试基本技术和策略,4 软件测试基本技术和策略,4.6.3 全数字模拟技术的目的和意义在不具备硬件目标环境时用软件提供尽可能真实的模拟目标环境提供更可控的运行环境使软件调试、测试可以和硬件开发并行进行,4.6.4 嵌入式软件测试环境全实物试验台半实物仿真试验台半实物测试台全数字模拟测试台嵌入式软件开发环境,4 软件测试基本技术和策略,真实性下降,可控性上升,软件测试,软件测试的重要性软件测试的基本概念软件测试的工作内容软件测试的基本技术和策略软件测试阶段软件测试流程怎样做好软件测试,5 软件测试阶段,多层过滤测试方法计算机软件单元(CSU)测试(单元)计算机软件部件(CSC)测试(组装)计算机软件配置项(CSCI)测试(确认)系统测试多层过滤测试方法实际使测试分成阶段在更动后进行回归测试,5 软件测试阶段,软件测试阶段图,单元,单元,单元,单元,单元测试,单元测试,单元测试,单元测试,部件测试,配置项测试,系统测试,已测单元,组装的,软件,确认的,软件,设计信息,软件需求,其它系统元素,5.1 计算机软件单元测试特点a.相当于硬件设备板级部件的检验b.对详细设计说明书负责c.有条件进行较细致的白盒测试组织 在开发组内,可交叉进行。,5 软件测试阶段,计算机软件单元测试内容 a.功能测试 b.重要的执行路径测试 c.局部数据结构 d.错误处理测试 e.影响上述 各条的边界条件 f.语句覆盖测试,分支覆盖测试,5 软件测试阶段,计算机软件单元测试要求 a.语句覆盖100%b.分支覆盖 c.软件特性覆盖方法 a.黑盒(功能、边界、随机)b.白盒(控制流/数据流)c.使用驱动/桩程序 d.某些工具支持,5 软件测试阶段,5.2 计算机软件部件测试特点 a.相当于硬件设备的功能模块测试 b.对概要设计说明书负责 c.是发现和改正模块接口错误的重要阶段 d.是验证系统功能增长正确性的阶段组织 一般在开发小组内部进行,5 软件测试阶段,计算机软件部件测试内容a.单元间的接口测试b.部件的功能测试c.全局数据结构测试d.部件的运行时间、运行空间、计算精度测试e.边界和在人为条件下的性能,5 软件测试阶段,计算机软件部件测试要求 a.调用时100%覆盖 b.错误处理能力测试 c.采用增量测试法,5 软件测试阶段,计算机软件部件测试方法 自顶向下 增量 自底向上 集成方法“三明治”非增量:Big-Bang莽撞测试,5 软件测试阶段,计算机软件部件测试方法 调用对覆盖 接口测试 定义域测试 软件部件测试 数据流测试 白盒 部件功能测试 黑盒 I/O,5 软件测试阶段,5.3 计算机软件配置项测试特点 a.对软件需求规格说明负责 b.对完整软件功能和性能的总体测试 c.相当于硬件设备成品检验组织 独立测试方式,5 软件测试阶段,计算机软件配置项测试内容功能测试 安全性测试性能测试 恢复性测试界面测试 边界测试强度测试 功能多余物测试余量测试 安装性测试可靠性测试,5 软件测试阶段,计算机软件配置项测试要求 a.有用户参加确认测试 b.采用独立测试方式 c.测试环境符合要求方法 a.功能特性分析及确定测试特性 b.黑盒测试方法、状态/转换测试等一般方法 c.仿真/模拟测试,5 软件测试阶段,5.4 系统测试特点 a.对系统/子系统任务书负责 b.是软件加入真实系统的阶段 c.强调测试软件在大系统中的表现 d.测试的内容和整个系统构成密切相关组织 由软件配置项上级系统组织,软件开发和 测试人员协助、参加,5 软件测试阶段,系统测试内容(从软件角度)系统功能测试 系统安全性测试系统性能测试 系统恢复性测试系统接口测试 系统边界测试系统强度测试 系统敏感性测试系统余量测试 系统可靠性测试,5 软件测试阶段,系统测试要求 a.加强技术状态管理(软件配置管理)b.加强测试环境数据记录 c.符合系统有关规定 d.从软件测试角度给出一些系统运行实例方法 a.运行测试 b.情景测试 c.半实物仿真试验 d.系统综合匹配试验,5 软件测试阶段,5.5 回归测试软件更动后重新进行的测试既要测试更动部分,也要测试受影响部分中心在决定哪些测试必须被重复关键是保证测试工作的“可重现性”编程测试发现错误更动回归测试,5 软件测试阶段,回归测试方法重复原先所有的测试确定并运行标准测试集进行系统级功能测试测试新功能,并人工判别需重复的测试使用回归测试辅助工具捕获和释放工具测试用例管理工具/测试管理工具,5 软件测试阶段,软件测试,软件测试的基本概念软件测试的重要性软件测试的工作内容软件测试的技术和策略软件测试阶段软件测试流程怎样做好软件测试,软件测试流程制订测试计划产生测试集执行测试评价测试工作和被测软件 在测试工作中应产生完整的测试文档:测试计划、测试说明和测试报告正式测试中这三份文档应得到评审,6 软件测试流程,软件测试信息流,6 软件测试流程,测试,评估测试结果,排错,建立可靠性模型,软件配置,测试配置,测试工具,测试结果,预期结果,错误,出错率,预计的软件可靠性,修正的软件,6.1 制订测试计划输入:软件需求规格说明、用户手册、操作手册、运行环境资料。任务:确定测试活动的范围,测试方法、进度、资源、功能验证的实施步骤,各级测试的详细规程、软件验收标准、测试报告和处理方法。输出:软件测试计划、测试支持资源需求(工具/环境)。,6 软件测试流程,6.2 产生测试用例集输入:软件测试计划、软件结构设计文档、测试支持资源需求任务:根据被测试特性,设计测试用例集结构,为每一测试用例决定软件输入输出和控制方式(人工、半自动、自动)并控制相应的测试规程、获得并验证所需要的测试数据。输出:测试设计说明、测试规程说明、测试用例说明(也可以合并为测试说明)。,6 软件测试流程,6.3 执行测试输入:测试设计说明、测试规程说明、测试用例说明、软件数据结构描述、测试项、测试支持资源任务:按测试规程执行测试用例,决定测试通过或失败,如果通过则进行评价,否则根据错误情况重新运行测试或修改软件设计、编码或文件的有关部分,然后再重新进行测试。输出:测试结果描述、错误描述、其它执行信息、修订后的测试说明,6 软件测试流程,6.4 评价测试工作和被测软件输入:测试结果描述、错误描述、其它执行信息、修订后的测试说明任务:依照评价准则,评价测试工作和被测软件,当发现测试工作不足时,应修订测试计划,重复制定计划开始的工作,直到测试完备时止。输出:测试总结报告,6 软件测试流程,6.5 软件生命周期和软件测试工作,系统测试,软件配置项测试,部件测试,需求,计划,计划,计划/设计,设计,设计,无,测试,执行,执行,执行,用例/规程,用例/规程,用例/规程,设计,实现,6 软件测试流程,测试,阶段,计划/设计,用例/规程 执行,单元测试,无,无,软件测试,软件测试的基本概念软件测试的重要性软件测试的工作内容软件测试的技术和策略软件测试阶段软件测试流程怎样做好软件测试,7 怎样做好软件测试,思想重视,加强管理抓住主要环节,带动普遍提高充分利用现有技术手段,不断提高技术水平遵循软件测试的基本原则,7 怎样做好软件测试,7.1 思想重视,加强管理从上级领导到工程人员,人人重视软件测试实施软件工程是搞好软件测试的基础鼓励单位内部、外部的独立测试建立完善的测试规程,有效的多层次评测体系加强软件配置管理组织保证:软件开发小组中有专人负责软件测试工作加强阶段评审(测试文档评审),7 怎样做好软件测试,7.2 抓住主要环节,带动普遍提高加强软件工程标准、规范的贯彻在原软、硬件综合测试基础上加强软件配置项测试单元测试是整个测试工作的基础充分发挥静态分析的优势和作用系统测试应从软件角度考虑一些测试情况(初步)定量描述软件测试的充分性加强关键性级高的软件测试加强测试计划的编制与评审,7.3充分利用现有技术手段,不断提高技术水平认真开展“代码检查单(CheckList)”的收集、编写利用工具开展白盒测试开发、使用具有工程应用背景测试平台建立专门的测试认证机构,解决共性问题,提 供技术支持,开展独立测试做好预研工作,解决测试数据生成,测试结果 自动分析等关键问题积极和专业厂、所协作,7 怎样做好软件测试,7.4 管理保证必须为软件测试提供较多的时间、人力等支持软件测试是创造性劳动,应予以充分肯定7.5 遵循软件测试的基本原则,7 怎样做好软件测试,8 软件测试工具,8.1 软件测试工具分静态和动态两大类:静态测试工具 代码审查数据流分析 一致性检查?错误检查 交叉索引 类型分析 接口分析 单元分析 输入输出规格说明分析动态测试工具 覆盖分析 计时 跟踪 资源利用 调谐 符号执行 模拟 断言检查,8.2 软件测试辅助工具测试驱动器:提供驱动程序和桩程序比较器:支持回归测试、处理测试数据8.3 软件测试工具还包括测试用例生成器8.4 软件测试环境软件测试所需的一组软件工具、固件和硬件的集合,8 软件测试工具,软件质量特性和可靠性技术,软件质量特性,功能性可靠性易使用性效率可维护性可移植性,软件质量子特性,精确性健壮性安全性通信有效性执行有效性设备有效性操作性培训性完备性一致性可追踪性,可见性硬件系统无关性软件系统无关性可扩充性文档完备性公用性清晰性模块性自描述性简单性结构性,软件质量特性/子特性关系,功能性-完备性、致性、可追踪性可靠性:精确性、健壮性、安全性易使用性:操作性、培训性、文档完备性效率:通信有效性、执行有效性、设备有效性可维护性:一致性、可见性、文档完备性、清晰性、模块性、自描述性、简单性、结构性可移植性:硬件系统无关性、软件系统无关性、可扩充性、公用性、清晰性、模块性、自描述性,软件可靠性技术,算法模型化:将可以保证实现需求规格说明的算法模型化模拟模型化:为保证在一定资源条件下预定性能的实现,将软件运行时间、内存使用量、执行控制等模型化程序正确性证明:使用形式化的符号和数学方法,证明程序的正确性,软件可靠性技术,N个版本的程序设计方法:从同一个需求规格开始,由N个独立的CSCI组同时开发;从N个版本的执行结果的不同点,寻找整体的一致性容错设计:使软件具有抗故障的功能软件风险分析及故障树分析:从设计或编码的结构开发,追踪软件开发过程中潜入系统错误的原因。,软件可靠性技术,划分接口的规格说明:在设计中,作好接口规格说明,以验证划分接口的实现可能性和完全性可靠性模型:使用软件可靠性模型,从软件故障发生的频度出发预测可靠性,关于程序上载,硬件设计:可写入的芯片(如flash)系统写入的条件冗余策略用于加载的调度程序必须可靠,软件设计:,输入策略一次能接受上载的能力(测控分配)每次拼接的策略(若接收不连续,传输标准)差错控制(校验码)解析策略功能码及一系列标识定义,存储策略存储区定义和分配存储区校验执行策略全部校验正确后置可用标志(并下行其状态)可根据上行指令确定是否可执行,简单应用:(易实现、可靠性高),作为已定义的可调用模块(原代码可为空操作)可临时调用的模块(根据注入指令),定义注入序列:,如:指令类型码 数据长度 放置区域 内容.校验码 结束码,谢谢!,