一、抽象

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

二、模块化

模块在程序总是数据说明、可执行语句等程序对象的集合,或是单独命名和编址的元素。模块化是指将一个待开发的软件分解成若干个小的简单部分--模块,每个模块可独立开发、测试,最后组装成完整的程序。只是一种分而治之的原则。模块化的目的是使程序的结构清晰,容易阅读、理解、测试和修改。

三、封装

封装是开发程序结构时使用的法则,每个程序的成分封装在一个单一的模块中,在定义每个模块时尽可能少的显露内部的处理。

封装对提高软件的可修改性、可测试性和可移植性有重要的作用。

四、模块独立

模块独立是指每个模块完成一个相对独立的特定子系统,并且与其他模块之间的联系简单。模块独立有两个标准:耦合性和内聚性。

1、耦合是模块之间的相对独立性(相互之间的紧密程度)的度量。耦合取决于各个模块之间接口的复杂程度、调用模块的方式以及通过接口信息类型等。

耦合按从弱到强的顺序分为以下几种:

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

数据耦合:两个模块之间有调用关系,传递的最简单的数据值,在程序中相当于值传递。

标记耦合:两个模块之间传递的是数据结构。

控制耦合:一个模块调用另一个模块时,传递的是控制变量,被调用模块通过该控制变量的值有选择的执行模块内的某一功能。因此,被调用模块应具有多个功能,哪个功能起作用受调用模块控制。

外部耦合:模块间通过软件之外的环境联结。

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

内容耦合:当一个模块直接使用另一个模块的内部数据,或通过非正常入口转入另一个模块内部。

2、内聚是一个模块内部各个元素彼此结合的紧密程度的度量。

内聚从低到高分为以下几种:

偶然内聚(巧合内聚):一个模块内的各个元素直接没有任何联系。

逻辑内聚:模块内执行若干个逻辑相似的功能,通过参数确定该模块完成哪一个功能。

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

过程内聚:一个模块完成多个任务,必须按照指定的过程执行。

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

顺序内聚:一个模块中的各个处理元素都密切相关同一个功能且顺序执行,前一个功能元素的输出是下一个元素功能的输入。

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

将软件划分系统模块是,应尽量做到高内聚、低耦合,提高模块独立性。

五、系统深度

表示软件结构中控制的层 数,它往往能粗略地标志一个系统的大小和复杂程度。如果层数过多则应该考虑是否有许多管理模块过分简单, 能否适当合并。

六、系统宽度

是软件结构内同一个层次上的模块总数的最大值。宽度越大系统越复杂。对宽度影响最大的因素是模块的扇出 。

七、模块扇出

模块的扇出是指一个模块直接控制(调用 )的下层模块数目 。扇出过大意味着模块过分复杂,需要控制和协调过多的下级模块;扇出过小也不好。设计得好的系统平均扇出是3或4。

八、模块扇入

是指有多少个上级模块调用它,扇入越大则共享该模块的上级模块数目越多 。

在模块分解时需要注意:
保持模块的大小适中
尽可能减少调用的深度
直接调用该模块的次数应该尽最多,但调用其他模块的次数则不宜过多(扇入大,扇出小)。好的软件设计结构顶层高扇出,中间扇出较少,底层高扇入。
保证模块是单入口、 单出口的,模块的作用域应该在模块之内
功能应该是可预测的

