精华内容
下载资源
问答
  • 软件设计之总体设计

    万次阅读 2018-03-25 10:22:52
    详细设计设计基本原理:总体设计的任务和过程总体设计分为:面向数据,面向功能,面向对象的分析设计原则:独立性,规模,深,宽,入,出。作用域。接口。单入单出。预测(黑盒子)总体设计图形工具1.层次图:描述...

    软件的需求分析阶段知道系统要“做什么”,而软件设计阶段我们明白的是“怎么做”。
    软件的设计分为:总体设计&&详细设计

    设计基本原理:



    总体设计的任务和过程

    总体设计分为:面向数据,面向功能,面向对象的分析


    设计原则:独立性,规模,深,宽,入,出。作用域。接口。单入单出。预测(黑盒子)

    总体设计图形工具

    1.层次图:描述层次结构。
    2.HIPO图:在层次图的基础上,把图中除了顶层的方框外都加上编号****基本形式:输入,处理,输出。
    3.结构图(SC):表达程序结构图形的表示方法,反映程序模块间的层次关系和联系。
    成分:模块,模块间调用关系,通信,辅助控制符号。
    结构图的四中类型:传入,传出,变换,协调
    结构图VS数据流图
    数据流图反映的是程序中数据流的情况
    结构图反映的是程序中控制流的情况
    结构图VS程序流程图
    Battle1:
    结构图着重反映模块间的隶属关系,即调用关系和层次关系。
    程序流程图表达程序执行的顺序及执行顺序依赖的条件。
    Battle2:
    结构图着眼于软件系统的总体结构,不涉及内部细节,只考虑模块作用,以及上下级模块关系

    程序流程图表达执行程序的具体算法


    面向数据流的设计方法

    目标:给出设计软件结构的一个系统化途径。
    作用:信息流映射成软件结构。
    映射的方法由信息流的类型决定
        信息流的类型分为两类
     1.变换流:信息-->系统-->外换内-->加工-->内换外-->离开。
        变换型系统结构图:输入,变换中心,输出。
     2.事务流:信息-->输入-->处理-->输入类型选动作-->执行
        根据信息流类型,进行不同的分析。
           变换分析:把具有变换流特点的数据流图按预先确定的模式映射成软件结构
           事务分析:设计步骤跟变换分析类似,不同之处是数据流图到软件结构的映射方式不同。事务流映射的软件结构包括一个接收分支和一个发送分支。


    展开全文
  • 第5章 总体设计  5.1 设计过程  5.2 设计原理  5.3 启发规则  5.4 描绘软件结构的图形工具  5.5 面向数据流的设计方法  5.6小结及作业 总体设计(概要设计或初步设计)的基本目的就是回答“概括...

    基本目的:“概括回答地说就是,系统应该如何实现?”

    工作内容: 将划分出组成系统的物理元素——程序、文件、数据库、人工过程和文档等黑盒子级“产品”。黑盒子里的具体内容将在以后仔细设计。

    重要任务: 是设计软件的结构——模块组成,以及这些模块相互间的关系。
    首先根据需求分析阶段得到的数据流图寻找实现目标系统的各种不同的方案,为每个合理的方案准备一份系统流程图,列出组成系统的所有物理元素,进行成本/效益分析,并且制定实现这个方案的进度计划。选出一个最佳方案向用户推荐。

    必要性(详细设计之前): 站在全局高度上,花较少成本,从较抽象的层次上分析对比多种可能的系统实现方案和软件结构,从中选出最佳方案和最合理的软件结构,降低成本、提高质量。

    一、设计过程

    • 系统设计阶段:确定系统的具体实现方案;
    • 结构设计阶段:确定软件结构。

    (一) 9个步骤

    典型的总体设计过程包括下述9个步骤

    1. 设想供选择的方案

    • 考虑各种可能的实现方案从中选出最佳
    • 根据系统的逻辑模型,分析比较不同的物理实现方案,选出最佳方案,提高系统的性/价比。
    • 由需求分析的数据流图作为出发点,把数据流图中的处理分组的各种可能的方法,抛弃在技术上行不通的分组方法,提供可供选择的物理系统。

    2. 选取合理的方案

    选取低成本、中等成本和高成本的三种方案,对每个合理的方案分析员都应该准备下列4份资料
    (1) 系统流程图;
    (2) 组成系统的物理元素清单;
    (3) 成本/效益分析;
    (4) 实现这个系统的进度计划。

    3. 推荐最佳方案

    推荐一个最佳的方案,并且为推荐的方案制定详细的实现计划。
    提请使用部门负责人进一步审批之后,将进入总体设计过程的下一个重要阶段——结构设计。

    4. 功能分解

    1. 程序和文件(或数据库)是组成系统的主要元素,需要设计决定。
    2. 对程序的设计通常分为两个阶段完成:结构设计和过程设计。
    3. 结构设计确定程序由哪些模块组成,以及这些模块之间的关系(总体设计);
    4. 过程设计确定每个模块的处理过程(详细设计)。
    5. 为确定软件结构,首先需要从实现角度把复杂的功能进一步分解。
    6. 经过分解之后应该使每个功能对大多数程序员而言都是明显易懂的。
    7. 功能分解导致数据流图的进一步细化,同时还应该用IPO图或其他适当的工具简要描述细化后每个处理的算法。

    5. 设计软件结构

    1. 通常程序中的一个模块完成一个适当的子功能,将模块组织成良好的层次系统,顶层模块调用下层模块以实现程序的完整功能
    2. 软件结构(即由模块组成的层次系统)可以用层次图或结构图来描绘。
    3. 若数据流图细化到适当的层次,则可以直接从数据流图映射出软件结构。

    6. 设计数据库

    1. 对于需要使用数据库的应用系统,软件工程师应该在需求分析阶段所确定的系统数据需求的基础上,进一步设计数据库。
    2. 在数据库课中已经详细讲述了设计数据库的方法,本书不再赘述。

    7. 制定测试计划

    在软件开发的早期阶段考虑测试问题,能促使软件设计人员在设计时注意提高软件的可测试性。
    本书第7章将仔细讨论软件测试的目的和设计测试方案的各种技术方法。

    8. 书写文档

    完成的文档通常有下述几种:

    1. 用系统流程图描绘的系统构成方案,组成系统的物理元素清单,成本/效益分析;对最佳方案的概括描述,精化的数据流图,用层次图或结构图描绘的软件结构,用IPO图或其他工具(例如,PDL语言)简要描述的各个模块的算法,模块间的接口关系,以及需求、功能和模块三者之间的交叉参照关系等等。
    2. 用户手册根据总体设计阶段的结果,修改更正在需求分析阶段产生的初步的用户手册。
    3. 测试计划包括测试策略,测试方案,预期的测试结果,测试进度计划等等。
    4. 详细的实现计划
    5. 数据库设计结果
    6. 审查和复审

    最后应该对总体设计的结果进行严格的技术审查,在技术审查通过之后再由使用部门的负责人从管理角度进行复审。
    在这里插入图片描述
    在这里插入图片描述软件设计工作流程

    二、设计原理

    (一) 模块化

    “模块”,又称“构件” 。

    • 过程、函数、子程序和宏等,都可作为模块;面向对象方法学中的对象是模块,对象内的方法(或称为服务)也是模块。模块是构成程序的基本构件。
    • 模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。
    • 模块化是为了使一个复杂的大型程序能被人的智力所管理,化繁为简、化难为易、化整为零。

    设函数C(x)定义问题x的复杂程度,函数E(x)确定解决问题x需要的工作量(时间)。对于两个问题P1和P2,如果C(P1)>C(P2),显然E(P1)>E(P2)。
    C(P1+P2)>C(P1)+C(P2)
    E(P1+P2)>E(P1)+E(P2)
    这就是模块化的根据。
    在这里插入图片描述
    在这里插入图片描述

    (二)抽象

    • 抽象就是抽出事物的本质特性而暂时不考虑它们的细节。

    • 处理复杂系统的有效的方法是用层次的方式构造和分析它。一个复杂的动态系统首先可以用一些高级的抽象概念构造和理解,这些高级概念又可以用一些较低级的概念构造和理解,如此进行下去,直至最低层次的具体元素。

    • 任何问题的模块化时,可提出许多抽象的层次。
      在抽象的最高层次使用问题环境的语言,以概括的方式叙述问题的解法;
      较低抽象层次采用更过程化的方法,把面向问题的术语和面向实现的术语结合起来叙述问题的解法;
      最后在最低的抽象层次用可直接实现的方式叙述问题的解法。

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

    • 逐步求精和模块化的概念,与抽象是紧密相关的。
      软件结构顶层的模块,控制了系统的主要功能并且影响全局;
      在软件结构底层的模块,完成对数据的一个具体处理,用自顶向下由抽象到具体的方式分配控制,简化了软件的设计和实现,提高了软件的可理解性和可测试性,并且使软件更容易维护。

    (三)逐步求精

    逐步求精是人类解决复杂问题时采用的基本方法,逐步求精可定义为:“为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。”
    逐步求精之所以如此重要,是因为人类的认知过程遵守Miller法则:一个人在任何时候都只能把注意力集中在(7±2)个知识块上。
    Miller法则是人类智力的基本局限,我们不可能战胜自己的自然本性,只能接受这个事实,承认自身的局限性,并在这个前提下尽我们的最大努力工作。
    逐步求精最初是由Niklaus Wirth提出的一种自顶向下的设计策略, Wirth曾说:
    “我们对付复杂问题的最重要的办法是抽象,因此,对一个复杂的问题不应该立刻用计算机指令、数字和逻辑符号来表示,而应该用较自然的抽象语句来表示,从而得出抽象程序。抽象程序对抽象的数据进行某些特定的运算并用某些合适的记号(可能是自然语言)来表示。对抽象程序做进一步的分解,并进入下一个抽象层次,这样的精细化过程一直进行下去,直到程序能被计算机接受为止。这时的程序可能是用某种高级语言或机器指令书写的。”
    求精要求设计者细化原始陈述,随着每个后续求精(即细化)步骤的完成而提供越来越多的细节。

    • 抽象与求精是一对互补的概念。
    • 抽象使得设计者能够说明过程和数据,同时却忽略低层细节。
    • 求精则帮助设计者在设计过程中逐步揭示出低层细节。
    • 这两个概念都有助于设计者在设计演化过程中创造出完整的设计模型。
      在这里插入图片描述

    (四) 信息隐藏和局部化

    如何得到最好的一组模块?

    • 信息隐藏原理指出:设计一个模块,使得包含的信息(过程和数据) 对于不需要这些信息的模块来说,是不能访问的。
    • 局部化是指把一些关系密切的软件元素
    • 物理地放得彼此靠近。
    • 在模块中使用局部数据元素是局部化的一个例子。局部化有助于实现信息隐藏。

    (五) 模块独立

    模块独立是模块化、抽象、信息隐藏和局部化概念的直接结果。
    希望这样设计软件结构,使得每个模块完成一个相对独立的特定子功能,并且和其他模块之间的关系很简单。

    模块独立的两条理由:
    第一,有效的模块化(即具有独立的模块)的软件比较容易开发。
    因为功能简单而且接口可简化,当许多人分工合作时这个优点尤其重要。
    第二,独立的模块比较容易测试和维护。
    模块独立是设计的关键,而设计又是决定软件质量的关键环节。
    模块的独立程度可以由两个定性标准度量,分别称为内聚和耦合。

    • 耦合用于衡量不同模块彼此间互相依赖(连接)的紧密程度;
    • 内聚衡量一个模块内部各个元素彼此结合的紧密程度。
    • 模块独立要求:高内聚、低耦合;
    • 耦合
      耦合是对一个软件结构内不同模块之间互连程度的度量。
      耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。
      模块间的耦合程度强烈影响系统的可理解性、可测试性、可靠性和可维护性。
      在软件设计中应该追求尽可能松散耦合的系统。
      模块分解的一个目标是使块间联系尽可能小,块间联系的大小可从三个方面衡量:
      在这里插入图片描述
      在这里插入图片描述
      (1)内容耦合(content coupling)
      一个模块直接访问另一模块的内部数据。
      一个模块不通过正常入口转到另一模块的内部。
      一个模块有多个入口。
      两个模块有部分代码重迭。
      在这里插入图片描述
      (2)公共耦合(common coupling)
      若干模块访问一个公共的数据环境,则它们之间的耦合称为公共耦合。公共环境可为全局数据结构、共享的通信区、内存的公共覆盖区等。显然,公共数据区的变化,将影响所有公共耦合模块,严重影响模块的可靠性和可适应性,降低软件的可读性。
      在这里插入图片描述
      (3)控制耦合(control coupling)
      一个模块传递给另一模块的信息是用于控制该模块内部逻辑的控制信号。
      显然,对被控制模块的任何修改,都会影响控制模块。
      在这里插入图片描述
      (4)复合耦合(Data Coupling)
      一个模块传送给另一个模块的参数是一个复合的数据结构,例如,包含几个数据单项的记录。

    (5)数据耦合(Data Coupling)
    若两个模块间通过参数交换信息,而且交换的信息仅仅是数据。数据耦合是松散的耦合,模块之间的独立性比较强。
    2. 内聚
    内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。
    理想内聚的模块只做一件事情。
    设计时应该力求做到高内聚,通常中等程度的内聚也是可以采用的,而且效果和高内聚相差不多;但是,低内聚很坏,不要使用。
    内聚性愈强,模块独立性愈好。
    在这里插入图片描述
    偶然内聚:
    模块内部各部件之间没有任何关系,仅仅为了满足模块尺寸要求而将一些程序合入一可模块,出现错误时,难以确定位置;
    在这里插入图片描述
    逻辑内聚:
    这种模块把几种相关的功能组合在一起,每次调用时,由传送给模块的判断参数来确定该模块应执行那种功能。
    在这里插入图片描述
    瞬时内聚:
    模块包含的任务必须在同一段时间内执行,由于不使用选择参数,逻辑简单,但结合了许多无关任务,错误难以定位。
    例如:各种初始化。

    通信内聚:
    模块中所有的部件都访问同一组数据,几个部件之间有数据关系而无控制关系。
    优点:可通过参数选择不同的作用,是一种较理想的内聚。在这里插入图片描述

    顺序内聚:
    模块完成多个功能,各个功能都在同一数据结构上操作,每项功能有唯一的入口点。
    较好的内聚。
    在这里插入图片描述
    功能内聚:
    模块内所有部件处理同一组数据,共同完成单一的功能,是最理想的内聚之一。
    在这里插入图片描述

    三、启发规则

    在长期的软件开发实践中,总结经验,得出了一些启发式规则。
    没有基本原理和概念那样普遍适用,在改进软件设计,提高软件质量有积极意义。
     下面介绍几条启发式规则。
      1.改进软件结构提高模块独立性
      2.模块规模应该适中
      3. 深度、宽度、扇出和扇入都应适当
      4. 模块的作用域应该在控制域之内
      5. 力争降低模块接口的复杂程度
      6. 设计单入口单出口的模块
      7. 模块功能应该可以预测

    四、描绘软件结构的图形工具

    (一) 层次图和HIPO图

    层次图用来描绘软件的层次结构。
    在这里插入图片描述

    (二)结构图

    结构图也是描绘软件结构的图形工具。
    一个方框代表一个模块,框内注明模块的名字或主要功能;方框之间的箭头(或直线)表示模块的调用关系。
    尾部是空心圆表示传递的是数据,实心圆表示传递的是控制信息。
    在这里插入图片描述

    (三)结构图

    有一些附加的符号,可以表示模块的选择调用或循环调用。
    如左图表示当模块M中某个判定为真时调用模块A,为假时调用模块B。如右图表示模块M循环调用模块A、B和C。

    五、 面向数据流的设计方法

    面向数据流的设计方法的目标是给出设计软件结构的一个系统化的途径。
    因为任何软件系统都可以用数据流图表示,所以面向数据流的设计方法理论上可以设计任何软件的结构。
    通常所说的结构化设计方法(简称SD方法),也就是基于数据流的设计方法。

    (一)概念

    面向数据流的设计方法把信息流映射成软件结构,信息流的类型决定了映射的方法。信息流有下述两种类型。

    1. 变换流
      在这里插入图片描述
    2. 事务流
      如图所示,数据流是“以事务为中心的”,即数据沿输入通路到达一个处理T,根据输入数据的类型选出一个来执行。这类数据流应该划为一类特殊的数据流,称为事务流。
      在这里插入图片描述
      如图处理T称为事务中心,它完成下述任务:
      (1) 接收输入数据(输入数据又称为事务);
      (2) 分析每个事务以确定它的类型;
      (3) 根据事务类型选取一条活动通路。

    3 设计过程
    基于数据流方法的设计过程
    在这里插入图片描述

    (二) 变换分析

    变换分析把具有变换流特点的数据流图按预先确定的模式映射成软件结构。
     
    中心变换型(transform center)— 变换分析
    其特点是:DFD图可以明显分为“输入-处理-输出”三部分。
    在这里插入图片描述
     事务处理型(transaction)— 事务分析
      这类数据流图可看成是对一个数据经过某种加工后,按加工的结果选择一个输出数据流继续执行的处理。
    在这里插入图片描述

    (三)事务分析技术

    ① 确定流界:首先从数据流图中找出事务流、事务处理中心和事务路径。
    ② 进行一级分析,设计上层模块:对事务中心应设计“事物控制”模块;对事物流应设计“接受事物”模块;对事务路径,应设计“发送控制”模块。
    ③ 进行二级分解,设计中下层模块:接受分支,用类似于转换处理型数据流图中对输入数据流的方法设计中下层。对于发送分支,在发送控制模块下为每条事务路径设计一个事务处理模块,这一层称为事务层。
    在这里插入图片描述

    (四) 设计优化

    设计优化应力求做到在有效的模块化的前提下使用最少量的模块,以及在能够满足信息要求的前提下使用最简单的数据结构。
    对于时间是决定性因素的场合,下述方法对软件进行优化是合理的:

    • (1)在不考虑时间因素的前提下开发并精化软件结构;

    • (2)在详细设计阶段选出最耗费时间的那些模块,仔细地设计它们的处理过程(算法),以求提高效率;

    • (3) 使用高级程序设计语言编写程序;

    • (4) 在软件中孤立出那些大量占用处理机资源的模块;

    • (5) 必要时重新设计或用依赖于机器的语言重写上述大量占用资源的模块的代码,以求提高效率。

    上述优化方法遵守了一句格言:“先使它能工作,然后再使它快起来。”

    展开全文
  • 【软件工程】软件设计之总体设计

    千次阅读 热门讨论 2014-11-02 18:38:50
    软件的设计分为:总体设计/\详细设计 设计基本原理: 总体设计的任务和过程 总体设计分为:面向数据,面向功能,面向对象的分析 设计原则:独立性,规模,深,宽,入,出。作用域。接口。单入单出。预测...

    软件的需求分析阶段知道系统要“做什么”,而软件设计阶段我们明白的是“怎么做”。

    软件的设计分为:总体设计/\详细设计

    设计基本原理:


    总体设计的任务和过程

    总体设计分为:面向数据,面向功能,面向对象的分析


    设计原则:独立性,规模,深,宽,入,出。作用域。接口。单入单出。预测(黑盒子)

    总体设计图形工具

    1.层次图:描述层次结构。

    2.HIPO图:在层次图的基础上,把图中除了顶层的方框外都加上编号****基本形式:输入,处理,输出。

    3.结构图(SC):表达程序结构图形的表示方法,反映程序模块间的层次关系和联系。

    成分:模块,模块间调用关系,通信,辅助控制符号。

    结构图的四中类型:传入,传出,变换,协调

    结构图VS数据流图

    数据流图反映的是程序中数据流的情况

    结构图反映的是程序中控制流的情况

    结构图VS程序流程图

    Battle1

    结构图着重反映模块间的隶属关系,即调用关系和层次关系。

    程序流程图表达程序执行的顺序及执行顺序依赖的条件。

    Battle2

    结构图着眼于软件系统的总体结构,不涉及内部细节,只考虑模块作用,以及上下级模块关系

    程序流程图表达执行程序的具体算法

    面向数据流的设计方法

    目标:给出设计软件结构的一个系统化途径。

    作用:信息流映射成软件结构。

    映射的方法由信息流的类型决定

        信息流的类型分为两类

     1.变换流:信息-->系统-->外换内-->加工-->内换外-->离开。

        变换型系统结构图:输入,变换中心,输出。

     2.事务流:信息-->输入-->处理-->输入类型选动作-->执行

        根据信息流类型,进行不同的分析。

           变换分析:把具有变换流特点的数据流图按预先确定的模式映射成软件结构

           事务分析:设计步骤跟变换分析类似,不同之处是数据流图到软件结构的映射方式不同。事务流映射的软件结构包括一个接收分支和一个发送分支。

    展开全文
  • 第四章-总体设计

    2021-03-02 23:31:49
    第四章-总体设计 了解总体设计的概念及在软件开发中的位置,了解总体设计的目标、步骤及基本任务。 掌握软件结构设计的基本概念及相应的方法。 掌握模块化、抽象、信息隐蔽、模块独立性、内聚性、耦合性等相关内容...

    第四章-总体设计

    • 了解总体设计的概念及在软件开发中的位置,了解总体设计的目标、步骤及基本任务。
    • 掌握软件结构设计的基本概念及相应的方法。
    • 掌握模块化、抽象、信息隐蔽、模块独立性、内聚性、耦合性等相关内容。
    • 掌握软件结构形态中的相关特征、模块的影响范围、模块的控制范围及软件结构设计的优化准则等内容。

    1、总体设计的任务

    • 用比较抽象概括的方式确定系统如何完成预定的任务,确定系统的物理配置方案,并且进而确定组成系统的每个程序的结构。
    • 设计软件的结构

    2、总体设计的主要阶段

    • 系统设计阶段
      从数据流图出发构想完成系统功能的若干种合理的物理方案
    • 结构设计阶段
      确定程序由哪些模块组成以及这些模块之间的关系

    3、总体设计的步骤

    1、设想供选择的方案
    需求分析阶段得到的数据流图是总体设计的极好的出发点。
    2、选取合理的方案

    • 系统流程图
    • 组成系统的物理元素清单
    • 成本/效益分析
    • 实现这个系统的进度计划

    3、推荐最佳方案
    4、功能分解
    功能分解导致数据流图的进一步细化,同时还应该用IPO图或其他适当的工具简要描述细化后每个处理的算法。
    5、设计软件结构

    • 顶层模块调用它的下层模块以实现程序的完整功能,每个下层模块再调用更下层的模块,从而完成程序的一个子功能,最下层模块完成最具体的功能。
    • 软件结构(即由模块组成的层次系统)可以用层次图或结构图来描绘。

    6、设计数据库
    7、制定测试计划
    8、书写文档

    • 系统说明
      用系统流程图描绘的系统构成方案
      组成系统的物理元素清单
      成本/效益分析
      对最佳方案的概括描述
      精化的数据流程图
      用层次图或结构图描绘的软件结构
      用IPO图或其他工具(PDL语言)简要描述的各个模块的算法
      模块间的接口关系
      需求、功能和模块三者之间的交叉参照关系
    • 用户手册
    • 测试计划
    • 详细的实现计划
    • 数据库设计结果
      9、审查和复查

    4、设计原理

    (1)模块化

    模块是构成程序的基本构件。

    模块化就是把程序划分为独立命名而且可以独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足客户的需求。
    在这里插入图片描述

    总成本不仅与模块的数量有关,还与模块间接口的数量有关。

    模块化的优点:

    • 可以使软件结构清晰,不仅容易设计也容易阅读和理解
    • 可以使软件容易测试和调试,因而有助于提高软件的可靠性
    • 能够提高软件的可修改性
    • 有助于软件开发工程的组织管理,一个复杂的大型程序可以由许多程序员分工编写不同的模块,并且可以进一步分配技术熟练的程序员编写困难的模块

    (2)抽象

    软件工程过程的每一步都是对软件解法的抽象层次的一次精化
    随着软件开发工程的进展,在软件结构每一层中的模块,表示了对抽象层次的一次精化

    抽象就是抽出事物的本质特性而暂时不考虑它们的细节。

    软件结构顶层的模块,控制了系统的主要功能并且影响全局;
    在软件结构底层的模块,完成对数据的一个具体处理。

    用自顶向下由抽象到具体的方式分配控制的优点:

    • 简化了软件的设计和实现
    • 提高了软件的可理解性和可测试性
    • 使软件更容易维护

    (3)逐步求精

    逐步求精与抽象是互补的概念,由抽象到具体地构造出软件的的层次结构。

    定义:为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。

    • 抽象使得设计者能够说明过程和数据,同时却忽略了底层细节。
    • 求精则帮助设计者在设计过程中逐步揭示出底层的细节。

    求精实际上是细化过程。
    求精是把一个时期内必须解决的种种问题按照优先级排序的技术。

    (4)信息隐藏和局部化

    信息隐藏:
    应该这样设计和确定模块,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的

    局部化:
    把一些关系密切的软件元素物理地彼此靠近。(局部化有助于信息隐藏)

    细节隐藏:应该隐藏的不是有关模块的一切信息,而是模块的实现细节。

    优点:

    • 方便在以后的测试期间和维护期间修改软件
    • 因为绝大多数数据和过程对于软件的其他部分而言是隐藏的,在修改期间由于疏忽而引入的错误就很少可能传播到软件的其他部分。

    (5)模块独立

    模块独立的概念是模块化、抽象、信息隐藏和局部化的直接结果。

    开发具有独立功能而且和其他模块之间没有过多的相互作用的模块,就可以做到模块独立。

    A.耦合

    衡量不同模块彼此间相互依赖(连接)的紧密程度

    影响耦合强弱的因素:

    • 模块间接口的复杂程度
    • 进入或访问一个模块的点
    • 通过接口的数据

    实现低耦合,采取下列措施:

    • 耦合方式:采用非直接耦合,不采用直接耦合。
    • 传递信息类型:尽量使用数据耦合,少使用控制耦合,外部耦合和公共耦合限制使用。
    • 耦合数量:模块间相互调用时,传递参数最好只有一个。

    耦合级别(好到差):

    • 非直接耦合

      两个模块之间没有联系,则它们之间为非直接耦合。

    • 数据耦合

      被调用模块的输入与输出是简单的参数或者是数据结构(该数据结构中的所有元素为被调用的模块使用),则它们之间为数据耦合。

    • 标记耦合

      如果两个模块都要使用同一数据结构的一部分,不是采用全局公共数据区共享,而是通过模块结构传递数据结构的一部分,则它们称为标记耦合。

    • 控制耦合

      如果两个模块中的一个模块给另一个模块传递控制信息,则它们具有控制耦合。

      特点:接口单一,但仍然影响被控模块的内部逻辑。

    • 外部耦合

      当模块与软件的外部环境联结在一起,并受到约束时就出现较高程度的耦合,则它们之间为外部耦合。

    • 公共耦合

      如果两个模块都可以存取相同的全局数据,则它们之间是公共耦合。

      存在的问题:

      • 公共部分的改动将影响所有调用它的模块;
      • 公共部分的数据存取无法控制;
      • 复杂程度随耦合模块的个数增加而增加。

      解决方法:通过使用信息隐藏来避免公共耦合。

    • 内容耦合

      产生的条件(满足其一即可):

      • 一个模块访问另一个模块的内部数据
      • 一个模块不通过正常入口而转移到另一个模块的内部
      • 两个模块有一部分程序代码重叠(只可能出现在汇编程序中)
      • 一个模块有多个入口(这意味着一个模块有几种功能)
    B.内聚

    衡量一个模块内部各个元素彼此结合的紧密程度

    模块各元素执行相同的任务。

    内聚级别(差到好;3低2中2高):

    • 偶然内聚

      为方便把不相干的元素组合在一起。

      缺点:产品的可维护性退化;模块是不可复用的,增加软件成本。

      解决途径:将模块分成更小的模块,每个小模块执行一个操作。

    • 逻辑内聚

      某段时间执行的若干功能任务放在同一模块中。

      例如:系统的初始化

      问题:不同的功能混在一个模块中,有时共用部分编码,使局部功能的修改牵动全局。

    • 时间内聚

      一个模块包含的任务必须在同一段时间内执行。

    • 过程内聚

      模块内的各功能元素是相关的,而且必须以特定次序执行。

      例如:读写并更新数据记录

      程序流程图

    • 通信内聚

      模块中所有元素都使用同一个输入数据和(或)产生同一个输出数据。

      例如:某模块的各成分都利用一符号表进行操作;从同一磁带上读取不相干的数据。

      问题:可能破坏独立性。

    • 顺序内聚

      模块的输出是下一个模块的输入。

      数据流图

    • 功能内聚

      为完成一个任务把所需的全部功能组合在一起。

    原则:力争高内聚,识别低内聚,可以使得设计的软件具有较高的功能独立性。

    5、启发规则

    1. 争取低耦合、高内聚
      增加内聚、减少耦合

    2. 模块规模适中
      过大,分解不充分,不易理解;
      太小,则开销过大、接口复杂。

    3. 适当控制模块结构参数

      • 深度 = 分层的层数。过大表示分工过细。
      • 宽度 = 同一层上模块的最大值。过大,表示系统复杂度大。
      • 扇出 = 一个模块直接调用\控制的模块数。
      • 扇入 = 直接调用该模块的模块数。
        尽可能减少高扇出结构,随着深度增大扇入。
        扇出太大一般是因为缺乏中间层次,应当适当增加中间层次的控制模块;
        扇出太小时可以把下级模块进一步分解为若干个子功能模块,或合并到它的上级模块中去。
        顶层扇出高,中间扇出少,底层高扇入。
    4. 模块的作用范围保持在该模块的控制范围内

      • 控制域 = 该模块本身以及所有直接或间接从属于它的模块。
      • 作用域 = 该模块中一个判断所影响的所有其他模块。

      在这里插入图片描述

      令作用域是控制域的子集:

      • 把作判定的点往上移;
      • 把那些在作用域但不在控制域内的模块移到控制域内。
    5. 降低接口的复杂程度
      模块接口的复杂性是引起软件错误的一个主要原因。接口设计应该使得信息传递简单并且与模块的功能一致。

    6. 单出口单入口,避免内容耦合
      易于理解和维护。

    7. 模块功能可预测
      相同输入必产生相同输出。

    6、面向数据流的设计方法

    • 模块独立

      面向数据流的设计方法吧数据流(信息流)映射成软件结构数据流的类型决定了映射的方法。

      • 变换流
        信息沿输入通路进入系统,同时由外部形式变成内部形式,进入系统的信息通过变换中心,经加工处理后再沿输出通路变成外部形式离开软件系统。

      • 事务流
        数据沿输入通路到达一个处理,这个处理根据输入数据的类型在若干个动作序列中选出一个来执行。

        事务中心

      • 接收输入数据(输入数据又称为事务)

      • 分析每个事务以确定它的类型

      • 根据事务类型选取一条活动通路

    • 变换分析
      经过若干步骤把具有变换流特点的数据流图按预先确定的模式映射成软件结构。

    • 变换流分析
      在这里插入图片描述

    • 事务流分析
      从事务流的DFD到程序结构图的转换。
      与变换分析的主要差别仅在于由数据流图到软件结构的映射方法不同。

      • 接收分支
        从事务中心的边界开始,把沿着接收流通路的处理映射成模块。
      • 发送分支
        包含一个调度模块,控制下层的所有活动模块。
        在这里插入图片描述

    7、设计优化

    应该在设计的早期阶段对软件结构进行精化,这种优化的可能,是把软件结构设计和过程设计分开的的真正优点之一。

    设计优化应该力求做到在有效的模块化的前提下使用最少量的模块,以及在能满足信息要求的前提下使用最简单的数据结构。

    对时间起决定作用的软件设计进行优化:

    • 在不考虑时间因素的前提下开发并简化软件结构。
    • 在详细设计阶段选出最耗费时间的那些模块,仔细地设计他们的处理过程(算法),以求提高效率。
    • 使用高级程序设计语言编写程序。
    • 在软件中孤立出那些大量占用处理机资源的模块。
    • 必要时重新设计或用依赖于机器的语言重写上述大量占用资源的模块的代码,以求提高效率。

    8、描绘软件结构的图形工具

    • 层次图
      用来描绘软件的层次结构
      一个矩形框代表一个模块(与描绘数据结构的层次方框图不同)
      连线表示调用关系(层次方框图表示组成关系)
      适合在自顶向下设计软件的过程中使用
    • HIPO图
      层次图加输入/处理/输出图
      在H图里除了最顶层的方框外,每个方框都加了编号→可追踪性
    • 结构图
      一个方框代表一个模块,方框之间的箭头(或直线)表示模块的调用关系
      在结构图中还经常用带注释的箭头表示模块调用过程中来回传递的信息
      - 数据(空心圆)
      - 控制信息(实心圆)
      选择调用、循环调用
    • PS
      层次图和结构图并不严格表示模块的调用次序。
      层次图和结构图并不指明什么时候调用下层模块。
      通常用层次图作为描绘软件结构的文档,结构图并不是很合适。
      利用IPO图或数据字典中的信息得到模块调用时传递的信息,从而由层次图导出结构图的过程,可以作为检查设计正确性和评价模块独立性的好方法。
    展开全文
  • 一卡通管理系统总体设计

    千次阅读 2018-12-05 11:19:55
    摘要:数字化校园建设的实质就是学校的管理部门通过信息化手段,实现对各种资源的有效集成、整合和优化,实现资源的有效配置和充分利用,从而提高各种...本文主要讨论校园一卡通的总体设计。 1.校园一卡通的发展现状
  • 软件项目总体设计

    千次阅读 2019-10-22 22:53:11
    path软件学习系统的概要设计,包括框架设计,功能模块设计,数据库设计,界面设计等部分。 本文档的预期读者包括: 设计开发人员 项目管理人员 测试人员 用户 1.2范围 该文档的目的是解决整个项目系统的...
  • 五、总体设计 总体设计又称为概要设计或初步设计。其基本目的就是回答“概括地说,系统应该如何实现”这个问题。 设计过程 总体设计过长一般分两个阶段组成:系统设计阶段,结构设计阶段。 总体设计一般包含以下九个...
  • 3d游戏的总体设计框架 .

    千次阅读 2013-10-14 16:27:48
    方案  1. 技术方案  (1) 系统概要 ...SI Engine的设计以追求图形应用的效果和效率为主要的目标。以系统的通用性、开放性、易用性为次要目标。力求做一个满足制作高效的、逼真的实时图形应用要求的
  • 软件工程-----第五章 总体设计(复习) (1)概要 经过需求分析阶段的工作,系统必须“做什么”已经很清楚了,现在是决定“怎样做”的时候了。总体设计的基本目的是系统应该如何实现。他最重要的一项工作是设计软件...
  • 某个3d游戏的总体设计框架

    千次阅读 2010-05-21 17:33:00
    方案 1. 技术方案 (1) 系统概要 SI Engine是基于...SI Engine的设计以追求图形应用的效果和效率为主要的目标。以系统的通用性、开放性、易用性为次要目标。力求做一个满足制作高效的、逼真的实时图形应用要求的
  • 系统总体结构设计

    千次阅读 2020-02-16 04:25:08
    总体设计主要是指在系统分析的基础上,对整个系统的划分(子系统)、机器设备(包括软、硬设备)的配置、数据的存贮规律以及整个系统实现规划等方面进行合理的安排。 一、系统设计的任务 1. 系统设计的概念 系统...
  • 某个3d游戏的总体设计框架 .

    千次阅读 2011-08-10 16:00:55
    方案  1. 技术方案  (1) 系统概要  SI Engine是基于Direct9c和.Net体系结构的用于PC机实时图形应用和游戏的开发平台。该平台包括两个主要部分。一是实时图形应用的开发制作系统...SI Engine的设计以追求图形应
  • 项目名称:工资管理系统 文档编号:01 文档名称:工资管理系统总体分析 版本号:1.0 
  • 架构师的必备素质和成长途径

    千次阅读 2017-01-06 23:30:02
    主要谈及了架构师的必备素质和成长途径及给准架构师的建议。 它山之石可以攻玉,尽管每个架构师都有自己的成长路径,但是了解其他架构师的成长之路,对未来想成为架构师的人有一定的借鉴价值。首先以我自己的成长...
  • 建立企业体系结构的更佳途径

    千次阅读 2006-11-13 22:34:00
    show toc 欢迎来到 MSDN > 体系结构 建立企业体系结构的更佳途径 发布日期: 2006-6-13 | 更新日期: 2006-6-13
  • 由于系统的自组织、自适应和不断演化,新的系统性质会分层次涌现,且涌现的结果具有非线性,所以它是不可预测的,既有不可预测的随机性,但是也有总体的规律性,而且不以人的意志为转移。往往是“意料之外,情理之中...
  • 自动化测试-提高测试效率的途径 长期以来,软件测试给人的一种印象是一门”手艺活”,就是跑跑开发者写出来的程序,点点鼠标之类,然后大喊一声,“哇,你这个有个错别字”。实际上真正的测试并不是这样的。在真正...
  • MES总体介绍

    千次阅读 2013-12-04 20:25:29
    系统目标: MES系统通过控制包括物料、设备、人员、流程指令和设施在内的所有工厂资源,优化...系统总体建设目标如下: 整合可用资源:联接企业的计划层和操作层,整合信息孤岛 优化生产流程:通过项目实施来
  • 下面的这个inux/unix编程学习途径在网上很多地方都可以看到,这里转过来(有删减),以作为对自己的一个提醒。 1、首先先学学编辑器,vim, emacs什么的都行。2、然后学make file文件,只要知道一点就行,这样就可以...
  • 交互设计原则

    千次阅读 2014-06-10 15:49:43
    交互设计原则:常见附加工作陷阱 不要强迫用户到另外一个窗口中完成影响本窗口的功能; 不要强迫用户记住他将事物放在层次文件系统中的哪个位置; 不要强迫用户调整窗口大小,当窗口在屏幕上弹出时,程序应该为其...
  • 汇编总体讲解

    千次阅读 2014-10-01 01:50:22
    从而事实上只存在一个32-bit的寄存器EAX,而它可以通过4种不同的途径访问。 也许通过名字能够更容易地理解这些寄存器之间的关系。EAX中的E的意思是“扩展的”,整个EAX的意思是扩展的AX。X的意思Intel没有明示...
  • 应用集成与数据集成建设总体思路

    万次阅读 2010-07-19 11:06:00
    应用集成与数据集成建设总体思路 <!-- @page { size: 21cm 29.7cm; margin: 2cm } H3 { margin-top: 0.46cm; margin-bottom: 0.46cm; line-height: 172%; page-break-inside: avoid; page-...
  • 设计模式大全

    万次阅读 热门讨论 2006-12-22 21:07:00
    Longronglin之设计模式:Christopher Alexander 说过:“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动”。模式描述为:在...
  • 开始编程生涯的5个建议,增加编程经验的3种途径,谈程序员面试的技巧和建议 作者: 原小野 Google前美女面试官谈程序员面试的技巧和建议 盖尔·拉克曼(Gayle Laakmann),Google前员工,目前在宾夕法尼亚大学沃顿...
  • 基于MATLAB的拼图游戏设计 内容摘要:MATLAB强大的运算和图形展示功能,使图像处理变得更加的简单和直观。本博文基于MATLAB编程语言,详细介绍了如何利用MATLAB及其图像处理函数进行经典拼图游戏设计,并通过...
  • 通过对认知反应时间和信号在生物途径中的传输速度进行深入的研究和推理,形成了人类注意力理论假定,该假定认为人类视觉系统只详细处理图像的某些局部,而对图像的其余部分几 乎视而不见,这也意味着,在识别对象...
  • 某工业企业公共服务平台架构设计

    千次阅读 2011-01-26 14:51:00
    最近参与到的一个大的工业企业系统的架构设计,思路整理的过程记录下来
  • 系列索引:《软件工程与实践》第三版 软件工程课程知识梳理 目录 系列索引:《软件工程与实践》第三版 软件工程课程知识...4.2.1 软件总体设计的任务 4.2.2 总体设计的原则和过程 4.2.3 软件总体设计的方法 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,466
精华内容 8,186
关键字:

总体设计的途径