第2章 软件工程_第1页
第2章 软件工程_第2页
第2章 软件工程_第3页
第2章 软件工程_第4页
第2章 软件工程_第5页
已阅读5页,还剩150页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2024/2/27

软件工程是计算机科学与技术专业的一门专业核心课程。通过本课程的学习,使学生掌握系统的软件开发理论、技术和方法,使用正确的工程方法开发出成本低、可靠性好并在机器上能高效运行的软件,为今后从事软件开发和维护打下坚实的基础。软件工程2024/2/27

本章内容主要内容包括:软件工程概述、软件生存周期及软件需求分析、软件设计方法、软件测试技术等。

通过本章的学习,使学生能真正的从中了解软件开发的整个过程。为了让学生真正得以实践,结合实际软件开发项目,让学生从问题定义开始,经过可行性研究、需求分析、概要设计、详细设计、编码直到最后要对自己开发的软件还要进行测试,这样一个软件开发过程,从而使学生掌握软件开发的基本技能。第2章软件工程目录2.1软件工程的基本概念2.2软件开发过程2.3系统定义2.4软件实现2.5软件维护2.6软件开发管理什么是软件危机软件不符合用户的实际需要软件价格昂贵软件开发项目超支和延期软件质量低,可靠性差软件缺少适当的文档资料难于修改和维护软件2.1软件工程的基本概念2.1.1软件危机及其形成原因软件代价高计算机系统硬件/软件成本变化趋势在开发一个新型计算机系统或修改一个现有系统的过程中,最大部分的资金是用在软件系统开发方面。IBM公司在1963年至1966年开发IBM360机操作系统,这个项目花费5000人-年的工作量,最多时投入1000人进行开发工作,写出近100万行的源程序。尽管投入这么多的人力和物力,得到的结果却非常糟糕。这个操作系统每发行一个新版本,都是修订上一个版本中的1000个错误。该项目负责人F.D.Brooks在总结该项目的沉痛教训时说:“正像一只逃亡的野兽落到泥潭中做垂死的挣扎,越是挣扎,陷得越深。最后无法逃脱灭顶的灾难。程序设计工作就像这样一个泥潭,一批批程序员被迫在泥潭中拼命挣扎,谁也没有料到竟会陷入这样的困境。”开发IBM360机操作系统的沉痛历史教训成为软件开发项目的典型事例为人们所牢记。沉痛历史教训!软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。这些问题绝不仅仅是不能正常运行的软件才具有的,实际上,几乎所有软件都不同程度地存在这些问题。概括地说,软件危机包含下述两方面的问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。软件危机的典型表现软件危机的典型表现:(1)对软件开发成本和进度的估计常常很不准确;(2)用户对“已完成的”软件系统不满意的现象经常发生;(3)软件产品的质量往往靠不住;(4)软件常常是不可维护的;(5)软件通常没有适当的文档资料;(6)软件成本在计算机系统总成本中所占的比例逐年上升;(7)软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。

