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

下载本文档

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

文档简介

第1章软件工程学概述1.1软件危机1.2软件工程1.3软件生命周期1.4软件过程

1.5小结习题*

学习重点1、软件危机、软件工程产生的原因2、软件工程过程和软件生命周期3、软件生命周期模型掌握几个基本概念软件危机软件工程软件过程软件生命周期软件生命周期模型*

软件危机与软件工程学软件工程学的产生要从“软件危机”说起1968年,第一届NAT0(北大西洋公约组织的计算机科学家的国际会议)会议,“软件工程”的慨念作为一种有效解决“软件危机”的途径被正式提出。什么是软件危机?软件危机有什么典型表现?为什么会产生软件危机?怎么解决软件危机?*

§1软件危机§1.1.1软件危机介绍什么是软件危机?软件危机指在计算机软件的开发和维护过程中,所遇到的一系列严重问题。软件危机主要包括的问题(两方面):

①如何开发软件②如何维护软件*

软件危机有什么典型表现?(1)开发费用和进度难以估算和控制,大大超过预期的资金和规定日期;软件需求分析不够充分,用户不满意“已经完成”的软件系统。软件质量难于保证;软件维护困难;难以改正程序中的错误;难以根据用户的需要在原有程序中增加一些新的功能。*

软件危机有什么典型表现?通常没有保留适当的文档资料。文档的作用:软件开发管理人员:用于管理和评价软件开发工程的进展状况软件开发人员:用于开发人员对各个阶段的工作都进行周密思考、全盘权衡、从而减少返工。并且可在开发早期发现错误和不一致性,便于及时加以纠正软件维护人员:软件维护的依据开发成本逐年上升,软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。*

*

几个软件危机的著名案例①1966年,IBM360机的操作系统。花费5000人一年的工作量,写了近1万行代码。错误百出,每次的新版本就是从前一版本中找1000个程序错误而修正的结果。②1963年,美国用于控制火星探测器的计算机软件中的一个“,”号被误写为“.”,而致使飞往火星的探测器发生爆炸,造成高达数亿美元的损失。③美国丹佛新国际机场自动化行李系统软件。投资1.93亿美元,计划1993年万圣节启用。但开发人员一直为系统错误困扰,屡次推后启用时间,直到1994年6月,机场计划者承认无法预测何时能启用。

④1996年,欧洲阿里亚纳5型运载火箭坠毁,造成5亿美元损失。原因是控制软件中的一个错误。*

§1.1.2产生软件危机的原因主要两个原因:

1、与软件本身的特点有关2、与软件开发与维护的方法不正确有关。*

一、软件本身的特点(1)软件与硬件、一般程序存在很多不同之处。

1、软件与硬件不同抽象性。软件生产没有明显的制造过程,难以衡量开发进展,也难以控制软件质量。问题的隐蔽性。没有硬件的磨损、老化问题,但存在开发早期在分析、设计阶段的错误,修改难度较大。*

失效率蜘线*

改正一个问题需付出的代价*

2、软件与一般程序不同(1)①软件远比一般程序规模庞大,复杂性高软件所反映的实际问题的复杂性程序逻辑结构的复杂性。例1:Windows95,1000万行代码;

Windows2000,5000万行代码例2:Exchange2000和windows2000开发人员*

软件的规模软件产品的特殊性和人类智力的局限性,导致人们无力处理“复杂问题”。*

2、软件与一般程序不同(2)②大型软件开发既有技术问题,还有社会问题。社会因素:组织机构、体制、管理方式、观念、人的心理素等。开发团队成员分工合作技术与管理的矛盾软件开发人员对软件应用的领域知识的了解*

二、软件开发维护方法中存在的问题(1)①对用户需求的获取不正确用户的原因分析人员的原因对分析人员的要求:沟通能力、归纳总结能力、经验越是早期产生的错误,付出的代价越大。图:不同时期引入同一变动的代价*

二、软件开发维护方法中存在的问题(2)②软件开发就是编写程序。一个完整的软件产品由一整套完整的配置组成,程序只是其中的一个组成部分。软件开发过程包括多个阶段,每个阶段的产品都是最终的完整的软件产品的一部分。③软件开发只要依靠个别编程高手就能完成。

④轻视软件维护软件维护约占软件费用55一75%,包括修改软件运行的错误;对软件进行改进和功能扩充。*

软件维护在软件费用的比例*

三、其他产生软件危机的原因①软件开发尚未完全摆脱手工艺的开发方式。②软件成本相当昂贵,主要依靠大量复杂的、高强度的脑力劳动③软件的开发和运行常常受到计算机系统的限制,对计算机系统有着不同程度的依赖性。软件的“可移植性”就是指的软件对硬件的依赖程度。好的可移植性依赖少。*

§1.1.3消除软件危机的途径1、彻底消除“软件就是程序”的错误观念。2、充分认识到软件开发是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目,不是个人独立的劳动。

3、推广和使用在实践中总结出来的软件开发的成功技术和方法。

4、开发和使用更好的软件工具*

总结:“软件工程”的方法理论是摆脱软件危机的一个主要出路。计算机和软件科学家为解决软件危机问题,尝试将在其它领域中行之有效的工程学知识运用到软件开发工作中来,经过不断实践和总结,最后得出一个结论;按工程化的原则和方法组织软件开发工作是有效的,是摆脱软件危机的一个主要出路。*

思考题(1)1)只要是编程高手,即使是不懂软件工程,也能编出很好的软件。软件是服务于大众,却是由个性化的开发人员完成的。如果个性化太强,程序就无法阅读,其他人员也就无法维护。例:国内80年代涌现出来的众多汉字操作系统均是由编程高手完成的。*

思考题(2)2)只要拥有一套讲述如何开发软件的书籍,并了解了书中的标准与示例,就可以解决软件开发中遇到的任何问题。软件是用来解决现实问题的,现实问题的特殊性对规范提出了挑战(要进行适应)。软件技术是发展的,没有祖传秘方。就像拥有食谱并不能成为名厨一样,软件开发需要实践。*

思考题(3)3)只要拥有最好的开发工具、最好的计算机,一定能做出优秀的软件。硬件环境只是必要条件,人才是充分条件,软件是人在一定的约束条件下创造出来的。因人因事而异。*

思考题(4)4)软件开发时,如果进度慢,落后于计划,可以增加更多的程序员来解决。增加人力可以减少开发时间吗?新手!任务的重新划分!沟通更加复杂!必须依靠科学地计划来解决这样的问题。*

思考题(5)5)争议:如果软件运行较慢,是换一台更快的计算机,还是设计一种更快的算法?软件的性能问题;应用级别→算法的合理性;系统级别→操作系统、数据库系统、系统软件等;硬件级别→机器性能*

