软件工程与项目管理(第2版) 课件 (王素芬)第5、6章 软件的总体设计、 软件详细设计.pptx

软件工程与项目管理(第2版) 课件 (王素芬)第5、6章 软件的总体设计、 软件详细设计.pptx

  1. 1、本文档共101页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

5.1总体设计的目标和任务

5.2设计的概念和原则

5.3控制层次与结构划分

5.4针对有效模块化的设计启发

5.5描绘软件结构的图形工具

5.6结构化设计

5.7数据库设计

5.8总体设计说明书的编写;5.1总体设计的目标和任务;5.1.1总体设计的目标

在软件设计阶段应达到的目标是提高可靠性、提高可维护性、提高可理解性和提高效率,如图5.1所示。

软件设计必须达到以下要求:

(1)软件实体有明显的层次结构,利于软件元素间的控制。

(2)软件实体应该是模块化的,模块具有独立功能。

(3)软件实体与环境的界面清晰。

(4)设计规格说明清晰、简洁、完整并无二义性。

;5.1.2总体设计的任务和步骤

在总体设计过程中要先进行系统设计,复审系统计划与需求分析,确定系统具体的实施方案,然后进行结构设计,确定软件结构。总体设计的一般步骤如下:

(1)设计系统方案;

(2)选取一组合理的方案;

(3)推荐最佳实施方案;

(4)功能分解;

(5)软件结构设计;

(6)数据库设计、文件结构的设计;

(7)制订测试计划;

(8)编写概要设计文档;

(9)审查与复审概要设计文档。

总体设计流程示意图如图5.2所示。

;5.2设计的概念和原则;5.2.1模块化

模块是数据说明、可执行语句等程序对象的集合,它是单独命名的而且可通过名字来访问。例如,过程、函数、对象、类等都可作为模块。

模块化是指解决一个复杂问题时自顶向下,逐步求精,把软件系统划分成若干模块的过程。为了解决复杂问题,在软件设计中必须把整个问题进行分解来降低复杂性,这样就可以将一个复杂问题,变成多个简单的问题,既易设计也容易阅读和理解,是开发复杂的大型软件系统必须采用的方法。

模块化可以使软件结构清晰,减少开发工作量、低开发成本、提高软件生产率,但是“模块化”并不意味着模块越多,划分得越细越好。模块越多,模块之间的接口就会越复杂,从而增加成本,降低效率。因此模块数要适中。

事实上,模块数目与成本存在如图5.3所示的关系。

;为了使复杂大型程序能被人的智力所管理,模块化是软件应该具备的唯一属性。一个大型程序如仅??一个模块组成,将很难以被人所理解。

实际上,模块化的依据是把复杂问题分解成许多容易解决的小问题,从而使原来的问题变得容易解决。如果无限地分割软件,则最后为了开发软件而需要的工作量也就小得可以忽略了。但是还有一个因素在起作用,从而使得上述结论不能成立。如图5.3所示,当模块数目增加时,每个模块的规模将减小,开发单个模块需要的成本(工作量)确实减少了。但是,随着模块的增加,设计模块间接口所需要的工作量也将增加。根据这两个因素得出图5.3中的总成本曲线。从图5.3中可见,每个程序相应地有一个最适当的模块数目M,使得系统的开发成本最小。虽然目前还不能精确地决定M的数值,但是在考虑模块化的时候总成本曲线确实是有用的指南。

模块化使程序错误通常局限在有关的模块及它们之间的接口中,使软件容易测试和调试,因而有助于提高软件的可靠性。变动往往只涉及少数模块,能够提高软件的可维护性。模块化也有助于软件开发工程的组织管理,一个复杂的大型程序可以由若干程序员分工编写不同的模块,并可进一步分配技术熟练的程序员编写困难的模块。

5.2.2抽象

人类在认识复杂现象的过程中最强有力的思维工具是抽象。人们在实践中认识到,现实世界中的一定事物、状态或过程之间总存在着某些共性。把这些共性集中和概括起来,暂时忽略它们之间的差异,这就是抽象。

由于人类思维能力的限制,因此如果人类每次面临的因素太多,就不能进行精确的思维。处理复杂系统的唯一有效的方;法是用层次的方式构造和分析它。一个复杂的动态系统首先可以用一些高级的抽象概念构造和理解,这些高级概念又可以用一些较低级的概念构造和理解,如此进行下去,直至最低层次的具体元素。

这种层次的思维和解题方式必须反映在定义动态系统的程序结构之中,每级的一个概念将以某种方式对应于程序的一组成分。当考虑对任何问题的模块化解法时,可以提出许多抽象的层次。在最高层次使用问题环境的语言中,以概括的方式叙述问题的解法。在中间层次采用更过程化的方法,把面向问题术语和面向实现术语结合起来叙述问题解法。在最低的抽象层次用可以直接实现的方式叙述问题的解法。

软件开发过程的每一步都是对软件解法的抽象层次的一次精化。在问题定义研究阶段,软件作为系统的一个完整部件;在需求分析期间,软件解法是使用在问题环境内熟悉的方式描述;当由总体设计向详细设计过渡时,抽象的程度也就随之减少了;最后,当源程序写出来以后,也就到达了抽象的最底层。

5.2.3逐步求精

逐步求精与模块化以及抽象有着密切的联系。在问题分解过程中,人们常采用逐步求精的

您可能关注的文档

文档评论(0)

xiaobao + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档