产生软件危机原因----与软件本身的特点有关:1、软件是逻辑部件:试制阶段难衡量;开发质量较难评价,开发过程管理和控制较难;运行过程才能暴露没有检测出来的事故,相当于修改设计,软件维护困难;2、软件规模庞大,有技术问题,也有管理方法问题。3、早期开发的个体化;忽视需求分析;认为软件开发写程序;轻视维护,对用户不了解,4、对前期工作不能忽视,做好软件定义时期的工作,这是降低成本,提高件质量的关键。5、严重性:在软件开发的不同阶段修改付出代价(后期是前期的2-3个数量级),软件维护是极端艰巨复杂的工作,占55%~70%)软件危机的解决方法必须消除存在的错误认识、树立软件工程观念用工程化方法和途径来开发和维护软件开发和使用更好的软件工具应该采取必要的管理措施总之:技术措施+组织管理措施1968年北约组织在前联邦德国格密斯举行的国际学术会议上正式提出并使用了“软件工程”的概念,运用工程学的基本原理和方法来组织和管理软件生产。后来还发展了相关的心理学、生理学和经济学等方面的学科。软件工程诞生了,它是解决软件危机惟一有效的方法。2.1.2软件工程的定义定义一:软件工程是科学知识在设计和构造计算机程序以及开发、运作和维护这些程序所要求的有关文档编制中的实际应用。定义二:为了经济地获得可靠的能在实际的计算机上运行的软件所确立和使用的健全的工程原理。定义三:对软件开发、运行、维护、退役的系统研究方法。(IEEE-1983)定义四:对软件开发、运行、维护的系统化的、有纪律的、可定量的方法的应用,即对软件的工程化的应用。(IEEE-1990)定义五:软件工程是指导计算机软件开发和维护的一门学科,它采用工程的概念、原理、技术和方法,把经过时间考验而证明是正确的管理技术和与技术方法结合起来用于开发软件。1968年在北大西洋公约组织会议上,软件工程作为一个概念首次被提出。软件工程包括3个要素:方法、工具和过程方法是完成软件工程项目的技术手段;工具支持软件的开发、管理、文档生成;过程支持软件开发的各个环节的控制、管理“软件工程”这个术语自1968年开始使用以来,许多专家、学者们先后提出了100多条关于软件工程的“准则”或“信条”。软件工程专家B.W.Boehm综合了这些意见,并总结了TRW公司多年来开发软件的经验,于1983年在一篇论文中提出了软件工程的7条基本原理。他认为这7条原理是确保软件产品质量和开发效率的最小原理集合。2.1.3七条基本原则B.W.Boehm提出的7条基本原理。1.用分阶段的生命周期计划严格管理统计发现,在不成功的软件项目中有一半左右是由于计划不周造成的。2.坚持进行阶段评审软件的质量保证工作不能等到编码阶段结束之后再进行,因为大部分错误是在编码之前造成的,根据Boehm等人的统计,设计错误占软件错误的63%,编码错误仅占37%;其次,错误发现与改正得越早,所需付出的代价越小。3.实行严格的产品控制必须按照严格的规程对修改方案进行评审,获得通过以后才能实施;严格禁止随意修改软件。4.采用现代程序设计技术采用先进的技术不仅可以提高软件开发和维护的效率,而且可以提高软件产品的质量。5.结果应能清楚地审查为了提高软件开发过程的可见性,更好地进行管理,应该根据软件开发项目的总目标及完成期限,规定开发组织的责任和产品标准,使得阶段结果能够接受审查。6.开发小组的人员应该少而精当软件开发小组人员数为N时,可能的通信路径有N(N-1)/2条,可见随着人数N的增大,通信开销将急剧增加。因此,组成少而精的开发小组是软件工程的一条基本原理。7.承认不断改进软件工程实践的必要性遵循上述6条基本原理,就能够按照当代软件工程基本原理实现软件的工程化生产,但是,仅有上述6条原理并不能保证软件开发与维护的过程能赶上时代前进的步伐,能跟上技术的不断进步。承认不断改进软件工程实践的必要性是软件工程的第7条基本原理。2.1.4基本内容软件生存周期模型软件分析系统分析、可行性分析、软件开发计划、需求分析软件设计总体设计、详细设计软件实现编程序,结构化设计方法软件测试软件维护软件管理成本估算、风险分析、进度安排、人员组织、软件质量保证2.2软件开发过程2.2.1软件开发的主要阶段三个主要阶段软件定义可行性分析和需求分析软件开发总体设计、详细设计、实现、集成测试和确认测试

软件维护

软件使用、修改维护、退役2.2软件开发过程2.2.2软件生命周期模型定义软件产品从形成概念开始,经过开发、使用和维护,直到退役的全过程2.2软件开发过程九个阶段软件生命周期每个阶段的基本任务。1.问题定义这个阶段要回答的关键问题是:“要解决的问题是什么?”2.可行性研究这个阶段要回答的关键问题是:“对于上一个阶段所确定的问题有行得通的解决办法吗?”3.需求分析这个阶段的任务仍然不是具体地解决问题,而是准确地确定“为了解决这个问题,目标系统必须做什么”,主要是确定目标系统必须具备哪些功能。这个阶段的一项重要任务,是用正式文档准确地记录对目标系统的需求,这份文档通常称为规格说明书(specification)。4.总体设计这个阶段要回答的关键问题是:“概括地说,应该怎样实现目标系统?”总体设计又称为概要设计。首先,应该设计出实现目标系统的几种可能的方案。通常至少应该设计出低成本、中等成本和高成本等3种方案。软件工程师应该用适当的表达工具描述每种方案,分析每种方案的优缺点,并在充分权衡各种方案的利弊的基础上,推荐一个最佳方案。5.详细设计总体设计阶段以比较抽象概括的方式提出了解决问题的办法,详细设计阶段的任务就是把解法具体化,也就是回答下面这个关键问题:“应该怎样具体地实现这个系统呢?”详细设计也称为模块设计,在这个阶段将详细地设计每个模块,确定实现模块功能所需要的算法和数据结构。6.编码这个阶段的关键任务是写出正确的、容易理解的、容易维护的程序模块。7.测试这个阶段的关键任务是通过各种类型的测试使软件达到预定的要求。8.软件维护维护阶段的关键任务是,通过各种必要的维护活动使系统持久地满足用户的需要。2024/2/27特点:上一阶段的变换结果是下一阶段的变换的输入,相邻两个阶段具有因果关系,紧密相联。需求分析问题定义可性行研究计划时期概要设计详细设计编码测试开发时期运行与维护维护时期软件生命周期瀑布模型瀑布模型的特点线性开发序列:每一阶段任务必须通过评审才能进入下一阶段,直线前进避免大的返工,允许局部的返工:有反馈的迭代(返工在所难免)瀑布模型的局限性明确全部需求困难甚至不现实开发周期过长、用户不能及时提出修改意见软件生命周期原型模型原型:是指模拟某种产品的原始模型1、原型系统仅包括未来系统的主要功能,以及系统的重要接口。2、为了尽快向用户提供原型,开发原型系统时应尽量使用

