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

下载本文档

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

文档简介

软件工程第1章软件工程

1.2软件工程退出

1.1软件危机1.1软件危机1.1.1软件代价高1.1.2软件开发和维护中的严重问题退出1.1.1软件代价高计算机系统硬件/软件成本变化趋势在开发一个新型计算机系统或修改一个现有系统的过程中,最大部分的资金是用在软件系统开发方面。1.1.2软件开发和维护中的严重问题

计算机系统发展的早期时代所形成的错误概念与做法,已经严重阻碍了计算机软件的开发,更严重的是:用错误方法开发的软件几乎根本无法维护,只好提前报废。1、软件危机2、有那些软件开发的错误方法和观念3、软件产品的质量量化分析不够。1、软件开发成本与进度估计不准确。2、闭门造车。软件开发人员仓促上阵,编写程序。4、软件重用性差。5、软件没有适当的文档资料。6、软件成本逐年上升。本节小结

产生软件危机原因----与软件本身的特点有关:1、软件是逻辑部件:试制阶段难衡量;开发质量较难评价,开发过程管理和控制较难;运行过程才能暴露没有检测出来的事故,相当于修改设计,软件维护困难;2、软件规模庞大,有技术问题,也有管理方法问题。3、早期开发的个体化;忽视需求分析;认为软件开发写程序;轻视维护,对用户不了解,4、对前期工作不能忽视,做好软件定义时期的工作,这是降低成本,提高件质量的关键。5、严重性:在软件开发的不同阶段修改付出代价(后期是前期的2-3个数量级),软件维护是极端艰巨复杂的工作,占55%~70%)1.2软件工程1.2.1软件工程的定义与基本原理1.2.2软件工程的目标1.2.3软件工程框架及原则退出

软件工程学科是一门指导计算机软件开发和维护的工程学科。软件工程是一类求解软件的工程。它应用计算机科学、数学及管理科学等原理,借鉴传统工程的原则、方法,创建软件以达到提高质量,降低成本的目的。其中,计算机科学、数学用于构造模型与算法,工程科学用于制定规范设计范型、评估成本及确定权衡,管理科学用于计划、资源、质量、成本等管理。 软件工程的方法、工具、过程构成了软件工程的三要素。1.2.1软件工程的定义与基本原理1、软件工程的七条基本原理(1)用分阶段的生命周期计划进行严格管理(2)坚持进行阶段评审(3)实行严格的产品控制(4)采用现代程序设计技术(5)结果应能清楚地审查(6)开发小组的人员应该少而精(7)承认不断改进软件工程实践的必要性1.2.2软件工程的目标软件工程的目标可概括为:在给定成本、进度的前提下,开发出具有可修改性、有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性并满足用户需要的软件产品。应该特别指出;“可靠性”这个目标在软件工程中有着重要的意义。广义上讲,它涉及到产品设计的一系列问题,从而使产品能在相当长的期间内稳定工作。狭义上讲,可靠性是软件成功运行的概率度量,可靠性分析和可靠性测试可作为衡量软件质量和其他开发过程的最重要的方法之一。

软件生命周期:软件定义、软件设计、软件使用与维护三阶段,而又可以具体分成几个子阶段。(1)

可行性研究:确定待开发软件系统的总目标,给出其功能、性能、可靠性、接口等要求。(1)可行性研究(2)需求分析和定义(3)总体设计(4)详细设计(5)编码(实现)(6)软件测试、运行/维护(1)

可行性研究:确定待开发软件系统的总目标,给出其功能、性能、可靠性、接口等要求。2。2软件模型

软件开发模型是软件开发全部过程、活动和任务的结构框架。最早出现的软件开发模型是1970年W.Royce提出的瀑布模型,而后随着软件工程学科的发展和软件开发的实践,相继提出了原型模型、演化模型、增量模型、喷泉模型等。1.原型模型、螺旋模型

关于模型小结螺旋模型是由上面四个部分组成的迭代模型。螺旋模型的每一周期都包括需求定义、风险分析、工程实现和评审四个阶段。开发过程每迭代一次,螺旋线就增加一周,软件开发又前进一个层次,系统又生成一个新版本,而软件开发的时间和成本又有了新的投入。最后得到一个客户满意的软件版本。喷泉模型该模型表明软件开发活动之间没有明显的间隙,用于支持面向对象开发过程。由于对象概念的引入,使分析、设计、实现之间的表达没有明显间隙。并且,这一表达自然地支持复用。3.1基于计算机的系统

基于计算机的系统是“某些要素的一个集合,这些要素被组织起来以实现某种方法、过程或借助处理信息进行控制。”图3.1给出了基于计算机系统的系统要素及相互之间关系。图3.1基于计算机系统的系统要素及相互之间关系

3.1.1计算机系统工程

计算机系统工程是一个问题求解活动,目的是揭示、分析所期望的功能,并把它们分配到各个单独的系统要素中去。计算机系统开发设计周期见图3.2。图3.2系统开发设计周期在系统的功能规范确立之后,下一步要对系统的功能进行认真、仔细的分析,问题的焦点集中于功能、性能、信息流和容量上。一个计算机系统方案应包括以下几个方面的内容:

(1)任务的来源,技术要求,质量指标和经费

.

(2)采取的技术途径。

(3)方案的规模,子系统的划分。

(4)系统的数据库结构。

(5)预计系统的各项指标。

(6)所需的设备、仪器、关键元器件、工艺工具等的购置情况及保证条件。(7)研制周期、异常情况的处理等等。用户中心设计——UCD方法在某种程度上代表了当今的计算机系统技术发展水平,使用该方法能设计极具竞争力的产品,UCD方法适合一切项目。现将传统设计方法与用户中心设计——UCD方法加以比较。

传统的设计方法技术驱动以组件为中心有限的多学科协作注重产品的内部体系结构没有专门考虑用户体验竞争意识不强开发先于用户评价产品缺陷质量观不重视用户测量只考虑现有用户

UCD方法用户驱动以解决方案为中心多学科小组成员协同工作注重产品的外部设计专门考虑用户体验以竞争为目标由用户评价设计方案后才开发用户质量观很重视用户测量考虑当前和将来所有用户图3.3UCD方法和传统设计方法的比较

3.1.2硬件和硬件工程

基于计算机的系统离不开计算机硬件的支撑。计算机系统工程师根据系统需求为硬件系统指派任务,产生硬件需求。

21世纪以来,信息可以很方便地通过计算机网络实现共享。作为网络文件服务器的计算机,可以给分布在网络上不同站点的客户提供共享的公用程序和数据,这就是客户/服务器计算模式。计算机的硬件工程是在几十年电子设计经验的基础上发展起来的,一般将硬件工程分为三个阶段。

硬件工程阶段需解决的问题成果(一)硬件研制计划需求分析根据功能可选择、采购的硬件?哪几种硬件接口?必须制造的硬件?潜在的问题及资源?确定项目成本估计、工程进度估计、硬件规格说明(二)硬件设计硬件实现确定硬件元素中的所有元件精确的功能、性能和接口需求。设计约束条件(如尺寸,环境)及测试准则;必要时建造原型并对原型进行测试;画出生产图、硬件规格说明书、对规格说明书评审和修改(三)生产、销售售后服务质量如何得到保证?产品的维护和修理如何实现?建立质量保证方法、建立产品销售机构、储备备件,售后服务表3.1硬件工程三个阶段

3.1.3软件和软件工程

