七、软考·系统架构师——系统设计

系列文章

一、程序员进阶架构师的基础知识【计算机基础】
二、程序员进阶架构师的基础知识【操作系统】
三、程序员进阶架构师的基础知识【计算机网络基础】
四、程序员进阶架构师的专业知识【软件工程基础】
五、程序员进阶架构师的专业知识【UML建模工具】
六、程序员进阶架构师的专业知识【系统分析】
七、程序员进阶架构师的专业知识【系统设计】
八、程序员进阶架构师的专业知识【架构设计】
九、程序员进阶架构师的专业知识【架构质量及评估】
十、程序员进阶架构师的专业知识【软件测试及维护】

文章目录

  • 系列文章
  • 前言
  • 结构化设计
    • 设计原则
    • 设计工具
  • 面向对象设计
    • 设计原则
    • 设计工具

前言

  在系统开发过程或整个系统生命周期中,系统分析着重回答“干什么”的问题,而系统设计则主要解决“怎么干”的问题。系统设计是根据系统分析的结果,运用某种方法设计出能最大限度满足所要求的目标系统的过程,包括体系结构(架构)设计、接口设计、数据设计和过程设计等,其中体系结构设计是定义软件系统各主要部件之间的关系;接口设计定义软件和操作系统间以及软件和人之间如何通信;数据设计是将模型转换成数据结构的定义,好的数据设计将改善程序结构和模块划分,降低过程复杂性;过程设计是将系统结构部件转换成软件的过程描述。本文重点介绍结构化和面向对象两种设计方法。

结构化设计

  结构化设计是一种面向数据流的设计方法,是以结构化分析阶段所产生的成果为基础(成果可前往《软件工程基础》进行了解),进一步自顶而下、逐步求精和模块化的过程。模块化是一个很重要的概念,它将一个待开发的软件分解成为若干个小的简单部分–模块,每个模块可以独立地开发、测试。

设计原则

  模块设计应遵守以下原则:

  1. 抽象化:抽象化包括对过程的抽象、对数据的抽象和对控制的抽象。
    • 过程的抽象:在软件工程过程中,从系统定义到实现,每进展一步都可以看做是对软件解决方案的抽象化过程的一次细化。从概要设 计到详细设计的过程中,抽象化的层次逐次降低。当产生源程序时到达最低的抽象层次。
    • 数据抽象:数据抽象与过程抽象一样,允许设计人员在不同层次上描述数据对象的细节。
    • 控制抽象:控制抽象可以包含一个程序控制机制而无须规定其内部细节。
  2. 自顶向下,逐步细化:将软件的体系结构按自顶向下方式,对各个层次的过程细节和数据细节逐层细化,直到用程序设计语言实现为止,从而最后确立整个的体系结构。
  3. 信息隐蔽:信息隐蔽是开发整体程序结构时使用的法则,即将每个程序的成分隐蔽或封装在一个单一的设计模块中,并且尽可能少地暴露其内部的处理。通过信息隐蔽可以提高软件的可修改性、可测试性和可移植性,它也是现代软件设计的一个关键性原则
  4. 模块独立:模块独立是指每个模块完成一个相对独立的特定子功能,并且与其他模块之间的联系最简单。通常我们用低耦合(模块之间紧密程度)和高内聚(模块内部各元素紧密程度)两个标准来衡量。
    • 模块的内聚类型通常可以分为7种,根据内聚度从高到低排序。 七、软考·系统架构师——系统设计_第1张图片
    • 模块的耦合类型通常也分为7种,根据耦合度从低到高排序。 七、软考·系统架构师——系统设计_第2张图片
  5. 模块的大小要适中:过大的模块可能导致系统分解不充分,其内部可能包括不同类型的功能,需要进一步划分,尽量使得各个模块的功能单一;过小的模块将导致系统的复杂度增加,模块之间的调用过于频繁,反而降低了模块的独立性。
  6. 模块的扇入和扇出要合理:扇出是指该模块直接调用的下级模块个数,扇入是指直接调用该模块的上级模块个数。扇出大表示模块的复杂度高,扇入大表示模块的复用程度高。
  7. 深度和宽度适当:深度表示软件结构中模块的层数,如果层数过多,则应考虑是否有些模块设计过于简单;宽度是软件结构中同一个层次上的模块总数,一般说来,宽度越大系统越复杂。在系统设计时,需要权衡系统的深度和宽度,尽量降低系统的复杂性,减少实施过程的难度,提高开发和维护的效率。