能缩短开发周期的语言和工具。快速原型模型通常有三种类型:渐增式的原型:也称增量模型。用于验证软件需求的原型。用于验证设计方案的原型。快速原型模型(RapidPrototypeModel)是快速开发一个可以运行的原型系统。原型模型的特点采用软件重用技术和强有力的快速开发工具采用主动的、正常的迭代避免了瀑布模型被迫的、不正常的返工有助于用户和软件开发人员对需求的定义和确认原型模型的局限性不收敛于开发者预定目标资源规划和管理较为困难更新文档麻烦2.2.3模块化软件开发原则抽象自顶向下逐步求精模块化信息隐蔽与局部化模块独立启发式规则模块化模块可以组合、分解、更换的单元,如过程、函数、子程序、宏等完成特定的子功能模块化解决一个复杂问题时,自顶向下逐层将软件分解成若干模块的过程模块划分的指导原则模块可分解性:把问题分解为子问题的系统化机制模块可组装性:把现有的可重用模块组装成新系统模块可理解性:一个模块作为独立单元无需参考其他模块来理解模块连续性:系统需求的微小修改只导致对个别模块,而不是对整个系统的修改模块保护性:一个模块内出现异常情况时,它的影响局限在该模块内部模块与成本的关系信息隐蔽与局部化信息隐蔽:一个模块内包含的信息(过程或数据)对于不需要这些信息的其他模块来说不可见(不能访问)局部化:将关系密切的软件元素的位置尽量靠近信息隐蔽与局部化有利于软件的可维护性,可以防止误操作和误修改模块独立模块独立性:每个模块只完成系统所要求的独立子功能,与其他模块的联系少且简单模块独立的好处:使软件开发更容易、适合分工合作使软件测试和维护更容易模块独立的度量内聚:一个模块内部各元素之间彼此结合的紧密程度的度量耦合:不同模块之间互连程度的度量2024/2/27(1)、内聚(Cohesion)低功能内聚信息内聚通信内聚过程内聚时间内聚逻辑内聚巧合性内聚高强弱

内聚性模块独立性2024/2/27(2)、耦合

耦合性是程序结构中各个模块之间相互关联的度量它取决于各个模块之间接口的复杂程度、调用模块的方式以及那些信息通过接口。低非直接耦合数据耦合标记耦合控制耦合外部耦合公共耦合内容耦合高弱强耦合性模块独立性启发式规则改进软件结构提高模块独立性模块规模应该适中模块之间的调用关系应当按照层次化组织模块的深度、宽度、扇出和扇入都应适当设计单入口单出口的模块模块功能应该可以预测

软件结构度量术语深度宽度扇出扇入(同一层最大模块数)(一个模块直接调用的模块数)模块的层数调用一个给定模块的个数2.2.4软件开发方法结构化方法(StructuredMethod)面向对象方法(Object-OrientedMethod)

2.3系统定义2.3.1可行性分析可行性分析目的用最小的代价在尽可能短的时间内确定问题是否能够解决

内容技术可行性分析经济可行性分析社会可行性分析方案的选择2024/2/27经济可行性:进行成本效益分析,评估项目的开发成本。基于计算机系统的成本由四部分组成1、购置软、硬件及有关设备费用2、系统开发费用3、系统安装和维护费用4、人员培训费用费用2024/2/27举例:关于开发CAD系统的软件开发成本及效益分析

12345

年6040200成本-效益(万元)该系统节省经费该系统成本盈亏平衡点投资回收期---------成本及效益分析图2024/2/27技术可行性:对系统的性能、可靠性、可维护性以及生产率等方面的信息进行评价。通过技术可行性的分析,将为新系统提交技术可行性评估。以指明为完成系统的功能和性能需要什么技术?需要哪些材料、方法、算法、或者过程等技术可行性分析方法---数学模型和优化技术、概率和统计、排队论、控制论等方法。步骤确定项目规模和目标研究正在运行的系统建立新系统的高层逻辑模型导出和评价各种方案推荐可行方案编写可行性分析报告2024/2/27可行性论证报告1、系统概述2、可行性分析3、拟订开发计划4、结论意见软件开发计划内容资源计划:人力资源、硬件资源、软件资源

