软件系统设计步骤与原理

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

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

 

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层数据流图,用以理清模块间的关系与数据交互过程,然后就开始着手写代码了

相关文章
|
弹性计算 Linux Windows
【CentOS】Linux 整系统的备份与还原
Linux 整系统的备份与还原
4423 1
【CentOS】Linux  整系统的备份与还原
|
9月前
|
人工智能 搜索推荐 数据可视化
2025年国内知名智能营销产品(企业级智能营销系统)深度解析:功能亮点与市场排名
本文深度解析瓴羊Quick Audience、神策、致趣百川等主流用户智能运营产品,在功能、市场表现与行业应用三大维度对比,助力企业根据业务需求精准选型,提升运营效率与竞争力。2025年国内知名智能营销产品(企业级智能营销系统)深度解析:功能亮点与市场排名。
|
并行计算 安全 开发者
RISC-V生态全景解析(五):Vector向量计算技术与SIMD技术的对比
芯片开放社区(OCC)面向开发者推出RISC-V系列内容,通过多角度、全方位解读RISC-V,系统性梳理总结相关理论知识,构建RISC-V知识图谱,促进开发者对RISC-V生态全貌的了解。
4162 0
RISC-V生态全景解析(五):Vector向量计算技术与SIMD技术的对比
|
机器学习/深度学习 JavaScript PyTorch
9个主流GAN损失函数的数学原理和Pytorch代码实现:从经典模型到现代变体
生成对抗网络(GAN)的训练效果高度依赖于损失函数的选择。本文介绍了经典GAN损失函数理论,并用PyTorch实现多种变体,包括原始GAN、LS-GAN、WGAN及WGAN-GP等。通过分析其原理与优劣,如LS-GAN提升训练稳定性、WGAN-GP改善图像质量,展示了不同场景下损失函数的设计思路。代码实现覆盖生成器与判别器的核心逻辑,为实际应用提供了重要参考。未来可探索组合优化与自适应设计以提升性能。
1281 7
9个主流GAN损失函数的数学原理和Pytorch代码实现:从经典模型到现代变体
|
数据安全/隐私保护 Android开发 Windows
2025 年三款免费高清无水印视频录制工具推荐合集
本文介绍了三款免费高清录屏软件:EVCapture、Bandicam 和 屏幕录像机(oCam)。EVCapture 功能强大,支持视频录制与直播,提供分屏录制、实时按键显示等;Bandicam 适合游戏录屏,可自定义录制区域并添加Logo,还支持音频和摄像头设置;oCam 小巧灵活,支持多种视频格式(如GIF、MP4等)及音频、截图功能。三者均无水印,画质清晰,满足不同录屏需求。资源地址已提供,可供下载体验。
11924 0
|
算法 Java Sentinel
限流算法(计数器、滑动时间窗口、漏斗、令牌)原理以及代码实现
> 本文会对这4个限流算法进行详细说明,并输出实现限流算法的代码示例。 > 代码是按照自己的理解写的,很简单的实现了功能,还请大佬们多多交流找bug。
3175 0
|
SQL JSON 前端开发
若依RuoYi脚手架二次开发教程(二次开发必学技能)
本次我们将通过一个菜品管理模块开发的案例,来演示拿到若依框架后,如何在若依管理系统上进行二次开发,升级改造为自己的管理系统。适合以若依作为项目脚手架的公司开发人员、毕业设计的学生及开源项目学习者。
10708 1
若依RuoYi脚手架二次开发教程(二次开发必学技能)
|
开发者
如何画业务架构图
如何快速上手画业务架构图
14677 2
|
PyTorch 算法框架/工具 Python
yolov5的完整部署(适合新人和懒人,一键安装)
这篇文章为新人和希望简化部署过程的用户介绍了如何一键安装和配置YOLOv5环境,包括安装Anaconda、设置镜像源、安装PyCharm、创建虚拟环境、下载YOLOv5项目、安装依赖以及在PyCharm中配置和运行项目。
9962 0
yolov5的完整部署(适合新人和懒人,一键安装)
|
数据安全/隐私保护
基于MATLAB的PEF湍流风场生成器模拟与仿真
本课题基于MATLAB 2022a开发PEF(Primitive Equations Formulation)湍流风场生成器,模拟大气流动和气象现象。PEF模型考虑地球旋转效应、层结稳定性及湍流混合等复杂物理过程,适用于大尺度天气系统研究。核心程序采用高斯分布尾流模型,计算尾流中心到转子中心的距离,并绘制风速分布图。仿真结果展示了不同条件下的风场特征,无水印输出。该模型在天气预报和气候研究中具有重要应用价值。