§1.2软件工程§1.2.1软件工程介绍一、“软件工程”的典型定义1)1968年,第一届NATO会议为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理。2)IEEE/CS(电气电子工程师协会/计算机科学分会)

①1993年,将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中。

②对①中提到的各种方法的研究*

3)其他学者的定义Boehm:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料。FritzBauer:建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法所有定义都强调在软件开发过程中,应用工程化原则的重要性*

几个关于软件工程本质特性和基本原理的问题问题一:软件工程适用范围?问题二:软件工程如何控制系统开发的复杂性的?问题三:以你的经验,举例说明一个成熟的软件通常采用什么方法来适应现实世界的变化的?*

几个关于软件工程本质特性和基本原理的问题问题四:假设某软件公司,能为同一个用户开发两个不同层次的软件:一个层次的软件功能非常强大,在满足用户所有需求的基础上,还能提供大大超过用户需求的其他更多更强的功能;另一个层次的软件仅仅能满足用户需求,但没有提供其他额外的功能。请问如果你是项目负责人,你会选择为客户开发那个层次的软件?问题五:协同工作有什么重要性?*

几个关于软件工程本质特性和基本原理的问题问题五:怎样理解“在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品”这句话?问题六:某软件开发,由于时间和资金都非常紧迫,在需求分析人员非常认真、仔细地做完需求分析之后,说:我们可以保证我们的需求分析正确性,不用花时间检查了,设计人员可以直接拿着这份分析报告,马上开始设计。如果你是项目负责人,你会如何决定?为什么?问题七:在需求分析完成并获得了用户的肯定,也通过了评审,进入软件设计阶段之后,用户的想法有了改变,提出了一个新的要求,此时如果你是项目负责人,应该怎样做?*

二、软件工程本质特性(2)1)软件工程关注于大型程序的构造。

2)软件工程的中心课题是控制复杂性主要考虑:如何分解和集成为什么要分解:G.Miller,“7士2”

原则3)软件经常变化4)开发软件的效率非常重要5)和谐地合作是开发软件的关键6)软件必须有效地支持它的用户7)在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品扩展定义:软件=知识+程序+数据+文档*

§1.2.2软件工程的基本原理B.W.Boehm,1983年提出:

1)用分阶段的生命周期计划严格管理

2)坚持进行阶段评审

3)实行严格的产品控制基线基线(baseline)控制

4)采用现代程序设计技术

5)结果应能清楚地审查

6)开发小组的人员应该少而精7)承认不断改进软件工程实践的必要性*

§1.2.3软件工程方法学软件工程包括“管理”和“技术”两方面内容:管理——对人、财、物的合理使用和配置;技术——指软件开发中采用的方法、工具和过程。什么是软件工程方法学?通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学(methodology),也称为范型(paradigm)。*

一、软件工程方法学三要素:工具、方法和过程要素一:软件工程过程规定了完成各项任务的工作步骤。要素二:软件工程方法完成软件开发的各项任务的技术方法,为软件开发提供了“如何做”的技术。如项目计划与估算、软件系统需求分析、数据结构、系统总体结构的设计、算法过程的设计、编码、测试以及维护等。要素三:软件工程工具计算机辅助软件工程CASE(computerAidedsottwareEngineering),为软件工程方法提供自动或半自动的软件支撑环境。*

二、软件工程方法学思想两种:1、传统方法学(生命周期方法学或结构化范型)

2、面向对象方法*

1.传统方法学(生命周期方法学或结构化范型)采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务;把软件生命周期划分为若干个阶段,按顺序完成每个阶段的任务;每个阶段开始和结束都有严格的标准,对任何两个相邻的阶段而言,前一个阶段的结束标准就是后一阶段的开始标准;每一个阶段结束之前都必须进行正式严格的技术审查和管理复审*

传统方法学的优点:分解任务,分工合作,降低整个软件开发工程的困难;采用科学的管理技术和良好的技术方法对每个阶段成果都进行严格的审查。保证了软件的质量。传统方法学的缺点:把数据和操作人为地分离成两个独立的部分,增加了软件开发与维护的难度。*

2、面向对象方法学(OO,Object-oriented)

模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,从而使描述问题的问题空间(也称为问题域)与实现解法的解空间(也称为求解域)在结构上尽可能一致。*

面向对象方法学4要点把对象(object)作为融合了数据及在数据上的操作行为的统一的软件构件。把所有对象都划分成类(class)。按照父类(或称为基类)与子类(或称为派生类)的关系,把若干个相关类组成一个层次结构的系统(也称为类等级)。对象彼此间仅能通过发送消息互相联系。*

二者区别传统方法学:强调自顶向下顺序地完成软件开发的各阶段任务。面向对象方法:是主动地多次反复迭代的演化过程*

3软件生命周期一、什么是软件生命周期(lifecycle)指软件孕育、诞生、成长、成熟、衰亡的生存过程

GB一8567中将软件生命周期分为7个阶段:可行性研究和项目开发计划;需求分析;慨要设计;详细设计;编码;测试;维护其他分法,5个阶段:需求定义、设计、编码、测试及维护;需求定义阶段包括可行性研究和项目开发计划、需求分析;设计阶段包括慨要设计和详细设计。*

本教材对软件生命周期的划分*

1、软件定义时期任务:确定软件开发工程必须完成的总目标;确定工程的可行性;导出实现工程目标应该采用的策略及系统必须完成的功能;估计完成该项工程需要的资源和成本,并且制定工程进度表。通常分为问题定义、可行性研究和需求分析三个阶段。*

软件定义时期的三个阶段①问题定义阶段回答:

回答:“要解决的问题是什么?”

②可行性研究阶段回答:“对于上一个阶段所确定的问题有行得通的解决办法吗?

③需求分析(RequirementAnalysis)回答“为了解决这个问题,目标系统必须做什么?

用正式文档准确地记录对目标系统的需求,这份文档通常称为规格说明书(specification)。*

2、软件开发时期具体设计和实现前一个时期定义的软件,通常分为四个阶段:

①总体设计(概要设计)回答:“概括地说,应该怎样实现目标系统?”根据需求分析,设计软件的体系结构;定义结构中的组成模块。

②详细设计(模块设计)回答:“应该怎样具体地实现这个系统呢?”对每个模块要完成的工作进行具体的描述,为源程序编写打下基础。编写设计说明书,提交评审。二者统称系统设计

*

软件开发时期四个阶段③程序编写(Coding,Programming):把软件设计转换成计算机可以接受的程序代码。

④软件测试(Testing):按规定的各项需求,逐项进行有效性测试,决定已开发的软件是否合格,能否交付用户使用,包括单元测试和组装测试。二者统称系统实现*

