软件工程学习笔记(四)软件设计

软件设计概述

软件设计的基本特征:目标,形态,内容
从技术角度考虑,软件设计主要包括4方面内容:

  1. 系统结构设计:确定软件系统的结构,即软件系统的组成,以及各组成成分(子系统或模块)之间的相互关系
  2. 接口设计:确定目标系统与其他软/硬件系统之间、目标系统与用户之间的交互关系及通信方式
  3. 数据设计:对数据结构的设计
  4. 过程设计:把每个模块内部的执行逻辑转换成过程性描述(即算法设计)
    软件工程学习笔记(四)软件设计_第1张图片
    从工程管理角度考虑,软件设计过程划分为两大阶段:概要设计阶段,详细设计阶段
    软件工程学习笔记(四)软件设计_第2张图片
    概要设计:包括结构设计和接口设计,并编写设计文档。确定模块的划分,模块之间的调用关系,接口等
    详细设计:其任务是确定各个软件组件的数据结构和操作,产生描述个软件组件的详细设计文档。细分模块、数据结构等

软件体系结构的典型风格

  • 主程序-子过程风格
    软件工程学习笔记(四)软件设计_第3张图片

  • 面向对象风格
    软件工程学习笔记(四)软件设计_第4张图片

  • 层次风格
    软件工程学习笔记(四)软件设计_第5张图片

  • 以数据为中心的风格(仓库风格)
    软件工程学习笔记(四)软件设计_第6张图片

  • 客户机-服务器体系结构风格

C/S结构的层次性
从应用系统开发的角度考虑,C/S结构的应用系统通常可以由3个相对独立的部分组成,每一部分承担着不同的职责:
用户界面部分:即表示层,主要实现用户与应用系统之间的交互接口,用于接收用户输入的数据,并显示应用系统输出的数据。一般采用图形用户界面(GUI)。
应用逻辑部分:即业务逻辑层(或功能层),主要实现应用系统的各种处理功能。一般通过应用程序来实现各种功能的业务处理逻辑。
数据管理部分:即数据层,主要实现数据的存储以及对数据的存取操作任务。一般采用关系型数据库管理系统。

胖客户端结构 瘦客户端结构
服务器端负责数据管理 服务器端负责应用逻辑部分和数据管理
客户端负责实现应用逻辑部分和用户界面部分 客户端负责用户界面部分

胖客户端的C/S系统执行效率比瘦客户端更高

浏览器/服务器(B/S)结构
软件工程学习笔记(四)软件设计_第7张图片
基于集群(Cluster)的C/S或B/S物理分布
通常,应用逻辑层并不一定只驻留在一台服务器上,数据层也是如此;如果应用逻辑层(或数据层)分布在多台服务器上,那么就形成了基于集群(Cluster)的物理分布模式;
目的:提高服务器并发处理的性能,以改善系统的运行速度;提高系统的可靠性与可用性。

结构化设计方法

结构化设计方法(Structured Design,SD)强调将软件系统划分成若干个模块。模块作为可合并、可分解的基本单元,主要包括 功能 接口逻辑 三个基本属性,其中 逻辑 属性反映模块的内部特性。
是一种面向数据流的设计方法:根据数据流图(DFD)的不同类型,将其转换为相应的软件体系结构(属于“主程序-子过程”风格)
目标:通过对模块的合理划分,得到软件的体系结构图,进而再细化每个模块内部的处理流程。
软件工程学习笔记(四)软件设计_第8张图片
结构化设计的核心原则——模块化
模块独立性是软件系统划分模块时的一个主要准则,也是评价模块构造是否合理的主要标准之一。如果一个模块只完成一个相对独立的子功能,即功能单一,并且与其它模块之间没有过多的相互作用和复杂的联系,则称这样的模块具有独立性。通常从以下两方面来衡量模块的独立性:模块本身的内聚性,模块之间的耦合性
内聚性是从“功能”的角度来衡量模块内部的联系,是对模块功能强度的度量: 如果一个模块内部的所有成分,都是为了完成某个单一功能,而彼此紧密结合在一起,则说明该模块的内聚性强。耦合性表示模块与模块之间相互联系、相互依赖的紧密程度。模块间连接越紧密,联系越复杂,耦合性越高
软件工程学习笔记(四)软件设计_第9张图片
按照块内联系的各种类型(内聚性从小到大):
偶然型:模块内部沒有必然联系;
逻辑型:逻辑上相似的功能放进一个模块;
瞬时型:将同时执行的语句放在一个模块;
通讯型:模块中的各部分引用共同的数据;
顺序型:模块中一部分的输出是另一部分的收入;
功能型: 模块中刚好包含了完成一个基本任务所必需的成分