从系统工程的角度来看,软件与硬件、软件工程与硬件工程分别是基于计算机系统和基于计算机的系统工程的重要组成部分。系统工程的论证阶段应该确定系统的软硬件功能和性能。系统对软件提出的功能和性能要求将成为软件需求分析的基础。基于计算机系统的软件要素由程序、数据和文档组成。它们分为两类应用软件与系统软件:应用软件实现信息处理,系统软件完成使应用软件能与其他系统要素交互的控制功能。

一个基于计算机的系统可以用输入—处理—输出(IPO)模型来表示。软件要素在这个模型的各个方面都起着一定的作用。

(1)软件从系统的外部实体或其他系统要素(包括宏要素)接收输入信息。

(2)软件还用于建立数据库的接口,使程序能够存取预先存储的数据。(3)软件实现系统功能所需要的计算方法。(4)在实际使用中,软件必须产生输出,把数据转换成某种能适合于输出介质的格式,或适合于输出设备接口的格式。软件工程三个阶段软件工程阶段必须完成的步骤阶段成果(一)软件定义制定软件项目规划;需求分析和定义;确定软件性能和资源约束;软件要素定义验收标准成本、工程进度估计;通过软件原型化/信息域分析获得软件规格说明;对软件规格说明技术评审(二)软件开发、实现软件总体结构设计——软件模块结构;数据设计、过程设计——接口及信息结构;编码——生成源程序代码确定一些有效性准则;对规格说明书评审修改;根据准则判断软件质量(三)检验、发行、维护测试软件,找出错误:进行单元测试——调试,组装测试——调试;开发用户文档;把软件发行给终端用户对测试文档、测试用例和测试结果进行评审;建立配置管理机制;整个使用寿命中维护软件;3.1.4人机工程

人机工程是应用从心理学和方法论导出的知识来确定和设计高质量HCI(人机界面)的多学科活动。人机工程过程包括以下步骤:(1)活动分析。

(2)语义分析和设计:

(3)语法和词法设计:

(4)用户环境设计:

(5)原型:

人机工程的关键要素是设计一个整体解决方案,它应该对用户而言:易于购买、易于安装、易于学习、易于使用、直观、吸引人、

有用3.1.5数据库和数据库工程

数据库系统是基于计算机系统的重要组成部分,它将有关的硬件、软件、数据和数据库管理人员组合起来,为用户提供信息服务。开发、运行和管理一个数据库系统是一项复杂的数据库工程,人们也常称之为数据库工程。

阶段任务结果(一)需求分析、可行性研究调查用户信息需求、处理要求进行可行性论证;提出成本预算和工作计划(二)选择硬件和软件应确定数据管理系统;支持数据库查询、维护和分析确定运行的操作系统、网络环境(三)数据库设计与实现根据需求分析和数据分析;概念设计;逻辑设计;物理设计;评审、测试;产生需求说明和数据说明;产生数据库概念模型;产生逻辑模型;产生数据软件工程的原则;生成各种文档(四)运行和管理及时补充、修改和更新数据库;数据的收集、整理、分类;储存数据库的管理和维护对数量大、类型多、关系复杂的数据存储应有利于数据的查询、修改并尽量减少数据的冗余;为用户提供培训及有关资料表3.4数据库工程的阶段

不同的数据存储管理模式有不同的特点,适用范围也不相同。

3.2可行性研究

可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决。

在讨论一个项目是否可行,需要从市场可行性、技术可行性、经济可行性、法律可行性分析几个方面着手进行考虑。3.2.1可行性研究的任务

图3.4表明了可行性研究的步骤

3.2.2市场可行性

要求在项目启动时定位目标市场,清楚在这个市场中的所有用户及他们的特点,并且清楚大部分目标用户当前所采用的解决方案,从而掌握产品竞争形势。必须在项目一开始就得到这些信息。如果没有这些信息或信息不全,那么接下来的设计活动是否有效就值得怀疑了。3.2.3经济可行性

基于计算机系统的成本—效益分析是可行性研究的重要内容,它用于评估基于计算机系统的经济合理性,给出系统开发的成本论证,并将估算的成本与预期的利润进行对比。计算机系统的成本由四个部分组成:

①购置并安装软硬件及有关设备的费用;

②系统开发费用;

③系统安装、运行和维护费用;

④人员培训费用。在系统分析和设计阶段只能得到上述费用的预算,即估算成本。在系统开发完毕并交付用户运行后,上述费用的统计结果就是实际成本。

系统效益包括经济效益和社会效益两部分。经济效益指应用系统为用户增加的收入,可以通过直接的或统计的方法估算。社会效益只能用定性的方法估算。1.成本估计(1)代码行技术(2)任务分解技术

2.成本/效益分析

成本/效益分析的第一步是估计开发成本、运行费用和新系统将带来的经济效益。3.货币的时间价值通常用利率的形式表示货币的时间价值。假设年利率为i,如果现在存入P元,则n年后可以得到的钱数为:F=P(1+i)n这也就是P元钱在n年后的价值。反之,如果n年后能收入F元钱,那么这些钱的现在价值是:P=F/(l+i)n

假定年利率为12%,利用上面计算货币现在价值的公式可以算出修改库存清单系统后每年预计节省的钱的现在价值,如表所示。

年将来值(元)(l+i)n现在值(元)累计的现在值(元)125001.122232.142232.14225001.251992.984225.12325001.401779.456004.57425001.571588.807593.37525001.761418.579011.944.投资回收期

所谓投资回收期就是使累计的经济效益等于最初投资所需要的时间。投资回收期越短就越能获得利润。例如,修改库存清单系统:两年以后可以节省4225.12元,比最初的投资(5000元)还少774.88元;三年以后将再节省1779.45元,774.88/1779.45=0.44,因此,投资回收期是2.44年。

5.纯收入

衡量工程价值的另一项经济指标是工程的纯收入,也就是在整个生命周期之内系统的累计经济效益(折合成现在值)与投资之差。

3.2.4技术可行性

技术可行性的评估必须在软件系统分析和定义过程中进行,当技术可行性确定后,就可以完成在规格说明书。一般地,技术可行性要考虑的情况包括:

开发风险:在分析时给出的各种约束条件下,系统能否被设计出来,并实现必需的功能和性能?资源有效性:可用于开发系统元素的人员是否存在问题?是否具备用于建立系统的其他资源(硬件、软件)?技术:相关技术的发展是否能支持这个系统?3.2.5方案选择

系统分析任务完成后,系统工程师开始研究问题求解方案。通常系统工程师将一个大的复杂系统分解为若干个子系统;精确地定义子系统的界面、功能和性能;给出各子系统之间的关系。这样可以降低解决方案的复杂性,有利于人员的组织和分工,提高系统开发效率和工作质量。可行性研究的结果可作为系统规格说明书的一个附件。

项目背景:问题描述;实现环境;限制条件;管理概要与注意事项:重要的研究结果;说明;注意事项;影响;候选方案:候选系统的配置;选择最终方案的准则;系统描述:简略的范围描述;分配元素的可行性;市场可行性

:项目是否有潜在市场,以及市场的变化对项目影响经济可行性(成本—效益分析):经费概算;预期的经济效益;技术可行性(技术风险评价):技术实力;已有工作基础;设备条件;法律可行性:系统开发可能导致的侵权、违法和责任;用户使用可行性:用户单位的行政管理、工作制度;使用人员的素质;其他与项目有关的问题:其他方案介绍;未来可能的变化。表3.7可行性研究报告目录