3、运行维护(软件维护)时期(Running/Maintenance)使软件持久的满足用户的需要。包括:改正性维护:运行中发现了软件中的错误需要修正。适应性维护:为了适应变化了的软件工作环境,需做适当变更。完善性维护:当用户有新的要求时,应该及时改进软件以满足用户的要求。预防性维护:即修改软件为将来的维护活动预先做准备。*

几个关干软件生命周期阶段的问题问题一:开发一个软件大概需要多少资金、时间,将获得什么效益一般是在哪个阶段确定?相对而言,在哪个阶段与用户交流最多?问题二:系统分析员主要工作在哪个时期?程序员主要工作在哪个时期?问题三:软件定义时期的三个阶段,各自回答什么关键问题?问题四:软件开发时期有几个阶段?各自回答什么关键问题?*

问题五:软件体系结构最早是在哪个阶段决定的?问题六:详细设计与程序编写阶段有什么样的密切联系?问题七:“软件测试是为了验证系统的正确性”这句话对吗?问题八:软件维护有那几种?各有什么功能?*

§1.4软件过程(SoftwareProcess)1、什么是软件过程为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。

ISO9000的定义:使用资源将输入转化为输出的活动所构成的系统。“系统”是相互关联或相互作用的一组要素。过程是软件工程三要素之一。通常用软件生命周期模型来描述。*

2、什么是软件生命周期模型又称:软件开发模型/软件过程模型/软件工程范型。指软件项目从需求定义直至软件经使用后废弃为止,跨越整个生存周期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。常见的有:瀑布模型、演化模型、螺旋模型、喷泉模型、智能模型*

§1.4.1瀑布模型(waterfallmodel)1970年,由W.Royce提出

一、瀑布模型的过程

1、传统的瀑布模型从上一阶段接受本阶段

的工作对象,作为输入;利用输入,完成本阶段活

动的内容.本阶段的工作成果作为输出

传入下一阶段。*

瀑布模型—实际的瀑布模型

需求分析验证规格说明验证设计验证编码测试综合测试维护变化的需求验证

增加了一个评审活动,评审每个阶段完成的活动,若得到确认,则进行下一阶段的活动;否则返回前一阶段,甚至更前阶段返工;*

二、瀑布模型特点阶段间具有顺序性和依赖性推迟实现的观点质量保证的观点*

三、瀑布模型优缺点优点:可强迫开发人员采用规范的方法;严格地规定了每个阶段必须提交的文档;要求每个阶段的所有产品都必须经过质量保证小组的仔细验证;缺点:无法解决软件需求不明确或不准确的问题;可能导致最终开发的产品不能真正满足用户需要。瀑布模型比较适合开发需求明确的软件。*

§1.4.2快速原型模型1、什么是“原型”?

原型是快速实现和运行的早期版本,反映最终系统部分重要特性。常见的原型实例:人机界面;系统主要功能。

优点:

1、通常能反映用户真实需求;

2、软件产品的开发基本上是线性顺序进行的。*

2、快速原型的过程如右图。获得用户的基本需求说明,据此快速建立一个小型软件系统.用户试用,对其评价;开发人员按照用户的意见快速地修改原型系统,获得新的原型版本,再请用户试用,如此反复,直到满足用户的要求;用户确认原型系统之后,开发人员据此书写规格说明文档,进行下一步开发。*

1.4.3增量(渐增)模型

把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能。使用增量模型时,第一个阶段的增量构件往往实现软件的基本需求,提供最核心的功能;后面的增量构架逐渐添加系统的功能。*

图:增量(渐增)模型需求分析验证规格说明验证设计验证维护针对每个构件完成详细设计、编码和集成,经测试后交付给用户*

增量模型注意事项增量构件规模适中;分解的约束条件是当把新构件集成到现有软件中时,所形成的产品必须是可测试的;软件体系必须是开放的,即在对现有系统添加新增量构件时,不能破坏系统原有功能。*

增量模型优缺点优点:能在较短的时间内,提供可完成部分工作的初步产品给用户;用户有较为充裕的时间学习和适应新产品。缺点:对开发人员技术能力要求较高,要求能从系统整体出发正确划分增量构件,并进行分别开发,最后能很好地集成这些构件。*

一种风险更大的增量模型

有可能提高开发速度,但需要密切地监控整个开发过程,否则将冒构件无法集成到一起的风险,。分析分析分析分析设计设计设计设计编码编码编码编码测试测试测试测试构件1构件2构件3构件4*

§1.4.4螺旋模型(spiralmodel)大型软件开发面临的重要问题:软件风险如:产品交付给用户之后,用户不满意;开发进度落后,开发成本超出预算;

产品完成前关键的开发人员跳槽;

在产品投人市场前,竞争对手发布了一个功能相近,价格更低的软件………构建原型能使某些类型的风险降到最低.*

一、简单的螺旋模型

螺旋模型改进了原型模型,在每个阶段都加入风险分析。图1.7简化的螺旋模型图1.7简化的螺旋模型图1.7简化的螺旋模型

*

二、完整的螺旋模型*

螺旋模型的优缺点优点:强调可选方案和约束条件,有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标;减少了过多测试(浪费资金)或测试不足(产品故障多)所带来的风险;维护是一个周期,与开发并没有本质区别缺点:需要开发人员具有相当丰富的风险评估经验和专门知识;进行风险分析的费用可能较大。适合大型软件开发*

各种模型的比较模型优点缺点瀑布模型规范,文档驱动系统可能不满足客户真正的需求快速原型克服了瀑布型的缺点增量模型开发早期回报明确,易于维护要求开放的软件体系结构螺旋模型风险驱动,适用于大型项目开发风险分析人员需要有经验且经过充分训练*

第一章小结*

软件工程02章可行性研究02章可行性研究2.1可行性研究的任务2.2可行性研究过程2.3系统流程图2.4数据流图2.5数据字典2.6成本/效益分析2.7小结习题*

重点、难点重点:可行性研究任务;数据流图基本符号、绘制过程及应用;数据字典的用途和建立:难点:数据流图的应用*

§2.1可行性研究任务一、可行性研究的目的说明该软件开发项目的实现在技术上、经济上和社会条件上的可行性;评述为合理地达到开发目标可能选择的各种方案。

GB8567-88《计算机软件产品开发文件编制指南》

用最小的代价在尽可能短的时间内确定问题是否能够并且值得解决。可行性研究最根本任务是对以后的行动方针提出建议.

可行性研究一般占预期工程总成本的5%~10%。*