软件工程学习笔记(四)软件设计_第10张图片
按照块间联系分类法(按照耦合度由大到小):
内容型:直接引用另一模块的内部信息;
公共型:两个模块引用共同的全程数据区;
控制型:模块间传送的信息用于控制模块的内部逻辑;
复合型:模块间传送复合的数据结构;
数据型:模块间传送单个数据项。

模块化设计的目标:高内聚,低耦合(即提高模块内部的联系,降低模块之间的联系)
改进方法:
1)尽可能建立功能模块;
2)消除重复功能;
3)模块的作用范围与控制范围,即当作用范围为控制范围的子集时,才能获得较低的块间联系;
4)模块的大小适当;
5)模块的扇入扇出数不宜太多。

模块化设计:
便于由多个人分工编制大型程序;软件的功能便于扩充程序;易于理解,也便于排错;只要模块之间的接口关系不变,各模块内部实现细节的修改将不会影响别的模块; 模块间的单向调用关系叫做模块的层次结构

结构图
模块:实现特定功能,有明确的输入、内部处理逻辑、输出。一般用矩形框表示,框内注明该模块的名称(常以其功能做为模块名)。
调用关系:模块之间通过“过程/函数调用”的方式建立连接。一般用自上而下的箭头连线表示两个模块之间的调用关系。
模块间的信息传递:模块调用过程中,相互传递的信息。
数据信息:模块间相互调用时所传递的业务性数据。通常是一些简单数据类型或复杂数据类型(比如,结构体);
控制信息:模块间相互调用时所传递的标志性数据。比如,“Y”/“N”、“T”/“F”、状态标志等。
结构深度:结构图中的层次总数
结构宽度:结构图中,同一层次上模块总数的最大值
模块的扇入:能直接调用某模块的模块个数
模块的扇出:某个模块直接调用的模块个数
DFD的两种特征:

  • 变换型DFD
    信息沿着输入路径进入系统,同时由外部形式变换为内部形式,然后经过系统内部的 “变换中心”进行处理,处理后的结果再沿着输出路径变换成外部形式离开系统。 输入部分与变换中心之间,变换中心与输出部分之间都具有较为明显的边界
    软件工程学习笔记(四)软件设计_第11张图片
    变换型结构由至少一条传入路径、变换中心和传出路径组成

  • 事务型DFD
    信息沿着输入路径进入系统,由外部形式变换为内部形式后,到达某个数据加工(称为事务中心),然后该事务中心根据输入信息的类型,在之后的多条“加工路径”中选择一个去执行。事务中心的任务: 接收事务信息,根据事务类型选取一条加工路径执行
    软件工程学习笔记(四)软件设计_第12张图片
    事务型结构由至少一条接受路径、一个事务中心与若干条动作路径组成

从DFD图到SC图的映射规则
(1)复审DFD图,必要时可再次进行修改或细化;
(2)鉴别DFD图所表示的软件系统的结构特征,确定它所代表的软件结构是属于变换型还是事务型。
(3)按照SD方法规定一组规则,把DFD图转换为初始的SC图;
(4)按照优化设计的指导原则改进初始的SC图,获得最终SC图。

将数据流图DFD映射为结构图SC的变换分析

逻辑输入通常是距离物理输入端最远的,但仍可以被视为系统输入的那些数据流。
变换中心的两端分别是逻辑输入和逻辑输出,其任务是把系统的逻辑输入加工处理为系统的逻辑输出
顶层结构:只有一个主模块MC ,代表整个系统,用于控制协调其它模块
第一层结构:通常包括三个模块:
输入信息处理模块MA :管理所有输入信息的接收(从物理输入到逻辑输入);
变换中心控制模块MT :管理所有对逻辑输入的操作;
输出信息处理模块ME :管理所有输出信息的产生(从逻辑输出到物理输出)。
软件工程学习笔记(四)软件设计_第13张图片
软件工程学习笔记(四)软件设计_第14张图片
输入分支:从逻辑输入开始,逆着输入路径向外移动,将输入路径中的每个数据加工依次映射成为模块 MA 控制下的一个低层模块;
变换分支:将变换中心内的每个数据加工映射成为模块 MT 控制下的一个低层模块;
输出分支:从逻辑输出开始,顺着输出路径向外移动,将输出路径中的每个数据加工依次映射成为模块 ME 控制下的一个低层模块
软件工程学习笔记(四)软件设计_第15张图片
软件工程学习笔记(四)软件设计_第16张图片