3.3系统开发过程的新体系结构

——快速原型与面向对象

1.存在的问题(1)有些类型的系统需求是模糊的(2)项目参与者之间存在通信鸿沟(3)预先定义的需求可能是过时的

2.解决问题的途径

为克服传统方法的缺点,人们在实践中逐渐创造出快速原型法和面向对象方法等软件工程的新途径。

面向对象的统一软件开发方法迭代开发模式

4.1需求分析基础

4.1.1分析的任务与原则

4.1.2初步需求获取技术

4.1.3需求建模

4.1.4开发原型系统

4.1.1分析的任务与原则

软件需求分析的任务是:深入描述软件的功能和性能,确定软件设计的约束和软件同其他系统元素的接口细节,定义软件的其他有效性需求,借助于当前系统的逻辑模型导出目标系统逻辑模型,解决目标系统“做什么”的问题。需求分析任务与其实现步骤如图4.1所示。需求分析可分为需求提出、需求分析描述及需求评审三个阶段。图4.1需求提出和分析的结果需求提出需求提出主要集中于描述系统目的。需求提出和分析仅仅集中在使用者对系统的观点上。用户、开发人员和用户确定一个问题领域,并定义一个描述该问题的系统。这样的定义称作系统规格说明,并且它在用户和开发人员之间充当合同。

需求分析描述

在问题分析阶段分析人员的主要任务是:对用户的需求进行鉴别、综合和建模,清除用户需求的模糊性、歧义性和不一致性,分析系统的数据要求,为原始问题及目标软件建立逻辑模型。分析人员的主要做法是:要将对原始问题的理解与软件开发经验结合起来,以便发现哪些要求是由于用户的片面性或短期行为所导致的不合理要求,哪些是用户尚未提出但具有真正价值的潜在需求。

需求评审

在需求评审阶段,分析人员要在用户和软件设计人员的配合下对自己生成的需求规格说明和初步的用户手册进行复核,以确保软件需求的完整、准确、清晰、具体,并使用户和软件设计人员对需求规格说明和初步的用户手册的理解达成一致。一旦发现遗漏或模糊点,必须尽快更正,再行检查。

4.1.2初步需求获取技术

为了完成软件需求任务,分析人员必须掌握一些基本技术,主要有:初步需求获取技术、需求建模、以及用于需求分析的快速原型技术;一些公共的技术包括:采访、观察、先前的系统版本的测试和系统分析。作为一个好的需求获取技术的显著特征是:方便通信(可以通过易于理解的语言)。提供定义系统模块的方法。鼓励分析员用问题空间的术语而不是软件术语去思考问题和编制文档。允许并提醒分析员有多种可供选择的设计方案。适应需求的变化。4.1.3需求建模

由于用户群体的各个用户往往会从不同的角度、不同的抽象级别上阐述他们对原始问题的理解和对目标软件的需求,因此,有必要为原始问题及目标软件解建立模型。这种模型一方面用于精确地记录用户从各个视点、不同抽象级别上对原始问题及目标软件的描述;另一方面,它也将帮助分析人员去伪存真、由此及彼、由表及里挖掘用户需求。建模的步骤是:

(1)获得当前系统的物理模型

(2)抽象出当前系统的逻辑模型。

(3)建立目标系统的逻辑模型。

图4.2软件需求建模的任务

4.1.4开发原型系统

快速原型方法核心思想是:在软件开发的早期快速建立目标软件的原型,让用户对原型进行评估并提出修改意见,当原型几经改进最终确定后,它将由软件设计和编码阶段进化成软件产品;或者设计和编码人员遵循原型所确立的外部特征实现软件产品。把建立原型系统作为一种可能采取的策略的主要理由如下:(1)由于用户与软件设计人员认识上的局限,不能预先指定所有要求,因此在开发过程中重复和反复是必要的和不可避免的;(2)在用户和系统分析员之间存在固有的通信鸿沟,用户需要一个“活的”系统模型,以便获得实践经验,以便沟通;(3)目前有快速建立原型系统的工具可供选用。4.2结构化分析方法此方法基于模块化的思想,采用“自顶向下,逐步求精”的技术对系统进行划分。结构化方法是结构化分析、结构化设计和结构化编程的总称。结构化方法由于具有简单易懂、使用方便的特点,且出现较早,所以获得了广泛的应用。4.2结构化分析方法4.2.1结构化分析的策略

4.2.2数据流图

4.2.3数据字典

4.2.4小说明

4.2.5结构化分析实施步骤

4.2.1结构化分析的策略

一旦基于计算机系统的功能被分配到各个系统元素,系统分析员就能够据此建立起一个模型,用以表达系统元素之间的相互关系,并为今后的需求分析和设计奠定基础。为了开发系统模型,使用一个“结构模板”。

图4.3结构模板的格式

下图给出传送带在线货物分类系统的

总体结构关系图

4.2.2

数据流图

数据流图描绘系统的逻辑模型,图中没有任何具体的物理元素,只是描绘信息在系统中流动和处理的情况。数据流图的特点是:它是逻辑系统的图形表示,容易理解,是极好的通信工具,设计数据流图只需考虑系统必须完成的基本逻辑功能,不需要考虑如何实现这些功能,是软件设计很好的出发点。1.符号数据源点或终点:正方形(或立方体)。变换数据处理:圆角矩形(或圆形)。数据存储:开口矩形(或两条平行横线)。数据流:箭头表示,即信息与数据的流动方向。

数据流图有四种基本符号。2.例子

假设一家工厂的采购部每天需要一张定货报表,报表按零件编号排序,表中列出所有需要再次定货的零件。对于每个再次定货的零件应该列出下述数据:零件编号,零件名称,定货数量,目前价格,主要供应者,次要供应者。零件入库或出库被称为事务,通过放在仓库中的CRT终端把事务报告给定货系统。当某种零件的库存数量少于库存量临界值时就应该再次定货。定货系统的数据流图的成份

源点/终点处理采购员仓库管理员产生报表处理事务数据流数据存储定货报表零件编号零件名称定货数量目前价格主要供应者次要供应者定货信息(定货报表)库存清单*零件编号*库存量库存量临界值事务

零件编号*事务类型数量*

定货系统基本系统模型把处理事务功能进一步分解后的数据流图

3.命名

数据流图中每个成份的命名是否恰当,直接影响数据流图的可理解性。

为数据流命名:(1)名字应代表整个数据流(或数据存储)的内容,而不是仅仅反映它的某些成份。(2)不要使用空洞的、缺乏具体含义的名字(如“数据”、“信息”、“输入”之类)。(3)如果在为某个数据流(或数据存储)起名字时遇到了困难,则很可能是因为对数据流图分解不恰当造成的,应该试试重新分解,看是否能克服这个困难。为处理命名:

(1)通常先为数据流命名,然后再为与之相关联的处理命名

(2)名字应该反映整个处理的功能,而不是它的一部分功能。(3)名字最好由一个具体的及物动词,加上一个具体的宾语组成。

(4)通常名字中仅包括一个动词,如果必须用两个动词才能描述整个处理的功能,则把它再分解成两个处理可能更恰当些。(5)如果在为某个处理命名时遇到困难,则很可能是发现了分解不当的迹象,应考虑重新分解。4.用途

画数据流图的基本目的是利用它作为交流信息的工具。

数据流图的另一个主要用途是作为分析和设计的工具。