成本预算:估计总的开发成本

进度安排:确定最终的软件交付日期、在交付日期内安排和分配工作量2.3.2需求分析需求分析需求分析目标解决“做什么(Whattodo)”,而不是“怎么做(Howtodo)”既是软件开发依据,也是软件验收标准与用户充分沟通,去伪存真,去粗存精通信瓶颈:用户vs

开发人员2024/2/27软件需求说明书----SRS(SoftwareRequirementSpecification)主要包括以下的内容:SRS引言数据描述数据流图数据字典功能描述性能描述特殊需求需求分析任务确定软件系统的综合要求功能要求性能要求系统数据接口要求安全性保密性和可靠性要求系统运行要求异常处理要求等分析软件系统的数据要求建立系统的逻辑模型评估项目开发计划:修改开发计划需求分析工具层次方框图(见图2.3.1)Warnier图(见图2.3.2)IPO图(见图2.3.3)需求分析方法结构化分析数据流图数据字典加工逻辑描述工具判定表判定树面向对象分析结构化分析方法

面向数据流进行需求分析的方法结构化分析方法适合于数据处理类型软件的需求分析具体来说,结构化分析方法就是用抽象模型的概念,按照软件内部数据传递、变换的关系,自顶向下逐层分解,直到找到满足功能要求的所有可实现的软件为止结构化分析方法使用工具:数据流图,数据词典,判定表与判定树数据流图(DFD)数据流图中的主要图形元素数据流图从数据传递和加工的角度,以图形的方式刻画数据流从输入到输出的移动变换过程,是一种功能模型,只反映系统必须完成的逻辑功能。描述银行取款过程的数据流图数据流与数据加工之间的关系数据流图的层次结构为了表达数据处理过程的数据加工情况,需要采用层次结构的数据流图。按照系统的层次结构进行逐步分解,并以分层的数据流图反映这种结构关系,能清楚地表达和容易理解整个系统分层数据流图在多层数据流图中,顶层流图仅包含一个加工,它代表被开发系统。它的输入流是该系统的输入数据,输出流是系统所输出数据底层流图是指其加工不需再做分解的数据流图,它处在最底层中间层流图则表示对其上层父图的细化。它的每一加工可能继续细化,形成子图。数据词典(DD)

数据词典与数据流图配合,能清楚地表达数据处理的要求,数据字典的任务是:对于数据流图中出现的所有被命名的图形元素在字典中作为一个词条加以定义,使得每一个图形元素的名字都有一个确切的解释。词条描述对于在数据流图中每一个被命名的图形元素,均加以定义,其内容有:名字,别名或编号,分类,描述,定义,位置,其它等2024/2/27数据流名:说明:简要介绍作用即它产生的原因和结果。数据流来源:即该数据流来自何方。数据流去向:去向何处。数据流组成:数据结构。每个数据量流通量:数据量、流通量。(1)数据流词条的描述

数据流名:发票说明:用作学生已付书款的依据数据流来源:来自加工“审查并开发票”数据流去向:流向加工“开领书单”。数据流组成:学号+姓名+书号+单价总价+书费合计审查并开发票发票购书单

2024/2/27数据元素名:类型:数字(离散值、连续值),文字(编码类型)长度:取值范围:相关的数据元素及数据结构(2)

数据元素词条的描述

年=“1900”..“3000”月=“01”..“12”日=“01”..“31”摘要=1{字母}4金额=“00000000.01”..“999999999.99”……2024/2/27(3)数据文件词条的描述

数据文件名:简述:存放的是什么数据。输入数据:输出数据:数据文件组成:数据结构。存储方式:顺序,直接,关键码。存取频率:

…审查并开发票学生发票购书单各班学生用书表教材存量表2024/2/27加工名:加工编号:反映该加工的层次简要描述:加工逻辑及功能简述输入数据流:取值范围:相关的数据元素及数据结构

…(4)

加工逻辑词条的描述

1.3审查并开发票学生发票购书单各班学生用书表教材存量表2024/2/27名称:外部实体名简要描述:什么外部实体有关数据流:数目:(5)外部实体词条描述

1销售购书单领书单缺书单进书通知2采购进书通知缺书登记表教材存量表学生保管员对数据流图的每一个基本加工,必须有一个基本加工逻辑说明基本加工逻辑说明必须描述基本加工如何把输入数据流变换为输出数据流的加工规则加工逻辑说明必须描述实现加工的策略而不是实现加工的细节加工逻辑说明中包含的信息应是充足的,完备的,有用的,没有重复的多余信息基本加工逻辑说明用于写加工逻辑说明的工具•结构化语言•判定表•判定树2024/2/27加工逻辑说明组成输入数据加工逻辑输出数据加工逻辑说明描述工具结构化语言判定表判定树