二、可行性研究的基本内容1、技术可行性:使用现有的技术能实现这个系统吗?主要考虑:开发风险;资源;相关技术的发展2、经济可行性:这个系统的经济效益能超过它的开发成本吗?系统经济效益=新系统增加的收入+新系统节省的费用考虑:成本——效益分析、长期的公司经营策略、对其他单位或产品的影响、开发所需的成本和资源、潜在的市场前景3、操作可行性:系统的操作方式在用户组织内行得通吗?4、其他:法律可行性、社会效应、管理问题等*

国家标准定义的可行性研究

了解客户的要求及现实环境,从技术、经济和社会因素等三方面研究并论证本软件项目的可行性,编写可行性研究报告,制定初步项目开发计划。一GB8566-88《计算机软件开发规范》GB8567一88《计算机软件产品开发文件编制指南》GB5666一88(计算机软件开发规范》

国家标准局1988年发布标准基于软件生存周期,将软件产品从形成、开发、运用、维护,到最后被淘汰的整个过程中,应提交的文档归于13种,作为软件开发人员工作的准则和规程。*

§2.2可行性研究的过程*

可行性研究报告的编写

可行性研究报告功能:说明软件项目的实现在技术上、经济上和社会因素上的可行性,评述为合理地达到开发目标可供选择的各种可能的实现方案,说明并论证所选定实施方案的理由。

GB8567一88《计算机软件产品开发文件编制指南》*

§2.3系统流程图

可行性分析的描述手段:系统流程图、数据流图

1、什么是系统流程图?

概括地描绘物理系统的传统工具。基本思想:用图形符号以黑盒子形式描绘组成系统的每个部件(程序,文档,数据库,人工过程等),表达数据在系统各部件之间流动的情况。*

§2.3.1符号*

§2.3.1例子一个简单的例子图2.3库存清单系统的系统流程图*

§2.3.3分层描绘复杂系统时,一采取分层次地描绘的方法第一步:建立高层次的系统流程图,描绘系统总体概貌,表明系统的关键功能。第二步:分别对每个关键功能进行扩展,到合适的详细程度,画在单独的一页纸上。第三步:可以多次扩展,直到描述完整。优点:便于阅读者按从抽象到具体的过程逐步深入地了解一个复杂的系统。*

§2.6成本/效益分析

从经济角度分析开发一个特定的新系统是否划算,帮助客户负责人作出是否投资的决定。主要包括成本估计和成本效益分祈。*

§2.6.1成本估计

包括开发成本和运行成本

一、开发成本估计技术(1)1、代码行技术

根据经验和历史数据,估算实现一个功能需要多少源程序行数,用每行代码的平均成本乘以行数。*

一、开发成本估计技术(2)2、任务分解技术

将软件开发工程分解成若干个相对独立的任务,分别估算,然后累加得出总成本。按阶段分解按功能分解5(%)*

例:按功能分解计算机辅助设计(CAD)的软件项目估算将CAD项目分为如下7个子项目:用户界面和控制;二维几何分析;三维几何分析;数据库管理;计算机图形显示;外设控制;设计分析*

代码行和成本、工作量估算*

系统开发和每年运行费用估算举例A.系统开发费用(一次)。2名系统分析员(450小时/名,45美元/小时)$40,5005名系统开发人员(275小时/名,36美元/小时)$49,5001名数据库管理员(30小时/名,42美元/小时)$1,2602名技术写作者(120小时/名,25美元/小时)$6,0001名秘书(160小时/名,15美元/小时)$2,4001名数据通讯专家(60小时/名,42美元/小时)$2,4002名数据输入人员(40小时/名,12美元/小时)$49,500*

系统其他费用培训:三天的开发人员内部培训课程$7,00030个用户,三天的内部培训课$10,000物资:复印$500磁盘、纸张等消耗品$650购买软、硬件:

20台工作站windows软件$1,00020台工作站内存升级$8,000

网络软件$17,50020台工作站办公软件产品$20,000系统开发总费用$161,670*

B.年运行费用(每年)人员:维护程序员/分析员(250小时/年,42美元/小时)$10,500网络管理员(3000小时/年,50美元/小时)$15,000购买硬件、软件升级:硬件―$5,000软件―$6,000物资和杂项:$3,500每年总运行费用$40,000*

一、开发成本估计技术(3)3、自动估计成本技术采用自动估计成本的软件工具,需要有长期搜集的大量历史数据为基础,并需要良好的数据库系统支持。二、运行费用估计取决于系统的操作费用(操作人员数、工作时间、消耗的物资等)和维护费用。*

6.2成本/效益分折方法成本/效益分折的第一步是估计开发成本、运行费用和新系统将带来的经济效益。系统的经济效益等于因使用新系统而增加的收入加上使用新系统可以节省的运行费用。比较新系统的开发成本和经济效益,以便从经济角度判断这个系统是否值得投资。*

6.2成本/效益分折方法

几种度量效益的方法

1.货币的时间价值:以银行利率表示货币的时间价值。假设年利率为i,如果现在存入P元,则n年后可以得到的钱数为:F=P(1+i)n如果n年后能收入F元钱,那么这些钱的现在价值是:P=F/(1+i)n提问:若某系统,投资为200万元,银行利率3%,即100元可获3元现金,一年后此系统运行赚了200万元,是否可以认为所有投资都收回了?*

设年利率是5%,引入CAD后,每年预计节省的钱的现在价值。年份将来值(1+I)n现在价值累计现在价值19.61.059.14299.142929.61.10258.707517.851339.61.15768.292826.143249.61.21557.897934.041159.61.27637.521941.5630例:在工程设计中用CAD系统取代大部分人工设计工作,每年可节省9.6万元。若软件生存期为5年,则5年节省48万元。开发CAD系统共投资了20万元。*

§6.2成本/效益分折方法投资回收期:累计的经济效益等于最初的投资所需要的时间。CAD投资回收期是:2+2.15/8.29=2.259年纯收入:整个软件生命期内,累计经济效益(折合成现在值)与投资之差。如:引入CAD系统之后,5年内工程的纯收入预计是41.563-20=21.563投资回收率:

指系统的投资在生命周期内达到的累计效益的利率。*

附:可行性研究报告(参考格式)*

可行性研究报告(参考格式)*

可行性研究报告(参考格式)*

软件工程03章需求分析第三章软件需求分析3.1需求分析的任务3.2与用户沟通获取需求的方法3.3分析建模与规格说明3.4实体一联系图3.5数据规范化

3.6状态转换图3.7其他图形工具3.8验证软件需求3.9小结习题*

教学要求教学目的:了解需求分析的任务和步骤、评审标准和过程;掌握基本技术,理解需求规格说明书的作用与组成。教学重点:基本技术、需求规格说明书的作用与组成。教学难点:基本技术。*

需求分折简介

软件需求指用户对所开发的软件在功能、性能、环境、可靠性等各方面的要求。需求分析主要回答待开发的系统必须“做什么”,并用《需求规格说明书》的形式准确、详细、规范地表达出来。*

注意①需求分析阶段,系统分析员的主要关注点是“做什么(what)”,不是“怎样做(how)”;②需求分析阶段,系统分析员应该给出软件求规格书。*

§3.1需求分析的任务四项主要任务:1、确定对系统的综合要求2、分析系统的数据要求3、导出系统的逻辑模型4、修正系统开发计划*

提问并思考:

如果你是一个用户,你会对将要开发的软件有哪些要求?*

§3.1.1确定对系统的综合要求①功能需求。指定系统必须提供的服务。

②性能需求。指定系统必须满足的定时约束或容量约束等。

③可靠性和可用性需求。应定量指定。

④出错处理需求。指环境错误,非系统本身的错误。

⑤接口需求。常见的接口需求:用户接口需求;硬件接口需求;软件接口需求;通信接口需求。

*

⑥约束。常见的约束:精度;工具和语言约束;设计约束;应该使用的标准;应该使用的硬件平台。⑦逆向需求。指定系统不应该做什么,⑧将来可能提出的要求。*

§3.1.2分析系统的数据要求提问并思考:如果你是设计者,除了上述需求以外,你觉得还需要得到哪些要求?答:软件系统本质上是信息处理系统,要考虑数据和数据处理的问题。*

对系统数据的分析建立数据(3.4节);描绘数据结构(3.7节);规范化(3.5节)*

§3.1.3导出系统的逻辑模型

用数据流图、实体一联系图、状态转换图、数据字典和主要的处理算法描述这个逻辑模型。

§3.1.4修正系统开发计划根据在分析过程中获得的对系统的更深入更具体的了解,可以比较准确地估计系统的成本和进度,修正以前制定的开发计划。*

图:软件需求分析的通信途径分析小组成员主要包括领域专家、系统分析员;客户访谈问题分析与确认*

与用户沟通的方法1、访谈2、面向数据流自顶向下求精3、简易的应用规格说明技术4、快速建立软件原型*

§3.2.1访谈分正式和非正式访谈。可采用调查表形式可使用情景分析技术*

例:某出版社系统调查表编号提出问题1您在哪个部门工作?每日都处理哪些文件、数据、报表?2出版业务流程是什么?3工作中手工处理特别麻烦的事情是什么?4手工处理有什么问题解决不了?影响效率的问题有哪些?5您认为提高工作效率,节省工作时间,减轻工作强度可采取哪些办法?6您的部门需要成本核算和统计的内容有哪些?7您的部门采用计算机管理工作情况如何?8如何改进业务流程使之更合理?9哪些问题是目前传统手工方法根本无法解决的?10出版社计算机管理信息系统需要解决什么问题?*

§3.2面向数据流自顶向下求精

结构化分析方法的实质。进一步细化可行性研究阶段获得到高层数据流图。包括建立:详细的数据流图,描绘数据在软件系统内从输入移动到输出的过程中所经受到变换;数据字典:定义数据流图中包含的元素;实体关系(ER)图:从用户角度描述数据;IPO图:描述数据流图中处理框的功能和算法。*

面向数据流自顶向下求精过程*

§3.2.3简易的应用规格说明技术

一种面向团队的需求收集法,提倡用户与开发者密切合作,共同标识问题,提出解决方案要素,商讨不同方案并指定基本需求。具体过程见教材P60面提问:此方法将产生什么样的产品?*

§3.2.4快速建立软件原型快速原形就是快速建立起来的旨在演示目标系统主要功能的可运行的程序。要点:实现用户看得见的功能,省略目标系统“隐含”功能。*

§3.2.4快速建立软件原型

建立和修改原型的方法和工具:(1)第四代技术。包括众多数据库查询和报表语言、程序和应用系统生成器以及其他非常高级的非过程语言。能快速生成可执行的代码。(2)可重用的软件构件。使用一组已有的软件构件(也称为组件)来装配(而不是从头构造)原型。(3)形式化规格说明和原型环境。在交互式环境下,用自动工具把基于形式语言的规格说明翻译成可执行的程序代码。*

§3.3分析建模与规格说明§3.3.1分析建模什么是模型?为了理解事物而对事物做出的一种抽象,是对事物的一种无歧义的书面描述。模型通常由一组图形符号和组织这些符号的规则组成。*

模型的作用在建模过程中了解系统。通过抽象降低复杂性。有助于回忆所有的细节。有助于开发小组间的交流。有助于与用户的交流。为系统的维护提供文档*

例:结构化分析方法建立的需求模型

结构化分析(StructuredAnalysis,SA)是面向数据流进行分析的方法,主要建立以下几种模型:实体关系图(Entity-RelationshipDiagram,E-R图)来创建数据模型,描述系统中所有重要的数据对象;

数据流图(DataFlowDiagram,DFD):用来创建功能模型,描述了信息流和数据转换。

状态转换图(State-TransitionDiagram,STD)用来创建行为模型,描述系统状态如何响应外部事件,而进行转换。*

例:面向对象分祈方法(OOA)所建立的摸型对象模型(Objectmodel):定义实体,描述系统的静态结构,定义“对谁做”动态模型(Dynamicmodel):描述对象之间的交互过程,规定“何时做”功能模型作(Functionalmodel):描述内部数据的处理,指明系统应“做什么”*

软件需求规格说明《软件需求规格说明书》是需求分析阶段最主要的文档。对目标进行完善和补充,并写出完整的需求说明。为消除自然语言中可能存在的不一致、歧义、含糊、不完整及抽象层次混乱等问题,有主张用形式化方法描述用户对软件系统的需求。

例:GB8567-88计算机软件产品开发文件编制指南*

结构化分析方法(StructuredAnalysis,SA)面向数据流进行需求分析的方法适合于数据处理类型软件的需求分析*

结构化分折模型的组成结构*

§3.4实体一联系图

实体一联系图(E一R图)描绘系统的数据关系。分析实体一联系有助于对业务或系统数据组成的理解和交互。

一、基本概念(1)

实体:客观世界中存在的,可区分的事物。数据对象:实体在数据模型中的体现,能由一组属性来定义的实体都可以被认为是数据对象。

属性:实体或数据对象所具有的性质。*

一、基本概念(2)联系:客观事物之间的联系。联系分为三种:一对一(1:1).一对多联系(1:N).多对多联系(M:N)二、E一R图的结构三种基本元素:*

例:教学E-R图*

三、如何建立实体一联系图?1、在需求收集的过程中,列出应用软件或业务过程涉及到的所有“事物”,将其演化成数据对象;2、一次考虑一个对象,定义这个对象和其他对象之间是否存在连接;3、如果存在连接,应创建一个或多个关系;4、对每一个关系,确定其关联类型;5、重复步骤(2)到步骤(4),直到定义了所有关系。6、定义每个实体的属性;7、形式化并复审实体关系图;8、重复步骤(1)到(7),直到数据建模完成。*

2.4数据流图(DFD,DataFlowDiagram)描述数据处理过程的工具。通过图形的方法,从数据传递和数据处理的角度,刻画数据流从输入到输出的移动变换过程。数据流三个重要属性:.数据流名字.数据组成.流向*

2.4.1符号(1)说明:用图形符号以黑盒子形式描绘组成系统的每个部件(程序,文档,数据库,人工过程等),表达数据在系统各部件之间流动的情况。*

符号(2)

*

例1:描述银行取款过程的数据流图*

应该注意的几个问题适当地命名。(详见教材p45)“数据存储”代表数据静止状态,“数据流”代表数据的运动状态;注意数据流与控制流的区别;通常数据流图中忽略出错处理、打开或关闭文件之类的内务处理。若数据的源点和终点相同,则应该有两个箭头和这个数据源(终)点相连;或重复画一个源(终)点。*

数据流图的层次结构

对于大型系统,往往采用自顶向下逐层分解的方法,用分层数据流图表示所有数据流和加工。对任何一个数据流图来说,它的上层图为父图,在它的下一层的图为子图。*

分层数据流图*

说明:在多层数据流图中,顶层流图仅包含一个数据处理,它代表被开发系统。它的输入流是该系统的输入数据,输出流是系统所输出数据底层流图是指其数据处理不需再做分解的数据流图,它处在最底层中间层流图则表示对其上层父图的细化。它的每一数据处理可能继续细化,形成子图。*

注意的原则(1)

数据流图上所有图形符号只限于前述四种基本图形元素;数据流图的主图必须包括前述四种基本元素,缺一不可;数据流图的主图上的数据流必须封闭在外部实体之间;每个数据处理至少有一个输入数据流和一个输出数据流;在数据流图中,需按层给数据处理框编号。编号表明该处理所处层次及上下层的亲子关系;*

注意的原则(2)规定任何一个数据流子图必须与它上一层的一个数据加工对应,两者的输入数据流和输出数据流必须一致。此即父图与子图的平衡;可以在数据流图中加入物质流,帮助用户理解数据流图;图上每个元素都必须有名字;数据流图中不可夹带控制流;初画时可以忽略琐碎的细节,以集中精力于主要数据流*

例2:结构化分析方法步骤示例商场业务处理系统假设某商场的经营业务。商场进货时,先发订货单给供应商,供应商收到订货单,将商品发给商场,商场货到付款,供应商收款后,将收据发给商场;当顾客到商场采购商品时,先下购物订单,商场查询库存中是否有此种商品,若有则发货给顾客;若没有,则向供应商订货,货到之后再销售给顾客;顾客收到货物之后付款,商场开收据给顾客;商场对货物的管理方面要求知道每种货物详细的销售情况。*

分析业务流程:订货过程*

分析业务流程:采购过程*

第一步:绘制顶层数据流图(1)基本思想,任何计算机系统都是有若干个数据源(终)点加上一个事务处理组成。首先从问题的描述中提取数据流图中的源(终)点、数据处理、数据流和数据存储四种成份。.分析源(终)点..分析数据处理.分析数据流和数据存储*

分析数据源点和终点:如果将商场的购、销业务系统看成一个整体,则外部的与这个系统有交往的对象(机构、人员、或外部系统)是“供应商,和“顾客”,二者是商场购销系统源点和终点。*

分析源点、终点与商场之间的数据流数据流方向分别是:供应商方给商场:发货单、货款收据顾客给商场:订单、货款商场给供货商:订货单、货款商场给顾客:货物、收据*

分析数据存储:需要存储的数据分别是库存信息暂存订单(缺货订单)采购订单商品销售历史资金帐目*

第一步:绘制顶层数据流图(2)*

第一步:绘制顶层数据流图(3)第一步:绘制顶层数据流图(3)*

第二步:将顶层数据流图细化经过分析,商店业务处理的主要数据处理是销售、采购、会计三大数据处理,三者之间的数据流:*

需要存储的数据有:*

*

DFD/L2.2(采购细化)*

DFD/L2.1(销售细化)*

2.5数据词典(DD,datadictionary)DD是对数据流图中包含的所有元素的定义的集合,使得每个图形元素的名字都有一个精确的、严格的定义。数据流图和词典结合在一起,能清楚地表达数据处理的要求,构成了“需求说明书”*

2.5.1数据字典的内容主要描述数据流数据元素数据存储数据处理*

2.5.2定义数据的方法*

1、定义数据流数据流名:说明:简要介绍作用即它产生的原因和结果。数据流来源:来自何方。数据流去向:去向何处。数据流组成:数据结构。数据量流通量:数据量,流通量*

举例:*

数据流定义:*

2、定义数据元素数据元素(数据项)指数据处理中最小的,不可再分的单位。描述包括:数据元素名:类型:数字(离散值,连续值),文字(编码类型)长度:取值范围:相关的数据元素及数据结构:*

数据元素定义举例(1)*

数据元素定义举例(2)*

数据元素定义举例(3)*

数据元素定义举例(4)*

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

数据存储定义举例(1)*

*

*

4、定义数据处理数据处理定义举例(1)*

数据处理定义举例(2)*

*

加工逻辑词条说明举例(3)*

⑤源点及汇(终)点词条描述名称:外部实体名简要描述:什么外部实体有关数据流:数目:*

3.5数据规范化1、第一范式每个属性值都必须是原子值。2、第二范式满足第一范式条件,而且每个非关键字属性都由整个关键字决定。3、第三范式符合第二范式的条件,每个非关键字属性都仅由关键字决定,而且一个非关键字属性不能仅仅是对另一个非关键字属性的进一步描述。范式低,冗余大,范式高,分解得细,冗余小,但处理过程复杂。*

3.6状态转换图(STD)为了直观地分析系统的动作,从特定的视点出发描述系统的行为,需要采用动态分析的方法。状态转换图是一种常用的动态分析方法。是描述系统的状态如何响应外部信号,而进行转换的一种图形表示。*

3.6.1状态指任何可以被观察到的系统行为模式,一个状态代表系统的一种行为模式。主要有:初态、终态和中间状态。一个状态图中,只能有一个初态,但可以有0~多个终态。*

3.6.2事件某个特定时刻发生的事情,它是对引起系统做动作或(和)从一个状态转换到另一个状态的外界事情的抽象.*

3.6.3状态转换图符号活动表语法:事件名(参数表)/动作表达式常用事件名:Entry、Exit、Do动作表达式:应做的具体动作事件表达式:触发状态转换的事件。语法:事件说明[守卫条件]/动作表达式。其中,事件说明的语法:事件名(参数表)。*

电话系统的状态图电话系统的状态图电话系统的状态图*

3.7其他图形工具3.7.1层次方框图*

3.7.2Warnier图*

3.7.3IPO图*

3.8验证软件需求问:从哪些方面验证软件需求的正确性?如何验证?1、一致性自然语言书写的需求说明,只能用人工方法验证;形式化方法定义的可以借助验证工具(3.8.3节)2、完整性需要用户参与、合作;建立快速原型。3、现实性参照以往类似系统;进行真或性能模拟4、有效性*

用于需求分析的软件工具对采用形式化方法定义的需求进行验证的工具。应该满足下列要求:

(1)必须有形式化的语法(或表),因此可以用计算机自动处理使用这种语法说明的内容;(2)使用这个软件工具能够导出详细的文档;(3)必须提供分析(测试)规格说明书的不一致性和冗余性的手段,并且应该能够产生一组报告指明对完整性分析的结果。(4)使用这个软件工具之后,应该能够改进通信状况。如:在1977年设计完成的RSL(需求陈述语言)。1977年美国密执安大学开发了PSL/PSA(问题陈述语言/问题陈述分析程序)系统。*

*

比较完整的数据流图例子例:教务管理系统某校准备开发一个学生成绩管理系统。在该系统中,教务人员录入学生信息、课程信息和成绩信息,学生可以随时查询自己所选课程的成绩。由于学生成绩属于敏感信息,系统必须提供必要的安全措施以防非法存取*

0层DFD分析:源点终点:教务人员(源点);学生(终点)数据处理:将系统当成一个整体“学生成绩管理”数据流:学生信息、课程信息和成绩;(教务人员录入时)查询请求、查询结果(学生查询时)数据文件:成绩文件、学生文件、课程文件。*

*第0层DFD图教务人员维护学生信息和课程信息,并登录学生的选课成绩;学生查询自己的成绩单。*

第1层DFD说明“学生信息”是教务人员需要录入的一个信息,因此加入一个加入“录入学生信息”;同样得到“录入课程信息”、“登记成绩”两个数据处理。另外,数据流“查询请求”和“查询结果”应该由数据处理“查询成绩”来完成。*

第1层DFD说明对第0层DFD的加工“学生成绩管理“进行展开。数据处理:录入学生信息录入课程信息登记学生成绩查询学生成绩数据存储:增加这些数据流对应的数据存储,即“学生”、“课程”和“成绩”,最后得到如图所示的第1层DFD。*

第1层DFD图:对第0层DFD的一个“学生成绩管理“进行展开。*

第2层DFD说明继续分解第1层DFD中的加工“查询学生成绩”数据处理:分解为“合法性检查”和“查询成绩”数据文件:合法的查询条件*

*

*部分数据字典*

*

软件工程第五章总体设计第五章总体设计5.1设计过程5.2设计原理5.3启发规则5.4描绘软件结构的图形工具

5.5面向数据流的设计方法5.6小结习题*

学习要求掌握:1、软件设计过程中应遵循的基本原理和相关概念;2、描绘软件结构的图形工具的运用;3、面向数据流设计方法概念;变换分析、事务分析法过程和应用。理解:1、典型的总体设计过程包括的步骤;2、设计中的启发式规则;*

重点和难点重点:软件设计过程中应遵循的基本原理;面向数据流的设计方法难点:变换分析、事务分析法的过程和应用*

软件设计的目标和任务软件需求:解决“做什么”软件设计:解决“怎么做”.软件设计的任务:以软件需求规格说明书为依据,着手实现软件的需求,并将设计的结果反映在“设计规格说明书”文档中。软件设计的重要性:是软件开发阶段的第一步,最终影响软件实现的成败和软件维护的难易程度。*

软件设计的两个阶段第一阶段:概要设计(总体设计)根据软件需求,设计软件系统结构和数据结构,确定程序的组成模块及模块之间的相互关系。回答“概括地说,系统应该如何实现?”。其重要性是:站在全局高度,从较抽象的层次上分析对比多种可能的系统实现方案和软件结构,从中选出最佳方案和最合理的软件结构,从而用较低成本开发出较高质量的软件系统。*

软件设计的两个阶段第二阶段:详细设计(过程设计)确定模块内部的算法和数据结构;选定某种过程的表达形式来描述各种算法;产生精确描述各模块程序过程的详细文档,并进行评审。*

将需求分析摸型转换为软件设计软件结构设计以需求分析中得到的数据流图为基础而进行。*

SA与SD的关系*

第一个阶段总体设计的任务①制定规范②设计软件系统结构(简称软件结构)③处理方式设计④数据结构及数据库设计⑤可靠性设计⑥编写概要设计文档

⑦概要设计评审*

①制定规范为软件开发小组制定在进行软件设计,应该共同遵守的标准,以便协调组内各员的工作。*

②软件结构设计包括:将系统按功能划分成模块确定每个模块的功能确定模块之间的调用关系确定模块之间的接口,即模块之间传递的信息评价模块结构的质量*

③处理方式设计包括:功能设计:确定实现功能法,评估算法的性能.性能设计:确定实现性能需求必须的算法和模块间的控制方式*

5.1设计的过程*

5.2设计原理5.2.1模块化5.2.2抽象5.2.3逐步求精5.2.4信息隐蔽和局部化5.2.4模块独立*

5.2.1模块化(Modularity)①什么是模块和模块化思想?采取自顶向下的方式,逐层把软件系统划分成若干可单独命名和可编址的部分-“模块”,每个模块完成一个特定的子功能;所有模块按某种方法组成一个整体,完成整个系统所要求的功能。软件系统就是通过这些模块的组合来实现。*

②模块化的优点模块化是软件解决复杂问题所具备的手段,可降低软件复杂性,减少开发工作量,从而降低开发成本,提高软件生产率,是模块化的依据。*

③模块化与软件成本的关系接口*

④模块的基本属性接口:指模块的输入与输出。功能:指模块实现什么功能。模块化好处:模块化使软件容易测试和调试,因而有助提高软件的可靠性。模块化能提高软件的可修改性。模块化有助于软件开发工程的组织管理。*

5.2.2抽象(Abstraction)①什么是抽象?认识复杂事物和现象时,抽出事物本质的共同特性而暂不考虑它们的细节。②软件开发中的抽象过程的抽象数据的抽象宜宾学院计算机学院08级学生宜宾学院计算机学院学生宜宾学院*

抽象什么是抽象思想?在认识事物、分析和解决问题的过程中,忽略那些与当前研究目标不相关的部分,以便将注意力集中于与当前目标相关的方面软件开发实际上就是一个从高层次抽象到低层次抽象逐步过渡的过程。一个复杂的系统先用一些高级的抽象概念构造和理解,这些高级概念又用较低级的概念构造和理解,如此进行下去,直到具体元素。*

形体衣着性格抽象抽象例子外表*

5.2.3逐步求精逐步求精:为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。可把逐步求精看作是一项把一个时期内必须解决的种种问题按优先级排序的技术。逐步求精是一种自顶向下的设计策略,按这种设计策略,程序的体系结构是通过逐步精化处理过程的层次而设计出来的。*

逐步求精外表形体衣着性格头发脸形领带抽象逐步求精的例子*

自顶向下,逐步求精的基本思想将功能、信息的说明分为多个层次,最高层也最抽象―仅仅只是概念性地描述功能或信息,不提供功能的内部工作情况或信息的内部结构;设计者从最高层开始,仔细推敲,进行功能和信息的细化,给出下层实现的细节;随着每个后续细化逐步的完成,提供越来越多的细节,最终得出用程序设计语言表达的程序。*

结合了模块化和逐步细化思想建立的软件结构图*

5.2.4信息隐蔽和局部化信息隐蔽:在设计和确定模块时,使得一个模块内包含的信息(过程或数据),不允许其它不需要这些信息的模块访问,独立的模块间仅仅交换为完成系统功能而必须交换的信息。局部化:将一些关系密切的软件元素物理地放得彼此靠近。*

5.2.5模块独立1、什么是模块独立性(moduleindependence)模块只完成系统要求的相对独立的功能符合信息隐蔽原则模块间关联和依赖程度尽量小2、模块独立的优点容易开发、测试和维护*

3、衡量模块独立性的两个准则①耦合性(coupling)②内聚性(cohesion)*

①耦合性(coupling)也称块间的联系。是对软件系统结构中,各模块间相互联系紧密程度的一种度量。设计目标:低耦合*

无直接藕合两个模块没有直接关系,模块独立性最强。*

数据耦合属松散耦合。一模块访问另一模块时,通过数据参数交换输入、输出信息。*

控制藕合模块之间传递的是控制信息(如开关、标志、名字等),控制被调用模块的内部逻辑。*

控制耦合举例*

去除模块间控制耦合的方法控制藕合增加了理解和编程的复杂性,调用模块必须知道被调模块的内部逻辑,增加了相互依赖。解决方法:

(1)将被调用模块内的判定上移到调用模块中进行(2)被调用模块分解成若干单一功能模块*

改控制藕合为数据藕合举例*

特征耦合两个模块通过传递数据结构加以联系,或都与一个数据结构有关系,则称这两个模块间存在特征耦合。可能出现的情况:当把整个数据结构作为参数传递时,被调用的模块虽然只需要使用其中的一部分数据元素,但实际可以使用的数据多于它真正需要的数据,这将导致对数据访问失去控制,*

特征耦合举例*

将特征耦合修改为数据耦合举例*

公共环境耦合一组模块引用同一个公用数据区(也称全局数据区、公共数据环境)。公共数据区指:全局数据结构。共享通讯区。内存公共覆盖区等*

公共环境耦合举例模块A、B、C间存在错综复杂的联系*

公共耦合存在的问题(1)软件可理解性降低(2)诊断错误困难(3)软件可维护性差

(4)软件可靠性差*

内容耦合有下列情况之一的。是最不好的耦合形式!*

模块间耦合强度*

耦合强度依赖的因素:一模块对另一模块的引用一模块向另一模块传递的数据量一模块施加到另一模块的控制的数量模块间接口的复杂程度*

降低耦合度的设计原则1、根据问题特点,选择合适的耦合类型。尽量使用数据耦合,少用控制耦合和外部耦合,限制公共耦合的范围,完全不用内容耦合2、降低模块接口的复杂性。减少每个模块的参数个数;尽量使用标准过程调用方式,少用直接引用的方式;传送的信息以标准、直接的方式提供。3、把模块的通信信息放在缓冲区中。*

②内聚性(cohesion)又称块内联系。指一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语句之间、程序段之间)联系的越紧密,则它的内聚性就越.设计目标:高内聚*

