版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、8章软件工程基础软件工程(SoftwareEngineering,简称SE)是应用计算机科学、数学及管理科学等原理,开发软件的工程。软件工程借鉴传统工程的原则、方法,以提高质量、降低成本。对于软件工程,本章主要介绍一下内容:软件工程基本概念,软件生命周期概念,软件工具与软件开发环境。结构化分析方法,数据流图,数据字典,软件需求规格说明书。结构化设计方法,总体设计与详细设计。程序设计方法与风格,结构化程序设计,面向对象程序设计。软件测试的方法,白盒测试与黑盒测试,测试用例设计,软件测试的实施,单元测试、集成测试和系统测试。程序的调试,静态调试与动态调试。软件工程的基本概念软件及其特点计算机系统由
2、硬件和软件两部分组成。计算机软件是包括程序、数据及其相关文档资料的完整集合。其中,程序是软件开发人员根据用户需求开发的、用程序设计语言描述的、适合计算机执行的指令(语句)序列。数据是使程序能够正常操纵信息的数据结构。文档是与程序开发、维护和使用的图文资料。由此可见,软件由两部分组成:一是机器可执行的程序和数据;二是机器不可执行的,与软件开发、运行、维护和使用有关的文档。软件与硬件不同,它有以下特点:(1)软件是一种逻辑实体,而不是物理实体,具有抽象性。这使得软件与其他工程对象有着明显的差异。可以将软件记录在纸上或其他存储介质上,但却无法看到软件本身的形态,必2)软件的生产没有明显的制作过程。在
3、软件研制开发成功之后,可以大量拷贝须通过观察、分析、思考、判断,才能了解它的功能、性能等。同一内容的副本。所以对软件的质量控制,必须着重在软件开发方面下功夫。(3)软件在运行、使用期间不存在磨损、老化问题,但为了适应硬件、环境以及需求的变化要进行修改,而这些修改又会不可避免的引入错误,导致软件失效率升高,从而使得软件退化。(4)软件的开发、运行对计算机系统具有依赖性,受计算机系统的限制,这导致了软件移植的问题。(5)软件复杂性高,成本昂贵。软件是人类有史以来生产的复杂度最高的工业产品。软件涉及人类社会的各行各业、方方面面,软件开发常常涉及其他领域的专门知识。软件开发需要投入大量、高强度的脑力劳
4、动,这其中蕴含着成本高,风险大的问题。(6)软件开发涉及诸多的社会因素。许多软件的开发和运行涉及软件用户的机构设置,体制问题以及管理方式等,甚至涉及到人们的观念和心理因素,软件知识产权及法律等诸多的问题。软件根据应用目标的不同,是多种多样的。软件按功能可以分为:应用软件、系统软件、支撑软件(或工具软件)。应用软件是为解决特定领域的应用而开发的软件。例如,事务处理软件,工程与科学计算软件,实时处理软件,嵌入式软件以及人工智能软件等各种应用性质不同的软件。系统软件是计算机管理自身资源,提高计算机使用效率并为计算机用户提供各种服务的软件。例如,操作系统,编译程序,汇编程序,网络软件,数据库管理系统等
5、。支撑软件是介于系统软件和应用软件之间、协助用户开发软件的工具性软件。例如,需求分析工具软件,设计工具软件,编码工具软件,测试工具软件,维护工具软件等。8.1.2软件危机与软件工程软件危机“软件危机”这个词在20世纪60年代末以后频繁出现。所谓软件危机是泛指在计算机软件的开发和维护过程中所遇到的一系列严重问题。随着计算机技术的发展和计算机应用范围的扩大,计算机硬件的性价比和质量稳步提高,软件规模越来越大,复杂程度不断增加,软件成本逐年上升,质量没有可靠的保证,软件已成为计算机科学发展的“瓶颈”。具体地说,在软件开发和维护过程中,软件危机主要表现在:(1)软件需求的增长得不到满足。用户对系统不满
6、意的情况经常发生。(2)软件开发成本和进度无法控制。(3)软件质量难以保证。(4)软件不可维护或维护程度非常低。(5)软件的成本不断提高。(6)软件开发生产率的提高赶不上硬件的发展和应用需求的增长。在软件开发和维护过程中,之所以存在这些严重的问题,一方面与软件本身的特点有关。例如,在软件运行前,软件开发过程的进展难以衡量,质量难以评价,因此管理和控制软件开发过程相当困难;在软件运行过程中,软件维护意味着改正或修改原来的设计。另外,软件的显著特点是规模庞大,在开发大型软件时,要保证高质量,极端复杂困难,不仅涉及技术问题(如分析方法、设计方法、版本控制),更重要的是必须有严格而科学的管理。软件工程
7、为了消除软件危机,通过认真研究解决软件危机的方法,认识到软件工程是使计算机软件走向工程科学的途径,逐步形成了软件工程的概念,开辟了工程学的新领域软件工程学。软件工程就是试图用工程、科学和数学的原理与方法研制、维护计算机软件的有关技术及管理方法。关于软件工程的定义,国标(GB)中指出,软件工程是应用于计算机软件的定义、开发和维护的一整套方法、工具、文档、实践标准和工序。1968年在北大西洋公约组织会议(NATO会议)上,讨论摆脱软件危机的办法,软件工程(SoftwareEngineering)作为一个概念首次被提出,这在软件技术发展史上是一件大事。在会议上,德国人FritzBauer认为:“软件
8、工程是建立并使用完善的工程化原则,以较经济的手段获 TOC o 1-5 h z 得能在实际机器上有效运行的可靠软件的一系列方法”。1993年,IEEE(InstituteOfElectrical&ElectronicEngineers,电气和电子工程师学会)给出了一个更加综合的定义:“将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中”。这些主要思想都是强调在软件开发过程中需要应用工程化原则。软件工程包括3个要素,即方法、工具和过程。方法是完成软件工程项目的技术手段;工具支持软件的开发、管理、文档生成;过程支持软件开发的各个环节的控制、管理。软件工程的核
9、心思想是把软件产品作为是一个工程产品来处理。把需求计划、可行性研究、工程审核、质量监督等工程化的概念引入到软件生产当中,以期达到工程项目的三个基本要素:进度、经费和质量的目标。同时软件工程也注重研究不同于其他工业产品生产的一些特性,并针对软件的特点提出了许多有别于一般工业技术的一些技术方法。从经济学意义上说,软件庞大的维护费用远比软件开发费用高,因此开发软件不能只考虑开发期间的费用,而应考虑软件生命周期内的全部费用。8.1.3软件工程过程与软件生命周期软件工程过程(SoftwareEngineeringProcess)软件工程过程包括两方面的内涵:(1)软件工程过程是为获得软件产品,在软件工具
10、的支持下由软件人员完成的一系列软件工程活动。从这个方面来说,软件工程过程通常包含四种基本活动:软件规格说明:规定软件的功能及其运行的限制;软件开发:产生满足规格说明的软件;软件确认:确认软件能够完成客户提出的要求;软件演进:为满足客户的变更要求,软件必须在使用的过程中演进。(2)从软件开发的观点看,软件工程过程就是使用适当的资源(包括人员、软硬件工具、时间等)为开发软件进行的一组开发活动,在过程结束时将输入(用户要求)转化为输出(软件产品)。所以,软件工程的过程是将软件工程的方法和工具综合起来,以达到合理、及时地进行计算机软件开发的目的。.软件的生命周期(SoftwareLifeCycle)通
11、常,将软件产品提出、实现、使用维护到停止使用退役的过程称为软件的生命周期。可以将软件生命周期分为如图14-1所示的软件定义、软件开发及软件运行维护三个阶段。图14-1软件生命周期图14-1所示的软件生命周期的主要活动阶段是:(1)可行性研究与计划制定。确定待开发软件系统的开发目标和总的要求,给出它的功能、性能、可靠性以及接口等方面的可能方案,制定完成开发任务的实施计划。(2)需求分析。对待开发软件提出的需求进行分析弁给出详细定义。编写软件规格说明书及初步的用户手册,提交评审。(3)软件设计。系统设计人员和程序设计人员应该在反复理解软件需求的基础上,给出软件的结构、模块的划分、功能的分配以及处理
12、流程。如果系统比较复杂,则可将设计阶段分为概要设计和详细设计两个阶段。(4)软件实现。把软件设计转换成计算机可以接受的程序代码。(5)软件测试。在设计测试用例的基础上,检验软件的各个组成部分。(6)运行和维护。将已交付的软件投入运行,弁在运行使用中不断地维护,根据新提出的需求进行必要而且可能的扩充和删改。8.1.4软件工程的目标与原则.软件工程的目标软件工程的目标是,在给定成本与进度的前提下,开发出满足用户需求且其有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性较好的产品。软件工程需要达到的基本目标应是:付出较低的开发成本;达到要求的软件功能;取得较好的软
13、件性能;开发的软件易于移植;需要较低的维护费用;能按时完成开发,及时交付使用。为了达到软件工程的目标,软件工程研究的内容主要包括:软件开发技术和软件工程管理。1)软件开发技术软件开发技术包括:软件开发方法学、软件开发过程、软件开发工具和软件工程环境,其主体内容是软件开发方法学。软件开发方法学是根据不同的软件类型,按不同的观点和原则,对软件开发中应遵循的策略、原则、步骤和必须产生的文档资料都做出规定,从而使软件的开发能够进入规范化和工程化的阶段,以克服早期的手工方法生产中的随意性和非规范性做法。2)软件工程管理软件工程管理包括:软件管理学、软件工程经济学、软件心理学等内容。软件工程管理是软件按工
14、程化生产时的重要环节,它要求按照预先制定的计划、进度和预算执行,以实现预期的经济效益和社会效益。软件管理学包括人员组织、进度安排、质量保证、配置管理、项目计划等。软件工程经济学是研究软件开发中成本的估算、成本效益分析的方法和技术,用经济学的基本原理来研究软件工程开发中的经济效益问题。软件心理学是从个体心理、人类行为、组织行为和企业文化等角度来研究软件管理和软件工程的。软件工程的原则为了达到上述的软件工程目标,在软件开发过程中,必须遵循软件工程的基本原则。这些基本原则包括抽象、信息隐蔽、模块化、局部化、确定性、一致性、完备性和可验证性。1)抽象。抽取事物最基本的特性和行为,忽略非本质细节。在实施
15、过程中,采用分层次抽象,自顶向下,逐层细化的方法来化解软件开发过程的复杂性。2)信息隐蔽。用封装技术,将程序模块的实现细节隐藏起来,并提供尽可能简单的模块接口,以便于和其他模块连接在一起。3)模块化。模块是程序中相对独立的成分,一个模块是一个独立的编程单位。模块应具有良好的接口定义。模块的大小要适当。4)局部化。要求在一个物理模块内集中逻辑上相互关联的计算资源,保证模块间具有松散的耦合关系,模块内部有较强的内聚性,这有助于控制系统的复杂性。5)确定性。软件开发过程中所有概念的表达应是确定的、无歧义的和规范的。这有助于人与人之间的交流,不会产生误解和遗漏,从而保证整个开发工作的协调一致。6)一致
16、性。在程序、数据和文档的整个软件系统的各模块中,应使用已知的概念、符号和术语;程序内部和外部接口应保持一致,系统规格说明与系统行为应保持一致。7)完备性。软件系统不丢失任何重要成分,完全实现系统所需的功能。8)可验证性。开发大型软件系统需要对系统自顶向下,逐层分解。系统分解应遵循容易检查、测评、评审的原则,以确保系统的正确性。8.1.5软件开发工具与软件开发环境现代软件工程方法之所以得以实施,依赖于相应的软件开发工具和环境的支持,使软件在开发效率、工程质量等多方面得到改善。软件工程鼓励研制和采用各种先进的软件开发方法、工具和环境,而工具和环境的使用又进一步提高了软件的开发效率、维护效率和软件质
17、量。1软件开发工具软件开发工具(SoftwareDevelopmentofTool)是指可以用来帮助开发,测试、分析、维护其他计算机程序及其文档资料的一类程序。软件开发工具的完善和发展将促进软件开发方法的进步和完善,促成软件开发的高速度和高质量。软件开发工具的发展是从单项工具的开发逐步向集成工具发展的,软件开发工具为软件工程方法提供了自动的或半自动的软件支撑环境。同时,软件开发方法的有效应用也必须得到软件开发工具的支持,否则方法将难以有效的实施。2软件开发环境软件开发环境或软件工程环境(SoftwareEngineeringEnvironment,SEE)是全面支持软件开发全过程的软件工具集合
18、。它们按照一定的方法或模式组合起来,支持软件生命周期内的各个阶段中各项任务的完成。计算机辅助软件工程(ComputerAidedSoftwareEngineering,CASE)是当前软件开发环境中富有特色的研究工作和发展方向。CASE将各种软件工具、开发机器和一个存放开发过程信息的中心数据库组合起来,形成软件工程环境。CASE的成功产品将最大限度地降低软件开发的技术难度,并使软件开发的质量得到保证。8.2软件需求分析需求分析与需求分析方法需求分析软件需求是指用户对目标软件系统在功能、行为、性能、设计约束等方面的期望和要求。需求分析的目的是形成软件需求规格说明书,但还不是确定系统如何工作,仅对
19、目标系统提出明确具体的要求。需求分析必须达到开发人员和用户完全一致的要求。需求分析阶段的工作,可以概括为四个方面:1)需求获取:需求获取的目的是确定对目标系统的各方面需求。2)需求分析:对获取的需求进行分析和综合,最终给出系统的解决方案和目标系统的逻辑模型。3)编写需求规格说明书:需求规格说明书作为需求分析的阶段成果,可为用户、分析人员和设计人员之间的交流提供方便,可直接支持目标软件系统的确认,还可以作为控制软件开发进程的依据。4)需求评审:在需求分析的最后一步,对需求分析阶段的工作进行复审,验证需求文档的一致性、可行性、完整性和有效性。需求分析方法常见的需求分析方法有以下两种:1)结构化分析
20、方法。主要包括:面向数据流的结构化分析方法(StructuredAnalysis,SA),面向数据结构的Jackson系统开发方法(JacksonSystemDevelopmentMethod,JSD),面向数据结构的结构化数据系统开发方法(DataStructuredSystemDevelopmentMethod,DSSD)。2)面向对象的分析方法(Object-OrientedMethod,OOA)。从需求分析建立的模型的特性来分,需求分析方法又分为静态分析方法和动态分析方法。8.2.2结构化分析方法结构化分析方法是结构化程序设计理论在软件需求分析阶段的运用。它起源于20世纪70年代的基于
21、功能分解的分析方法,可帮助我们弄清用户对软件的需求。结构化分析方法的实质是着眼于数据流,自顶向下,逐层分解,建立系统的处理流程,以数据流图和数据字典为主要工具,建立系统的逻辑模型。结构化分析的步骤如下:(1)通过对用户的调查,以软件的需求为线索,获得当前系统的具体模型。去掉具体模型中非本质因素,抽象出当前系统的逻辑模型。根据计算机的特点分析当前系统与目标系统的差别,建立目标系统的逻辑模型。完善目标系统并补充细节,写出目标系统的软件需求规格说明。评审直到确认完全符合用户对软件的需求。结构化分析的常用工具有数据流图、数据字典、判定表和判定树等。数据流图(DataFlowDiagram,DFD)数据
22、流图是描述数据处理过程的工具,是从数据传递和加工的角度,以图形的方式描绘数据在系统中流动和处理的过程。这里以人们熟悉的事务处理一一去银行取款为例说明数据流图如何描述处理过程。图14-2表示储户携带存折去银行办理取款手续。储户把存折和取款单交给银行工作人员,工作人员核对账目。检验存折有效性,取款单填写问题,在合格后工作人员将取款信息登记在存折和账户上,弁通知取款,付款给储户从而完成一系列的数据处理活动o账卡检验出问题检验取款信息存折日历年月日图14-2银行取款业务的数据流图从数据流图中可知,数据流图的基本图形元素有4种,如图14-3所示。图14-3DFD的基本图形符号圆形:加工。输入数据经加工变
23、换产生输出。矩形:表示数据的源点或终点。是系统和环境的接口,属系统之外的实体。箭头:数据流。沿箭头方向传送数据的通道。双杠:表示存储文件(数据源)。即处理过程中存放各种数据文件。数据流是沿箭头方向传送的数据,在加工之间传输的数据流一般是有名的,连接数据存储文件和加工的数据流有些没有命名,这些数据流虽然没有命名,但因所连接的是有名加工和有名文件,所以含义是清楚的。同一数据流图上不能有两个数据流名字相同。.数据字典(DataDictionary,DD)数据字典是结构化分析方法的另一个工具。它与数据流图配合,能清楚地表达数据处理的要求。数据流图给出系统的组成及其内部各元素相互之间的关系,但未说明数据
24、元素的具体含义。仅靠数据流图人们很难理解它所描述的对象。数据字典是对所有与系统相关的数据元素的一个有组织的列表,以及精确的、严格的定义,使得用户和系统分析员对于输入、输出、存储成分和中间计算结果有共同的理解。在数据字典的编制过程中,常使用定义式方式描述数据结构。表14-1给出了常用的定义式符号。表14-1数据字典定义式方式中出现的符号符号含义解释=定义为+与例如x=a+b,表示x由a和b组成【1或例如,x=a,b,x=a|b,表示x由a或由b组成与,和例如,x=a,表示x由0个或多个a组成nm重复例如,x=4a9,表示a可以在x中至少出现4次最多出现9次()可选例如,x=(a)表示a可以在x中
25、出现,也可以不出现基本可选兀素例如,x=a,表示x为取值为a的数据兀素连接符例如,x=3.9,表示x可以取3到9之间的任一值例如,银行取款业务的数据流图中,存储文件“存折”的数据字典定义如下:存折=户名+所号账户+开户日+性质+(印密)+1存取行50户名=2字母24所号=00L.“999”注:储蓄所编码,规定为3位数字账号.“00000001”?99999999”注:账号规定由8位数字组成开户日=年+月+日性质二“了6”“注:“1”表7K普通用户,“5”表7K工资用户一、J等、一,一印密=0”学注:密印在存折上不显示存取行=日期+(摘要)+支出+存入+余额+操作+复核日期=年+月+日年=00”
26、.“99”月=01”.“12”日=01”.“31”摘要=1字母)4支出=金额金额=0000000.01”“9999998.99”操作=00001”.”99999”?判定表当数据流图中的加工要依赖于多个逻辑条件的取值,即完成该加工的一组动作是由于某一组条件取值的组合而引发的,使用判定表描述比较合适。例如,检查定购单的加工逻辑是:如果金额超过600元又未过期则发出批准单和提货单;若金额超过600元但过期了则不发批准单;如果金额不超过600元,则无论过期与否都发批准单和提货单;在过期的情况下,还需发出通知单。上述文字是不易懂的,用判定表的方式可以写为表14-2:表14-2检查订购单的判定表条件分类1
27、234金额600600600600动作账目状况未过期已过期未过期已过期才并批准单V发出批准单VVV发出提货单VVV发出通知单V.判定树判定树也是用来表达加工逻辑的一种工具。有时候,它比判定表更加直观,用它来描述加工很容易为用户所接受。使用判定树进行描述时,应先从问题定义的文字描述中分清哪些是判定的条件,哪些是判定的结论,根据描述材料中的连接词找出判定条件之间的从属关系、弁列关系、选择关系,根据它们构造判定树。例如,我们看一个例子,某工厂制定出对职工超产的奖励政策是:对产品甲和产品乙,凡是实际生产数量超过计划指标的,均可发给奖金。原则是:超产越多,奖金就越多,不封顶。对产品甲,个人生产数量超过计
28、划指标1?20件,按超产部分每件发给奖金0.10元计算;如果个人生产数量超过计划指标21?50件,其中前20件按0.10元计奖金,其余部分按每件0.12元计算奖金;如果超过50件,从第51件起按每件0.15元发奖金。对产品乙,个人生产数量超过计划1?100件,按每超一件发奖金0.20元计算;如果超产101?200件,前100件按每件0.20元;101?200件的每件0.30元计算;超产200件以上的部分每件发奖金0.40元。若用结构化语言是相当长的一段,我们可以用判定树清晰地表达出来。1_N_200.10N产品甲505.6元+0.15(N-50)元奖金政策一1EN1000.2XN元产品乙100
29、N200-50元+(N-200)0.40元这张判定树能够使人很快地看出,在什么样的情况下应该采取什么奖金措施,特别是对那些存在判定处理的加工逻辑,判定树是一种十分有效的表达工具。8.2.3软件需求规格说明书软件需求规格说明书(SoftwareRequirementSpecification,SRS是需求分析阶段的最后成果,是软件开发中的重要文档之一。1.软件需求规格说明书的作用软件需求规格说明书的作用是:+1)便于用户、开发人员进行理解和交流。+2)反映出用户问题的结构,可以作为软件开发工作的基础和依据。3)作为确认测试和验收的依据。2.软件需求规格说明书的内容软件需求规格说明书是作为需求分析
30、的一部分而制定的可交付说明、恰当的检验标准以及其他与要求有关的数据。文档该说明 将在软件计划中确定的软件范围加以展开,制定出完整的信息描述、详细的功能软件需求规格说明书所包括的内容和书写框架如下:一、概述二、数据描述?数据流图?数据字典?系统接口说明?内部接口三、功能描述?功能?处理说明?设计的限制四、性能描述?性能参数?测试种类?预期的软件响应?应考虑的特殊问题五、参考文献目录六、附录其中:(1)概述是从系统的角度描述软件的目标和任务。数据描述是对软件系统所必须解决的问题做出的详细说明。功能描述中描述了为解决用户问题所需要的每一项功能的过程细节。对每项功能要给出处理说明以及在设计时需要考虑的
31、限制条件。在性能描述中说明系统应达到的性能和应该满足的限制条件,检测的方法和标准,预期的软件响应和可能需要考虑的特殊问题。参考文献目录中应包括与该软件有关的全部参考文献,其中包括前期的其他文档、技术参考资料、产品目录手册以及标准等。附录部分包括一些补充资料。如列表数据、算法的详细说明、框图、图表和其他材料。3软件需求规格说明书的特征软件需求规格说明书是确保软件质量的有力措施,衡量软件需求规格说明书质量好坏的标准、标准的优先级及标准的内涵如下:(1)正确性。体现待开发系统的真实要求。无歧义性。对每一个需求只有一种解释,其陈述具有惟一性。完整性。包括全部有意义的需求,功能的、性能的、设计的、约束的
32、、属性或外部接口等方面的需求。可验证性。描述的每一个需求都是可验证的,即存在有限代价的有效过程验证确认。(5)一致性。各个需求的描述不矛盾。(6)可理解性。需求说明书要简明易懂,尽量少包含计算机的概念和术语,以便用户和软件人员都能接受它。7)可修改性。SRS的结构风格在需求有必要改变时是易于实现的。8)可追踪性。每一个需求的来源、流向是清晰的,当产生和改变文件编制时,可以方便地追踪每一个软件需求。软件需求规格说明书是软件生命周期中一份至关重要的文件,它在开发早期就为将要设计的软件系统建立了可见的逻辑模型,可以保证开发工作的顺利进行,因此,应该重视这项工作,应及时地建立并保证它的质量。作为设计的
33、基础和验收的依据,软件需求规格说明书应该精确而无二义性,软件需求规格说明书越精确,则以后出现错误、混淆、反复的可能性越小。软件需求规格说明书应该是简单易懂的,以便用户和软件人员都能接受它。其中应尽量少包含计算机的概念和术语,以便用户能看懂并且发现和指出其中的错误,这是保证软件系统质量的关键。8.3软件设计软件设计是根据需求分析阶段得到的需求规格说明书,设计出实现软件属性性能及其他)集合的算法和数据结构,并对它们进行规格化处理,也就是从抽象的需求规格向具体的程序功能、与数据集合的变换过程。在此过程中,要形成各种设计文档,即各种设计书,它是设计阶段最终产品。软件设计阶段是软件开发过程中的一个关键阶
34、段,对未来软件的质量有决定性的影响。软件设计的基木概念分析阶段的工作结果是需求说明书,它明确地描述了用户要求软件系统“做什么”但对于大型系统来说,为了保证软件产品的质量,并使开发工作顺利进行,必须先为编程序制定一个计划,这项工作称为软件设计,设计实际上是为需求说明书到程序之间的过渡架起一座桥梁。软件设计的基础软件设计是软件工程的重要阶段,是一个把软件需求转换为软件表示的过程。软件设计的基本目标是用比较抽象概括的方式确定目标系统如何完成预定的任务,计是确定系统的物理模型。即软件设软件设计的重要性和地位可概括为以下几点:1)软件开发阶段(设计、编码、测试)占据软件项目开发总成本绝大部分,是在软件开
35、发中保证质量的关键环节。2)软件设计是开发阶段最重要的步骤,是将需求准确地转化为完整的软件产品或系统的唯一途径。3)软件设计做出的决策,最终影响软件实现的成败。从技术观点来看,软件设计包括软件结构设计、数4)设计是软件工程和软件维护的基础。据设计、接口设计和过程设计。其中,结构设计是定义软件系统各主要部件之间的关系。数据设计是将分析时创建的模型转化为数据结构的定义。接口设计是描述软件内部、软件和协作系统之间以及软件与人之间如何通信。过程设计是将系统结构部件转换成软件的过程性描述。从工程管理角度来看,软件设计分两步完成(概要设计和详细设计)。概要设计:又称为结构设计。将软件需求转化为软件体系结构
36、,确定系统级接口、全局数据结构或数据库模式。详细设计:确定每个模块的实现算法和局部数据结构,用适当方法表示算法和数据结构的细节。软件设计的一般过程:软件设计是一个迭代的过程,先进行高层次的结构设计;后进行低层次的过程设计;穿插进行数据设计和接口设计。最引人注意且使用范围最广的方法是结构化设计方法。其基本思想是将软件设计成由相对独立且具有单一功能的模块组成的结构。软件设计的基本原理在软件开发实践中,有许多软件设计的概念和原则,它们对提高软件的设计质量有很大的帮助。1)模块化模块是数据说明、可执行语句等程序对象的集合,可以对模块单独命名,而且可通过名字访问,例如,过程、函数、子程序、宏等都可作为模
37、块。模块化是指解决一个复杂问题时自顶向下逐层把软件系统划分成若干模块的过程。程序划分成若干个模块,每个模块具有一个确定的子功能,把这些模块集成为一个整体,就可以完成整个系统的功能。为了解决复杂的问题,在软件设计中必须把整个问题进行分解来降低复杂性,这样就可以减少开发工作量并降低开发成本和提高软件生产率。但是划分模块并不是越多越好,因为这会增加模块之间接口的工作量,所以划分模块的层次和数量应该避免过多或过少。2)抽象在现实世界中,事物、状态或过程之间存在共性。把这些共性集中且概括起来,忽略它们之间的差异,这就是抽象。简而言之抽象就是抽出事物的本质特性而暂时不考虑它们的细节。软件设计中考虑模块化解
38、决方案时,可以定出多个抽象级别。抽象的层次从概要设计到详细设计逐步降低。在概要设计中的模块分层也是由抽象到具体逐步分析和构造出来的。3)信息隐蔽信息隐蔽是指每个模块的实现细节对于其他模块来说是隐蔽的,也就是说,模块中所包括的信息不允许其他不需要这些信息的模块调用。4)模块独立性模块独立性是指每个模块只完成系统要求的独立的子功能,最好与其他模块的联系最少且接口简单,这是评价设计好坏的重要标准。模块的独立性可由内聚性和耦合性两个标准来度量。耦合表示不同模块之间互相连接的紧密程度,内聚表示一个模块内部各个元素彼此结合的紧密程度。耦合性藕合性是对一个软件结构内不同模块之间互连程度的度量。藕合性强弱取决
39、于模块间接口的复杂程度、调用模块的方式以及通过接口的是哪些信息。藕合分为下列几种,它们之间的藕合度由高到低排列如下。内容藕合:若一个模块直接访问另一个模块的内容,则这两个模块称为内容藕合。它是最高程度的藕合。公共榴合:若一组模块都访问同一全局数据结构,则它们之间的藕合称为公共藕合。外部藕合:若一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不通过参数表传递该全局变量的信息,则称为外部藕合。控制藕合:若一个模块明显地将开关量、名字等信息送入另一个模块,控制另一个模块的功能,则称为控制藕合。控制藕合是中等程度的藕合,增加了系统的复杂程度。标记藕合:若两个以上的模块都需要其余某一数据结构子
40、结构时,不使用其余全局变量的方式而是用记录传递的方式,即两模块之间通过数据结构变换信息,这样的藕合称为标记藕合。数据藕合:若一个模块访问另一个模块,被访问模块的输入和输出都是数据项参数,即两模块之间通过数据参数交换信息,则这两个模块为数据藕合。非直接藕合:若两个模块没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,则称这两个模块为非直接藕合。非直接藕合的独立性最强。从上面关于藕合机制的分类可以看出,一个模块与其他模块的藕合性越强,则其模块独立性越弱。原则上,总是希望模块之间的藕合表现为非直接藕合方式。但是,由于问题所固有的复杂性和结构化设计的原则,非直接藕合往往是不存在的。(2
41、)内聚性内聚性是一个模块内部各个元素之间彼此结合的紧密程度的度量。内聚是从功能角度来度量模块内的联系的。简单地说,理想内聚的模块只完成一个子功能。内聚有以下几种,它们之间的内聚性由弱到强排列如下。偶然内聚:指一个模块完成一组任务,这些任务间的关系很松散,称为偶然内聚。逻辑内聚:指一个模块完成的功能在逻辑上属于相同或相似的一类,通过参数确定该模块完成哪一个功能。时间内聚:指一个模块包含的任务必须在同一段时间内执行,就叫时间内聚。例如,初始化模块它按顺序为变量赋初值。过程内聚:指一个模块内各处理元素彼此相关,且必须按特定顺序执行。通信内聚:指一个模块内所有处理功能都通过使用公用数据而发生关系,这种
42、内聚称为通信内聚,也具有过程内聚的特点。顺序内聚:指一个模块中各处理元素和同一个功能密切相关,而且,这些处理必须顺序执行,通常前一个处理元素的输出就是下一个处理元素的输入。功能内聚:指模块内所有元素共同完成一个功能,缺一不可,模块已不可再分。这是最强的内聚。内聚性是信息隐蔽和局部化概念的自然扩展。一个模块的内聚性越强则该模块的模块独立性越强。作为软件结构设计的设计原则,要求每一个模块的内部都具有很强的内聚性,它的各个组成部分彼此都密切相关。藕合性与内聚性是模块独立性的两个定性标准,藕合与内聚是相互关联的。在程序结构中,各模块的内聚性越强,它们的藕合性越弱。一般来说,软件设计时应尽量做到高内聚,
43、低藕合,即减弱模块之间的藕合性和提高模块内的内聚性,从而提高模块的独立性。8.3.2概要设计概要设计的任务软件概要设计的基本任务是:(1)设计软件系统结构在需求分析阶段,已经把系统分解成层次结构,而在概要设计阶段,需要进一步分解,划分为模块以及模块的层次结构。划分的具体过程是:采用某种设计方法,将一个复杂的系统按功能划分成模块。确定每个模块的功能。确定模块之间的调用关系。确定模块之间的接口,即模块之间传递的信息。评价模块结构的质量。2)数据结构及数据库设计数据设计是实现需求定义和规格说明过程中提出的数据对象的逻辑表示。数据设计的具体任务是:确定输入、输出文件的详细数据结构;结合算法设计,确定算
44、法所必需的逻辑数据结构及其操作;确定对逻辑数据结构所必须的那些操作的程序模块,限制和确定各个数据设计决策的影响范围;需要与操作系统或调度程序接口所必需的控制表进行数据交换时,确定其详细的数据结构和使用规则;数据的保护性设计:防卫性、一致性、冗余性设计。数据设计中应注意掌握以下设计原则:用于功能和行为的系统分析原则也应用于数据。应该标识所有的数据结构以及其上的操作。应当建立数据字典,并用于数据设计和程序设计。低层的设计决策应该推迟到设计过程的后期。只有那些需要直接使用数据结构、内部数据的模块才能看到该数据的表示应该开发一个由有用的数据结构和应用于其上的操作组成的库。软件设计和程序设计语言应该支持
45、抽象数据类型的规格说明和实现。3)编写概要设计文档在概要设计阶段,需要编写的文档有概要设计说明书、数据库设计说明书、集成测试计划等。(4)概要设计文档评审在概要设计中,对设计部分是否完整地实现了需求中规定的功能、性能等要求,设计方案的可行性,关键的处理及内外部接口定义正确性、有效性,各部分之间的一致性等都要进行评审,以免在以后的设计中出现大的问题而返工。在概要设计过程中,常用的软件结构设计工具是结构图(StructureChart,SC),也称为程序结构图。使用结构图描述软件系统的层次和分块结构关系,它反映了整个系统的功能实现以及模块与模块之间的联系和通信,描述了未来程序中的控制层次体系。结构
46、图是描述软件结构的图形工具。结构图的基本图符如图14-4所示。一般模块数据信息?-?控制信息图14-4结构图基本图符模块用一个矩形表示,矩形内注明模块的功能和名字;箭头表示模块间调用关系。在结构图中还可以用带注释的箭头表示模块调用过程中来回传递的信息。如果希望进步标明传递的信息是数据还是控制信息,则可以用带实心圆的箭头表示传递的是控制信息,用带空心圆箭头表示传递的是数据。根据结构化设计思想,结构图构成的基本形式如图14-5所示基本形式顺序形式重复形式选择形式图14-5结构图构成基本形式经常使用的结构图有四种模块类型:传入模块,传出模块、变换模块和协调模块。具表示形式如图14-6所不传出模块倍出
47、榄块:从上蛭块朋得敷 据,疑过理再舟 苴怙给下边相堞?协调模块图14-6传入模块、传出模块、变换模块和协调模块的表示形式和含义F面通过图14-7进步了解程序结构图的有关术语财篝帐务系嫌上纵模联从国慎块凭证处理一国一J财务报一表- 图14-7简单财务账务管理系统结构图深度:表示控制的层数。上级模块、从属模块:上、下两层模块a和b,且有a调用b则a是上级模块,b是从属模块。宽度:整体控制跨度(最大模块数的层)的表示。扇入:调用一个给定模块的模块个数。扇出:一个模块直接调用的其他模块数。原子模块:树中位于叶子结点的模块。2?面向数据流的设计方法在需求分析阶段,主要是分析信息在系统中加工和流动的情况。
48、面向数据流的设计方法定义了一些不同的映射方法,利用这些映射方法可以把数据流图变换成结构图表示的软件结构。首先需要了解数据流图表示的数据处理的类型,然后针对不同类型分别进行分析处理。数据流类型典型的数据流类型有两种:变换型和事务型。变换型。变换型是指信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。变换型数据处理问题的工作过程大致分为三步,即取得数据、变换数据和输出数据,如图14-8所示。相应于取得数据、变换数据、输出数据的过程,变换型系统结构图由输入、中心变换和输出等三部分组成,如图14-9所示。一传入数据4
49、变换数据一传出数据一图14-8变换型数据流结构变换型数据流图映射的结构图如图14-10所示。v.x-f厂一-取得数据-交换数据-输出数据一-输入中心变换输出图14-9变换型数据流结构的组成主控模块B_Jh输入数据|交换中心输出数据囱os变换型数据流系统结构图图14-10事务型。在很多软件应用中,存在某种作业数据流,它可以引发一个或多个处理,这些处理能够完成该作业要求的功能,这种数据流就叫做事务。事务型数据流的特点是接受一项事务,根据事务处理的特点和性质,选择分派一个适当的处理单元(事务处理中心),然后给出结果。这类数据流归为特殊的一类,称为事务型数据流,如图14-11所示。在一个事务型数据流事
50、务1中,事务中心接收数据,分析每个事务以确定它的类型,根据事务类型选取一条活动通路。事务处理中心事务n图14-11事务型数据流结构事务型数据流图映射的结构图如图14-12所示中存士心由人分析输入流事务调度输出泉图14-12事务型数据流系统结构图在事务型数据流系统结构图中,事务中心模块按所接受的事务类型,选择某一事务处理模块执行,各事务处理模块弁列。每个事务处理模块可能要调用若干个操作模块,而操作模块又可能调用若干个细节模块。(2)面向数据流设计方法的实施要点与设计过程面向数据流的结构设计过程和步骤如下:分析、确认数据流图的类型,区分是事务型还是变换型。说明数据流的边界。将数据流图映射为程序结构
51、。如果是事务流,则区分事务中心和数据接收通路,将其映射成事务结构;如果是变换流,则区分输出和输入分支,将其映射成变换结构。根据设计准则对产生的结构进行细化和求精。(3)变换型数据流图转换成程序结构图的实施步骤将变换型数据流图映射成程序结构图称为变换分析,其步骤如下:确定数据流图是否具有变换特性。一般地说,一个系统中所有的信息流都可以认为是变换流,但是,当遇有明显的事务特性的信息流时,建议采用事务分析方法进行设计。这时,应该观察在整个数据流图中哪种属性占优势,先确定数据流的全局特性。另外,还应把具有全局特性的不同特点的局部区域分离出来,根据这些子数据流的特点进行部分处理。确定输入流和输出流的边界
52、,划分出输入、变换和输出,独立出变换中心。进行第一级分解,将变换型映射成软件结构(参见图14-10),其中输入数据处理模块协调对所有输入数据的接收;变换中心控制模块管理对内部形式的数据的所有操作;输出数据处理控制模块协调输出信息的产生过程。按上述步骤,如出现事务流,也可按事务流的映射方式对各个子流进行逐级分解,直至分解到基本功能。对每个模块写一个简要说明,内容包括该模块的接口描述、模块的内部信息、过程陈述、包括的主要判定点及任务等。利用软件结构的设计原则对软件结构进一步转化。4)事务型数据流图转换成程序结构图的实施步骤将事务型映射成结构图又称为事务分析。事务分析的设计步骤与变换分析设计步骤大致
53、类似,主要差别仅在于由数据流图到软件结构的映射方法不同(参见图14-10和图14-12)。它是将事务中心映射成为软件结构中发送分支的调度模块,将接收通路映射成软件结构的接收分支。设计的准则人们在大量软件设计的实践中总结出以下设计准则,用于设计的指导和对软件结构图进行优化。1)提高模块独立性。对软件结构应着眼于改善模块的独立性,依据降低耦合提高内聚的原则,通过把一些模块取消或合并来修改程序结构。2)模块规模适中。实践表明,当模块增大时,模块的可理解性大幅下降。但是当对大的模块分解时,不应降低模块的独立性。因为,当对一个大的模块分解时,有可能会增加模块间的依赖。(3)深度、宽度、扇出和扇入适当。因
54、为:如果深度过大,则说明有的控制模块可能简单了。如果宽度过大,则说明系统的控制过于集中了。如果扇出过大则意味模块过分复杂,需要控制和协调过多的下级模块,这时应适当增加中间层次;若果扇出过小,则可以把下级模块进一步分解成若干个子功能模块,或者合并到上级模块中去。扇入越大则共享该模块的上级模块数目越多。经验表明,好的软件设计结构通常是顶层高扇出,中间扇出较少,底层高扇入。(4)将模块的作用域限制在该模块的控制域内。模块的作用域是指模块内一个判定的作用范围,凡是受这个判定影响的所有模块都属于这个判定的作用域。模块的控制域是指这个模块本身以及所有直接或间接从属于它的模块的集合。在一个设计较好的系统中,
55、所有受某个判定影响的模块应该都从属于做出判定的那个模块,最好局限于做出判定的那个模块本身及它的直属下级模块。如果一个软件结构不满足这一条件,修改方法是,将判定点上移或者将那些在作用域内但不在控制域内的模块移到控制域内。减少模块的接口和界面的复杂性。模块的接口复杂是软件容易发生错误的一个主要原因。因此,应该仔细设计模块接口,使得信息传递简单并且和模块的功能一致。设计成单入口、单出口的模块。设计功能可预测(7),即不考虑模块的模块。如果一个模块可以当作一个“黑盒”的内部结构和处理过程,则该模块的功能就是可以预测的。&3.3详细设计在概要设计阶段,已经确定了软件系统的总体结构,给出了系统中各个组成模
56、块的功能和模块间的联系。而详细设计的任务,是为软件系统的总体结构中的每一个模块确定实现算法和局部数据结构,用某种选定的表达工具表示算法和数据结构的细节。表达工具可以由设计人员自由选择,但它应该具有描述过程细节的能力,而且能够使程序员在编程时便于直接翻译成程序设计语言的源程序。本节重点对过程设计进行讨论。在过程设计阶段,要对每个模块规定的功能以及算法的设计,给出适当的算法描述,即确定模块内部的详细执行过程,包括局部数据组织、控制流、每一步具体处理要求和各种实现细节等。其目的是确定应该怎样来具体实现所要求的系统常见的过程设计工具有:图形工具:程序流程图,N-S图,PAD图,HIPO图。表格工具:判
57、定表。语言工具:PDL(伪码)。下面介绍其中几种主要的工具。?程序流程图程序流程图也称为程序框图,是软件开发者最熟悉的一种算法描述工具。它的主要优点是独立于任何一种程序设计语言,比较直观、清晰,易于学习掌握。在程序流程图中常用的图形符号如图14-13所示:起止框输入与输出文档框连接点控制流处理框逻辑条件图14-13程序流程图的基本图符流程图中的流程线用以指明程序的动态执行顺序。结构化程序设计限制流程图只能使用五种基本控制结构,如图14-14所示。(1)顺序结构反映了若干个模块之间连续执行的顺序。(2)在选择结构中,由某个条件P的取值来决定执行两个模块之间的哪一个。(3)在当型循环结构中,只有当
58、某个条件成立时才重复执行特定的模块(称为循环体)。(4)在直到型循环结构中,重复执行一个特定的模块,直到某个条件成立时才退出该模块的重复执行。(5)在多情况选择结构中,根据某控制变量的取值来决定选择多个模块中的哪一个。通过把程序流程图的5种基本控制结构相互组合或嵌套,可以构成任何复杂的程序流程图。多重选择结梅直到亶循环图14-14流程图的五种基本控制结构选择结构J例如,下面是简单托运货物运费计算的问题。设货物重量x,客户信息y,输入x、y后,计算运费的具体要求是:“输如果0 x15(设为条件2),则用公式2计算后,循环3次完成同样的“记账”和“输操作,然后程序结束。该问题程序的程序流程图描述如
59、图14-15。Tij图14-15程序流程图不例1973 年 Nossi 和 ShneidermanN-S图。N-S图是一种N-S图中,去掉了流程图中N-S图为了避免流程图在描述程序逻辑时的随意性与灵活性,提出了用方框图来代替传统的程序流程图,通常也把这种图称为不允许破坏结构化原则的图形算法描述工具,又称盒图。在基本结构图14-16N-S图的五种基本控制结构容易引起麻烦的流程线,全部算法都写在一个框内,每一种基本结构也是一个框。五种的N-S图如图14-16N-S图有以下几个基本特点:(1)(2)(3)功能域比较明确,可以从图的框中直接反映出来。不能任意转移控制,符合结构化原则。容易确定局部和全程
60、数据的作用域。容易表示嵌套关系,也可以表示模块的层次结构。例如,下面是求某整数是否是素数的问题,该问题的N-S图描述如图14-17所示:输入n旦一-0-:一一否心i = wi+1 = iw =0止否输出n “是素数”输出n “不是素数”顺序绪构图选择结构当型循环结构直到型循环结构多分支选择结构0=w2=:in/i的余数r直到in或wm0图14-17程序N-S图示例PAD图PAD图是问题分析图(ProblemAnalysisDiagram)的英文缩写。它是继程序流程图和方框图之后,提出的又一种主要用于描述软件详细设计的图形表示工具。PAD图的基本图符及表示的5种基本控制结构,如图14-18所示图
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中化学教材(人教版)课本实验(回归课本)
- 人教部编版《道德与法治》二年级上册第14课《家乡物产养育我》精美课件(第2课时)
- 第47届世界技能大赛江苏省选拔赛计算机软件测试项目样题
- 2024年《消费行为学》与可持续发展理念教案
- 未来教室:2024年笔尖流出的故事教案实践案例
- 2023年计算机三级网络技术试题及答案详解
- 2024年教育新篇章:3dmax教案改革
- 针对不同行业的安全教育培训记录表2024年版
- 沪科版七年级下册整式乘法与因式分解试卷
- 实验细菌革兰氏染色法讲课文档
- 电大财务大数据分析编程作业5
- (正式版)HGT 2782-2024 化工催化剂颗粒抗压碎力的测定
- 小学科普社团活动方案
- DG-TJ08-2413-2023 优.秀历史建筑外墙修缮技术标准
- 家用光伏发电储能装置的设计
- 2024-2029全球及中国客户服务BPO行业市场发展分析及前景趋势与投资发展研究报告
- 某污水处理设备质量保证措施
- AR眼镜简介介绍
- 艺术与体育的研究报告
- 2024年宣传片拍摄保密协议doc-(含多场合)
- 毕业设计自行车测速仪
评论
0/150
提交评论