4.2.3数据字典

1.数据字典的内容(1)数据流(2)数据流分量(即数据元素)(3)数据存储(4)处理

2.定义数据的方法

由数据元素组成数据的方式有下述几种基本类型:(1)顺序:即以确定次序连接两个或多个分量。(2)选择:即从两个或多个可能的元素中选取一个。(3)重复:即把指定的分量重复零次或多次。3.实例

(1)数据流条目一个完整的数据流条目应该包括以下内容:名称描述频率和数据量数据结构例如,“图书管理系统”中的“入库单”是一个数据流,对它的说明如下:入库单=分类目录号+数量+书名+作者+内容摘要+价格+购书日期(2)数据存储条目名称描述数据存储方式关键码频率和数据量安全性要求数据结构例如,同样图书管理系统中的“目录文件”是个数据存储,对它的说明如下:文件名:目录文件组成:{分类目录号+书名+作者+内容摘要+价格+入库日期+总数+库存数+{图书流水号}}4.2.4小说明

小说明是用来描述加工的。集中描述一个加工“做什么”,即加工逻辑,也包括其他一些和加工有关的信息,如执行条件、优先级、执行频率、出错处理等。

目前小说明一般用自然语言、结构化自然语言、判定表和判定树等来描述。在描绘复杂的关系时,图形比文字叙述优越得多,它形象直观,一目了然。4.2.5结构化分析实施步骤

第一步,确定系统边界,画出系统环境图。

第二步,自顶向下,画出各层数据流图。分层数据流图和图中的加工进行编号规则

(1)顶层图不参与数据流图编号,顶层图中的惟一加工也不编号。(2)从0层图开始的所有子图和加工均需编号,子图的编号为分解的父图中相应加工编号。(3)加工的编号由相应的子图号、小数点、加工在子图中的顺序号组成。第三步,定义数据字典。

第四步,定义小说明。

第五步,汇总前面各步骤的结果。

注意事项:(1)模型平衡规则

数据流图中所有的图形元素必须根据它们的用法规则正确使用。

数据字典中的定义使用合法的逻辑构造符号。数据流图中最底层的加工必须在小说明中有定义。父图和子图必须平衡。

小说明和数据流图的图形表示必须一致。

(2)控制复杂性的一些规则

上层数据流可以打包(打包的数据流作特殊标记),上、下层数据流的对应关系用数据字典描述(编号对应),同层的数据流也可编号对应,避免形成复杂的连线;只有一点限制,数据流的性质(输入、输出)必须一致。

4.3其它分析方法与图形工具

1.结构化自然语言结构化自然语言的语法通常分为内外两层,外层语法描述操作的控制结构,如顺序、选择、循环等,这些控制结构将加工中的各个操作连接起来。内层语法一般没有什么限制,就用自然语言描述。2.层次方框图

层次方框图用树形结构的一系列多层次的矩形框描绘数据的层次结构。树形结构的顶层是一个单独的矩形框,它代表完整的数据结构,下面的各层矩形框代表这个数据的子集,最底层的各个框代表组成这个数据的实际数据元素(不能再分割的元素)。

例如,描绘一家计算机公司全部产品的数据结构可以用图中的层次方框图表示。这家公司的产品由硬件、软件和服务三类产品组成,软件产品又分为系统软件和应用软件,系统软件又进一步分为操作系统、编译程序和软件工具……。3.Warnier图

用Warnier图可以表明信息的逻辑组织

软件产品系统软件应用软件操作系统(P1)编译程序(P2)软件工具编译程序(P3)测试驱动程序(P4)设计辅助工具(P5)4.IPO图

IPO图是输入/处理/输出图的简称

,它的基本形式是在左边的框中列出有关的输入数据,在中间的框内列出主要的处理,在右边的框内列出产生的输出数据。

图4.11IPO图的一个例子图4.12

改进的IPO图5.判定表

判定表常用来描述一些不易用语言表达清楚或需要很大篇幅才能用语言表达清楚的加工。旅游时间7~9,12月l~6,10,11月定票量≤20>20≤20>20折扣量5%15%20%30%表4.2旅游价格表

在表4.2中,I区的条件类别有两个:旅游时间和订票量,Ⅱ区内列出所有四种条件组合,Ⅲ区内只有一个操作,Ⅳ区标明在某种条件组合下操作的执行情况。I条件类别Ⅱ条件组合III操作Ⅳ操作的执行表4.3判定表

4.4实体——关系图

4.4.1数据对象、属性与关系

4.4.2E-R方法和实体模型

4.4.3数据结构的规范化

4.4.1数据对象、属性与关系

对象可以是人、是物,还可以是实际的东西或概念的东西,例如,大学、城市等。对象还可以指事物与事物间的联系。属性则是指事物的性质或特征,数据对象由其属性刻画。

例如,学生文件就由多个记录组成,这些记录放在一起构成一个二维表。表中每一横排叫做一个记录或元组,每一纵列叫做一个属性,参看表4.4。

表4.4学生文件学号姓名性别年龄专业951136郑枫女19计算机科学与技术951137雷昊男18计算机科学与技术951138李博达男18机械工程为确保模型的一致性并消除数据冗余,分析人员要掌握以下规范化规则:(1)数据对象的任何实例对每个属性必须有且仅有一个属性值。(2)属性是原子数据项,不能包含内部数据结构。(3)如果数据对象的关键属性多于一个,那么其他的非关键属性必须表示整个数据对象而不是部分关键属性的特征。(4)所有的非关键属性必须表示整个对象而不是部分属性的特征。4.4.2E-R方法和实体模型

实体——关系图是表示数据对象及其关的图形语言机制。l方框——表示实体型。在框内写上实体名,如“学生”实体型。l椭圆框——表示实体有关的属性。椭圆内标记属性的名字。l

箭头——表示实体与属性之间的联系。

l菱形框——表示实体之间的联系。

一对一的联系(1:1)——即一个实体在此种联系下只能对应一个实体;一对多的联系(1:n)——即一个实体在此种联系下可对应其他一个以上的实体;多对多的联系(m:n)——即一个实体类型中的多个实体与另一个实体类型中的多个实体相联系。通常实体联系有三种类型:例如,在教学管理中,学校开设若干门课程,一个教师可以教授其中的一门或多门课程,每位学生也需要学习其中的几门课程。因此,教学管理中涉及的对象(实体型)有学生、教师和课程。用E-R图描述它们之间的联系,如图所示。其中,学生与课程是多对多的联系,而教师与课程的联系是一对多。

教学管理E-R图4.4.3数据结构的规范化

下面用图所示的教学管理的例子说明如何进行规范化。有三个实体类型,即:课程、学生和教师,用三个关系分别保存它们的有关信息:

教师(职工号,姓名,年龄,职称,工资级别,工资)课程(课程号,课程名,学分,学时,课程类型)选课(学号,课程号,听课出勤率,作业完成率,分数)教课(职工号,课程号)

(1)关系中所有属性都是“单纯域”,即不出现“表中有表”。(2)非主属性完全函数依赖于关键字。(3)非主属性相互独立,即任何非主属性间不存在函数依赖。如果一个关系连条件(1)都不满足,则这个关系是非规范化的。如果一个关系仅满足条件(1),则这个关系满足第一范式(1NF)。如果一个关系满足条件(1)、(2),但不满足(3),则这个关系满足第二范式(2NF)。如果一个关系同时满足条件(1)、(2)和(3),则这个关系满足第三范式(3NF)判断规范化程度的条件是:4.5需求规格说明与评审