描述把输入数据流变换为输出数据流的加工过程,是加工说明的主体。(1)结构化语言结构化语言的词汇表由命令动词数据词典中定义的名字有限的自定义词逻辑关系词IF_THEN_ELSE、

CASE_OF、WHILE_DO、

REPEAT_UNTIL等组成。是一种介于自然语言和形式化语言之间的语言语言的正文用基本控制结构进行分割,加工中的操作用自然语言短语来表示其基本控制结构有三种:简单陈述句结构:避免复合语句;重复结构:WHILE_DO

或REPEAT_UNTIL结构。判定结构:IF_THEN_ELSE

或CASE_OF结构;2024/2/27自然语言+结构化形式结构化语言选择结构如果<条件><策略>

If<condition><policy>如果<条件>

则<策略1>

否则<策略2>情况1<条件><策略1>……情况n<条件><策略n>If<condition>

then<policy1>Otherwise<policy2>case1<condition><policy1>……casen<condition><policyn>循环结构对

…,<策略>重复以下<策略>直至<条件>Foreach…,<policy>Repeatthefollowing:<policy>Until<condition>商店业务处理系统中“检查发货单”IF发货单金额超过$500THENIF欠款超过了60天THEN

在偿还欠款前不予批准

ELSE(欠款未超期)发批准书,发货单

ENDIFELSE(发货单金额未超过$500)

IF欠款超过60天THEN

发批准书,发货单及赊欠报告

ELSE(欠款未超期)发批准书,发货单

ENDIFENDIF(2)判定表如果数据流图的加工需要依赖于多个逻辑条件的取值,使用判定表来描述比较合适,由四个部分组成:条件定义、条件取值的组合、动作定义、在各种取值的组合下应执行的动作。以“检查发货单”为例(3)判定树判定树也是用来表达加工逻辑的一种工具。有时侯它比判定表更直观。2.4软件实现2.4.1总体设计总体设计:又称概要设计解决“如何做(Howtodo)”设计供选择的方案推荐最佳方案设计软件结构设计数据结构和数据库用户界面设计制定测试计划编写总体设计阶段的文档评审总体设计方案总体设计的图形工具层次图HIPO图结构图总体设计的设计方法结构化设计自顶向下基于数据流的设计方法——数据流图面向对象设计2.4.2详细设计详细设计:又称过程设计解决每个模块“如何做(Howtodo)”为每个模块进行详细的算法设计设计出模块内的局部数据结构确定模块的接口细节为每个模块式设计一组测试用例编写详细设计说明书详细设计的工具程序流程图(图2.4.5和图2.4.6)易上手、非结构化、无法表示数据结构盒图(N-S图)(图2.4.7)结构化、功能域明确PAD图-问题分析图(图2.4.8)结构化、可用于数据结构、易自动生成过程设计语言(PDL:ProcedureDesignLanguage)又称伪码,半形式化、易编辑、易自动生成、没有图形描述直观2024/2/27A1、顺序型一、程序流程图B几个连续的加工依次序排列expFTAB2、选择型由某个判断式的取值决定选择两个加工中的一个。2024/2/273、当型循环型当循环控制条件成立时,重复执行特定的加工。expFTS4、直到型循环型重复执行特定的加工,直到循环控制条件成立时。expFTS2024/2/275、多情况选择型列出多种加工情况,根据控制变量的取值,选择执行其一。exp=1FTS1exp=2exp=nS2TSnTFF2024/2/27-----具有嵌套形式的程序流程图X1FTaX4cTfTFF入口bX2X3deghiX5X6FTFT=1=2=32024/2/27标准化程序流程图规定符号X1

起止端点输入/输出一般处理准备或预处理预定义处理条件判断循环上界循环下界文件或文档外接内接流程线虚线省略线并行方式注解或注释2024/2/27顺序型二、N-S

图AB选择型-------NassiandShneideman

BpFTA

ApFT

p=1=2…=n

A1

A2

Andowhile(p)Sdountil(p)S当型循环型直到型循环型多分支选择型2024/2/27零件号100011000210003100041000510006库存量100012508866920203450建立零件库(s数组),i=0输入零件号xdowhile(x!=s[0][i])i++i++x==s[0][i])

Y

Ns[0][i]输出s[1][i]

输入错误!

继续查询?

Y

N

跳出循环

2024/2/27三、PAD

图直到型循环型ABAB

pA

pWhileP

SUntilP

S当型循环型顺序型选择型A1

pA2An

=1

=2

=n多分支选择型循环型-------ProblemAnalysisDiagram2024/2/27s[17]~s[22]=0whilenum(1-1000)

输入

age

age

=17

s[17]++

s[18]++

=18

s[19]++

=19

s[20]++

=20

s[21]++

=21

s[22]++

=22whilei(17-22)

输出