软件系统设计基本原则相关推荐

  1. [转]软件开发基本原则(二)典型错误

    自己正打算做一些软件开发方面的总结,要想成为优秀的开发人员,懒是必要的条件,因此先搜一下,看有没有现成的好的总结,这不,一下就就找到了一篇,非常好的文章,自己暂时可以不用做总结了,直接拿来收藏,学习, ...

  2. 软件系统设计步骤与原理

    软件系统设计步骤与原理 在系统分析阶段,我们已经搞清楚了系统做什么的问题,其中最主要的是需求分析(确定用户需求.功能需求.系统性能.系统安全等方面的需求).数据流图(可以确定数据需求与转换过程):那么 ...

  3. 《对不队》团队项目软件系统设计改进

     一.团队项目系统设计改进: 1.分析项目系统设计说明书初稿的不足,特别是软件系统结构模型建模不完善内容. 在软件系统结构的建模中,我们团队主要针对数据库的模型E-R图部分进行了完善以及在类图的逻辑实 ...

  4. 【软件工程】七、软件系统设计

    一.软件体系结构概念 软件体系结构包括构成系统的设计元素的描述.设计元素之间的交互.设计元素的组合模式以及在这些模式中的约束. 软件体系结构=构件+连接件+约束 构件 构件是具有某种功能的可复用的软件 ...

  5. 软件工程-软件系统设计

    文章目录 软件系统设计 软件体系结构概念 软件设计原则 软件体系结构风格 软件设计过程 Web系统架构设计 数据库选择策略 测试题 软件系统设计 软件体系结构概念 软件体系结构包括构成系统的设计元素的 ...

  6. 高并发软件系统设计原理与实践-高岩峰-专题视频课程

    高并发软件系统设计原理与实践-604人已学习 课程介绍         本课程讲解软件性能设计的目标.方法和常用的解决方案以及性能优化的方法.通过学习本门课程,大家能够掌握理解性能指标,能够知道存在哪 ...

  7. 高并发软件系统设计原理与实践——前言-高岩峰-专题视频课程

    高并发软件系统设计原理与实践--前言-1465人已学习 课程介绍         本课程讲解如何设计高性能的软件,如何定位解决性能问题.本课程主要包含如下4部分内容: 1.性能指标和性能设计的常识. ...

  8. 控制系统设计_PLC自动化控制系统设计基本原则

    PLC自动化控制系统(automatic control systems)是在无人直接参与下可使生产过程或其他过程按期望规律或预定程序进行的控制系统.自动控制系统是实现自动化的主要手段,简称自控系统. ...

  9. 软件开发基本原则(一)—— 策略和因素 (转)

    前 言 前段时间一直在写技术方面的文章,现在想转转口味,从软件开发过程和项目管理的角度来谈论软件开发.本座也知道,从这两个角度来谈论软件开发对 谈论者来说是非常冒险的一件事情,它不像技术,对就对错就错 ...

  10. DDD不够好用,你需要学习如何进行弹性软件系统设计

    关键要点 当今的分布式系统环境必须采用弹性软件设计. 关键挑战不在于编码,而在于"外围". 做好分布式其实很难,大多数人都严重低估了它的难度. 恰当的功能设计是构建健壮的分布式系统 ...

最新文章

  1. [转载] 陈皓:一些重要的算法
  2. c语言图片效果,c语言能显示图片吗
  3. RabbitMQ安装|使用|概念|Golang开发
  4. android struts2 图片上传,xhEditor struts2实现图片上传
  5. 汇编分析golang循环
  6. 笨办法学 Python · 续 练习 6:`find`
  7. org.eclipse.birt.report.exception.ViewerException: 没有可用的报表设计对象.
  8. 如何使用数据质量服务和SQL Server集成服务清除数据
  9. mysql 跳过授权表_跳过授权表登录后使用replace into创建root权限用户
  10. ruby入门_loop
  11. 按F12才能进入开机界面(戴尔游匣7559)
  12. 新时代动画电影的互联网宣传
  13. HDMI转mipiCSI+Audio,东芝,TC358743,视频转换芯片
  14. Linux 脚本执行遇到错误时中止,shell 文件内容替换 sed用法
  15. JAVA 性能调优相关命令
  16. SYN8086语音合成芯片(TTS语音芯片)各项指标测试已完成,正式批量化生产
  17. 小程序基础开发(五):微信支付全套流程
  18. 【解决方法】chrome和edge浏览器出现“你的连接不是专用连接“的问题
  19. 5款好用的电脑软件!
  20. 我做了开颅实验:从胼胝体切开术和额叶前部脑白质切断术聊一聊大分子编码说和老王谬论

热门文章

  1. java applet开发_Java Applet程序开发步骤
  2. JAVA调起clearcase_Rational ClearCase和Rational ClearQuest对Java API的支持
  3. 高中计算机高考时vb试题,高中信息技术vb试题及答案
  4. 智能物流的常见应用场景及系统
  5. QT项目六:简易客户信息管理系统
  6. Adobe PDF 生成PDF文件出错的解决办法
  7. 【Pytorch-手写字体识别】手写字体识别项目
  8. Microsoft store下载速度缓慢
  9. 阿里巴巴 Java开发手册 最新官网下载
  10. 一元函数拐点与驻点的区别