4.5.1需求规格说明书的目标与内容4.5.2需求评审

4.5.1需求规格说明书的目标与内容

需求规格说明书主要起以下作用:(1)软件开发机构和用户之间一份事实上的技术合同书。(2)软件开发机构下一步进行设计和编码的基础。(3)测试和验收目标系统的依据。需求规格说明书的主要作用:(1)软件开发机构和用户之间一份事实上的技术合同书。(2)软件开发机构下一步进行设计和编码的基础。(3)测试和验收目标系统的依据。4.5.2需求评审

正确性

无二义性

完整性

可验证性

一致性

可理解性可修改性

可跟踪性

5.1总体设计的过程 5.1.1设计供选择的方案 5.1.2推荐最佳实现方案退出 5.1.3设计软件结构 5.1.4数据库设计 5.1.5制定测试计划5.1.1设计供选择的方案需求分析阶段得出的数据流图是总体设计的根本出发点。通常,选取的这些方案中至少应包括低成本、中成本和高成本的三种方案类型。对每个合理方案要提供以下几方面资料:(1)系统流程图;(2)数据字典;(3)成本/效益分析;(4)实现这个系统的进度计划。5.1.2

推荐最佳方案分析员从合理方案中选择一个最佳方案向用户推荐,并为推荐的方案制定详细的实现计划。对于分析员推荐的最佳方案,用户和有关专家应该认真审查。如果确认该方案确实符合用户的需要,并且在现有条件下完全能够实现,则应该提请使用部门负责人进一步审批。在使用部门负责人也接受了分析员所推荐的方案之后,方可进入总体设计过程的下一步工作,即结构设计阶段。过程设计:确定每个模块的处理过程。结构设计:确定系统由哪些模块组成,以及这些模块之间的相互关系。5.1.3

设计软件结构

对于大型系统的设计,通常分为两个阶段:结构设计和过程设计。其中,结构设计是总体设计阶段的任务,而过程设计则是详细设计阶段的任务。5.1.4

数据库设计

数据库的应用越来越广泛,目前大多数的系统都要用到数据库技术。数据库设计是一项专门的技术,包括模式设计、子模式设计、完整性和安全性设计和优化处理等。5.1.5

制定测试计划

在软件开发的早期阶段提前考虑软件的测试计划是很有必要的。这样能促使软件设计人员在设计时注意到软件的测试问题,从而有利于提高软件的可测试性。总体设计阶段的文档(1)总体设计说明书(包括系统实现方案和软件模块结构);(2)测试计划(包括测试策略、测试方案、预测的测试结果、测试进度计划等);(3)用户手册(根据总体设计阶段的结果,编写的初步的用户操作手册);(4)详细的实现计划;(5)数据库设计结果。5.2软件设计基本原理 5.2.1模块化 5.2.2抽象 5.2.3信息隐蔽退出 5.2.4模块独立性模块:又称构件,是能够单独命名并独立地完成一定功能的程序语句的集合。例如高级语言中的过程、函数、子程序等都可作为模块。5.2.1模块化模块化是软件的一个重要属性。模块化的特性提供了人们处理复杂的问题的一种方法,同时也使得软件能够被有效地管理。这种“分而治之”的思想提供了模块化的根据:把复杂的问题分解成许多容易解决的小问题,原来的问题也就容易解决了。根据前面的结论,我们可以得出下面的不等式:E(P1+P2)>E(P1)+E(P2)这个不等式表明:单独解决问题P1和P2所需的工作量之和,比把P1和P2合起来作为一个问题来解决时所需的工作量要少。有两个函数:C(x)表示问题x的复杂程度;E(x)表示解决问题x所需要的工作量(时间)。对于两个问题P1和P2,如果:C(P1)>C(P2)则:E(P1)>E(P2)另一个有趣的特性是:C(P1+P2)>C(P1)+C(P2)模块化和软件成本的关系我们在考虑问题时,集中考虑和当前问题有关的方面,而忽略和当前问题无关的方面,这就是抽象。或者说抽象就是抽出事物的本质特性而暂时不考虑它们的细节。5.2.2抽象软件工程过程的每一步,都是对软件解法的抽象层次的一次细化。在可行性研究阶段,软件被看作是一个完整的系统部分;在需求分析期间,我们使用在问题环境中熟悉的术语来描述软件的解法;当我们由总体设计阶段转入详细设计阶段时,抽象的程度进一步减少;最后,当源程序写出来时,也就达到了抽象的最低层。信息隐蔽原理认为:模块所包含的信息(过程和数据)对于其他模块来说应该是隐蔽的。也就是说,模块应当被这样规定和设计,使得包含在模块中的信息(过程或数据)对于其它不需要这些信息的模块来说,是不能访问的,或者说是“不可见”的。5.2.3信息隐蔽信息隐蔽对于软件的测试与维护都有很大的好处。因为对于软件的其它部分来说,绝大多数数据和过程都是隐蔽的,这样,在修改期间由于疏忽而引入的错误所造成的影响就可以局限在一个或几个模块内部,不至波及到软件的其他部分。模块的独立性是软件质量的关键:(1)模块化程度较高的软件容易开发;(2)模块化程度较高的软件也比较容易测试和维护。5.2.4模块独立性模块的独立性的度量标准:耦合和内聚。1、耦合耦合:软件结构中各个模块之间相互关联程度的度量。常见的耦合:(1)非直接耦合(2)数据耦合(3)标记耦合(4)控制耦合(5)公共耦合(6)内容耦合设计原则:尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,避免使用内容耦合。2、内聚内聚:模块内部各个元素彼此结合的紧密程度的度量。常见的内聚:(1)偶然内聚(2)逻辑内聚(3)时间内聚(4)过程内聚(5)通信内聚(6)顺序内聚(7)功能内聚5.3设计准则1.尽力提高模块独立性2.选择合适的模块规模3.模块的深度、宽度、扇出和扇入应适当4.模块的作用范围应该在控制范围之内5.降低模块接口的复杂程度6.设计单入口单出口的模块,避免“病态连接”5.4总体设计的图形描述工具 5.4.1层次图 5.4.2HIPO图 5.4.3结构图退出5.4.1层次图

正文加工系统的层次图5.4.2HIPO图带编号的层次图(H图)5.4.3结构图软件结构图的基本符号产生最佳解的结构图5.5结构化设计方法 5.5.1数据流图的类型 5.5.2设计步骤 5.5.3变换设计退出 5.5.4事务设计 5.5.5设计的后处理5.5.1数据流图的类型1、变换型数据流图2、事务型数据流图5.5.2设计步骤5.5.3变换设计我们通过一个汽车数字仪表板的设计来介绍变换分析的过程。假设仪表板的功能如下:(1)通过模/数(A/D)转换实现传感器和微处理机接口;(2)在发光二极管(LCD)面板上显示数据;(3)指示每小时英里数(mph),行驶的里程,每加仑油行驶的英里数(mpg)等等;(4)指示加速或减速;(5)超速警告:如果车速超过55英里/小时,则发出超速警告铃声。在软件需求分析阶段,应该对上述每项性能和其它要求进行全面的分析,并建立起相应的文档资料,得出数据流图。具体的设计步骤如下:1、复查基本系统模型2、复查并精化数据流图3、确定数据流图的类型这一步的任务是确定数据流图是变换型数据流图还是事务型数据流图。从上图中可以看出,数据沿着两条输入通路(旋转信号和燃料流量传感器信号)进入系统,然后沿着五条通路(4个显示,一个警告铃声)离开,没有明显的事务中心(虽然变换“计算mph与超速值”可以看作是一个事务中心)。因此,可以认为这个数据流图的类型是变换型数据流图。4、确定输入流和输出流的边界,从而孤立出变换中心5、进行“第一级分解”第一级分解的方法第一级分解的结果6、进行“第二级分解”第二级分解的方法第二级分解的结果:

