【前言】
软件设计的目标和任务
软件设计基础
模块独立性
结构化设计方法
数据设计和文件设计、过程设计
【内容】
1.软件设计的目标和任务
根据用信息域表示的软件需求,以及功能和性能需求,进行
数据设计:数据结构定义
系统结构设计:软件的系统各主要成分之间的关系
过程设计:结构成分转换为软件过程性描述。
2.软件设计任务分类
(1)从工程管理的角度来看,软件设计分两步完成:
概要设计:总体设计,将软件的需求转换为数据结构和软件的系统结构
详细设计:过程设计,过程细化,得到软件的详细的数据结构和算法。
(2)从管理观点的角度来看,软件设计分两步完成:概要设计、详细设计
(3)从技术观点的角度来看,软件设计分三步完成:数据设计、系统结构设计、过程设计
3.软件设计过程
制定规范
软件系统结构的总体设计
处理方式设计
数据结构设计
可靠性设计
编写概要设计阶段的文档
概要设计评审
4.软件设计基础
(1)自顶向下,逐步细化
将软件的体系结构按自顶向下方式,对各个层次的过程细节和数据细节逐层细化。
(2)软件结构
软件结构包括两部分:程序的模块结构和数据的结构
(3)程序结构
(4)结构图(S-C图)
结构图反映程序中模块之间的层次调用关系和联系。
a.模块
b.模块的调用关系和接口
c.模块之间的信息传递
d.表示模块A有条件地调用另一个模块B。
菱形:A有条件调用B,弧形:A循环调用C和D。
(5)模块化
能够把一个大而复杂的软件系统划分成易于理解的比较单纯的模块结构。
(6)抽象化
a.模块抽象
软件系统进行模块设计时,可有不同的抽象层次。
抽象层次1:用问题所处环境的术语来描述这个软件;
抽象层次2:任务需求的描述;
抽象层次3:程序过程的表示。以2-D(二维)绘图生成任务为例。
b.数据抽象
在不同层次上描述数据对象的细节,定义与该数据对象相关的操作。
(7)信息隐蔽
是指划分模块或定义层次时,若模块内的数据发生变化,要尽量不影响到其他模块或是少影响。
5.模块独立性
划分模块的独立性
是指软件系统中每个模块只涉及软件要求的具体的子功能。
模块一般具有如下三个基本属性:
功能:描述该模块实现什么功能
逻辑:描述模块内部怎么做
状态:该模块使用时的环境和条件
模块独立性一般采用两个准则度量模块独立性。
即模块间耦合和模块内聚.
(1)模块间耦合
a.非直接耦合(Nondirect Coupling)
如果两个模块之间没有直接关系,这就是非直接耦合。
b.数据耦合(Data Coupling)
如果一个模块访问另一个模块时,彼此之间是通过简单数据参数(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息的,则称这种耦合为数据耦合。
c.标记耦合(Stamp Coupling)
如果一组模块通过参数表传递记录信息,就是标记耦合。
d.控制耦合(Control Coupling)
如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。
e.外部耦合(External Coupling)
一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。
f.公共耦合(Common Coupling)
若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。
其中公共耦合有两种情况:松散公共耦合和紧密公共耦合。
g.内容耦合(Content Coupling)
(2)模块内聚
a.功能内聚(Functional Cohesion)
一个模块中各个部分都是完成某一具体功能必不可少的组成部分,是不可分割的。
b.信息内聚(Informational Cohesion)
这种模块完成多个功能,各个功能都在同一数据结构上操作,每一项功能有一个唯一的入口点。
c.通信内聚(Communication Cohesion)
如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据,则称之为通信内聚模块。
d.过程内聚(Procedural Cohesion)
使用流程图作为工具设计程序时,把流程图的某一部分划出组成模块,就得到过程内聚模块。
e.时间内聚(Classical Cohesion)
时间内聚模块的各个功能的执行与时间有关,通常要求所有功能必须在同一时间段内执行。
f.逻辑内聚(Logical Cohesion)
这种模块把几种相关的功能组合在一起。
g.巧合内聚(Coincidental Cohesion)
巧合内聚模块内各部分之间没有联系,或者即使有联系,这种联系也很松散。
6.结构化设计方法
首先研究、分析和审查数据流图。
然后根据数据流图决定问题的类型。数据处理问题典型的类型有两种:变换型和事务型。
针对两种不同的类型进行分析处理。
变换型系统结构图:
变换型数据处理问题的工作过程大致分为三步,即取得数据,变换数据和给出数据。
事务型系统结构图:
它接受一项事务,根据事务处理的特点和性质,选择分派一个适当的处理单元,然后给出结果。
7.分析
即变换分析和事务分析
(1)变换分析方法由以下四步组成:
重画数据流图;
区分有效(逻辑)输入、有效(逻辑)输出和中心变换部分;
进行一级分解,设计上层,模块;
进行二级分解,设计输入、输出和中心变换部分的中、下层模块。
注意:
(1)在选择模块设计的次序时,必须对一个模块的全部直接下属模块都设计完成。
(2)在设计下层模块时,应考虑模块的耦合和内聚问题。
(3)使用“黑箱”技:在设计当前模块时,先把这个模块的所有下层模块定义成“黑箱”。
(4)在模块划分时,一个模块的直接下属模块一般在5个左右。
(5)如果出现了以下情况,就停止模块的功能分解:
a.当模块不能再细分为明显的子任务时;
b.当分解成用户提供的模块或程序库的子程序时;
c.当模块的界面是输入/输出设备传送的信息时;
d.当模块不宜再分解的过小时。
(2)事务分析:
与变换分析一样,事务分析也是从分析数据流图开始,自顶向下,逐步分解,建立系统到结构图。
8.事务分析过程
(1)识别事务源;
(2)规定适当的事务型结构;
(3)识别各种事务和它们定义的操作;
(4)注意利用公用模块;
(5)对每一事务,或对联系密切的一组事务,建立一个事务处理模块;
(6)对事务处理模块规定它们全部的下层操作模块;
(7)对操作模块规定它们的全部细节模块。
9.软件模块结构的改进
(1)模块功能的完善化
一个完整的模块应当有以下几部分:
a.执行规定的功能的部分;
b.出错处理的部分;
c.给它的调用者返回一个结束状态标志。
(2)消除重复功能,改善软件结构:
a.完全相似
b.局部相似
(3)模块的作用范围应在控制范围之内
a.模块的控制范围包括它本身及其所有鄂从属模块;
b.模块的作用范围是指模块内一个判定表的作用范围,凡是受这个判定影响的所有模块都属于这个判定的作用范围。
(4)尽可能减少高扇出结构,随着深度增大扇入。
(5)避免或减少使用病态联接:
应限制使用如下三种病态联接:
a.直接病态联接;
b.公共数据域病态联接;
c.通信模块联接。
(6)模块的大小要适中
通常规定其语句行数在50-100左右,保持在一页纸之内,最多不超过500行。
(6)设计功能可预测的模块,但要避免过分受限制的模块。
(7)软件包应满足设计约束和可移植性。
10.数据设计及文件设计
(1)数据设计的原则
1)用于软件的系统化方法也适用于数据
2)确定所有的数据结构和在每种数据结构上施加的操作
3)应当建立一个数据词典并用它来定义数据和软件的设计
4)低层数据设计的决策应推迟到设计过程的后期进行
5)数据结构的表示只限于那些必须直接使用该数据结构内数据的模块才能知道。
6)应当建立一个存放有效数据结构及相关操作的库。
7)软件设计和程序设计语言应当支持抽象数据类型的定义和实现。
以上原则适用于软件工程的定义阶段和开发阶段。
2.文件设计
文件设计的过程,主要分两个阶段。第一阶段是文件的逻辑设计,主要在概要设计阶段实施。第二阶段是物理设计,用于总体设计实施。
文件处理注意:
(1)整理必须的数据元素;
(2)分析数据间的关系;
(3)确定文件的逻辑设计;
(4)理解文件的特性;
(5)确定文件的组织方式:顺序文件、直接存取文件、索引顺序文件、分区文件、虚拟存储文件、倒排文件;
(6)确定文件的存储介质;
(7)确定文件的记录格式;
(8)估算存取时间和存储容量。
11.过程设计(详细设计)
从软件开发的工程化观点来看,在使用程序设计语言编制程序以前,需要对所采用算法的逻辑关系进行分析,设计出全部必要的过程细节,并给予清晰的表达。
在过程设计阶段,要决定各个模块的实现算法,并精确地表达这些算法,表达过程规格说明的工具叫做详细设计工具,它可以分为以下三类:
图形工具、表格工具、语言工具
12.程序流程图
也称为程序框图,程序流程图使用五种基本控制结构是:
N-S图
也叫做盒图。五种基本控制结构由五种图形构件表示:
问题分析图(PAD)
判定表
用于表示程序的静态逻辑。在判定表中的条件部分给出所有的两分支判断的列表,动作部分给出相应的处理。
要求将程序流程图中的多分支判断都改成两分支判断:
PDL
PDL是一种用于描述功能模块的算法设计和加工细节的语言。称为设计程序用语言。它是一种伪码。
PDL具有严格的关键字外语法,用于定义控制结构和数据结构,同时它的表示实际操作和条件的内语法又是灵活*的,可使用自然语言的词汇。
13.概要设计说明书
1.引言
1.1编写目的
1.2项目背景
1.3定义
1.4参考资料
2.任务描述
2.1目标
2.2运行环境
2.3需求概述
2.4条件与限制
3.总体设计
3.1处理流程
3.2总体结构和模块外部设计
3.3功能分配
4.接口设计
4.1外部接口
4.2内部接口
5.数据结构设计
5.1逻辑结构设计
5.2物理结构设计
5.3数据结构与程序的关系
6.运行设计
6.1运行模块的组合
6.2运行控制
6.3运行时间
7.出错处理设计
7.1出错输出信息
7.2出错处理对策
8.安全保密设计
9.维护设计
14.详细设计说明书
1.引言
1.1编写目的
1.2项目背景
1.3定义
1.4参考资料
2.总体设计
2.1需求概述
2.2软件结构
3.程序描述
3.1功能
3.2性能
3.3输入项目
3.4输出项目
3.5算法
3.6程序逻辑
3.7接口
3.8存储分配
3.9限制条件
3.10测试要点