-
Notifications
You must be signed in to change notification settings - Fork 32
/
4、结构化总体设计.md
393 lines (183 loc) · 16.6 KB
/
4、结构化总体设计.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
# 结构化总体设计
传统软件工程方法学采用结构化设计技术(SD)。
从工程管理角度结构化设计分两步:
- 概要设计:将软件需求转化为数据结构和软件系统结构。
- 详细设计:过程设计,通过对结构细化,得到软件详细数据结构和算法。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127000046285.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
- 数据设计:数据模型及核心数据字典转变为数据结构。
- 体系结构设计:功能模型中数据流图转变成计算机模块框架。
- 接口设计:功能模型中数据流图转变成软件内部、软件与协作系统间、软件与用户间通信方式。
- 过程设计:行为模型及功能模型中的“处理规格说明”转换成软件构件过程描述
结构化设计的概念与原理
- 模块化
- 抽象
- 逐步求精
- 信息隐蔽
- 模块独立
## 一、模块化
模块(mdule)——“模块”又称“构件”一般指用一个名字调用的相邻程序元素序列。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127000133836.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021012700015417.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127000214607.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
## 二、抽象
抽象事物的本质特性,暂不考虑细节。
## 三、求精
求精是指为了能集中精力解决主要问题,尽量推迟对细节问题的考虑,实际上是一个细化过程,与抽象是互补的概念。
抽象使得设计者能够说明过程和数据,同时忽略底层细节;
求精帮助设计者在设计过程中揭示底层细节。
## 四、信息隐蔽
每个模块的实现细节对于其他模块来说是隐蔽的,也就是说,模块中所包含的信息是不允许其他不需要这些信息的模块访问的。
每个客户只能通过接口来了解该模块,而所有的实现都隐蔽起来。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127000239593.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
## 五、模块独立
具有独立功能且和其他模块没过多作用。
1. 容易分工合作;
2. 容易测试和维护,修改工作量较小,错误传播范围小,扩充功能容易,
两个定性度量标准:耦合和内聚。
### 5.1 耦合
**软件结构中不同模块间互连程度度量。**
取决模块间接口复杂程度,通过接口数据。追求尽可能松散耦合系统。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127000311662.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
- **非直接耦合**
两个模块分别能独立地工作,不需要另一模块存在。
- **数据耦合**
两模块通过参数交换数据信息。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127000334463.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
- **控制耦合**
两模块通过参数交换控制信息(包括数字形式)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127000422457.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
- **公共环境耦合**
两个或多个模块通过一公共数据环境作用。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127000503690.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
- 一模块送数据,另一模块取,等价数据耦合。
- 两模块既往公共环境送又从里面取,介于数据耦合和控制耦合之间
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127000520523.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
- 内容耦合
1. 一模块访问另一模块内部数据;
2. 一模块不通过正常入口转到另一模块内部;
3. 两模块有部分程序代码重叠(汇编程序);
4. 一模块有多个入口。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127000552183.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
原则:尽量使用数据耦合,少用控制耦合,限制公共环境耦合,完全不用内容耦合。
### 5.2 内聚
**定义:**
**模块内各元素彼此结合紧密程度。**
- 功能内聚
一模块中各部分是完成某一功能必不可少组成部分。
- 顺序内聚
模块内处理元素同某功能密切相关,顺序执行。
- 通信内聚
一模块内各功能部分都使用相同输入数据,或产生相同输出数据。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127000610429.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
- 过程内聚
模块内处理元素相关,特定次序执行,如把流程图中循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127000629647.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
- 时间内聚
多为多功能模块,要求所有功能在同一时间内执行。如初始化模块和终止模块及紧急故障处理模块。
- 逻辑内聚
一模块完成功能在逻辑上属相同相似一类。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127000700146.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
- 偶然内聚
模块内各部分间没有联系,即使有也很松散。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127000717533.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
各个内聚评分:
1. 功能内聚:10分
2. 顺序内聚:9分
3. 通信内聚:7分
4. 过程内聚:5分
5. 时间内聚:3分
6. 逻辑内聚:1分
7. 偶然内聚:0分
## 六、启发规则
1. 改进软件结构提高模块独立性
初步结构分解或合并,降低耦合提高内聚
<img src="https://img-blog.csdnimg.cn/20210127000745702.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70" width="45%"/>
2. 模块规模应该适中
过大分解不充分,但进一步分解不应降低模块独立性。过小开销大于有效操作,模块数目过多系统接口复杂。通常语句行数在50-100,最多不超过500行。
3. 深度、宽度、扇出和扇入应适当
深度:软件结构控制层数,标识一系统大小和复杂程度。
宽度:软件结构同一层次模块数最大值,越大系统越复杂。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127000821139.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
扇出:一模块直接控制(调用)模块数,过大,模块复杂,过小也不好。一般在3-9
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127000834433.png)
扇入:有多少上级模块直接调用它,越大共享该模块上级模块越多。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127000849402.png)
扇入扇出不合适的改善:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127000912525.png)
改善示例:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021012700093177.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127001002272.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
4. 模块作用域应在控制域内
作用域:受该模块内判定影响的所有模块集合。
控制域:模块本身及所有直接或间接从属它的模块集合。
若模块作用域不再控制域内,会增大模块间控制耦合。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127001030433.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
改善方案一:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021012700104761.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
改善方案二:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127001104710.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
5. 降低模块接口复杂程度
模块接口复杂是软件发生错误一主要原因。应使信息传递简单且和模块功能一致。
6. 设计单入口、单出口模块
避免内容耦合
7. 模块功能可预测
输入数据相同,产生同样输出。模块功能防止过分受限。
不可预测模块:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127001127599.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
过分受限模块:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127001141805.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
### 七、面向数据流设计方法
面向数据流的设计要解决的任务,就是将软件需求分析阶段生成的额逻辑模型数据流图映射(Mapping)表达软件系统结构的软件结构图。
结构化设计属于面向数据流的设计方法。
### 7.1 软件结构图
1. 模块一在SC图中用矩形框表示,并用名字来标记它
2. 模块的调用关系和接口
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127001207471.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127001234333.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
### 7.2 信息流类型
1. 变换流
信息沿输入通路进入系统,由外部形式变换成内部形式,通过变换中心加工处理后再沿输出通路变换成外部形式离开软件系统。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127001259290.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
2. 事务流
信息沿输入通路到处理,由处理根据输入信息类型在若干动作序列中选一个执行。
处理称**事务中心**,完成任务:
1. 接收输入信息(又称事务);
2. 分析每个事务确定类型;
3. 根据事务类型选取一活动通路。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127001314747.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
### 7.3 面向数据设计过程
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127001346535.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
### 7.4 变换分析
将具有变换流特点的数据流图映射成软件结构。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127001412476.png)
1. 复查基本系统模型
确保系统输入和输出数据符合实际
2. 复查并精化数据流图
正确、处理项完成相对独立功能。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127001426764.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
3. 确定数据流图具有变换特性还是事务特性
没有明确事务中心,为变换型。
4. 找出变换中心
确定数据流边界。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127001442127.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
5. 完成一级分解
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127001512517.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127001528190.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
6. 完成第二级分解
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127001609779.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
数字仪表板的第二级分解——输入结构
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127001654335.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
数字仪表板的第二级分解——变换结构
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127001723858.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
数字仪表板的第二级分解——输出结构
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127001755657.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
7. 对初步软件结构精华
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127001817390.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
### 7.5 事务分析
信息流有明显事务特点(事务中心),采用事务分析方法。
软件结构:一接受分支和一发送分支
事务分析映射方法:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127001858748.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
事务分析实例:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127001923584.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210127001942367.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70)