s[i]beginend举例2024/2/27四、PDL-------ProgramDdesign

LanguagePDL是一种用于描述功能模块的算法设计和加工细节的语言。称为设计程序用语言。它是一种伪代码(Pseudocode)

PDL-----关键词+自然语言2024/2/27(1)、数据说明:格式:TYPE<变量名>AS<限定词1><限定词2>其功能是定义数据的类型和作用域说明:1.变量名:是一个模块内部使用的变量或模块间共用的全局变量名。2.限定词1:标明数据类型3.限定词2:标明该变量的作用域

TYPEnumberASSTRING

LENGTH(12)2024/2/27(2)、程序块:PDL的过程成分是由块结构构成的,而块将作为一个单个的实体来执行。

BEGIN<块名><一组伪代码语句>END2024/2/27(3)、子程序结构:把PDL中的过程称为子程序。

PROCEDURE<子程序名><一组属性>

INTERFACE

<参数表><程序块或一组伪代码语句>END2024/2/27(4)、基本控制结构:

IF<条件>

THEN

<程序块/伪代码语句组>;ELSE<程序块/伪代码语句组>;ENDIF---选择型结构

2024/2/27

DOWHILE<条件描述>

<程序块/伪代码语句组>;ENDDO

REPEATUNTIL<条件描述>

<程序块/伪代码语句组>;ENDREP---重复型结构

2024/2/27

DOLOOP<条件描述>

<程序块/伪代码语句组>;EXITWHENENDLOOP

DOFOR<下标=下标表,表达式>

<程序块/伪代码语句组>;ENDFOR---重复型结构

2024/2/27-----多路选择结构

CASEOF<case变量名>;

WHEN

<case条件1>SELECT<程序块/伪代码语句组>;WHEN

<case条件2>SELECT<程序块/伪代码语句组>;……

DEFAULT:

<缺省或错误case:<程序块/伪代码语句组>;ENDCASE2024/2/27

READ/WRITETO<设备><I/O表>

---输入/输出结构

2024/2/27EnteravectorSetMaximumtothevalueofthefirstelementinthevector

DO

foreachsecondonetothelast

IFvalueofTHENelementisgreaterthantheMaximumvalueSetMaximumtovalueoftheelement

ENDDOPrinttheMaximumvalueInputarrayAMax=A(1)DOforI=2toNIFMax<A(I)SetMax=A(I)ENDIFENDDOPrintMax详细设计的方法面向数据结构的设计方法:以数据结构为中心结构化设计方法以数据流为中心,建立良好的程序结构,将系统设计成由相对独立、功能单一的模块组成的结构。面向对象设计方法以对象为中心2.4.3编码编码(实现):程序设计(Programming)编码任务选择一种程序设计语言将详细设计文档“翻译”为程序(源程序代码)调试编码原则高效+技巧

安全+可靠时间、空间效率

可用性、可维护性、可移植性良好的编程风格可以减少软件错误阶段性标志:源程序代码编程风格源程序文档化:标识符名,注释,视觉组织

数据说明:变量名,排列顺序,注释语句构造:易读>效率,避免复杂的语句

输入和输出:校验,允许缺省值,输出加注释

效率:追求效率要建立在不损害程序可读性或可靠性基础之上。要先使程序正确、再提高效率,要先使程序清晰,再提高程序效率结构化程序设计采用自顶向下、逐步求精的设计方法;采用单入口单出口的控制结构;只包含顺序、选择和循环三种控制结构;2.4.4测试Exchange2000Windows2000项目经理25人约250人开发人员140人约1700人测试人员350人约3200人测试人员/开发人员2:51:9Exchange2000和Windows2000的人员结构软件测试人员的任务,就是站在使用者的角度上,通过不断地使用和攻击刚开发出来的软件产品尽量多地找出产品存在的问题,也就是我们所称的

Bug。软件测试软件测试:为了发现程序中的错误而执行程序的过程

测试目标最大限度地发现错误成功的测试是暴露出尚为发现的错误测试关键:测试方案的设计——测试用例和测试功能测试原则尽早地和不断地进行软件测试程序员应避免检查自己的程序要预先确定测试用例设计的测试用例应当包括合理的输入条件和不合理的输入条件充分注意测试中的群集现象—发现的错误多,残存错误数目就多,对这样的程序段要重点测试严格执行测试计划,排除测试的随意性应当对每个测试结果做全面检查妥善保存测试计划、测试用例、出错统计和最终分析报告

