zoukankan      html  css  js  c++  java
  • 2017.12.8 软件工程-----第五章 总体设计(复习)

    软件工程-----第五章 总体设计(复习)

    (1)概要

    经过需求分析阶段的工作,系统必须“做什么”已经很清楚了,现在是决定“怎样做”的时候了。总体设计的基本目的是系统应该如何实现。他最重要的一项工作是设计软件结构。因此,总体设计又称为概要设计或初步设计。通过这个阶段的工作确定划分出组成系统的物理元素-----程序、文件、数据库、人工过程和文档。

    (2)设计过程

    总体设计过程通常是有两个主要阶段组成:系统设计阶段,确定系统的具体实现方案;结构设计阶段,确定软件结构。
    需求分析阶段得出的数据流图是总体设计的极好出发点。
    典型的总体设计包括一下九个过程:

    1.设想供选择的方案
    2.选取合理的方案
    3.推荐最佳方案
    4.功能分解
    5.设计软件结构
    6.设计数据库
    7.制定测试计划
    8.书写文档
    9.审查和复审
    

    (3)设计原理

    模块化
    模块化就是把程序划分为独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户需求.
    模块是由边界元素限定的相邻程序元素的序列,而且总有一个总体标识符代表它。
    模块化可以能够提高软件的可修改性;模块化有助于软件开发工程的组织管理。
    抽象
    在现实世界中一定事物、状态或过程之间总存在着某些相似的方面,把这些相似的方面集中和概括起来,暂时忽略它们之间的差异,这就是抽象。或者说抽象就是抽出事物的本质特征而暂时不考虑他们的细节。

    处理复杂的系统系统唯一的有效的方法就是用层次的方式构造和分析它
    逐步求精
    为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。逐步求精之所以如此重要,是因为人类的认知过程遵守Miller法则:一个人在任何时候都只能把注意力集中在7+-2 知识块上。
    信息隐藏和局部化
    信息隐藏原理指出:应该这样设计和确定模块使得一个模块包含的信息过程和数据对于不需要这些信息的模块来说是不能访问的。应该隐藏的不是有关模块的一切信息而是模块的实现的细节。
    模块独立
    模块独立的概念是模块化、抽象、信息和隐藏局部化概念的直接结果。模块的独立程度主要是内聚和耦合来衡量。耦合是模块与模块之间彼此相连;内聚是衡量一个模块内部元素的彼此结合紧密程度。

    耦合:(低耦合,数据耦合)

    1.耦合(影响软件复杂程度的一个重要因素)
    	耦合是对一个软件结构内不同模块之间链接程度的度量。模块间的耦合程度强烈影响这系统的可理解性、可测试性、可靠性、可维护性。
    	耦合的分类:
    		如果两个模块之间彼此通过参数交换信息,而且交换的仅仅是数据,这种耦合称为数据耦合。
    		在上面的基础上,如果传递参数之中有控制信息则就是控制耦合。
    		数据耦合是低耦合,系统中必须存在这种耦合,因为只有当某些模块的输出数据作为另一些模块的输入数据时,系统才会完成有价值的功能。
    		内容耦合:一个模块访问另一个模块的内部数据;一个模块不通过正常入口而转到另一个模块的内部;两个模块有一部分程序代码重叠;一个模块有多个入口。
    

    内聚:(高内聚用功能内聚)

    内聚标志这一个模块内各个元素彼此结合的紧密程度,他是信息隐藏和局部化概念的自然扩展。简单地说理想内聚的模块只做一件事。
    	设计时应该做到高内聚
    	内聚的分类:低内聚、中内聚、高内聚
    		低内聚:
    		如果一个模块完成一组任务,这些任务彼此间即使有关系,关系也是松散的就叫做偶然内聚。
    		如果一个模块完成的任务是在逻辑上属于相同或者类似就叫做逻辑内聚;
    		如果一个模块包含的任务必须在同一时间段内执行,就叫做时间内聚。
    		中内聚:
    		如果一个模块内的处理元素是相关的,而且必须以特定次序执行,称为过程内聚。
    		如果模块间所有元素都使用同一个输入数据或产生同一个输出数据则成为通信内聚。
    		高内聚:
    		如果一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行(通常一个处理元素的输出数据就是下一个处理元素的输入数据则成为顺序内聚
    		如果模块内处理元素所有属于统一整体,完成一个单一功能,则称为功能内聚,功能内聚是最高程度的内聚。
    

    (4)启发规则

    1.改进软件结构提高模块独立性

    通过模块分解或合并,力求降低耦合提高内聚。
    

    2.模块规模应该适中

    
    

    3.深度、宽度、扇出和扇入都应该适中

    深度指的是软件结构中控制的层数,
    宽度是软件结构内同一个层次上的模块总数的最大值,一般说来,宽度越大系统越复杂。对宽度影响最大的因素是模块的扇出
    

    4.模块的作用域应该在控制域之内
    5.力争降低模块接口的复杂程度
    6.设计单入口单出口的模块

    警示我们不要使用模块间出现内容耦合
    

    7.模块功能应该可以预测

    (5)描绘软件结构的图形工具

    层次图和HIPO图

    层次图是用来描绘软件的层次结构;适用于自顶向下设计软件的过程和使用,方框之间的连线表示调用关系而不是层次方框图那样表示是组成关系。
    HIPO是层次图加输入/处理/输出的英文缩写
    

    结构图

    方框之间的箭头是表示模块的调用关系
    尾部是圆表示表示传递的是数据,实心圆表示传递的是控制信息
    

    (6)面向数据流的设计方法

    面向数据流的设计方法是把信息流映射成软件结构,信息流的类型决定了映射的方法

    信息流包括两种:
    	变换流:信息沿输入通道路进入系统,同时由外部形势变换成内部形式,进入系统的信息通过变换中心,经加工处理后在沿输出通道变换成外部形式离开软件系统。这种信息流叫做变换流
    	事务流:这些数据流是“以事务为中心的”也就是说数据沿输入通路到达一个处理T,这个处理根据输入数据的类型在若干动作序列中选出一个来执行。它完成下述任务:
    		接受输入数据(输入数据又称为事务)
    		分析每件事务以确定它的类型
    		根据事务类型选取一条活动通路
    

    软件结构化设计方法是基于数据流的设计方法

    (7)本章小结

    总体设计阶段的基本目的是用比较抽象概括的方式确定系统如何完成预定的任务,也就是说说确定系统的物理方案并且确定组成系统的每个程序的结构。总体设计总体分为两个部分小阶段:首先需要进行系统设计从数据流图出发设想完成系统功能的若干中合理的物理方案,分析员应该仔细分析比较这些方案。
    在进行软件设计时应该遵循的最主要的原理是模块独立原理,也就是说软件应该由一组完成相对独立的自功能的模块。
    自顶向下求精是进行软件结构设计的常用途径。

  • 相关阅读:
    GuozhongCrawler系列教程 (1) 三大PageDownloader
    数据库中表的复杂查询&分页
    AngularJs 在控制器中过滤
    【iOS开发-79】利用Modal方式实现控制器之间的跳转
    leetCode(51):Valid Palindrome
    Eclipse上开发IBM Bluemix应用程序
    POJ 2104 K-th Number 静态主席树(裸
    BZOJ 3210 花神的浇花集会 计算几何- -?
    [易飞]一张领料单单身仓库"飞了"引起的思考
    Hbuilder开发app实战-识岁06-face++的js实现【完结】
  • 原文地址:https://www.cnblogs.com/qichunlin/p/8007488.html
Copyright © 2011-2022 走看看