将数据流图DFD映射为结构图SC的事务分析

在事务型DFD上区分出输入部分、事务中心和发送部分(由事务中心发射出的多条加工路径构成),并划出分界线。顶层结构只包含一个主模块。第一层结构主要包括两个分支:输入分支和发送分支
输入分支:映射方法与变换分析中映射输入分支的方法相同,即从事务中心的边界开始,将逆着输入路径中的数据加工依次映射成模块。
发送分支:包含一个调度模块,对应事务中心。由事务中心发射出的每条加工路径可根据其各自的流特征(变换型或事务型)映射成相应结构,由调度模块“选择调用”。
软件工程学习笔记(四)软件设计_第17张图片
软件工程学习笔记(四)软件设计_第18张图片

例题

软件工程学习笔记(四)软件设计_第19张图片
软件工程学习笔记(四)软件设计_第20张图片

结构图SC的优化原则:

  • 通过对模块进行适当的分解或合并,力求提高内聚降低耦合
  • 应尽可能减少高扇出结构:对其下属模块进行归类,并适当增加中间层的控制模块,以减少扇出
  • 应随着深度增大扇入

一个良好的结构,通常上层扇出较高,中层扇出较低,底层扇入较高

SD方法中常用的过程设计描述工具

程序流程图
软件工程学习笔记(四)软件设计_第21张图片

N-S图(盒图)
软件工程学习笔记(四)软件设计_第22张图片

软件工程学习笔记(四)软件设计_第23张图片

PAD图
软件工程学习笔记(四)软件设计_第24张图片
软件工程学习笔记(四)软件设计_第25张图片

PAD图的特点:
⑴ 清晰地反映了程序的层次结构。图中的竖线为程序的层次线,最左竖线是程序的主线,其后一层一层展开,层次关系一目了然。
⑵ 支持逐步求精的设计方法,左边层次中的内容可以抽象,然后由左到右逐步细化。
⑶ 易读易写,使用方便。
⑷ 支持结构化的程序设计原理。
⑸ 可自动生成程序。

判定表/判定树
判定表由四部分组成:
左上部列出所有条件
左下部是所有可能做的动作
右上部表示各种条件组合
右下部是和每种条件组合相对应的动作

软件工程学习笔记(四)软件设计_第26张图片
软件工程学习笔记(四)软件设计_第27张图片
过程设计语言PDL
PDL也称为伪码。
如:if I>0 then
执行订单数据输入模块
else
报告出错信息
end if

用PDL表示的程序结构一般有:⑴ 顺序结构:采用自然语言描述⑵ 选择结构⑶ 重复结构
⑷ 出口结构 ⑸ 模块定义与调用 ⑹ 数据定义⑺ 输入输出

用户界面设计

软件用户界面的组成部分:
软件工程学习笔记(四)软件设计_第28张图片
信息输入方式:键盘输入,鼠标输入,硬件接口输入,软件接口输入
指令输入方式:键盘输入,直接操纵图形元素
信息输出形式:单一数据,成组数据,大量数据,软件接口输出,动态数据

软件用户界面设计的基本原则:
置系统于用户的控制之下:允许用户与系统的交互被中断或撤销;允许用户与出现在屏幕上的任何对象进行直接交互。
减少用户的记忆负担:建立有意义的缺省值;定义直观的快捷方式:如快捷键
保持界面的一致性:一致性要求UI遵循标准和常规的方式,让用户处在一个熟悉的和可预见的环境之中
个性化:可以使不同的用户按照自己的习惯、爱好以及对系统的熟悉程度来设置UI元素
宽容性:允许用户进行实验性操作和出错,用户在出错时能够方便的从错误中恢复
反馈:在发生错误或程序运行时间较长时,系统应给用户提供有意义的、可视化的
反馈,以便用户了解错误性质或程序的执行进度。
美观性
可用性
简洁性:避免使用许多复杂的图片和动画等,造成用户操作时的分心;界面布局应当适合清晰地表达信息;具有与之匹配的导航性

软件用户界面设计的几种常见模式

  • Windows标准模式
  • 导航模式
  • 层叠模式
  • 表格模式
  • 向导模式

软件用户界面设计需要考虑的若干因素

  • 单界面/多界面
  • 界面布局
  • 界面大小
  • 界面中的颜色
  • 菜单设计
  • 信息表示
  • 使用效率
  • 安全性
  • 用户支持

你可能感兴趣的:(软件工程)