测试阶段单元测试、集成测试、系统测试、验收测试。是“从小到大”、“由内至外”、“循序渐进”的测试过程,体现了“分而治之”的思想。单元测试的粒度最小,一般由开发小组采用白盒方式来测试,主要测试单元是否符合“设计”。集成测试界于单元测试和系统测试之间,起到“桥梁作用”,一般由开发小组采用白盒加黑盒的方式来测试,既要验证“设计”又要验证“需求”。系统测试的粒度最大,一般由独立测试小组采用黑盒方式来测试,主要测试系统是否符合“需求规格说明书”。验收测试与系统测试非常相似,主要区别是测试人员不同,验收测试由用户执行。测试分类单元测试(又称模块测试)定义:对软件设计的最小单位(程序模块)进行的测试方法:采用白盒测试法辅之以黑盒测试法内容:模块接口测试、局部数据结构测试、路径测试、错误处理测试、边界测试时期:编码阶段组装测试(又称集成测试)定义:在单元测试的基础上将所有模块按照设计要求组装为完整的系统方法:渐增式测试和非渐增式测试内容:各模块的接口时期:编码完成阶段确认测试定义:验证软件的功能、性能及其他特性是否与用户的要求一致方法:

测试、β测试内容:有效性测试和验收测试阶段:即将交付使用 测试是在开发机构的监督下,由个别用户在确认测试阶段后期对软件进行测试,目的是评价软件的FLURPS(功能、局域化、可使用性、可靠性、性能和支持),注重界面和特色。

测试由支持软件预发行的客户对FLURPS进行测试,主要目的是测试系统的可支持性。FunctionTesting功能测试

LocalAreaTesting局域化测试

UsabilityTesting可使用性测试

RegressionTesting回归测试

PerformanceTesting性能测试

SupportabilityTesting可支持性测试测试和测试系统测试定义:把通过确认测试的软件作为整个计算机系统的一个元素与其他元素结合在一起在实际运行(使用)环境下,对计算机系统进行一系列的组装测试和确认测试2024/2/27软件测试设计的方法

软件的测试设计与软件产品的设计一样,是一项需要花费许多人力和时间的工作,我们希望以最少量的时间和人力,最大可能地发现最多的错误。测试技术1、白盒测试(WhiteBoxTesting)2、黑盒测试(BlackBoxTesting)前提:完全了解程序的结构和处理过程方法:穷尽测试、逻辑覆盖逻辑覆盖的标准语句覆盖判定覆盖条件覆盖判定/条件覆盖条件组合覆盖路径覆盖

白盒测试也叫玻璃盒测试或结构测试或逻辑驱动测试。对软件的过程性细节做细致的检查。这一方法是把测试对象看作一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,来设计或选择测试用例,对程序所有逻辑路径进行测试。白盒测试法最彻底的白盒测试法应该覆盖程序的每一条路径和每一个语句。然而,由于程序具有判断、循环等多种结构,所以,路径的组合数量将是非常大的,要想覆盖路径的每一种组合是不可能的,有选择地执行程序中某些最具有代表性的通路是对穷尽测试的唯一可行的替代方法。用于白盒测试的测试技术有:

逻辑覆盖测试循环测试基本路径测试等。1.逻辑覆盖测试●逻辑覆盖——是一组覆盖方法的总称,它是根据程序的内部逻辑结构来设计测试用例的●依据测试目标的不同,逻辑覆盖又具体分

语句覆盖判定覆盖条件覆盖判定―条件覆盖条件组合覆盖等几种。语句覆盖——指选择足够多的测试用例,保证程序中的每一条语句至少执行一次,是一种很弱的逻辑覆盖标准。判定覆盖又称为分支覆盖——指选择足够多的测试用例,保证程序中的每一个判定的真值与假值各取得一次,也就是说使得每个判定框的每一个分支至少执行一次。比语句覆盖强,但是对程序逻辑的覆盖程度仍然不高。条件覆盖——是指不仅每个语句至少执行一次,而且应该选择足够多的测试用例,使得判定表达式中的每一个条件都取得各种可能的结果。

条件覆盖通常比判定覆盖强,因为它使判定表达式中每个条件都取得了两个不同的结果,而判定覆盖却只是关心整个判定表达式的值。判定-条件覆盖。很多情况下,按照判定覆盖选取的测试用例不一定能够满足条件覆盖标准,反之,条件覆盖选取的测试用例也不一定能够满足判定覆盖标准。判定―条件覆盖就是同时满足这两种覆盖要求的逻辑覆盖,也就是选取足够多的测试用例,使每个判定的取真值分支与取假值分支至少各执行一次,并使程序的每一个判定中的每个条件取得各种可能值。条件组合覆盖——是更强的逻辑覆盖标准,它要求选取足够多的测试用例,使得每个判定表达式中条件的各种组合都至少出现一次。路径覆盖——选取足够多测试数据,使程序的每条可能路径都至少执行一次。路径覆盖是相当强的逻辑覆盖标准。2.循环测试●循环测试注重测试循环结构的有效性。●在结构化的程序设计中,通常只有3种循环:

简单循环 嵌套循环 串接循环2.循环测试●假设n是允许通过循环的最大次数。简单循环测试可以采用:

跳过循环; 只通过循环一次; 通过循环两次;

通过循环m次,其中m<n-1; 通过循环n-1次、n次、n+1次。2.循环测试●如果将简单循环测试的方法直接用于嵌套循环测试,可能的测试次数会随着嵌套循环的层数的增加按几何级数增长,导致不现实的测试数目。●B.Beizer提出了一种能减少测试数目的方法:从最内层循环开始测试,把所有其他循环都设置为最小值;对最内层循环使用简单循环测试,而使外层循环的迭代参数(例如:循环计数器)取最小值;由内向外,对下一个循环进行测试,但保持所有外层循环为最小值,其他嵌套循环为“典型”值;继续进行下去,直到测试完所有循环。2.循环测试●如果串接循环的各个循环都彼此独立,则可以使用简单循环测试的方法进行;●但若在两个串接循环中,第一个循环的循环计数器的值是第二个循环计数器的初始值,则这两个循环并不是独立的,这时,建议使用嵌套循环测试方法来测试串接循环。3.基本路径测试●在实际问题中,一个不是很复杂的程序,其路径个数都可能是一个庞大的数字,要覆盖所有的路径是不可能的,●因此,只能把覆盖的路径数压缩到一定的限度内进行测试。3.基本路径测试●基本路径测试是TomMcCabe提出的一种白盒测试技术,其基本思想是:以软件过程性描述为基础(例如,详细设计的程序流程图),通过分析它的控制流程计算复杂度,导出基本路径集合,并设计一组测试用例,确保程序中的每个语句至少执行一次,每一条路径都通过一次。2.4软件实现黑盒测试定义:只检查程序功能是否能按照需求规格说明书的规定正常运行,程序是否能接收输入数据并产生正确的输出信息,并且保持外部信息的完整性。

方法:等价类划分边界值分析错误推测2024/2/27一、等价分类法所谓等价分类,就是把输入数据的可能值划分为若干等价类(等价类是指某个输入域的子集合。在该集合中,各个输入数据对于揭露程序中的错误都是等价的)。因此,可以把全部输入数据合理地划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,这样就可以少量的代表性测试数据,来取得较好的测试结果。2024/2/27是指对于程序的规格说明来说,是合理的

有意义的输入数据构成的集合。利用它可以检验程序是否实现预先规定的功能和性能。有效等价类2024/2/27是指对于程序的规格说明来说,是不合理的,是无意义的输入数据构成的集合。程序员主要利用这一类测试用例来检查程序中功能和性能的实现是否不符合规格说明要求。无效等价类2024/2/271、如果输入条件规定了取值范围,或者是值的个数,则可以确立一个有效等价类和两个无效等价类。确定等价类的原则例如:…

…序号值可以从1到999…

…一个有效等价类:1≤序号值≤999

两个无效等价类:序号值<1

序号值>999

2024/2/272、如果输入条件规定了输入值的集合,或者是规定了“必须如何”的条件,这时可确立一个有效等价类和一个无效等价类。例如:在

C语言中对变量标识符规定为“以字母打头的

…串”。所有以字母打头的构成为有效等价类;而不在此集合内(不以字母打头)归于无价等价。2024/2/273、如果输入条件是一个布尔量,则可以确定一个有效等价类和一个无效等价类。2024/2/274、如果规定了输入数据是一组值,而且程序要对每个输入值分别进行处理。这时可为每一个输入值确立一个有效等价类此外再针对这组确立一个无效等价类,它应是所有不允许输入值的集合。例如:在教师分房方案中规定对教授、副教授、讲师和助教分别计算分数,做相应的处理。因此可以确定4个有效等价类为教授、副教授、讲师和助教,以及1个无效等价类它应是所有不符合以上身份的人员的输入值的集合。2024/2/275、如果规定了输入数据必须遵守的规则,则可以确定一个有效等价类(符合规则),和若干个无效等价类(从不同角度违反则)。

例如:在C语言中规定了“一个语句必须以分号‘;’作为结束”,这时,可以确定一个有效等价类,以“;”结束,而若干个无效等价类应以“:,、”等。2024/2/276、如果确知,已划分的等价类中各元素在程序中的处理方式不同,则应将此等价类进一步划分成更小的等价类。2024/2/27二、边界值分析法采用边界值分析法来选择测试用例,可使得被测程序能在边界值及其附近运行,从而更有效地暴露程序中潜藏的错误。2024/2/27三、错误猜测法所谓猜测,就是猜测被测程序在哪些地方容易出错,然后针对可能的薄弱环节来设计测试用例。显然它比前两种方法更多地依靠测试人员的直觉

温馨提示

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

评论

0/150

提交评论