巧合内聚(偶然内聚)块内各组成成份在功能上是互不相关的。模块M

中的三个语句没有任何联系。缺点:可理解性差,可修改性差*

逻辑内聚把几种相关功能(逻辑上相似的功能)组合在一模块内,每次调用由传给模块的参数确定执行哪种功能。*

逻辑内聚模块*

时间内聚(经典内聚)模块完成的功能必须在同一时间内执行,这些功能只因时间因素关联在一起。例:初始化系统模块系统结束模块、紧急故障处理模块等*

过程内聚(顺序性组合)模块内各处理成分相关,且必须以特定次序执行。*

通信内聚模块内各部分使用相同的输入数据,或产生相同的输出结果*

顺序内聚模块完成多个功能,各功能都在同一数据结构上操作,每一功能有唯一入口。*

功能内聚模块仅包括为完成某个功能所必须的所有成分。模块所有成分共同完成一个功能,缺一不可内聚性最强*

模块间内聚的类型*

总结:耦合、内聚与模块独立性关系耦合与内聚都是模块独立性的定性标准,都反映模块独立性的良好程度。但耦合是直接的主导因素,内聚则辅助耦合共同对模块独立性进行衡量。设计要求:低耦合,高内聚*

5.3启发规则改进原则:高内聚、低耦合①改进软件结构,提高模块独立性②模块规模适中③深度、宽度、扇出和扇入适中④将模块的影响限制在控制范围内⑤降低模块接口的复杂性⑥设计单入口单出口的模块⑦模块功能可预测*

①改进软件结构,提高模块独立性通过模块分解或合并,降低耦合提高内聚*

②模块规模适中模块过大:可理解程度下降模块过小:开销大于有效操作系统接口复杂在考虑模块的独立性同时,为了增加可理解性,模块的大小最好在50一150条语句左右,可以用1一2页打印纸打印,便于人们阅读与研究。*

③深度、宽度、扇出和扇入适中软件结构度量术语*

例:避免平铺结构*

增加中间层降低扇出*

作用域是指受模块内一个判定影响的所有模块的集合控制域是指这个模块本身及其所有的下属模块的集合④将模块的影响限制在控制范围内*

模块C的控制范围:C、D、E、F、G、H。如果模块C作

温馨提示

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

评论

0/150

提交评论