未经精化的输入结构 未经精化的变换结构

未经精化的输出结构7、使用设计度量和设计准则对第一次分割得到的软件结构进一步精化

对于从前面的设计步骤得到的软件结构,还可以进行许多修改:(1)输入结构中的模块“转换成rpm”和“收集sps”可以合并;(2)模块“确定加速/减速”可以放在模块“计算mph”下面,以减少耦合;(3)模块“加速/减速显示”可以相应地放在模块“显示mph”的下面。精化的数字仪表板系统的软件结构5.5.4事务设计

事务分析的映射方法6.1结构化程序设计

三种基本的控制结构

逐步求精方法是由Wirth提出的一种早期的自顶向下的设计策略。面对现实的复杂问题,我们首先不要一下子就力图触及到问题解法的细节,而应当先从问题的全局出发,用较自然的抽象语句来表示问题,从而得到抽象算法。这时的算法主要是描述“做什么”,或者说是把问题描述为几个子问题或子功能。接下来对子问题,也就是对抽象算法进行细化,在这一阶段设计的算法中,已经开始含有程序设计语言的成分。随着算法的不断细化,越来越多地开始完成“如何做”,算法中程序设计语言的成分也越来越多,当最后把算法全部细化为程序设计语言描述时,程序设计也就随之完成了。结构化程序设计技术是一种设计程序的技术,它采用自顶向下逐步求精的设计方法和单入口单出口的控制结构,并且只包含顺序、选择和循环三种控制结构。其他常用的控制结构6.2详细设计工具 6.2.1程序流程图 6.2.2盒图退出 6.2.3PAD图 6.2.4过程设计语言 6.2.5判定表 6.2.6判定树6.2.1程序流程图程序流程图中常用的符号程序流程图虽然比较直观,灵活,并且比较容易掌握,但是它的随意性和灵活性却使它不可避免地存在着一些缺点:(1)由于程序流程图的特点,它本身并不是逐步求精的好工具。因为它使程序员容易过早地考虑程序的具体控制流程,而忽略了程序的全局结构;(2)程序流程图中用箭头代表控制流,这样使得程序员不受任何约束,可以完全不顾结构程序设计的精神,随意转移控制;(3)程序流程图在表示数据结构方面存在不足。6.2.2

盒图(N-S图)N-S图的基本符号N-S图有以下一些特点:(1)功能域(即某一个特定控制结构的作用域)有明确的规定,并且可以很直观地从N-S图上看出来;(2)它的控制转移不能任意规定,必须遵守结构化程序设计的要求;(3)很容易确定局部数据和全局数据的作用域;(4)很容易表现嵌套关系,也可以表示模块的层次结构。6.2.3

PAD图

PAD图的基本符号PAD图提供的定义功能PDL语言具有下述特点:(1)PDL虽然不是程序设计语言,但是它与高级程序设计语言非常类似,只要对PDL描述稍加变换就可变成源程序代码。因此,它是详细设计阶段很受欢迎的表达工具。(2)用PDL写出的程序,既可以很抽象,又可以很具体。因此,容易实现自顶向下逐步求精的设计原则。(3)PDL描述同自然语言很接近,易于理解。(4)PDL描述可以直接作为注释插在源程序中,成为程序的内部文档。这对提高程序的可读性是非常有益的。(5)PDL描述与程序结构相似,因此自动产生程序比较容易。PDL的缺点是不如图形描述形象直观,因此人们常常将PDL描述与一种图形描述结合起来使用。6.2.4

过程设计语言6.2.5

判定表

一张判定表由四部分组成:(1)左上部列出所有条件;(2)左下部是所有可能做的动作;(3)右上部为各种可能组合条件,其中每一列表示一种可能组合;(4)右下部的每一列是和每一种条件组合所对应的应做的工作。

12345教授

TFFF副教授

FTFF讲师

FFTF助教

FFFT讲座TFFFF50×

30

×

25

×

20

×

15

×例:某校制定了教师的讲课课时津贴标准。对于各种性质的讲座,无论教师是什么职称,每课时津贴费一律是50元;而对于一般的授课,则根据教师的职称来决定每课时津贴费:教授30元,副教授25元,讲师20元,助教15元。6.2.6

判定树

教师课时津贴判定树6.3面向数据结构的设计方法 6.3.1Jackson图 6.3.2Jackson程序设计方法退出6.3.1Jackson图Jackson图表示方法Jackson图的优点:(1)Jackson图不仅便于表示层次结构,而且也有利于对结构自顶向下分解;(2)Jackson图形象直观,可读性好;(3)Jackson图不仅能表示数据结构,也能表示程序结构(因为程序结构也可以由上述3种基本结构组成)。Jackson图的缺点:在选择结构和重复结构中,选择条件或循环结束条件不能直接在Jackson图中表示出来。这样就影响了图形的表达能力,也不利于直接把图翻译成程序。改进的Jackson图例:高考后将考生的基本情况文件(简称考生基本情况文件)和考生高考成绩文件(简称考分文件)合并成一个新文件(简称考生新文件)。考生基本情况文件和考分文件都是由考生记录组成的。为简便起见,考生基本情况文件中的考生记录的内容包括:准考证号、姓名、通讯地址。考分文件中的考生记录的内容包括:准考证号和各门考分。合并后的考生新文件自然也是由考生记录组成,内容包括:准考证号、姓名、通讯地址和各门考分。Jackson程序设计方法由五个步骤组成:6.3.2Jackson程序设计方法第一步数据结构表示对要求解的问题进行分析,确定输入数据和输出数据的逻辑结构,并用Jackson图描述这些数据结构。第二步找出输入数据结构和输出数据结构的对应关系找出输入数据结构和输出数据结构中有对应关系的数据单元,即有直接因果关系、在程序中可以同时处理的数据单元。需要注意的是,对于重复的数据单元,必须是重复的次序、次数都相同才有可能有对应关系。第三步确定程序结构图根据下述三规则,由Jackson图导出相应的程序结构图:(1)为每对有对应关系的数据单元,按照它们在数据结构图中所处的层次,在程序结构图中的相应层次画一个处理框。如果这对数据单元在输入数据结构图和输出数据结构图中所处的层次不同,那么应以它们在输入数据结构图和输出数据结构图中层次较低的那个层次作为它们在程序结构图中的处理框所处的层次;(2)对于输入数据结构中剩余的数据单元,根据它们所处的层次,在程序结构图的相应层次为每个数据单元画上相应的处理框;(3)对于输出数据结构中剩余的数据单元,根据它们所处的层次,在程序结构图的相应层次为每个数据单元画上相应的处理框。实际上,这一步是一个综合的过程:每对有对应关系的数据单元合画一个处理框,没有对应关系的数据单元则各画一个处理框。第四步列出并分配所有操作和条件列出所有操作和条件(包括分支条件和循环结束条件),并把它们分配到程序结构图的适当位置。操作:(1)停止;(2)打开两个输入文件;(3)建立输出文件。(4)从输入文件中各读一条记录。(5)生成一条新记录。(6)将新记录写入输出文件。(7)关闭全部文件。条件:I(1)文件结束。把操作和条件分配到程序结构图的适当位置第五步用伪码表示程序Jackson方法中使用的伪码与Jackson图是完全对应的。针对三种基本程序结构,有相对应的Jackson伪码。(1)顺序结构AseqBCDAend(2)选择结构(3)重复结构Aselectcondition1BAorcondition2CAorcondition3DAendAiteruntil(或while)conditionBAend用Jackson伪码描述的程序:产生新文件seq打开两个输入文件从输入文件中各读一条记录分析考生记录iteruntil文件结束处理考生记录seq产生准考证号产生姓名产生通讯地址7.1程序设计语言 7.1.1程序设计语言的分类 7.1.2程序设计语言的特点退出 7.1.3程序设计语言的选择7.1.1程序设计语言的分类大体上,程序设计语言分为以下几类:(1)机器语言(2)汇编语言(3)高级语言由于高级语言种类繁多,我们可以从应用特点、语言内在特点和对客观系统的描述三个不同的角度来对高级语言进行分类。(1)基础语言(例:FORTRAN,BASIC,COBOL和ALGOL)(2)结构化语言(例:ALGOL,PL/1,PASCAL,C,Ada)(3)专用语言(例:APL,LISP,PROLOG,BLISS,FORTH)1、从应用特点的角度来分(1)系统实现语言(例:C语言)(2)静态高级语言(例:FORTRAN、COBOL)(3)块结构高级语言(例:PASCAL,ALGOL)(4)动态高级语言2、从语言内在特点的角度来分(2)面向对象语言对象+消息(1)面向过程语言数据结构+算法3、从描述客观系统的角度来分例:Delphi、VisualBasic、JAVA、C++。7.1.2

