计算机等级考试公共基础知识第三章课件

上传人:仙*** 文档编号:241760663 上传时间:2024-07-21 格式:PPTX 页数:103 大小:1.18MB
返回 下载 相关 举报
计算机等级考试公共基础知识第三章课件_第1页
第1页 / 共103页
计算机等级考试公共基础知识第三章课件_第2页
第2页 / 共103页
计算机等级考试公共基础知识第三章课件_第3页
第3页 / 共103页
点击查看更多>>
资源描述
大家好大家好1全国计算机等级考试二级公共基础知识周末班主讲老师:陈丽琼2第三章软件工程基础大纲要求(1)软件工程基本概念,软件生命周期概念,软件工具与软件开发环境。(2)结构化分析方法,数据流图,数据字典,软件需求规格说明书。(3)结构化设计方法,总体设计与详细设计。(4)软件测试的方法,白盒测试与黑盒测试j测试用例设计,软件测试的实施,单元测试、集成测试和系统测试。(5)程序的调试,静态调试与动态调试。3第三章软件工程基础3.1软件工程基本概念3.1.1软件的定义与软件的特点1.软件的定义计算机软件由两部分组成:一是机器可执行的程序和数据;二是机器不可执行的,与软件开发、运行、维护、使用等有关的文档。计算机软件是由程序、数据及相关文档构成的完整集合,它与计算机硬件一起组成计算机系统。4第三章软件工程基础 概念概念含含义软件件程序、数据和文档程序程序软件开发人员依据需求开发的,用某种程序设计语言描述额,能够在计算机中执行的语句序列数据数据使程序能够正常操纵信息的数据结构文档文档与程序开发、维护和使用有关的资料我国国家标准(简称国标,GB)中对计算机软件(Software)完整的定义是:与计算机系统操作有关的计算机程序、规程、规则,以及可能有的文件、文档及数据。5第三章软件工程基础2.软件的特点(1)软件是逻辑产品,而不是物理实体,它具有无形性,通过计算机的执行才能体现它的功能和作用;(2)没有明显的制作过程,其成本主要体现在软件的开发和研制上,可进行大量的复制;(3)软件在使用期间不存在磨损和消耗问题;(4)软件的开发、运行对计算机系统具有依赖性;(5)开发和维护成本高;(6)软件开发涉及诸多社会因素。6第三章软件工程基础3.软件的分类系统软件是管理计算机的资源,提高计算机的使用效率,为用户提供各种服务的软件。例如,操作系绕(OS)、数据库管理系统(DBMS)、编译程序、汇编程序和网络软件等。系统软件是最靠近计算机硬件的软件。应用软件为了应用于特定的领域而开发的软件。例如,我们熟悉的Word 2010、Excel2010、QQ和Flashget等软件属于应用软件。支撑软件是介于系统软件和应用软件之间,协助用户开发软件的工具型软件,其中包括帮助程序人员开发和维护软件产品的工具软件,也包括帮助管理人员控制开发进程和项目管理的工具软件。例如,Delphi、PowerBuilder等。7第三章软件工程基础4.软件的作用软件是用户与硬件之间的接口,是计算机系统的指挥者,是计算机系统结构设计的重要依据。8第三章软件工程基础3.1.2软件危机与软件工程1.软件的产生和发展软件生产的发展经历了程序设计时代、程序系统时代和软件工程时代。(1)程序设计时代从第一台计算机上的第一个程序的出现到实用的高级程序设计语言出现以前(1945年-1956年)。程序设计时代的生产方式是个体手工劳动,实用的工具是机器语言、汇编语言,主要通过编程来实现,不重视程序设计方法。9第三章软件工程基础(2)程序系统时代从实用的高级程序设计语言出现以后到软件工程出现以前(1956年-1968年)。程序系统时代的生产方式是作坊式小集团生产,生产工具是高级语言,开始提出结构化方法,但开发技术还没有根本性突破,开发人员素质和开发技术不适应规模大、结构复杂的软件开发,导致了软件危机的产生。(3)软件工程时代软件工程出现以后至今(1968年至今)。软件工程时代的生产方式是工程化生产,使用数据库、开发工具、开发环境、网络等先进的开发技术和方法,使生产效率大大提高,但未能完全摆脱软件危机。10第三章软件工程基础2软件危机 随着计算机软件规模的扩大,软件本身的复杂性不断增加,研制周期显著变长,正确性难以保证,软件开发费用上涨,生产效率急剧下降,从而出现了人们难以控制软件发展的局面,即所谓的“软件危机”。软件危机主要表现在:(l)软件需求的增长得不到满足;(2)软件开发成本和进度无法控制;(3)软件质量难以保证;(4)软件不可维护或维护程度非常低;(5)软件成本不断提高;(6)软件开发生产效率的提高赶不上硬件的发展和应用需求的增长。总之,可以将软件危机归结为成本、质量和生产卒等问题。11第三章软件工程基础3.软件工程的产生为了摆脱软件危机,北大西洋公约组织成员国软件工作者于1968年和1969年两次召开会议(NATO会议),认识早期软件开发中所存在的问题和产生问题的原因,提出软件工程的概念。国标(GB)中指出软件工程是应用于计算机软件的定义、开发和维护的一整套方法、工具、文档、实践标准和工序。软件工程包括3个要素,即方法、工具和过程。方法是完成软件工程项目的技术手段;工具支持软件的开发、管理、文档生成;过程支持软件开发的各个环节的控制、管理。12第三章软件工程基础自软件工程概念的提出,该研究领域吸引了众多的学者,并开展了大量的理论和技术的研究,形成了“软件工程学”这一计算机科学中的分支。它所包含的内容可概括为以下两点。(l)软件开发技术:主要有软件开发方法学、软件工具、软件工程环境。(2)软件工程管理:主要有软件管理、软件工程经济学。13第三章软件工程基础3.1.3软件工程过程(了解即可)1S09000定义:软件工程过程是把输入转化为输出的一组彼此相关的赘源和活动。软件工程过程包含4种基本活动。(1)软件规格说明P(Plan):规定软件的功能及其运行机制。(2)软件开发D(Do):产生满足规格说明的软件。(3)软件确认C(Check):确认软件能够满足客户提出的要求。(4)软件演进A(Action):为满足客户的变更要求,软件必须在使用的过程中演进。14第三章软件工程基础3.1.4软件生命周期1.软件生命周期的概念软件产品从提出、实现、使用、维护到停止使用、退役的过程称为软件生命周期。软件生命周期分为3个时期共8个阶段。软件定义期:包括问题定义、可行性研究和需求分析3个阶段;软件开发期:包括概要设计、详细设计、实现和测试4个阶段;运行维护期:即运行维护阶段。软件生命周期各个阶段的活动可以有重复,执行时也可以有迭代15第三章软件工程基础2.软件生命周期各阶段的主要任务问题定义。确定要求解决的问题是什么。可行性研究与计划制订。决定该问题是否存在一个可行的解决办法,制订完成开发任务的实施计划。需求分析。对待开发软件提出需求进行分析并给出详细定义。编写软件规格说明书及初步的用户手册,提交评审。软件设计。通常又分为概要设计和详细设计两个阶段,给出软件的结构、模块的划分、功能的分配及处理流程。该阶段提交评审的文档有概要设计说明书、详细设计说明书和测试计划初稿。软件实现。在软件设计的基础上编写程序。该阶段完成的文档有用户手册、操作手册等面向用户的文档,以及为下一步做准备而编写的单元测试计划。软件测试。在设计测试用例的基础上,检验软件的各个组成部分,编写测试分析报告。运行维护。将已交付的软件投入运行,同时不断地维护,进行必要而且可行的扩充和删改。16第三章软件工程基础3.1.5软件工程的目标与原则1.软件工程的目标软件工程的目标是:在给定成本、进度的前提下,开发出具有有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性且满足用户需求的产品。17第三章软件工程基础软件工程研究的内容主要包括:软件开发技术和软件工程管理。(1)软件开发技术。软件开发技术包括软件开发方法学、开发过程、开发工具和软件工程环境,其主体内容是软件开发方法学。软件开发方法学是从不同的软件类型,按不同的观点和原则,对软件开发中应遵循的策略、原则、步骤和必须产生的文档资料做出规定,从而使软件的开发能够规范化和工程化,以克服早期的手工方式生产中的随意性和非规范性。18第三章软件工程基础(2)软件工程管理。软件工程管理包括软件管理学、软件工程经济学、软件心理学等内容。软件工程管理是软件按工程化生产时的重要环节,它要求按照预先制订的计划、进度和预算执行,以实现预期的经济效益和社会效益。工程管理包括人员组织、进度安排、质量保证和成本核算等;软件工程经济学是研究软件开发中对成本的估算、成本效益分析的方法和技术。它应用经济掌的基本原理来研究软件工程开发中的经济效益问题;软件心理学从个体心理、人类行为、组织行为和企业文化等角度来研究软件管理和软件工程的。19第三章软件工程基础2.软件工程的原则(1)抽象。抽象事物最基本的特性和行为,忽略非本质细节,采用分层次抽象、自顶向下、逐层细化的办法控制软件开发过程的复杂性。(2)信息隐蔽。采用封装技术,将程序模块的实现细节隐藏起来,使模块接口尽量简单。(3)模块化。模块是程序中相对独立的成分,一个独立的编程单位,应有良好的接口定义。模块的大小要适中,模块过大会使模块内部的复杂性增加,不利于模块的理解和修改,也不利于模块的调试和重用;模块太小会导致整个系统表示过于复杂,不利于控制系统的复杂性。(4)局部化。要求在一个物理模块内集中逻辑上相互关联的计算资源,保证模块间具有松散的耦合关系,模块内部有较强的内聚性,这有助于控制系统的复杂性。20第三章软件工程基础(5)确定性。软件开发过程中所有概念的表达应是确定的、无歧义且规范的。这有助于人与人的交互,不会产生误解和遗漏,以保证整个开发工作的协调一致。(6)一致性。包括程序、数据和文档的整令软件系统的各模块应使用已知的概念、符号和术语;程序内外部接口应保持一致,系统规格说明与系统行为应保持一致。(7)完备性。软件系统不丢失任何重要成分,完全实现系统所需的功能。(8)可验证性。开发大型软件系统需要对系统自顶向下,逐层分解。系统分解应遵循容易检查、测评、评审的原则,以确保系统的正确性。21第三章软件工程基础3.1.6软件开发工具与软件开发环境工具和环境的使用进一步提高了软件的开发效率、维护效率和软件质量。(l)软件开发工具。软件开发工具是协助开发人员进行软件开发活动所使用的软件或环境,它包括需求分析工具、设计工具、编码工具、排错工具、测试工具等。(2)软件开发环境。软件开发环境是指支持软件产品开发的软件系统,它由软件工具集成和环境集成机制构成。工具集成包括支持软件开发相关过程、活动、任务的软件工具,以便对软件开发提供全面的支持。环境集成机制为工具集成和软件开发、维护与管理提供统一的支持,它通常包括数据集成、控制集成和界面集成3个部分。22第三章软件工程基础3.2结构化分析方法3.2.1可行性研究(目的在于用最小的代价在尽可能短的时间内确定问题是否能解决)(1)经济可行性研究 分析系统的估算开发成本是否会超过项目预期的全部利润。分析系统开发对其他产品或利润的影响。(2)技术可行性研究根据客户提出的系统功能、性能及现实系统的各项约束条件,从技术角度研究实现系统可行性。技术可行性研究包括:风险分析、资源分析和技术分析。23第三章软件工程基础风险分析的任务是在给定的约束条件下,判断能否设计并实现系统所需功能和性能。资源分析的任务是论证是否具备系统开发所需的各类人员、软件、硬件资源和工作环境等。技术分析的任务是当前的科学技术是否支持系统开发的全过程。(3)法律可行性分析 研究在系统开发过程中可能涉及的各种合同、侵权、责任以及同法律相抵触的问题。(4)开发方案的选择性研究提出并评价实现系统的各种开发方案,并从中选出一种最适宜项目的开发方案。24第三章软件工程基础3.2.2需求分析方法需求分析的任务是发现需求、求精、建模和定义需求的过程。(l)需求分析的定义 LEEE软件工程标准词汇表对需求分析定义如下:用户解决问题或达到目标所需的条件或权能;系统或系统部件要满足合同、标准、规范或其他正式规定文档所具有的条件或权能;一种反映或所描述的条件或权能的文档说明。25第三章软件工程基础(2)需求分析阶段的工作 需求分析阶段的工作可概括为4个方面:需求获取;需求分析;编写需求规格说明书;需求审评。26第三章软件工程基础 2需求分析的方法 (1)结构化分析方法。主要包括面向数据流的结构化分析方法、面向数据结构的Jackson系统开发方法和面向数据结构的结构化数据系统开发方法。(2)面向对象的分析方法。从需求分析建立的模型的特点来分,需求分析方法分为静态分析方法和动态分析方法。27第三章软件工程基础3.2.3结构化分析方法的概念(了解即可)结构化分析方法是结构化程序设计理论在软件需求分析阶段的运用。结构化分析方法(Structure AnalysisSA)是面向数据流进行需求分析的方法,采用自顶向下、逐层分解,建立系统的处理流程,以数据流图和数据字典为主要工具,建立系统的逻辑模型。结构化分析方法的步骤如下:(1)通过对用户的调查,以软件的需求为线索,获得当前系统的具体模型;(2)去掉具体模型中的非本质因素,抽象出当前系统的逻辑模型;(3)根据计算机的特点分析当前系统与目标系统的差别,建立目标系统的逻辑模型;(4)完善目标系统并补充细节,写出目标系统的软件需求规格说明;(5)评审直到确认完全符合用户对软件的需求。28第三章软件工程基础3.2.4 结构化分析常用工具结构化分析方法利用图形等半形式化的描述方式表达需求,简明易懂,用它们形成需求说明书中的主要部分。这种方法所用的常用工具有:数据流图、数据字典、判定树和判定表。29第三章软件工程基础1.数据流图数据流图(Data FlOW Diagram,DFD),它以图形的方式描绘数据在系统中流动和处理的过程,它只反映系统必须完成的逻辑功能,所以是一种功能模型。30第三章软件工程基础绘制数据流图的基本原则如下:(1)数据流图上所有的基本图形符号一般应是上述的4种基本元素;(2)数据流图的主图必须含有前面所述的4种基本元素,缺一不可;(3)数据流图的圭图上的数据流必须封闭在外部实体之间,实体可以是个,也可以是多个;(4)变换框至少有一个输入数据流和一个输出数据流;(5)图上的每个元素都必须命名;(6)任何一个数据流子图必须与它的父图上的一个变换框对应,两者的输入数据流和输出数据流必须一致。31第三章软件工程基础2.数据字典数据字典(Data Dictionary,DD)是对数据流图中所有元素的定义的集合,是结构化分析的核心。数据流图和数据字典共同构成系统的逻辑模型,没有数据字典数据流图就不严格,若没有数据流图,数据字典也难于发挥作用。数据字典中有4种类型的条目:数据流、数据项、数据存储和加工。在数据字典各条目的定义中,常使用下述符号32第三章软件工程基础33第三章软件工程基础3.判定树判定树,又称决策树,是一种描述加工的图形工具,适合描述问题处理中具有多个判断,而且每个决策与若干条件有关。使用判定树进行描述时,应先从问题定义的文字描述中分清哪些是判定的条件,哪些是判定的结论,根据描述材料中的连接词找出判定条件之间的从属关系、并列关系、选择关系,根据它们构造判定树。34第三章软件工程基础4.判定表判定表与判定树相似,也是一种描述加工的图形工具。当数据流图中的加工要依赖于多个逻辑条件的取值,即完成该加工的一组动作是由于某一组条件取值的组合引发的,使用判定表比较适宜。35第三章软件工程基础3.2.5 结构化方法开发过程结构化方法将软件生命周期分为计划、开发、运行3个时期,每个时期又分若干阶段。(1)计划期计划期的主要任务是分析新系统应设定的目标,分析用户的基本需求,按设定目标的要求进行问题定义,并分析开发该系统的可行性,用户与分析人员的交互和配合是这一时期的重要特征和要求。问题定义确定软件系统的主要功能。分析人员在与用户讨论的基础上提出软件系统目标、范围与功能说明。可行性研究对问题定义阶段所确定的问题实现的可能性和必要性进行研究,并讨论问题的勰决办法,对各种可能方案做出必要的成本一效益分析,分析人员据此提出可行性分析报告,作为使用部门是否继续进行该项工程的依据。36第三章软件工程基础(2)开发期开发期包括分析、设计和实施两类任务。其中分析、设计包括需求分析、总体设计和详细设计3个阶段,实施则包括编码和测试两个阶段。需求分析。确定用户对软件系统的功能性和非功能性的全部需求,并以需求规格说明书的形式表达。总体设计。建立软件系统的总体结构,子系统划分,并提出软件结构图。详细设计。确定软件结构图中每个模块的内部过程和结构。编码。按照选定软仵的程序语言,将模块的过程性描述翻译成程序。测试。发现并排除上述各阶段所产生的各种错误。(3)运行期运行期的主要任务是软件维护。37第三章软件工程基础3.2.6 软件需求规格说明书软件需求规格说明书(Software Requirement Specification,SRS)是需求分析阶段的最后成果,是软件开发的重要文档之一。(1)软件需求规格说明书的作用便于用户、开发人员进行理解和交流。反映出用户问题的结构,可以作为软件开发工作的基础和依据。作为确认测试和验收的依据。(2)软件需求规格说明书的内容软件需求规格说明书是作为需求分析的一部分而制定的可交付文档。该说明书把在软件计划中确定的软件范围加以展开,制订出完整的信息描述、详细的功能说明、恰当的检验标准以及其他要求有关的数据。38第三章软件工程基础(3)软件需求规格说明书的特点软件需求规格说明书是确保软件质量的有力措施。衡量软件需求规格说明书质量好坏的标准,标准的优先级及标准的内涵如下。正确性:SRS首先要正确地反映待开发系统,体现系统的真实要求。无歧义性:对每一个需求不能有两种解释。完整性:SRS要涵盖用户对系统的所有需求,包括功能要求、性能要求、接口要求、设计约束等。可验证性:SRS描述的每一个需求都可在有限代价的有效过程中验证确认。39第三章软件工程基础一致性:各个需求的描述之间不能有逻辑上的冲突。可理解性:为了使用户能看懂SRS,应尽量少使用计算机的概念和术语。可修改性:SRS的结构风格在有需要时不难改变。可追踪性:每个需求的来源和流向是清晰的。作为设计的基础和验收的依据,软件需求规格说明书应该精确而无二义性,并且简单易懂,这样可以方便后面的设计,以及用户看懂说明书,并且发现和指出其中的错误以保证软件系统质量。40第三章软件工程基础3.3 结构化设计方法3.3.1 软件设计的基本概念1软件设计的基础软件设计是软件工程的量要阶段,是一个把软件需求转换为软件表示的过程。软件设计的重要性和地位概括为以下几点:(l)软件开发阶段(设计、编码、测试)占软件项目开发总成本的绝大部分,是在软件开发中形成质量的关键环节;41第三章软件工程基础(2)软件设计是开发阶段最重要的步骤,是将需求准确地转化为完整的软件产品或系统的唯一途径;(3)软件设计做出的决策,最终影响软件实现的成败;(4)设计是软件工程和软件维护的基础。42第三章软件工程基础从技术观点上看,软件设计包括软件结构设计、数据设计、接口设计、过程设计。从工程管理角度来看,软件设计分两步完成:概要设计和详细设计。软件设计的一般过程是:软件设计是一个迭代的过程;先进行高层次的结构设计;然后进行低层次的过程设计;穿插进行数据设计和接口设计。2.软件设计的基本原理软件设计遵循软件工程的基本目标和原则,建立了适用于软件设计中应该遵循的基本原理和与软件设计有关的概念。43第三章软件工程基础(1)抽象。抽象是一种思维工具,就是把事物本质的共同特性提取出来而不考虑其细节。(2)模块化:模块是指把一个待开发的软件分解成若干小的简单的部分。模块化是指解决一个复杂问题时自顶向下逐层把软件系统划分成若干模块的过程。(3)信息隐蔽。信息隐蔽是指在一个模块内包含的信息(过程或数据),对于不需要这些信息的其他模块来说是不能访问的。(4)模块独立性。模块独立性是指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。44第三章软件工程基础模块的独立程度是评价设计好坏的重要度量标准。衡量软件的模块独立性使用耦合性和内聚性两个定性的度量标准。内聚性是度量一个模块功能强度的一个相对指标,耦合性则用来度量模块之间的相互联系程度。45第三章软件工程基础耦合可以分为下列几种,它们之间的耦合度由高到低排列:内容耦合若一个模块直接访问另一模块的内容,则这两个模块称为内容耦合。公共耦合若一组模块都访问同一全局数据结构,则称为公共耦合。外部耦合若一组模块都访问同一全局数据项,则称为外部耦合。控制耦合若一模块明显地把开关虽、名字等信息送入另一模块,控制另一模块的功能,则称为控制耦合。标记耦合若两个以上的模块都需要其余某一数据结构的子结构时,不使用其余全局变量的方式而是使用记录传递的方式,这样的耦合称为标记藕合。数据耦合若一个模块访问另一个模块,被访问模块的输入和输出都是数据项参数,则这两个模块为数据耦合。非直接耦合若两个模块没有直接关系,它们之间的联系完全是通过程序的控制和调用来实现的,则称这两个模块为非直接耦合,这样的耦合独立性最强。46第三章软件工程基础内聚是从功能角度来衡量模块的联系,它描述的是模块内的功能联系。内聚具有如下种类,它们之间的内聚度由弱到强排列。偶然内聚模块中的代码无法定义其不同功能的调用。但它使该模块能执行不同的功能,这种模块称为巧合强度模块。逻辑内聚这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块的参数来确定该模块应完成哪一种功能。时间内聚这种模块顺序完成一类相关功能,比如初始化模块,它顺序地为变量置初值。过程内聚如果一个模块内的处理元素是相关的,而且必须以特定次序执行,则称为过程内聚。通信内聚这种模块除了具有过程内聚的特点外,还有另钋一种关系,即它的所有功能都通过使用公用数据而发生关系。顺序内聚如果一个模块内各个处理元素和同一个功能密切相关,而且这些处理必须顺序执行,一个处理元素的输出数据作为下一个处理元素的输入数据,则称为顺序内聚。47第三章软件工程基础功能内聚如果一个模块包括为完成某一具体任务所必需的所有成分,或者说模块中所有成分结合起来是为了完成一个具体的任务,此模块则称为功能内聚模块。耦合性与内聚性是模块独立性的两个定性标准,耦合与内聚是相互关联的。在程序结构中,各模块的内聚性越强,则耦合性越弱。一般较优秀的软件设计,应尽量做到高内聚、低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。48第三章软件工程基础3结构化设计方法的基本要求结构化设计方法的基本要求是:在详细设计阶段,为了确保模块逻辑清晰,就应该要求所有的模块只使用单人日、单出口以及顺序、选择和循环3种基本控制结构。这样,不论一个程序包含多少个模块,每个模块包含多少个基本的控制结构,整个程序仍能保持一条清晰的线索。49第三章软件工程基础3.3.2 概要设计任务概要设计又称总体设计,软件概要设计的基本任务如下所述。(1)设计软件系统结构为了实现目标系统,先进行软件结构设计50第三章软件工程基础51第三章软件工程基础 (2)数据结构及数据库设计 数据设计是实现需求定义和规格说明中提出的数据对象的逻辑表示。(3)编写概要设计文档 概要设计阶段的文档有概要设计说明书、数据库设计说明书和集成测试计划等。(4)概要设计文档评审 在文档编写完成后,要对设计部分是否完整她实现了需求中规定的功能、性能等要求,设计方案的可行性,关键的处理及内外部接口定义正确性、有效性,各部分之间的一致性等进行评审,以免在以后的设计中出现大的问题而返工。结构图(Stucture Chart,SC),也称程序结构图,是描述软件结构的图形工具,是常用的软件结构设计工具52第三章软件工程基础53第三章软件工程基础软件结构图是软件系统的模块层次结构,反映了整个系统的功能实现。结构图有4种常用的模块类型:传入模块、传出模块、变换模块和协调模块,其表示图形如图3-3所示。54第三章软件工程基础3.3.3面向数据流的设计方法面向数据流的结构化设计(SD),能够方便地将数据流图DFD转换成程序结构图。DFD从系统的输入数据流到系统的输出数据流的一连串连续加工形成了一条信息流。1数据流的类型 数据流图的信息流可分为两种类型:变换流和事务流。相应地,数据流图有两种典型的结构形式:变换型和事务型。55第三章软件工程基础2.面向数据流设计方法的实施要点与设计过程面向数据流的结构设计过程和步骤是:(1)分析、确认数据流图的类型,区分是事务型还是变换型;(2)说明数据流的边界;(3)把数据流图映射为程序结构;(4)根据设计准则把数据流转换成程序结构图。56第三章软件工程基础将变换型映射成结构图,又称为变换分析,其步骤如下:(1)确定数据流图是否具有变换特性;(2)确定输入流和输出流的边界,划分出输入、变换和输出,独立出变换中心;(3)进行第一级分解,将变换型映射成软件结构;(4)按上述步骤如出现事务流的映射方式对各个子流进行逐级分解,直至分解到基本功能;(5)对每个模块写一个简要的说明;(6)利用软件的设计原则对软件结构进一步转化。57第三章软件工程基础将事务型映射成结构图,又称为事务分析。其步骤与变换分析的设计步骤大致类似,主要差别仅在于由数据流图到软件结构的映射方法不同。它是将事务中心映射成为软件结构中发送分支的调度模块,将接收通路映射成软件结构的接收分支。58第三章软件工程基础大量的实践表明,以下的设计准则可以借鉴为设计的指导和对软件结构图进行优化的条件:(l)提高模块独立性;(2)模块规模适中;(3)深度、宽度、扇出和扇入适当;(4)使模块的作用域在该模块的控制域内;(5)应减少模块的接口和界面的复杂性:(6)设计成单人口、单出口的模块;(7)设计功能可预测的模块。59第三章软件工程基础3.3.5 详细设计详细设计的任务,是为软件结构图中的每一个模块确定实现算法和局部数据结构,用某种选定的表达工具表示算法和数据结构的细节。常用的过程设计工具如下所述。图形工具:程序流程图、N-S图、PAD图、HIPO。表格工具:判定表。语言工具:PDL(伪码)。60第三章软件工程基础1.程序流程图程序流程图,又称为程序框图,在程序流程图中,构成程序流程图的最基本图符及含义如下所述:方框表示一个加工步骤;菱形表示一个逻辑条件;箭头表示控制流。按照结构化程序设计的要求,程序流程图构成的所有程序描述可分解为5种控制结构61第三章软件工程基础1顺序型:几个连续的加工步骤依次排列构成。2选择型:由某个逻辑判断式的取值决定选择两个加工中的一个62第三章软件工程基础3先判断重复型(WHILE型):先判断循环控制条件是否成立,成立则执行循环体语句。4后判断重复型(UNTIL型):重复执行某些特定的加工,直到控制条件成立。63第三章软件工程基础5分支选择型:列举多种加工情况,根据控制变量的取值,选择执行其中之一。通过把5种基本结构相互组合或嵌套,可以构成任何复杂的程序流程图。64第三章软件工程基础2.N-S图 为了避免流程图在描述程序逻辑时的随意性与灵活性,1973年Nossi和Shneiderman提出了用方框图代替传统的程序流程图,引起了人们的重视,人们也把这种图称为N-S图。方框图中仅含5种基本的控制结构,即顺序型、选择型、多分支选择型、WHILE重复型和UNTIL重复型,如图3-7所示。65第三章软件工程基础66第三章软件工程基础3PAD图 PAD是问题分析图(Problem Analysis Diagram)的英文缩写。它是继流程图和方框图之后,由日本的二村良彦等人在1979年提出的又一种主要用于描述软件详细设计的图形表示工具。与方框图一样,PAD也只能描述结构化程序允许使用的几种基本结构。PAD图的基本图符表示5种基本控制结构,如图3-8所示。67第三章软件工程基础68第三章软件工程基础 4PDL PDL是过程设计语言(Procedure Design Language)的英文缩写,也称为伪码。一般说来,PDL是一种“混合”语言,它使用一种语言(英语)的词汇用另一种语言(某种结构化的程序设计语言)的语法。用PDL表示的基本控制结构的常用词汇如下:顺序:A/A END 条件:IF/THEN/ELSE/ENDIF 循环:DO WHILE/ENDDO 循环:REPEAT UNTIL/ENDREPEAT 69第三章软件工程基础3.4软件的测试软件测试就是在软件投入运行之前,尽可能多地发现软件中的错误。软件测试是保证软件质量、可靠性的关键步骤。它是对软件规格说明、设计和编码的最后复审。通常,软件测试的工作量往往占软件开发总工作量的40%以上。70第三章软件工程基础3.4.1 软件测试的目的和准则软件测试的目的 Grenford.JMyers给出了软件测试的目的:(1)测试是为了发现程序中的错误而执行程序的过程;(2)好的测试用例(test case)很可能发现迄今为止尚未发现的错误;(3)一次成功的测试是指发现了至今为止尚未发现的错误。测试的目的是发现软件中的错误,但是,暴露错误并不是软件测试的最终目的,测试的根本目的是尽可能多地发现并排除软件中隐藏的错误。71第三章软件工程基础软件测试的准则 根据上述软件测试的目的,为了能设计出有效的测试方案,以及好的测试用例,软件测试人员必须深入理解,并正确运用以下软件测试的基本准则:(l)所有测试都应追溯到用户需求;(2)在测试之前制订测试计划,并严格执行;(3)充分注意测试中的群集现象;(4)避免由程序的编写者测试自己的程序;(5)不可能进行穷举测试;(6)妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便。72第三章软件工程基础3.4.2 软件测试技术与方法软件测试具有多种方法,根据软件是否需要被执行,可以分为静态测试和动态测试。如果按照功能划分,可以分为白盒测试和黑盒测试。73第三章软件工程基础1.静态测试与动态测试 静态测试一般是指人工评审软件文档或程序,借以发现其中的错误。由于被评审的文档或程序不必运行,所以称为静态的。静态测试包括代码检查、静态结构分析、代码质量度量等。静态测试可以由人工运行,充分发挥人的逻辑思维优势,也可以借助软件工具自主运行。动态测试是指通常的上机测试,这种方法是使程序有控制地运行,并从多种角度观察程序运行时的行为,以发现其中的错误。74第三章软件工程基础测试是否能够发现错误取决于测试实例的设计。动态测试的设计测试实例方法一般有两类:黑盒测试方法和白盒测试方法。设计高效、合理的测试用例是动态测试的关键。测试用例是为测试设计的数据。测试用例由测试输入数据和与之对应的预期输出结果两部分组成。测试用例的格式如下:(输入值集),(输出值集)75第三章软件工程基础2.白盒测试方法与测试用例设计白盒测试又称为结构测试或逻辑驱动测试。它允许测试人员利用程序内部的逻辑结构及相关信息来设计或选择测试用例,对程序所有的逻辑路径进行测试。白盒测试是在程序内部进行,主要用于完成软件内部操作的验证。白盒测试的基本原则是:保证所测模块中每一个独立路径至少执行一次;保证所测试模块所有判断的每一个分支至少执行一次;保证所测模块的每一个循环都在边界条件和一般条件下至少执行一次;验证所有内部数据结构的有效性。76第三章软件工程基础白盒测试法主要有逻辑覆盖和基本路径测试等。(1)逻辑覆盖测试。泛指一系列以程序内部的逻辑结构为基础的测试用例设计技术。通常所指的程序中的逻辑表示有判断、分支、条件3种表示方式。语句覆盖。语句覆盖是一个比较弱的测试标准,它的含义是,选择足够的测试实例,使得程序中的每一个语句都能执行一次。路径覆盖。执行足够的测试用例,使程序中所有的可能路径都至少经历一次:判定覆盖。设计足够的测试实例,使得程序中的每个判定至少都获得一次“真值”和“假值”的机会。判定覆盖要比语句覆盖严格,因为如果每个分支都执行过了,则每个语句也执行过了。77第三章软件工程基础条件覆盖。对于每个判定中所包含的若干个条件,应设计足够多的测试实例,使得判定中的每个条件都取到“真”和“假”两个不同的结果。条件覆盖通常比判定覆盖疆:但也有的测试实例满足条件覆盖而不满足判定覆盖。判断一条件覆盖。设计足够多的测试实例,使得判定中的每个条件都能取得各种可能的“真”和“假”值,并且使每个判定都能取到“真”和“假”两种结果。(2)基本路径测试。它的思想和步骤是,根据软件过程性描述中的控制流程确定程序的环路复杂性度量,用此度量定义基本路径集合,并由此导出一组测试用例对每一条独立执行路径进行测试。78第三章软件工程基础3.黑盒测试方法与测试用例设计黑盒测试方法,又称功能测试或数据驱动测试,着重测试软件功能。白盒测试在测试过程的早期阶段进行,而黑盒测试主要用于软件的确认测试。黑盒测试完全不孝虑程序内部的逻辑结构和处理过程,黑盒测试是在软件接口处进行,检查和验证程序的功能是否符合需求规格说明书的功能说明。常用的黑盒测试方法和技术有:等价类划分法、边界值分析法、错误推测法,因果图法等。79第三章软件工程基础(1)等价类划分法 等价类划分法是一种常用的黑盒测试方法,这种技术的方法是先把程序的所有可能的输入划分成若干个等价类,然后根据等价类选取相应的测试用例。每个等价类中各个输入数据对于发现程序中错误的几率几乎是相同的。因此,从每个等价类中只取一组数据作为测试数据,这样选取的测试数据最有代表性,最可能发现程序中的错误,并且大大减少了需要的测试数据的数量。80第三章软件工程基础(2)边界值分析法 边界值分析法是对各种输入、输出范围的边界情况设计测试用例的方法。大量的实践表明,程序在处理边界值时容易出错,因此设计一些测试用例,使程序运行在边界情况附近,这样揭露程序中错误的可能性就更大。选取的测试数据应该刚好等于、小于和大于边界值。也就是说,按照边界值分析法,应该选取刚好等于、稍小于和稍大于等价类边界值的数据作为测试数据,而不是选取每个等价类内的典型值或任意值作为测试数据。通常设计测试方案时总是把等价类划分法和边界值分析法结合使用。81第三章软件工程基础(3)错误推测法 错误推测法概念。错误推测法是一种凭直觉和经验推测某些可能存在的错误,从而针对这要依靠直觉和经验。错误推测法针对性强,可以直接切入可能的错误,直接定位,是一种非常实用、有效的方法,但是需要非常丰富的经验。错误推测法实施步骤。首先对被测试软件列出所有可能出现的错误和易错情况表,然后基于该表设计测试用例。82第三章软件工程基础3.4.3 软件测试的实施软件测试是保证软件质量的重要手段,软件测试是一个过程,其测试流程是该过程规定的程序,目的是使软件测试工作系统化。软件测试的实施过程分4个步骤,即单元测试、集成测试、确认测试和系统测试83第三章软件工程基础1.单元测试单元测试是对软件设计的最小单位模块(程序单元)进行正确性检验测试。单元测试的目的是发现备模块内部可能存在的各种错误。单元测试的依据是详细的设计说明书和源程序。单元测试的技术可以采用静态分析和动态测试。对动态测试通常以白盒动态测试为主,辅之以黑盒测试。单元测试是针对单个模块,这样的模块通常不是一个独立的程序,需要考虑模块和其他模块的调用关系。在单元测试中,用一些辅助模块去模拟与被测模块相联系的其他模块,即为测试模块设计驱动模块和桩模块,构成一个模拟的执行环境进行测试,如图3-9所示。84第三章软件工程基础85第三章软件工程基础驱动(Driver)模块就相当于一个“主程序”,它接收测试数据,把这些数据传送给被测试的模块,输出有关的结果。桩(Stub)模块代替被测试的模块所调用的模块。因此桩模块也可以称为“虚拟子程序”。它接受被测模块的调用,检验调用参数,模拟被调用的子模块的功能,把结果送回被测试的模块。在软件的结构图中,顶层模块测试时不需要驱动模块,最底层的模块测试时不需要桩模块。86第三章软件工程基础2.集成测试集成测试是测试和组装软件的过程。集成测试主要发现设计阶段产生的错误,集成测试的依据是概要设计说明书,通常采用黑盒测试。集成测试的内容主要有以下4个方面:软件单元的接口洌试;全局数据结构测试;边界条件测试;非法输入测试。87第三章软件工程基础集成的方式可以分为非增量方式集成和增量方式集成两种。非增量方式是先分别测试每个模块,再把所有模块按设计要求组装一起进行整体测试,因此,非增量方式又称一次性组装方式。增量方式是把要测试的模块同已经测试好的那些模块连接起来进行测试,测试完以后再把下一个应测试的模块连接进来测试。增量方式包括自顶向下、自底向上,以及自顶向下和自底向上相结合的混合增量方法。88第三章软件工程基础3.确认测试确认测试的任务是检查软件的功能、性能及其他特征是否与用户的需求一致,它是以需求规格说明书作为依据的测试。确认测试通常采用黑盒测试。确认测试首先测试程序是否满足规格说明书所列的各项要求,然后要进行软件配置复审。复审的目的在于保证软件配置齐全、分类有序,以及软件配置所有成分的完备性、一致性、准确性和可操作性,并且包括软件维护所必需的细节。89第三章软件工程基础4.系统测试在确认测试完成后,把软件系统整体作为一个元素,与计算机硬件、支持软件、数据、人员和其他计算机系统的元素组合在一起,在实际运行环境下对计算机系统进行一系列的集成测试和确认测试,这样的测试称为系统测试。系统测试的目的是在真实的系统工作环境下检验软件是否能与系统正确连接,发现软件与系统需求不一致的地方。系统测试的内容包括:功能测试、操作测试、配置测试、性能测试、安全性测试、外部接口测试等。90第三章软件工程基础3.5程序的调试在对程序进行成功测试之后将进行程序调试(排错)。程序调试的任务是诊断和改正程序中的错误。91第三章软件工程基础3.5.1程序调试的概念调试(也称为Debug,排错)是作为成功测试的后果出现的步骤,也就是说,调试是在测试发现错误之后排除错误的过程。软件测试贯穿整个软件生命期,而调试主要在开发阶段。程序调试活动由两部分组成:根据错误的迹象确定程序中错误的确切性质、原因和位置;对程序进行修改,排除这个错误。92第三章软件工程基础1.程序调试的基本步骤(1)错误定位。从错误的外部表现形式人手,研究有关部分的程序,确定程序中出错的位置,找出错误的内在原因。(2)修改设计和代码,以排除错误。排错是软件开发过程中一项艰苦工作,这也决定了调试工作是一个具有很强技术性和技巧性的工作。(3)进行回归测试,防止引进新的错误。因为路改程序可能带来新的错误,重复进行暴露这个错误的原始测试或某些有关测试,以确认该错误是否被排除、是否引进了新的错误。93第三章软件工程基础2.程序调试原则调试原则也从程序中错误的定性、定位和排错两部分来考虑(l)错误定性和定位的原则 集中思考分析和错误现象有关的信息。不要钻死胡同。如果在调试中陷入困境,可以暂时放在一边,或者通过讨论寻找新的思路。不要过分信赖调试工具。调试工具只能提供一种无规律的调试方法,不能代替人思考。避免用试探法。试探法其实是碰运气的盲目动作,成功率很小,是没有办法时的办法。94第三章软件工程基础(2)修改错误的原则 在错误出现的地方,可能还有其他错误。因为经验表明,错误有群集现象。修改错误的一个常见失误是只修改了这个错误的现象,而没有修改错误本身。如果提出的修改不能解释与这个错误有关的全部线索,这就表明只修改了错误的一部分。必须明确,修改一个错误的同时可能引入了新的错误解决的办法是在修改了错误之后,必须进行回归测试。修改错误的过程将迫使人们暂时回到程序设计阶段。修改错误也是程序设计的一种形式,在程序设计阶段所使用的任何方法都可以应用到错误修正的过程中来。修改源代码程序,不要改变目标代码。95第三章软件工程基础3.5.2 软件调试的方法软件调试从是否跟踪和执行程序的角度,分为静态调试和动态调试。静态调试是主要的调试手段,是指通过人的思维来分析源程序代码和排错,而动态调试是静态测试的辅助。96第三章软件工程基础1强行排错法 作为传统的调试方法,强行排错法的过程可概括为设置断点、程序暂停、观察程序状态、继续运行程序。在使用任何一种调试方法之前,必须首先进行周密的思考,必须有明确的目的,应该尽量减少无关信息的数量。97第三章软件工程基础 2回溯法 回溯法适合于小规模程序的排错,即一旦发现了错误,先分析错误征兆,确定最先发现 “症状”的位置。然后,从发现“症状”的地方开始,沿程序的控制流程,逆向跟踪源程序代码,直到找到错误根源或确定出错产生的范围。98第三章软件工程基础3原因排除法 原因排除法是通过演绎、归纳、二分法来实现的。演绎法是一种从一般原理或前提出发,经过排除和精化的过程来推导出结论的思考方法。归纳法是一种从特殊推断出一般的系统化思考方法。其基本思想是从一些线索着手,通过分析寻找到潜在的原因,从而找出错误。二分法实现的基本思想是,如果已知每个变量在程序中若干个美键点的正确值,则可以使用定值语句(如赋值语句、输入语句等)在程序中的某点附近给这些变量赋正确值,然后运行程序并检查程序的输出。99第三章软件工程基础3.6软件工程管理 1软件工程管理的职能 (1)组织管理。软件开发将涉及业务人员和技术人员,只有他们的共同参与才能保证待开发的软件能根据用户提出的需求,在软件技术人员配合下顺利完成。(2)人员管理。软件开发,特别是应用软件开发,需要各方面和各层次人员参加。完备的人员组织和管理,明确的任务分工,特别是开发人员和测试人员间的分工和配合,将对软件开发的质量起到良好的保证。(3)资源管理。软件是特定系统的组成部分,它的开发也是系统开发的组成部分,软件开发离不开系统环境资源的支持,它们包括硬件、支撑软件、通信和辅助资源。(4)计划管理。计划管理包括对整个软件生命周期的计划安排和执行,工作量的估算和分配以及具体的进度安排。100第三章软件工程基础2.进度安排(1)进度的表示方法。明确软件开发的起始时间和交付时间是制定进度的关键数据,在总开发时间内科学地划分软件生命周期各时间段内的比例是非常关键的。(2)进度的安排方法。当前主要的进度安排方法包括:甘特图方法,即Grant方法;时间标记网络法(Time Scalar Network)、进度计划评审法(Program Evaluation and Review Technique)和关键路径法(CriLical Path Method)等。101第三章软件工程基础3.标准化 对于规模化的生产,科学的管理应该是规范化的管理和标准化的管理。对于软件生产和软件生产工程化,当其规模达到一定程度后,其管理的规范化和标准化要求就十分迫切了。(l)软件工程标准化。软件工程标准化是在大规模的软件生产活动中提出的要求,它包括:如何制订软件计划;怎样进行软件需求分析、设计;程序的编码、测试要求 维护的进行及软件的组织管理等,它们都需制订必要的标准并形成规范。102第三章软件工程基础(2)标准化的作用。软件工程标准化的作用可概括为3方面:为软件开发各层次人员提供共同遵守的规定,把叁与软件开发的各层次人员约束在一个共同的、必须遵守的标准下,以利于规范行为和有效沟通;为软件工程成果的评价和验收提供客观的、统一的标准;为软件的维护带来极大的好处。103
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


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

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


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