软件系统设计步骤与原理

简介: 软件系统设计步骤与原理

在系统分析阶段,我们已经搞清楚了系统做什么的问题,其中最主要的是需求分析(确定用户需求、功能需求、系统性能、系统安全等方面的需求)、数据流图(可以确定数据需求与转换过程);那么在系统设计阶段,就是着手实现需求的过程,即解决怎么做的问题。

 

1 软件系统设计内容和步骤

软件系统设计的主要内容包括新系统总体结构设计、代码设计、输出设计、输入设计、处理过程设计、数据存储设计、用户界面设计和安全控制设计等。系统设计的基本任务大体上可以分为概要设计和详细设计两个步骤。

 

1.1 概设计的基本任务

设计软件系统总体结构

 

其基本任务是采用某种设计方法,将一个复杂的系统按功能划分成模块;确定每个模块的

功能:确定模块之间的调用关系;确定模块之间的接口,即模块之间传递的信息;评价模块结

构的质量。软件系统总体结构的设计是概要设计关键的一步,直接影响到下一个阶段详细设计与编码

的工作。软件系统的质量及一些整体特性都在软件系统总体结构的设计中决定。

 

数据结构及数据库设计

 

1)数据结构的设计。逐步细化的方法也适用于数据结构的设计。在需求分析阶段,已经通过数据字典对数据的组成、操作约束和数据之间的关系等方面进行了描述,确定了数据的结构特性,在概要设计阶段要加以细化,详细设计阶段则规定具体的实现细节。在概要设计阶段宜使用抽象的数据类型。

 

2)数据库的设计。数据库的设计是指数据存储文件的设计,主要进行以下几方面设计:

①概念设计。在数据分析的基础上,采用自底向上的方法从用户角度进行视图设计,一般用ER模型来表述数据模型。ER模型既是设计数据库的基础,也是设计数据结构的基础。

②逻辑设计。ER模型是独立于数据库管理系统(DBMS)的,要结合具体的DBMS特征来建立数据库的逻辑结构。

③物理设计。对于不同的DBMS,物理环境不同,提供的存储结构与存取方法各不相同。物理设计就是设计数据模式的一些物理细节,如数据项存储要求、存取方法和索引的建立等。

 

3)编写概要设计文档

文档主要有概要设计说明书、数据库设计说明书、用户手册以及修订测试计划。

 

4)评审

对设计部分是否完整地实现了需求中规定的功能、性能等要求,设计方法的可行性,关键

的处理及内外部接口定义的正确性、有效性、各部分之间的一致性等都一一进行评审,

 

1.2 详细设计的基本任务

详细设计阶段的根本目标是确定应该怎样具体地实现所要求的系统,也就是说,经过这个

阶段的设计工作,应该得出对目标系统的精确描述。详细设计阶段的任务不是具体地编写程序,而是要设计出程序的“蓝图”,以后根据这个蓝图写出实际的程序代码。详细设计阶段的主要任务有:

 

对每个模块进行详细的算法设计。用某种图形、表格和语言等工具将每个模块处理过程的详细算法描述出来。

对模块内的数据结构进行设计。

对数据库进行物理设计,即确定数据库的物理结构。

其他设计。根据软件系统的类型,还可能要进行以下设计:

①代码设计

代码是用来表征客观事物的一组有序的符号,以便于计算机和人工识别与处理。为了提

高数据的输入、分类、存储和检索等操作,节约内存空间,对数据库中某些数据项的值要进

行代码设计。代码设计的原则是:唯一性、合理性、可扩充性、简单性、适用性、规范性和

系统性。

②输入输出设计

③用户界面设计

 

编写详细设计说明书。

评审

对处理过程的算法和数据库的物理结构都要评审。

系统设计的结果是一系列的系统设计文件,这些文件是物理实现一个信息系统(包括硬件

设备和编制软件程序)的重要基础。

 

2 软件系统设计的基本原理

2.1 抽象

抽象是一种设计技术,重点说明一个实体的本质方面,而忽略或者掩盖不很重要或非本质的方面。抽象是一种重要的工具,用来将复杂的现象简化到可以分析、实验或者可以理解的程度。软件工程中从软件定义到软件开发要经历多个阶段,在这个过程中每前进一步都可看作是对软件解法的抽象层次的一次细化。抽象的最低层就是实现该软件的源程序代码。在进行模块化设计时也可以有多个抽象层次,①最高抽象层次的模块用概括的方式叙述问题的解法,②较低抽象层次的模块是对较高抽象层次模块对问题解法描述的细化。

 

2.2 模块化

模块在程序中是数据说明、可执行语句等程序对象的集合,或者是单独命名和编址的元素,如高级语言中的过程、函数和子程序等。在软件的体系结构中,模块是可组合、分解和更换的单元。模块化是指将一个待开发的软件分解成若干个小的简单部分一模块,每个模块可独立地开发、测试,最后组装成完整的程序。这是一种复杂问题“分而治之”的原则。模块化的目的是使程序的结构清晰,容易阅读、理解、测试和修改。

 