程序设计语言的特点

1.名字说明2.类型说明3.选择控制结构4.循环控制结构5.程序对象的局部性6.变量的局部共享7.异常处理8.独立编译7.1.3

程序设计语言的选择

一般情况下,我们采用高级语言来编程。选择具体高级语言类型的原则:(1)系统的应用领域(2)用户的要求(3)软件的执行环境(4)目标系统的性能要求(5)程序员的知识水平(6)软件的可移植性要求7.2程序设计风格 7.2.1程序内部的文档 7.2.2数据说明 7.2.3语句构造退出 7.2.4输入/输出 7.2.5效率程序内部的文档包括:恰当的标识符(变量和标号)的名字;适当的注释;程序的视觉组织。7.2.1程序内部的文档标识符包括模块名、变量名、常量名、标号名、子程序名以及数据区名、缓冲区名等。这些名字的选取应含义鲜明,能正确地提示程序对象所代表的实体。这对于帮助阅读者理解程序是很重要的。例如,表示次数用times,表示总量用total等。名字的长度不应限制,但也不宜过长,太长了容易出错,应选择精炼且意义明确的名字,这样才能简化程序语句,改善对程序功能的理解。如果名字使用缩写,那么缩写规则应该一致,并且应该给每个名字加上注解,以方便阅读。1、标识符的命名程序的注释分为两种:序言性注释和功能性注释。2、程序的注释序言性注释通常安排在每个程序模块的起始部分,它是对程序的整体说明,对于理解程序本身具有引导作用。其格式如下:有关本模块功能说明;主要算法;接口描述:包括调用形式,参数描述以及子模块清单;有关数据描述:包括重要的变量及其用途、约束或限制条件,以及其它有关信息;模块位置:在哪一个源文件中,或隶属于哪一个软件包;开发简历:包括模块设计者姓名,复审人姓名,复审日期,修改日期及有关说明等。功能性注释嵌入在源程序体内,用以描述其后的语句或程序段的处理功能。书写功能性注释,要注意以下几点:描述的对象是一段程序,而不是每一个语句;适当使用缩进和空行,使程序与注释容易区别;注释一定要准确。不精确的甚至是错误的注释不仅对理解程序毫无帮助,反而会妨碍对程序的理解。程序中代码的布局对于程序的可读性也有很大影响。适当的利用空格、空行和移行能使程序的逻辑结构更加清晰。空格的合理应用还可以突出运算的优先性,避免发生运算的错误。3、程序的视觉组织为了使数据更容易理解和维护,应遵循一些简单的原则:(1)数据说明的次序应当规范化。(2)当多个变量名在一个语句中说明时,应该按字母顺序排列这些变量。(3)如果设计时使用了一个复杂的数据结构,则应注解说明用程序设计语言实现这个数据结构的方法和特点。7.2.2数据说明语句构造应遵循的原则是:每条语句应该简单而直接,不应为了片面追求效率而使代码变得过于复杂。7.2.3语句构造人们在长期的实践中总结了以下一些规则:不要为了节省空间而把多个语句写在同一行;用空格或可读的符号使语句的内容更加清晰;尽量避免复杂的条件测试;尽量避免使用“非”条件的条件语句;避免过多使用循环嵌套和条件嵌套;利用括号使逻辑表达式或算术表达式的运算次序清晰直观;尽可能使用库函数;让编译程序作简单的优化。在设计和程序编码时,应考虑输入和输出风格原则:对所有输入数据都进行校验,以保证每个数据的有效性;检查重要的输入项组合的合法性;使得输入的步骤和操作尽可能简单,并保持简单的输入格式;输入一批数据时,使用输入结束指示符,不要要求用户说明输入项数;在以交互式输入/输出方式进行输入时,要指明可以使用的选择值或界限值;应允许缺省值;当程序设计语言对输入/输出格式有严格要求时,应保持输入格式与输入语句的要求一致;给所有的输出加注释,并设计输出报表格式。7.2.4输入/输出通常,效率主要指占用处理机时间和主存区域两个方面。好的编码可以提高效率,在我们进一步讨论这个问题之前,应该记住三条原则:第一、效率是一个性能要求,因而应该在需求分析阶段确定代码效率方面的要求;第二、通过好的设计可以提高效率;第三、程序的效率和程序的简明程度是一致的,不应该为了提高代码效率而牺牲程序的清晰性和可读性。7.2.5效率在把详细设计结果用代码来实现时要注意一些原则:在编码之前,先化简算术表达式和逻辑表达式;特别注意嵌套的循环,以确定是否有语句可以从循环内层移到循环外层;尽量避免使用多维数组和复杂的表格;尽量使用执行时间短的算术运算;尽量避免混合使用不同数据类型的量;尽量使用整型算术表达式和逻辑表达式。有些编译程序具有自动优化的功能,在强调效率的应用领域,尽量使用有这样的编译程序,以自动生成高效的目标代码。1、代码效率主存储器的容量曾经很大程度上制约了程序的效率。目前,在大型计算机中,由于操作系统页式调度的特点,一般来说,代码局部性和通过结构化构造来维护功能是提高效率的有效方法。在微处理机中,如果能利用的存储容量很小,就要考虑高级语言的编译程序在存储压缩方面的功能,有时则必须选择使用汇编语言。2、存储效率从编码的角度来看,人们总结了一些简单的指导原则来提高输入/输出的效率:所有的输入/输出都应该有缓冲,以降低用于通信的开销;对辅助存储器(如磁盘)的访问,应选用最简单最直接的方式;涉及到辅助存储器的输入/输出时,应该以块为单位进行传送;这些指导原则适用于软件工程的设计和编码两个阶段。3、输入/输出的效率为了提高编码的效率,保证程序的可靠性,我们经常使用一些编码工具。首先要用的当然是编辑工具了。选用合适的编辑工具可以大大方便编程,提高效率。编译程序的好坏也会影响编码的效率。一方面,好的编译程序应该是程序员的好助手,能够帮助程序员及时准确地诊断出程序中的差错,减少程序开发的成本。另一方面,编译程序还应该能够生成高效率的机器代码,也就是代码优化。7.3编码工具8.1软件测试的基本概念 8.1.1软件测试的定义 8.1.2软件测试的基本原则退出 8.1.3软件测试的步骤 8.1.4软件测试的信息流计关于测试目的,G.J.Myers给出了以下的观点:测试的定义:为了发现程序中的错误而执行程序的过程。具体地说,软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计出一批测试用例,并利用测试用例来运行程序,以发现程序错误的过程。8.1.1软件测试的定义(1)测试是为了发现程序中的错误而执行程序的过程;(2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;(3)成功的测试是发现了至今为止尚未发现的错误的测试。8.1.2

软件测试的基本原则(1)尽早地、不断地进行软件测试。(2)设计测试用例时,要给出测试的预期结果。(3)开发小组和测试小组分开。(4)要设计非法输入的测试用例。(5)在对程序修改之后要进行回归测试。(6)程序中尚未发现的错误的数量往往与在该段程序中已发现的错误的数量成正比。8.1.3

软件测试的步骤1.单元测试又称模块测试。每个程序模块完成一个相对独立的子功能,所以可以对该模块进行单独的测试。由于每个模块都有清晰定义的功能,所以通常比较容易设计相应的测试方案,以检验每个模块的正确性。2.集成测试在单元测试完成后,要考虑将模块集成为系统的过程中可能出现的问题,例如,模块之间的通信和协调问题,所以在单元测试结束之后还要进行集成测试。这个步骤着重测试模块间的接口,子功能的组合是否达到了预期要求的功能,全程数据结构是否有问题等。3.有效性测试4.系统测试系统测试是把通过有效性测试的软件,作为基于计算机系统的一个整体元素,与整个系统的其他元素结合起来,在实际运行环境下,对计算机系统进行一系列的集成测试和有效性测试。集成测试通过后,应在用户的参与下进行有效性测试。这个时候往往使用实际数据进行测试,从而验证系统是否能满足用户的实际需要。8.1.4

软件测试信息流8.2软件测试方法 8.2.1黑盒测试 8.2.2白盒测试退出8.2.1黑盒测试任何产品都可以使用以下两种方法进行测试:(1)如果已知产品的功能,则可以对它的每一个功能进行测试,看是否都达到了预期的要求;(2)如果已知产品的内部工作过程,则可以对它的每种内部操作进行测试,看是否符合设计要求。第一种方法是黑盒测试,第二种方法是白盒测试。黑盒测试时完全不考虑程序内部的结构和处理过程,只按照规格说明书的规定来检查程序是否符合它的功能要求。黑盒测试是在程序接口进行的测试,又称为功能测试。黑盒测试检查的主要方面有:程序的功能是否正确或完善;数据的输入能否正确接收,输出是否正确;是否能保证外部信息(如数据文件)的完整性等。用黑盒法设计测试用例时,必须用所有可能的输入数据来检查程序是否都能产生正确的输出。黑盒测试不可能实现穷尽测试:假设有一个很简单的小程序,输入量只有两个:A和B,输出量只有一个:C。如果计算机的字长为32位,A和B的数据类型都只是整数类型。利用黑盒法进行测试时,将A和B的可能取值进行排列组合,输入数据的可能性有:232×232=264种。假设这个程序执行一次需要1毫秒,要完成所有的测试,计算机需要连续工作5亿年。显然,这是不能容忍的,而且,设计测试用例时,不仅要有合法的输入,而且还应该有非法的输入,在这个例子中,输入还应该包括实数、字符串等,这样,输入数据的可能性就更多了。所以说,穷尽测试是不可能实现的。白盒测试时将程序看作是一个透明的盒子,也就是说测试人员完全了解程序的内部结构和处理过程。所以测试时按照程序内部的逻辑测试程序、检验程序中的每条通路是否都能按预定的要求正确工作。白盒测试又称为结构测试。利用白盒测试设计测试用例时,应包括以下三类测试:(1)语句测试:要求程序中的每个语句至少测试一次;(2)分支测试:要求程序中的每个分支至少测试一次;(3)路径测试:要求程序中的每条路径至少测试一次。8.2.2白盒测试白盒测试也不能实现穷尽测试:左图所示的一个小程序的控制流程,其中每个圆圈代表一段源程序(或语句块),图中的曲线代表执行次数不超过20的循环,循环体中共有5条通路。这样,可能执行的路径有520条,近似为1014条可能的路径。如果完成一个路径的测试需要1毫秒,那么整个测试过程需要3170年。显然,这也是不能接受的。8.3测试用例的设计 8.3.1逻辑覆盖 8.3.2等价类划分退出 8.3.3边界值分析 8.3.4错误推测法逻辑覆盖是以程序的内部逻辑结构为基础的测试用例设计技术,属于白盒测试。它要求测试人员十分清楚程序的逻辑结构,考虑的是测试用例对程序内部逻辑覆盖的程度。根据覆盖的目标,逻辑覆盖又可以分为:语句覆盖判定覆盖条件覆盖判定/条件覆盖条件组合覆盖8.3.1逻辑覆盖1、语句覆盖语句覆盖就是设计足够的调试用例,使得程序中的每个语句至少执行一次。左图程序段中共有4条路径:P1(ace)、P2(abd)、P3(abe)、P4(acd)。语句覆盖不能发现判断中的逻辑运算中的错误。第一个判断中的逻辑运算符“&&”若错写成了“||”,利用上面的输入数据则检查不出这个错误。P1正好满足语句覆盖的条件。可以设计如下的输入数据:A=2,B=0,x=42、判定覆盖判定覆盖就是设计足够的测试用例,使得程序中每个判定的取“真”分支和取“假”分支至少都执行一次,判定覆盖又称分支覆盖。测试用例如果能够测试路径P1(ace)和P2(abd),就可以满足判定覆盖要求。可以设计如下两组输入数据:A=2,B=0,x=4A=1,B=1,x=1也可以让测试用例测试路径P3(abe)和P4(acd)。相应的两组输入数据如下:A=2,B=1,x=1A=4,B=0,x=4判定覆盖比语句覆盖强,但是仍不能保证判断条件的正确性。例如:第二个判断条件中的x>1若错写成了x<1,利用上面的输入数据就不能检查出这个错误。3、条件覆盖条件覆盖就是设计足够的测试用例,使得程序判定中的每个条件能获得各种可能的结果。条件:A>1,B=0,A=2,x>1。需要有足够的测试用例使得上述四个条件都能有满足和不满足的情况。以下这两组输入数据能满足这些要求:A=2,B=0,x=4A=1,B=1,x=1这两组数据不仅满足条件覆盖的要求,而且也满足判定覆盖的要求。但并不是所有的满足条件覆盖要求的数据都满足判定覆盖的要求。下面的两组数据满足条件覆盖的要求:A=1,B=0,x=3A=2,B=1,x=1但是这组数

温馨提示

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

评论

0/150

提交评论