资源预览内容
第1页 / 共92页
第2页 / 共92页
第3页 / 共92页
第4页 / 共92页
第5页 / 共92页
第6页 / 共92页
第7页 / 共92页
第8页 / 共92页
第9页 / 共92页
第10页 / 共92页
亲,该文档总共92页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
软件工程基础软件工程基础19.1 软件及软件工程软件及软件工程21、软件的概念、软件的概念软件包括软件包括程序、数据程序、数据及其及其相关文档相关文档的完整集的完整集合。合。程序程序 是完成特定功能和满足性能要求的指令是完成特定功能和满足性能要求的指令序列。序列。数据数据 是程序执行允许的基础和操作的对象。是程序执行允许的基础和操作的对象。文档文档 是与程序开发、维护和使用有关的图文是与程序开发、维护和使用有关的图文材料。材料。特点:复杂性、不可见性与不断变化性特点:复杂性、不可见性与不断变化性32、软件危机、软件危机软件危机软件危机是指在计算机软件的开发、使用与维护过程中所遇到的一系列严重问题和难题;这些问题和难题不仅仅存在于不能正常运行的软件中,几乎所有的软件都不同程度的存在这些问题。 4软件危机的表现软件危机的表现1)软件开发成本和维护成本常常)软件开发成本和维护成本常常高出预算高出预算。2)软件开发进度远远)软件开发进度远远长于计划进度长于计划进度。3)软件开发设计完成并交付使用运行后,却)软件开发设计完成并交付使用运行后,却发现并不能满足或实现用户的实际需求。发现并不能满足或实现用户的实际需求。4)软件产品的)软件产品的质量不能保证质量不能保证,用户在使用过,用户在使用过程中经常出现问题和故障。程中经常出现问题和故障。5)没有完整的软件技术文档资料,使软件的)没有完整的软件技术文档资料,使软件的运行维护面临重重困难。运行维护面临重重困难。6)软件开发生产速度和效率的提高远远不及)软件开发生产速度和效率的提高远远不及用户对软件发展的需求。用户对软件发展的需求。 5软件危机的典型事例软件危机的典型事例20世纪世纪80年代初年代初l美国美国Sperry公司为国税局开发公司为国税局开发联邦税收表格联邦税收表格自动处理系统自动处理系统系统第一次交付运行后,华盛顿邮报称:该系统系统第一次交付运行后,华盛顿邮报称:该系统并不称职,却花费了双倍于预期的费用,而且必并不称职,却花费了双倍于预期的费用,而且必须尽快有新系统来代替他。须尽快有新系统来代替他。1985年年l在已经花费了在已经花费了10300万美元的基础上,万美元的基础上,Sperry又追加了又追加了9000万美元的设备费用投入。万美元的设备费用投入。l系统错误导致国税局无法如期退税,国税局因此增加系统错误导致国税局无法如期退税,国税局因此增加了了4020万美元的利息支出。万美元的利息支出。l工作人员为此大量加班,国税局为此额外支出工作人员为此大量加班,国税局为此额外支出2230万万美元的加班工资。美元的加班工资。1996年年l洛杉矶时报(洛杉矶时报(3月月29日)称:国税局至今仍无有力的日)称:国税局至今仍无有力的信息化建设计划,只有一个六千页的技术文档而已信息化建设计划,只有一个六千页的技术文档而已l国会议员国会议员 Jim Lightfoot 将此项目称为将此项目称为“一个因规划一个因规划不利而痛苦挣扎的不利而痛苦挣扎的40000亿美元的败笔亿美元的败笔”6典型问题典型问题90年代,年代,IBM公司负责开发的公司负责开发的“OS/360系统系统”l包括包括4000个模块个模块l约约100万条指令万条指令l花费了花费了5000人年的工程量人年的工程量l经费达数千万美元经费达数千万美元l结果却失败了结果却失败了 7典型问题典型问题1996年年6月,美国月,美国Ariane 5火箭在升空火箭在升空37秒后爆秒后爆炸;直接损失炸;直接损失70亿美元亿美元l原因是浮点数转换为整数时,发生溢出而程原因是浮点数转换为整数时,发生溢出而程序系统没有做相应的异常处理序系统没有做相应的异常处理1991年海湾战争时,因程序的累加计时器设计年海湾战争时,因程序的累加计时器设计错误,导致一枚导弹误伤了在沙特地区的错误,导致一枚导弹误伤了在沙特地区的28名名美国士兵性命的事故美国士兵性命的事故8典型问题典型问题2003年年8月月12日爆发的日爆发的“冲击波冲击波”病毒,瞬间导致全球范围病毒,瞬间导致全球范围内数以亿计的计算机中毒内数以亿计的计算机中毒全球有全球有40万台主机被感染;全国有几十万台计算机被感染;万台主机被感染;全国有几十万台计算机被感染;直接损失为几十亿美元直接损失为几十亿美元追究其根本原因,病毒中有一段文字最能说明问题:追究其根本原因,病毒中有一段文字最能说明问题:“比比尔尔盖茨,你为什么要暴露这样的漏洞?别光顾着挣钱了,盖茨,你为什么要暴露这样的漏洞?别光顾着挣钱了,好好收拾你的软件吧。好好收拾你的软件吧。”之后,微软逐步加快了系统漏洞检测和补丁发布的速度之后,微软逐步加快了系统漏洞检测和补丁发布的速度9问题的原因归结为软件危机问题的原因归结为软件危机出现问题的根本原因统一归结为出现问题的根本原因统一归结为“软件危机软件危机”以上是软件危机的典型事例以上是软件危机的典型事例这样的问题举不胜举这样的问题举不胜举“软件危机软件危机”表现在软件应用的许多方面表现在软件应用的许多方面10解决软件危机的途径解决软件危机的途径从观念上端正认识从观念上端正认识从技术上建立规范从技术上建立规范从组织上完善管理从组织上完善管理11从技术和管理上解决的途径从技术和管理上解决的途径借鉴成熟的工程思想;把工程领域中行之有效的工程借鉴成熟的工程思想;把工程领域中行之有效的工程学知识运用到软件开发工作中来学知识运用到软件开发工作中来即将即将“工程化工程化”思想导入软件的开发生产思想导入软件的开发生产“工程化工程化”的基本思想就是用工程、科学和数学的原的基本思想就是用工程、科学和数学的原则和方法,来开发、维护计算机软件的有关技术和管则和方法,来开发、维护计算机软件的有关技术和管理软件开发的组织活动理软件开发的组织活动于是,开创了计算机科学技术的一个新的研究领域于是,开创了计算机科学技术的一个新的研究领域123、软件工程的意义、软件工程的意义1)软件工程的定义)软件工程的定义国标国标GB/T114571995中关于软件工程术语的定义中关于软件工程术语的定义是:软件工程是软件开发、运行、维护和引退的系统是:软件工程是软件开发、运行、维护和引退的系统方法方法软件工程的经典定义软件工程的经典定义(1993年,年,IEEE提出提出):l 1- 把系统的、规范的、可度量的途径应用于软件把系统的、规范的、可度量的途径应用于软件开发、运行和维护的过程,也就是把开发、运行和维护的过程,也就是把工程化应用于工程化应用于软件中软件中l2- 研究研究1-中提到的途径中提到的途径 132)软件工程的研究内容)软件工程的研究内容软件工程的主要研究内容包括软件工程的主要研究内容包括软件开发技术软件开发技术和和软件软件工程管理工程管理l软件开发技术包含了软件开发方法、软件工具软件开发技术包含了软件开发方法、软件工具和软件过程和软件过程l软件工程管理包含了软件工程经济和软件生产软件工程管理包含了软件工程经济和软件生产的组织管理的组织管理 14软件开发技术的研究软件开发技术的研究软件开发技术的研究包括软件开发技术的研究包括l软件工程的软件工程的方法方法l软件开发的软件开发的工具工具l软件开发的软件开发的过程过程软件工程的三要素软件工程的三要素15软件工程三要素软件工程三要素软件工程中的软件工程中的过程过程是由为最终实现是由为最终实现软件开发的总任软件开发的总任务而进行的阶段划分,以及各阶段工作目标,共同务而进行的阶段划分,以及各阶段工作目标,共同组成的组成的工作框架工作框架软件工程中的软件工程中的方法方法是完成是完成软件开发各阶段中各项工软件开发各阶段中各项工作任务的作任务的技术手段技术手段软件工程使用的软件工程使用的工具工具是为是为方法的运用而提供的支持方法的运用而提供的支持软件的开发、管理和文档生成的软件的开发、管理和文档生成的支撑环境支撑环境169.2 软件生命周期软件生命周期179.2 软件生命周期软件生命周期软件开发生产的全过程又被称为软件开发生产的全过程又被称为“软件生命周期软件生命周期”。 “软件生命周期软件生命周期”是软件工程理论中最重要的概念是软件工程理论中最重要的概念l“软件生命周期软件生命周期”由三个时期组成由三个时期组成软件定义时期软件定义时期软件开发时期软件开发时期软件维护时期软件维护时期l并进一步划分为八个阶段并进一步划分为八个阶段 问题定义问题定义可行性研究可行性研究需求分析需求分析总体设计总体设计详细设计详细设计程序编码程序编码软件测试软件测试运行与维护运行与维护181-问题定义问题定义该阶段是软件生存其中最短的阶段该阶段是软件生存其中最短的阶段确定系统的目标、规模和基本任务确定系统的目标、规模和基本任务对系统用户和使用单位进行调查,建立对系统用户和使用单位进行调查,建立“问题问题定义报告定义报告”192-可行性分析可行性分析对问题定义阶段确定的系统目标进行全面的分析,具体对问题定义阶段确定的系统目标进行全面的分析,具体地确定工程的规模,并估计系统的成本和效益,确定问地确定工程的规模,并估计系统的成本和效益,确定问题是否具有可行性,决定系统是否需要开发的结论题是否具有可行性,决定系统是否需要开发的结论 l经济可行性:确定系统的硬件资源和软件资源的需求经济可行性:确定系统的硬件资源和软件资源的需求规格,估算软件开发成本,分析系统的经济效益是否规格,估算软件开发成本,分析系统的经济效益是否能超过它的总成本以及市场的需求情况能超过它的总成本以及市场的需求情况l技术可行性:分析现有的技术能否实现系统目标技术可行性:分析现有的技术能否实现系统目标形成形成可行性分析报告可行性分析报告;解决;解决做不做做不做的问题的问题203-需求分析需求分析分析、整理、提炼用户的需求,定义软件的功能分析、整理、提炼用户的需求,定义软件的功能建立完整的用户需求分析模型建立完整的用户需求分析模型模型是用专门技术手段记录描述的数据组织形式、模型是用专门技术手段记录描述的数据组织形式、功能结构和控制方式,分别对应数据模型、功能模功能结构和控制方式,分别对应数据模型、功能模型和控制模型型和控制模型编写编写软件需求规格说明书软件需求规格说明书解决解决“做什么做什么”的问题的问题 214-软件总体设计软件总体设计软件设计的任务是解决软件设计的任务是解决“如何做如何做”的问题的问题软件设计包括软件设计包括总体总体(概要概要)设计设计和和详细设计;详细设计;前者解决功能划分、结构确定和模块定义;前者解决功能划分、结构确定和模块定义;中者解决各模块的具体算法中者解决各模块的具体算法224-软件总体设计软件总体设计总体设计也称为概要设计总体设计也称为概要设计将系统功能划分到模块将系统功能划分到模块确定每个模块的功能确定每个模块的功能确定模块间的调用关系确定模块间的调用关系确定模块间的接口及信息通信确定模块间的接口及信息通信评价模块结构的质量评价模块结构的质量编写总体设计文档:编写总体设计文档:设计说明书、集成测试计设计说明书、集成测试计划书划书235-详细设计详细设计为总体设计确定的每一个模块确定具体为总体设计确定的每一个模块确定具体的算法和局部的数据结构的算法和局部的数据结构用专门工具记录描述算法和数据结构的用专门工具记录描述算法和数据结构的细节细节将细节的描述汇总成为将细节的描述汇总成为详细设计说明书详细设计说明书246-编码编码作为软件设计的最后一个阶段作为软件设计的最后一个阶段根据详细设计的结果根据详细设计的结果选择适当的计算机语言选择适当的计算机语言把软件的设计转换成计算机可以接受的程序代码把软件的设计转换成计算机可以接受的程序代码本阶段的文档是本阶段的文档是“源程序清单源程序清单”257-软件测试软件测试测试不是为了证明程序是正确的,而是设法暴露程序中的测试不是为了证明程序是正确的,而是设法暴露程序中的错误和缺陷错误和缺陷测试只能说明程序有错,而不能证明程序无错测试只能说明程序有错,而不能证明程序无错测试是程序执行的过程,目的在于发现错误测试是程序执行的过程,目的在于发现错误一个好的测试在于能发现至今未发现的错误一个好的测试在于能发现至今未发现的错误一个成功的测试是发现了至今未发现的错误一个成功的测试是发现了至今未发现的错误一般应当避免由开发者测试自己的程序一般应当避免由开发者测试自己的程序通过有限次的测试就能发现程序中的所有错误是不可能的,通过有限次的测试就能发现程序中的所有错误是不可能的,即完全测试是不可能的。所以程序也不可能具有百分之百即完全测试是不可能的。所以程序也不可能具有百分之百的可靠性。的可靠性。软件测试的结果是软件测试的结果是软件测试报告软件测试报告26静态测试与动态测试静态测试与动态测试l前者是基于人工的测试前者是基于人工的测试代码程序检查代码程序检查l后者是基于计算机的测试后者是基于计算机的测试使用设计的测试数据运行程序使用设计的测试数据运行程序有专门的测试方法有专门的测试方法278-软件的运行维护软件的运行维护软件交付使用,进入运行与维护软件交付使用,进入运行与维护l维护是必须的;维护是必须的;l运行维护工作包括运行维护工作包括确定运行维护方案确定运行维护方案纠正错误纠正错误改进系统改进系统完善性能完善性能扩充功能扩充功能评审验收评审验收28软件过程的意义和目标(补充)软件过程的意义和目标(补充)29阶段划分与执行顺序(补充)阶段划分与执行顺序(补充)“软件生命周期软件生命周期”不仅仅确定了软件开发全过程不仅仅确定了软件开发全过程的各个阶段划分,还同时确定各个阶段应该完成的各个阶段划分,还同时确定各个阶段应该完成的工作任务的工作任务但但并没有统一地确定各个阶段的执行顺序并没有统一地确定各个阶段的执行顺序在一个实际的软件开发活动中,各个阶段的执行在一个实际的软件开发活动中,各个阶段的执行能够顺序往往是不同的能够顺序往往是不同的往往会出现往往会出现“阶段重复阶段重复”或或“阶段迭代阶段迭代”30软件工程将软件工程将“阶段划分阶段划分”和和“执行顺序执行顺序”综合考虑,综合考虑,采用一种非文字的图形方式,抽象概括地描述实际的采用一种非文字的图形方式,抽象概括地描述实际的软件开发活动,称为软件开发活动,称为“软件生命周期模型软件生命周期模型”;又称为;又称为“软件开发模型软件开发模型”由于各个阶段执行顺序不同,软件生命周期模型也有由于各个阶段执行顺序不同,软件生命周期模型也有多种类型多种类型瀑布模型瀑布模型演化模型演化模型螺旋模型螺旋模型喷泉模型喷泉模型软件开发模型软件开发模型31典型的模型典型的模型_瀑布模型瀑布模型瀑布模型是最传统、最古老、应用最普遍、瀑布模型是最传统、最古老、应用最普遍、最广泛的软件生命周期模型;也称为最广泛的软件生命周期模型;也称为“生命生命周期模型周期模型”瀑布模型包含了软件生命周期的瀑布模型包含了软件生命周期的8个阶段个阶段32瀑瀑布布模模型型33瀑布模型的特点瀑布模型的特点1.阶段间具有顺序性和依赖性阶段间具有顺序性和依赖性。必须等前一阶段的工作完。必须等前一阶段的工作完成后,才开始后一阶段的工作;前一阶段的输出文档是成后,才开始后一阶段的工作;前一阶段的输出文档是后一阶段的输入文档;只有保证前阶段工作的正确,后后一阶段的输入文档;只有保证前阶段工作的正确,后阶段的工作才有可能获得正确的结果阶段的工作才有可能获得正确的结果2.推迟编码的观点推迟编码的观点。在编码阶段之前设置了分析和设计的。在编码阶段之前设置了分析和设计的多个阶段,并要求在各分析和设计阶段未完成之前不进多个阶段,并要求在各分析和设计阶段未完成之前不进行编码行编码3.质量保证的观点质量保证的观点。每个阶段必须完成规定的文档。每个阶段必须完成规定的文档;每个阶每个阶段结束前都必须完成文档审查段结束前都必须完成文档审查34软件工程对软件工程对“过程过程”的研究是充分的;明确确定了软的研究是充分的;明确确定了软件开发生产的过程以及各阶段的工作规范件开发生产的过程以及各阶段的工作规范同时软件工程提供了进行各个阶段工作可采用的方法同时软件工程提供了进行各个阶段工作可采用的方法和可使用的工具和可使用的工具l方法包括方法包括“分析方法分析方法”、“设计方法设计方法”和和“程序代程序代码的编辑方法码的编辑方法”l方法分为方法分为“结构化方法结构化方法”和和“面向对象方法面向对象方法”两个两个大类大类l对于每一种方法都提供了一系列的工具对于每一种方法都提供了一系列的工具359.3 软件开发方法简介软件开发方法简介36软件开发方法软件开发方法软件开发方法是软件开发过程所遵循的方法软件开发方法是软件开发过程所遵循的方法和步骤;集中体现为:和步骤;集中体现为:l软件分析方法软件分析方法l软件设计方法软件设计方法l程序设计方法程序设计方法分为分为结构化方法结构化方法和和面向对象方法面向对象方法结构化方法的核心和基础是结构化程序设计结构化方法的核心和基础是结构化程序设计的理论的理论37结构化方法结构化方法着眼于数据流向,自顶向下,逐层分解,建立系着眼于数据流向,自顶向下,逐层分解,建立系统的数据处理流程和实现方式统的数据处理流程和实现方式结构化方法也称为面向过程的方法结构化方法也称为面向过程的方法l按照按照 “自顶向下自顶向下”和和“逐步求精逐步求精”的原则,将整个的原则,将整个问题地分解为一系列的具有一定逻辑关系的问题地分解为一系列的具有一定逻辑关系的“子问子问题题”l一个较大的问题又可分解为或包含着更小的问题一个较大的问题又可分解为或包含着更小的问题l针对每个问题,进行软件设计和编写程序代码针对每个问题,进行软件设计和编写程序代码38面向对象方法面向对象方法l将问题分解为一系列功能独立又互相联系将问题分解为一系列功能独立又互相联系的的“对象对象”l针对每个对象进行规划设计、编写程序代针对每个对象进行规划设计、编写程序代码码39结构化方法下的结构化方法下的软件开发工具软件开发工具401-结构化需求分析与工具结构化需求分析与工具结构化分析结构化分析就是使用软件工程提供的工具,在就是使用软件工程提供的工具,在充分分析用户需求的基础上,建立软件系统功充分分析用户需求的基础上,建立软件系统功能的逻辑模型能的逻辑模型常用的工具常用的工具l数据流图数据流图l数据字典数据字典l判断树判断树l判断表判断表41数据流图数据流图是根据数据处理的过程,描述用户需求的的是根据数据处理的过程,描述用户需求的的工具工具是需求分析中,理解和记录用户需求的图形是需求分析中,理解和记录用户需求的图形表示表示他最终表述的软件系统的全部功能他最终表述的软件系统的全部功能42数据流图数据流图4个基本图符个基本图符43数据流与数据加工的关系数据流与数据加工的关系44利用数据流图分析软件功能利用数据流图分析软件功能数据流图是为表示和记录用户需求,由软数据流图是为表示和记录用户需求,由软件工程提供的工具件工程提供的工具他支持的是他支持的是结构化结构化的分析方法的分析方法即即自顶向下,逐层分解,逐步求精自顶向下,逐层分解,逐步求精最终以分层的数据流图,反映系统的整体最终以分层的数据流图,反映系统的整体功能功能45分层的结构化需求分析例分层的结构化需求分析例46分层的数据流图分层的数据流图n在多层数据流图中,在多层数据流图中,顶层数据流图顶层数据流图仅包含一个加工,仅包含一个加工,它代表的是整个软件系统。它的输入流是该系统的它代表的是整个软件系统。它的输入流是该系统的输入数据,输出流是系统所输出数据输入数据,输出流是系统所输出数据n底层数据流图底层数据流图是指其加工不需再做分解的数据流图,是指其加工不需再做分解的数据流图,它处在最底层它处在最底层n中间层数据流图中间层数据流图则表示对其上层父图的细化。它的则表示对其上层父图的细化。它的每一加工都可能继续再细化,形成每一加工都可能继续再细化,形成子数据流图子数据流图47数据字典数据字典数据字典是对于数据流中诸数据数据字典是对于数据流中诸数据(即对于在即对于在数据流图中每一个被命名的图形元素数据流图中每一个被命名的图形元素)的定的定义和描述义和描述定义和描述使用规范的确定的定义和描述使用规范的确定的“符号符号”数据词典与数据流图配合,以更清楚地表达数据词典与数据流图配合,以更清楚地表达用户对数据处理的要求用户对数据处理的要求48数据字典所用符号数据字典所用符号 符符 号号 含含 义义 举举 例例 被定义为被定义为 与与 x = ab .,. 或或 .|. 或或 x = a , b,x = a | b m.n 重复重复 x = 1数字字符数字字符8 (.) 可选可选( 可不选可不选) x = (a) “.” 基本数据元素基本数据元素 x = “a”(a 是基本数据是基本数据) . 连结符连结符 x = 1.9(1 到到 9 )49对对存折存折的数据字典定义的数据字典定义例例户名户名2字母字母24所号所号“001”.“999” 帐号帐号“00000001”.“99999999”开户日年月日开户日年月日性质性质“1”.“6” 注:注:“1”表示普通户,表示普通户,“5”表表示工资户等示工资户等印密印密“0” 注:印密在存折上不显示注:印密在存折上不显示存取行日期(摘要)支出存入余额操作复核存取行日期(摘要)支出存入余额操作复核存折户名所号帐号开户日性质存折户名所号帐号开户日性质(印密印密)1存取行存取行50502-软件总体设计及原则软件总体设计及原则抽象:概括本质而不计细节抽象:概括本质而不计细节模块化:将功能分解为模块;模块组装为整体模块化:将功能分解为模块;模块组装为整体信息屏蔽:本模块的信息屏蔽:本模块的信息信息,其他模块不能访问,其他模块不能访问模块独立:各模块模块独立:各模块功能功能独立,与其他模块之间的联系独立,与其他模块之间的联系最少且接口简单最少且接口简单l对内讲究对内讲究“内聚性内聚性”内部各元素间的紧密程度内部各元素间的紧密程度(越越强越好强越好)l对外讲究对外讲究“耦合性耦合性”模块间连接的紧密程度模块间连接的紧密程度(越弱越弱越好越好)51结构化总体设计常用工具结构化总体设计常用工具结构图结构图表示模块与模块间的联系表示模块与模块间的联系结构图符号:结构图符号:一般模块一般模块数据信息数据信息控制信息控制信息52将数据流图转化为结构图将数据流图转化为结构图简单地讲,总体设计的任务是确定用结构图描简单地讲,总体设计的任务是确定用结构图描述的系统功能的模块结构述的系统功能的模块结构从从“软件工具软件工具”角度而言,就是将角度而言,就是将“数据流图数据流图”转换为转换为“结构图结构图”l数据流图有数据流图有“变换型数据流图变换型数据流图”和和“事务型事务型数据流图数据流图”之分之分l不同类型的数据流图的转换方法和步骤不同不同类型的数据流图的转换方法和步骤不同53一个典型的软件结构图一个典型的软件结构图54结构图中涉及的术语结构图中涉及的术语深度深度:软件结构的控制层次:软件结构的控制层次上级模块上级模块:调用下级模块或其他模块的模块:调用下级模块或其他模块的模块宽度宽度:软件结构的最大控制跨度,即最大模块层:软件结构的最大控制跨度,即最大模块层 的模块数量的模块数量扇入扇入:可以调用一个给定模块的模块数量:可以调用一个给定模块的模块数量扇出扇出:一个模块直接调用的其他模块数量:一个模块直接调用的其他模块数量原子模块原子模块:位于叶子结点的模块:位于叶子结点的模块 55一个典型的软件结构图一个典型的软件结构图563-结构化详细设计工具结构化详细设计工具详细设计的根本任务是确定软件系统详细设计的根本任务是确定软件系统各模块的算法各模块的算法常用的工具包括常用的工具包括l程序流程图程序流程图lN-S图图lPAD,问题分析图问题分析图lPDL,过程设计语言,即伪码过程设计语言,即伪码57程序流程图图符程序流程图图符开始或停止程序控制流条件判断操作处理用程序流程符号表示程序的算法和流程用程序流程符号表示程序的算法和流程输入与输出58程序流程图程序流程图使用程序流程图符描述的程序基本结构使用程序流程图符描述的程序基本结构59数值选大数值选大输入输入maxN,且,且n=1输入输入xxmaxNmaxN=xn10?NYYN开始开始结束结束输出输出maxN值值n = n +160N-S图图标图图标N-S图,也叫做盒图是一种符合结构化程序设计原则的图,也叫做盒图是一种符合结构化程序设计原则的图形描述工具图形描述工具为表示不同的控制结构,在为表示不同的控制结构,在N-S图中规定了五种基本的图中规定了五种基本的图形构件图形构件 619.4 软件测试及方法软件测试及方法621、黑盒测试、黑盒测试黑盒测试是把程序看成是一个黑盒子,只检查程黑盒测试是把程序看成是一个黑盒子,只检查程序功能是否满足规定的要求序功能是否满足规定的要求黑盒测试时,测试人员完全不考虑程序内部的逻黑盒测试时,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明辑结构和内部特性,只依据程序的需求规格说明书,检查书,检查程序的功能是否符合它的功能说明程序的功能是否符合它的功能说明黑盒测试又叫做黑盒测试又叫做功能测试功能测试或或数据驱动测试数据驱动测试63黑盒测试的目标黑盒测试的目标黑盒测试方法是在程序输入输出接口上进行的测试,黑盒测试方法是在程序输入输出接口上进行的测试,主要是为了发现以下主要是为了发现以下功能性的错误功能性的错误:l 是否有不正确或遗漏了的功能是否有不正确或遗漏了的功能?l 在接口上,输入能否正确地接受在接口上,输入能否正确地接受? 能否输出正确的能否输出正确的结果结果?l 是否有数据结构错误或外部信息是否有数据结构错误或外部信息(例如数据文件例如数据文件)访访问错误问错误?l 性能上是否能够满足要求性能上是否能够满足要求?l 是否有初始化或终止性错误是否有初始化或终止性错误?64黑盒测试问题黑盒测试问题用黑盒测试方法发现程序中所有可能的错误,用黑盒测试方法发现程序中所有可能的错误,应该在应该在所有可能的输入条件中,确定测试数据所有可能的输入条件中,确定测试数据,来检查程序是否都能产生正确的输出来检查程序是否都能产生正确的输出但这是不可能的但这是不可能的65一个事例一个事例假设一个程序假设一个程序P有输入量有输入量X和和Y及输出量及输出量Z。在在字长为字长为32位的计算机上运行。若位的计算机上运行。若X、Y取整数,取整数,按黑盒方法进行穷举测试:按黑盒方法进行穷举测试:可能采用的测试数据组:可能采用的测试数据组: 232232264 如果测试一组数据需要如果测试一组数据需要1毫秒,一年工作毫秒,一年工作365 24小时,完成所有测试需小时,完成所有测试需5亿年。亿年。66解决这个问题的常用方法解决这个问题的常用方法常用的方法有:常用的方法有:l等价分类法等价分类法l边界分析法边界分析法根据边界的情况为目标设定测试用例根据边界的情况为目标设定测试用例l因果图法因果图法输入为因,输出为果,设计一个测试表输入为因,输出为果,设计一个测试表l错误推测法错误推测法凭经验或直觉推测可能存在的错误凭经验或直觉推测可能存在的错误67等价类划分是一种典型的黑盒测试方法等价类划分是一种典型的黑盒测试方法等价类划分方法把所有可能的输入数据,即程序等价类划分方法把所有可能的输入数据,即程序的输入域划分成若干个部分;然后从每一部分中的输入域划分成若干个部分;然后从每一部分中选取少数有代表性的数据做为测试用例,而进行选取少数有代表性的数据做为测试用例,而进行测试测试等价类划分法等价类划分法68使用这一方法设计测试用例要经历使用这一方法设计测试用例要经历划分等价类划分等价类和和选选取测试用例取测试用例两步。两步。划分等价类划分等价类l等价类是指某个输入域的子集合。在该子集合中,等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的。各个输入数据对于揭露程序中的错误都是等效的。测试某等价类的代表值,就等价于对这一类其它的测试某等价类的代表值,就等价于对这一类其它的数值都进行了测试数值都进行了测试等价类划分法等价类划分法69有效等价类:是指对于程序的规格说明来说,有效等价类:是指对于程序的规格说明来说,是合理的,有意义的输入数据构成的集合是合理的,有意义的输入数据构成的集合无效等价类:是指对于程序的规格说明来说,无效等价类:是指对于程序的规格说明来说,是不合理的,无意义的输入数据构成的集合是不合理的,无意义的输入数据构成的集合在设计测试用例时,要同时考虑有效等价类和在设计测试用例时,要同时考虑有效等价类和无效等价类的设计无效等价类的设计有效类和无效类有效类和无效类70典型的黑盒测试例典型的黑盒测试例对于对于“计算计算1/X(X为整数为整数)”的程的程序的测试时,可以设置序的测试时,可以设置2个有效的个有效的等价类等价类(负整数和正整数负整数和正整数)和一个和一个无效的等价类无效的等价类(0)然后分别从然后分别从3个类中选取个类中选取3个数值个数值输入,进行输入,进行3次测试次测试1/X测试用例:测试用例:2,-3,0712、白盒测试、白盒测试把测试对象看做一个透明的盒子,它允许测试把测试对象看做一个透明的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有计或选择测试用例,对程序所有逻辑路径逻辑路径进行进行测试测试通过测试的结果,确定实际的状态是否与预期通过测试的结果,确定实际的状态是否与预期的状态一致的状态一致白盒测试又称为白盒测试又称为结构测试结构测试或或逻辑驱动测试逻辑驱动测试72白盒测试的思想原则白盒测试的思想原则保证所测程序中每一条独立路径,都至少测试一次;保证所测程序中每一条独立路径,都至少测试一次; 保证所测程序中的所有判定的每一个分支,即取保证所测程序中的所有判定的每一个分支,即取“真真”与取与取“假假”的两种情况,都至少测试一次;的两种情况,都至少测试一次;保证所测程序中的所有判定表达式中的每一个条件的保证所测程序中的所有判定表达式中的每一个条件的不同取值,都至少测试一次;不同取值,都至少测试一次; 保证在所测程序中的每一个循环,都在循环的边界和保证在所测程序中的每一个循环,都在循环的边界和运行界限内,循环体各至少执行一次运行界限内,循环体各至少执行一次 73白盒测试的工作量例白盒测试的工作量例对一个具有多重选择和多重循环嵌套的程序,不同的路径对一个具有多重选择和多重循环嵌套的程序,不同的路径数目可能是天文数字数目可能是天文数字本例给出一个小程序的流程图,它包括了一个执行本例给出一个小程序的流程图,它包括了一个执行20次的次的循环。循环。l包含的不同执行路径数达包含的不同执行路径数达520条条l假定对每一条路径进行测试需要假定对每一条路径进行测试需要1毫秒,假定一年工作毫秒,假定一年工作365 24小时,小时,l实现所有路径测试,需实现所有路径测试,需3170年。年。74白盒测试的方法白盒测试的方法主要有主要有l逻辑覆盖测试法逻辑覆盖测试法l基本路径测试法基本路径测试法75逻辑覆盖测试法逻辑覆盖测试法 逻辑覆盖是以程序内部的逻辑覆盖是以程序内部的逻辑结构逻辑结构为基础的设为基础的设计测试用例的技术。计测试用例的技术。“逻辑结构逻辑结构”主要是指由判断、主要是指由判断、分支、条件所表示的程序结构分支、条件所表示的程序结构 它是最常用的白盒测试方式;由一系列的测试它是最常用的白盒测试方式;由一系列的测试过程构成:过程构成:l 语句覆盖语句覆盖l 判定覆盖判定覆盖l 条件覆盖条件覆盖l 判定条件覆盖判定条件覆盖l 路径覆盖路径覆盖76逻辑覆盖测试方法的总结逻辑覆盖测试方法的总结l语句覆盖语句覆盖-遍历每一条语句遍历每一条语句l路径覆盖路径覆盖-遍历每一条路径遍历每一条路径l判断覆盖判断覆盖-遍历每个判断的每个分支遍历每个判断的每个分支l条件覆盖条件覆盖-遍历每个判断中的每个条件遍历每个判断中的每个条件l判断判断条件覆盖条件覆盖-遍历每个判断的所有可遍历每个判断的所有可能能 并并每个判断中的每个条件每个判断中的每个条件 的所有可能的所有可能773、软件测试的组织与实施、软件测试的组织与实施单元测试单元测试l对程序模块(程序单元)进行的正确性对程序模块(程序单元)进行的正确性的测试;发现该模块的错误的测试;发现该模块的错误集成测试集成测试l将模块按设计要求组装测试,确定各模将模块按设计要求组装测试,确定各模块接口的通信错误;依据是总体设计说块接口的通信错误;依据是总体设计说明书明书78软件测试的组织与实施软件测试的组织与实施确认确认(验收验收)测试测试l验证软件的功能和性能是否满足需求规格说验证软件的功能和性能是否满足需求规格说明书确定的标准;一般采用黑盒测试方法明书确定的标准;一般采用黑盒测试方法系统测试系统测试l将软件与硬件环境、数据和人员等其他系统将软件与硬件环境、数据和人员等其他系统元素组合在一起,进行测试,评估软件在系元素组合在一起,进行测试,评估软件在系统环境下的性能,发现存在和潜在的错误统环境下的性能,发现存在和潜在的错误79软件测试的实施过程图示软件测试的实施过程图示80以下是给大家的几页以下是给大家的几页辅助资料辅助资料81分层数据流图分层数据流图82第二层数据流图第二层数据流图83对对销售的细化销售的细化84对对采购的细化采购的细化85如果输入条件规定了取值范围,或值的个数,则可以确立如果输入条件规定了取值范围,或值的个数,则可以确立一个有效等价类和两个无效等价类一个有效等价类和两个无效等价类例如,在程序的规格说明中,对输入条件有要求:例如,在程序的规格说明中,对输入条件有要求: “ 数据可以从数据可以从1到到999 ” 则有效等价类是则有效等价类是“1数据数据999” 两个无效等价类是两个无效等价类是“数据数据1”或或“数据数据999” 等价类划分的原则等价类划分的原则86如果输入条件规定了输入值的集合,或者是规定如果输入条件规定了输入值的集合,或者是规定了了“必须如何必须如何”的条件,这时可确立一个有效等的条件,这时可确立一个有效等价类和一个无效等价类价类和一个无效等价类例如,在计算机语言中对变量标识符一般规定为例如,在计算机语言中对变量标识符一般规定为“以字母打头的字符以字母打头的字符”。那么所有以字母打头的。那么所有以字母打头的构成有效等价类,而不在此集合内(如不以字母构成有效等价类,而不在此集合内(如不以字母打头)的归于无效等价类打头)的归于无效等价类等价类划分的原则等价类划分的原则87如果输入条件是一个布尔量,则可以确定一个有效等价如果输入条件是一个布尔量,则可以确定一个有效等价类和一个无效等价类。类和一个无效等价类。如果规定了输入数据的一组值,而且程序要对每个输入如果规定了输入数据的一组值,而且程序要对每个输入值分别进行处理。这时可为每一个输入值确立一个有值分别进行处理。这时可为每一个输入值确立一个有效等价类,此外针对这组值确立一个无效等价类,它效等价类,此外针对这组值确立一个无效等价类,它是所有不允许的输入值的集合。是所有不允许的输入值的集合。等价类划分的原则等价类划分的原则例如,在教师上岗方案中规定对教授、例如,在教师上岗方案中规定对教授、副教授、讲师和助教分别计算分数,做副教授、讲师和助教分别计算分数,做相应的处理。因此可以确定相应的处理。因此可以确定4个有效等价个有效等价类为教授、副教授、讲师和助教;一个类为教授、副教授、讲师和助教;一个无效等价类,它是所有不符合以上身分无效等价类,它是所有不符合以上身分的人员的输入值的集合。的人员的输入值的集合。88 如果规定了输入数据必须遵守的规则,则可以确立一如果规定了输入数据必须遵守的规则,则可以确立一个有效等价类(符合规则)和若干个无效等价类(从个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)不同角度违反规则)例如,有的计算机语言规定例如,有的计算机语言规定 “一个语句必须以分号一个语句必须以分号;结束结束”l可以确定一个有效等价类可以确定一个有效等价类 “以以;结束结束”l若干个无效等价类若干个无效等价类 “以以:结束结束”、“以以,结束结束”、“以以 结束结束”、“以以LF结束结束”等等等价类划分的原则等价类划分的原则89判断覆盖强调的是每个判断每个取值分支都要覆盖到判断覆盖强调的是每个判断每个取值分支都要覆盖到条件覆盖强调的是构成判断的每个条件的取值都要覆盖到条件覆盖强调的是构成判断的每个条件的取值都要覆盖到有时,他们是不会互相包含的有时,他们是不会互相包含的(如条件覆盖的第二个用例如条件覆盖的第二个用例)判定条件覆盖是他们的综合;判定条件覆盖是他们的综合;l设计足够的测试用例,使得判断中每个条件的所有可能取值,设计足够的测试用例,使得判断中每个条件的所有可能取值,至少执行一次至少执行一次l同时,每个判断的每个取值分支,至少执行一次同时,每个判断的每个取值分支,至少执行一次判断判断-条件覆盖条件覆盖90同时考虑到判断各取值分支和各条件取值两个因素同时考虑到判断各取值分支和各条件取值两个因素只用两个测试用例,即可实现判断只用两个测试用例,即可实现判断条件测试条件测试 测测 试试 用用 例例 覆盖分支覆盖分支 条件取值条件取值【(2, 0, 4),(2, 0, 3)】 L1(c, e)【(1, 1, 1),(1, 1, 1)】 L2(b, d) 判断判断-条件覆盖测试用例条件覆盖测试用例91基本路径测试法基本路径测试法根据程序流程图,分析程序控制结构的环路复杂性;根据程序流程图,分析程序控制结构的环路复杂性;确定基本路径,构建和导出基本路径集合;针对该基确定基本路径,构建和导出基本路径集合;针对该基本路径集合设计测试用例本路径集合设计测试用例l只执行零次或一次的循环,是一条基本路径只执行零次或一次的循环,是一条基本路径l一个判断结构的取值分支也是一条基本路径一个判断结构的取值分支也是一条基本路径92
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号