设计工具

  在设计时应借助一些图形工具进行沟通和协作。在结构化概要设计时通常使用系统结构图来确定每个模块的功能和调用关系,确定系统的总体结构,系统结构图包括模块、模块之间的调用关系、模块之间的通信和辅助控制符号等四个部分。
七、软考·系统架构师——系统设计_第3张图片

  • 模块:模块用矩形框表示,框中标注模块的名字,对于已定义或者已开发的模块,可以用双纵边矩形框表示。
  • 模块调用关系==:绘制方法是两个模块一上一下布局,以箭头相连,上面的模块是调用模块,箭头指向的模块是被调用的模块。
  • 模块通信==:短箭头的方向和名字分别表示调用模块和被调用模块之间信息的传递方向和内容。
  • 辅助控制符号:当模块A有条件地调用模块B时,在箭头的起点标以菱形,模块A反复调用模块C时,在调用关系的连线上增加一个环状的箭头。

  详细设计是为每个具体模块选择适当的技术手段和处理方法的过程,可以使用以下几种图形工具表示

  • 程序流程图:程序流程图是用规定的符号描述一个程序中所需要的各项操作或判断的图示,这种流程图着重说明程序的逻辑性与处理顺序。如下图所示:
    七、软考·系统架构师——系统设计_第4张图片
  • IPO图:IPO图用来描述每个模块的输入、输出和数据加工。如下图所示:
    七、软考·系统架构师——系统设计_第5张图片
  • N-S图:N-S图避免了流程图在描述程序逻辑时的随意性与灵活性,全部算法写在一个矩形阵内。N-S图包括顺序、选择和循环三种基本结构。如下图所示:
    七、软考·系统架构师——系统设计_第6张图片
  • 问题分析图 (Problem Analysis Diagram,PAD):表现程序逻辑,易读、易懂、易记,最左主干线的上端的结点开始,自上而下依次执行。如下图所示:
    七、软考·系统架构师——系统设计_第7张图片
  • 过程设计语言(Process Design Language,PDL):也称为结构化语言或伪代码(pseudo code)。如下图所示:
    七、软考·系统架构师——系统设计_第8张图片
  • 判定表 (decision table):对于具有多个互相联系的条件和可能产生多种结果的问题,用结构化语言描述则显得不够直观和紧凑,这时可以用以清楚、简明为特征的判定表来描述。如下图所示:
    七、软考·系统架构师——系统设计_第9张图片
  • 判定树(decision tree):判定树也是用来表示逻辑判断问题的一种常用的图形工具,它用树来表达不同条件下的不同处理流程,比语言、表格的方式更为直观。判定树的左侧(称为树根)为加工名,中间是各种条件,所有的行动都列于最右侧。如下图所示:
    七、软考·系统架构师——系统设计_第10张图片

面向对象设计

  面向对象设计(Object-Oriented Design,OOD)方法是OO方法中一个中间过渡环节。其主要作用是对OOA分析的结果作进一步的规范化整理,以便能够被OOP直接接受。相比结构化开发方法,面向对象方法更加直观,能够对应现实对象。分析和设计之间无间隙,采用一致性模型表示,设计在分析的基础上细化,提升开发效率。

设计原则

  面向对象设计应遵守以下原则:

原则 描述
单一职责原则 一个类只负责一个功能领域中相应的职责。
开闭原则 对扩展开放,对修改封闭。
里式替换原则 子类可以替换父类。
依赖倒置原则 对接口进行编程,不要对实现编程。
接口隔离原则 使用多个专门的接口比使用单一的总接口好。
组合重用原则 尽量使用组合不是继承达到重用的目的。
迪米特原则 一个对象应当对其他对象有尽可能少的了解。

(补充扩展《设计模式》)

设计工具

  UML是面向对象设计的建模工具,独立于任何具体程序设计语言。有三个主要的模型:

  • 功能模型:从用户的角度展示系统的功能,包括用例图。
  • 对象模型:采用对象,属性,操作,关联等概念展示系统的结构和基础,包括类别图、对象图。
  • 动态模型:展现系统的内部行为。包括序列图,活动图,状态图。

  具体请前往《UML建模工具》详细了解。

你可能感兴趣的:(软考,系统架构,设计规范)