2.3 信息隐蔽

信息隐蔽是开发整体程序结构时使用的法则,即将每个程序的成分隐蔽或封装在一个单一的设计模块中,定义每一个模块时尽可能少地显露其内部的处理。在设计时首先列出一些可能发生变化的因素,在划分模块时将一个可能发生变化的因素隐蔽在某个模块的内部,使其他模块与这个因素无关。在这个因素发生变化时,只需修改含有这个因素的模块,而与其他模块无关。信息隐蔽原则对提高软件的可修改性、可测试性和可移植性都有重要的作用。

 

2.4 模块独立

模块独立是指每个模块完成一个相对独立的特定子功能,并且与其他模块之间的联系简

单。衡量模块独立程度的标准有两个:耦合性和内聚性。

 

耦合

 

耦合性是指模块之间联系的紧密程度。耦合性越高,则模块的独立性越差。模块间耦合的

高低取决于模块间接口的复杂性、调用的方式及传递的信息。模块的耦合有以下几种类型:

(1)无直接耦合:指两个模块间没有直接的关系,它们分别从属于不同模块的控制与调用,它们之间不传递任何信息。因此,模块间耦合性最弱,模块独立性最高。

(2)数据耦合:指两个模块之间有调用关系,传递的是简单的数据值,相当于高级语言中的值传递。这种耦合程度较低,模块的独立性较高。

(3)标记耦合:指两个模块之间传递的是数据结构,如高级语言中的数据组名、记录名、文件名等这些名字即为标记,其实传递的是这个数据结构的地址。

(4)控制耦合:指一个模块调用另一个模块时,传递的是控制变量,被调模块通过该控制

变量的值有选择地执行块内的某一功能。

(5)公共耦合:指通过一个公共数据环境相互作用的那些模块之间的耦合。

(6)内容耦合:这是程度最高的耦合。当一个模块直接使用另一个模块的内部数据,或通

过非正常入口而转入另一个模块内部,这种模块之间的耦合为内容耦合,这种情况往往出现在

汇编程序设计中。

 

内聚

 

内聚是指模块内部各元素之间联系的紧密程度,例如一个完成多个功能的模块的内聚度就

比完成单一功能的模块的内聚度低。内聚度越低,模块的独立性越差。内聚性有以下几种类型:

(1)偶然内聚:指一个模块内的各个处理元素之间没有任何联系。

(2)逻辑内聚:指模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。

(3)时间内聚:把需要同时执行的动作组合在一起形成的模块为时间内聚模块。

(4)通信内聚:指模块内所有处理元素都在同一个数据结构上操作,或者指各处理使用相同的输入数据或者产生相同的输出数据。

(5)顺序内聚:指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一

功能元素的输出就是下一功能元素的输入。

(6)功能内聚:这是最强的内聚,指模块内所有元素共同完成一个功能,缺一不可。

耦合性和内聚性是模块独立性的两个定性标准,将软件系统划分模块时,尽量做到高内聚、

低耦合,提高模块的独立性

 

结语

软件设计过程不一定非要按图索骥,像我通常习惯于先梳理需求文档,然后绘制ER图,ER图绘制完成就能大概估算出开发周期,然后再绘制顶层与0层数据流图,用以理清模块间的关系与数据交互过程,然后就开始着手写代码了

相关文章
|
1月前
|
芯片 Python
前道设计
前道设计
22 3
|
8月前
|
数据可视化 数据处理
结构化分析与设计
一、结构化分析与设计 结构化分析与设计(Structured Analysis and Design,简称SAD)是一种软件开发方法论,旨在通过分析和设计来构建高质量的软件系统。 结构化分析与设计的主要特点包括以下几点: 1. 结构化分析:结构化分析是通过对系统需求进行分析,将系统分解为若干个功能模块,并定义它们之间的关系和交互。在结构化分析中,常用的工具和技术包括数据流图(Data Flow Diagram,简称DFD)、数据字典(Data Dictionary)和实体关系图(Entity-Relationship Diagram,简称ERD)等。 2. 结构化设计:结构化设计是在结构化分析
537 2
|
1月前
|
敏捷开发 编解码 测试技术
【测试】1. 概念 + 基础篇
【测试】1. 概念 + 基础篇
46 1
|
1月前
|
消息中间件 并行计算 Go
skynet设计原理
skynet设计原理
调查表设计
调查表设计
59 0
|
设计模式 架构师 Java
聊聊简单设计
聊聊简单设计
102 0
|
Java Scala
深入理解简单设计
深入理解简单设计
深入理解简单设计
|
安全
从想法到设计的过程
在接下来的几节里,我会向你展示游戏制作的整个流程,从开始的一个粗略的想法,到游戏设计,再到最终的游戏制作。
115 0
从想法到设计的过程