第8章 软件设计基础
软件设计师基础知识

软件设计师基础知识软件设计师是指负责软件系统的设计与开发的专业人员。
他们需要具备扎实的计算机基础知识、软件工程理论知识、编程技术和系统设计能力。
以下是软件设计师基础知识的相关参考内容。
1. 计算机基础知识- 计算机的基本原理:掌握计算机的工作原理、数据存储原理和运算原理等基本概念。
- 操作系统:了解不同操作系统的特点和使用方法,如Windows、Linux等。
- 网络原理:了解网络协议、网络拓扑结构、网络安全等知识,能够进行网络编程和网络配置。
- 数据结构与算法:掌握常见的数据结构和算法,能够进行数据存储与处理。
2. 软件工程理论知识- 软件工程基本概念:了解软件生命周期、需求分析、设计、编码、测试、维护等软件开发流程。
- 面向对象编程:掌握面向对象的思想和相关的编程语言,如Java、C++等。
- 软件测试与质量保证:了解软件测试的方法和工具,掌握软件质量保证的理念,能够进行软件测试和质量评估。
- 配置管理与版本控制:了解配置管理的概念和方法,熟悉版本控制工具的使用,如Git、SVN等。
3. 编程技术- 编程语言:掌握至少一种编程语言,如Java、C++、Python 等,具备良好的编码风格和编程习惯。
- 数据库:熟悉关系数据库的设计和操作,掌握SQL语言以及常用的数据库管理系统,如MySQL、Oracle等。
- 前端开发:了解HTML、CSS、JavaScript等前端开发技术,掌握常见的前端框架和工具。
- 后端开发:了解常见的后端开发框架和技术,如Spring、Django等,能够进行Web应用的开发和部署。
4. 系统设计能力- 软件架构与设计模式:掌握常见的软件架构和设计模式,如MVC、单例模式、观察者模式等,能够进行系统架构设计。
- 需求分析与设计:具备需求分析和系统设计的能力,能够将需求转化为可实现的系统设计方案。
- 性能优化与调试:了解常见的性能优化方法和调试工具,能够排查和解决系统性能问题。
软件需求-第8课-软件需求分析概述ppt课件

建模的目的(为什么要建模?)
软件行业的复杂程度与例子中的行业比较,其复杂程度可以说是有过 之而无不及。
为什么要建模?通过建模可以更好地理解正在开发的系统。
原先,由于计算机应用还不算普及,因此软件系统的规模和复杂度都 相对较小。使用“数据结构+算法=程序”的模式就可以解决大部分问题。
软件的生存周期
计划时期 开发时期 运行时期
问题定义
可行性研究
产品:需求分析报告
需求分析
软件设计
编
码
测
试
维
护
5
第8章 软件需求分析概述 认识到了贫困户贫困的根本原因,才能开始对症下药,然后药到病除。近年来国家对扶贫工作高度重视,已经展开了“精准扶贫”项目
1 需求分析的根本任务 需求分析根本任务:建立分析模型,创建解决方案。
1 需求分析的根本任务 4)基于数据的分解策略
目标系统
主题域1
。。。
主题域n
主题类1 主题类n
逻辑数据1 逻辑数据m
物理数据1 物理数据w
16
第8章 软件需求分析概述 认识到了贫困户贫困的根本原因,才能开始对症下药,然后药到病除。近年来国家对扶贫工作高度重视,已经展开了“精准扶贫”项目
1 需求分析的根本任务 4)基于数据的分解策略
1 需求分析的根本任务
从实践角度考虑,需求分析不是分析如何实现用户的需求。 实际上,需求分析是以业务分析为导向,将用户零散的需求串联 起来,形成一个体系完成、组织合理、内容清晰的框架,为今后 的设计开发工作打下良好的基础。
What to do? Yes
How to do ? No
8
第8章 软件需求分析概述 认识到了贫困户贫困的根本原因,才能开始对症下药,然后药到病除。近年来国家对扶贫工作高度重视,已经展开了“精准扶贫”项目
软件工程基础实践手册

软件工程基础实践手册第一章软件工程概述 (2)1.1 软件工程的定义与目标 (2)1.2 软件工程的发展历程 (2)1.3 软件工程的基本原则 (3)第二章需求分析 (4)2.1 需求收集与识别 (4)2.2 需求分析与建模 (4)2.3 需求确认与验证 (4)第三章软件设计 (4)3.1 软件设计的基本原则 (4)3.2 软件架构设计 (5)3.3 软件详细设计 (5)第四章编码实践 (6)4.1 编程语言与工具选择 (6)4.2 编码规范与技巧 (6)4.3 代码审查与重构 (7)第五章测试与调试 (7)5.1 软件测试基本概念 (8)5.2 测试策略与过程 (8)5.3 调试技巧与方法 (8)第六章软件项目管理 (9)6.1 项目管理基本理论 (9)6.1.1 项目定义 (9)6.1.2 项目生命周期 (9)6.1.3 项目组织结构 (9)6.1.4 项目管理知识体系 (9)6.2 项目计划与执行 (10)6.2.1 项目计划 (10)6.2.2 项目执行 (10)6.3 项目监控与评估 (10)6.3.1 项目监控 (10)6.3.2 项目评估 (11)第七章软件维护与演化 (11)7.1 软件维护的类型与策略 (11)7.2 软件演化与升级 (11)7.3 软件退役与替换 (12)第八章软件质量保证 (13)8.1 软件质量标准与模型 (13)8.2 质量管理过程与方法 (13)8.3 质量评估与改进 (13)第九章软件工程伦理与法律 (14)9.1 软件工程伦理原则 (14)9.1.1 尊重用户权益 (14)9.1.2 保障软件质量 (14)9.1.3 促进公平竞争 (14)9.1.4 提升行业形象 (14)9.2 软件版权与知识产权 (14)9.2.1 软件版权 (14)9.2.2 知识产权 (15)9.3 法律法规与合规性 (15)9.3.1 法律法规 (15)9.3.2 合规性 (15)第十章软件工程实践案例分析 (15)10.1 项目案例分析 (15)10.2 团队协作与沟通 (16)10.3 实践经验总结与展望 (16)第一章软件工程概述1.1 软件工程的定义与目标软件工程作为一门跨学科领域,旨在通过系统化的方法、技术和工具,研究和解决软件开发过程中的各种问题。
08-软件设计基础

经典场景:
数据结构与算法审美:
36
低层设计的本质
•
屏蔽程序中复杂数据结构与算法的实现 细节!
算法的语义与 复杂度 书写控制语句 分支支的处理技巧 对数据的操纵
抽象层 接口口层 精化层 实现层
数据结构的含义与使用用
结构的类型定义 存储空间的使用用与更改
37
低层设计 : 代码设计
• • •
对一一个方方法/函数的内部代码进行行设计 又又被称为软件构造“software construction”,通 常由程序员独立立完成 依赖于语言言提供的机制(程序设计课程)
• •
软件设计与编程是什么关系? 需求分析与软件设计是什么关系?
•
怎么做设计?
4
体系结构设计
产品线 框架 构件
重构 信息隐藏 结构化设计 独立立于软件实现
大大规模软件设计
设计模式 为复用用而而设计
面面向对象设计
抽象数据类型
软件设计
自自顶向下 逐步求精 函数 程序设计 软件 过程 程序 与人人的关系 与过程的关系
• • •
20
Design = Engineering +Art
21
Rational or Pragmatic?
理性主义or经验主义?
22
理性主义代表
• • • •
理性主义更看重设计的工工程性,希望以科学化知识为基 础,利用用模型语言言、建模方方法、 工工具支支持,将软件设计过 程组织成系统、规律的模型建立立过程[McPhee1996]。 在考虑到人人的 因素时,理想主义认为人人是优秀的,虽然会 犯错,但是可以通过教育不断完善自自己己 [Brooks2010]。 设计方方法学的⺫目目标就是不断克服人人的弱点,持续完善软 件设计过程中的不足足, 最终达到完美[McPhee1996]。 形式化软件工工程的支支持者是典型的理想主义。
第八章软件设计基础——软件设计原理

第八章软件设计基础——软件设计原理软件设计是软件开发过程中的重要环节,是将需求转化为具体实现的关键步骤。
软件设计原理是软件设计的基础,它包括如下几个方面。
首先,软件设计原理要求软件设计应该具备高内聚低耦合的特性。
高内聚是指模块内部的功能紧密相关,一个模块只负责一个特定的功能;低耦合是指模块之间的相互依赖程度低,一个模块的改变不会影响其他模块的正常运行。
高内聚低耦合的设计可以提高软件的可维护性和重用性,降低系统的复杂度。
在软件设计中,应该尽可能将功能划分为模块,并使用合适的接口进行模块之间的通信。
其次,软件设计原理要求软件设计应该遵循开闭原则。
开闭原则是指软件实体(模块、类、方法等)应该对扩展开放,对修改关闭。
这意味着在软件设计时,应该考虑到未来需求的变化,尽量使用可扩展、可重用的设计方案。
如果软件设计违反了开闭原则,那么每次需求变化都会导致大规模的修改,增加了软件的维护成本和风险。
此外,软件设计原理还注重模块化设计。
模块化设计是将功能分解为相互独立的模块,并通过模块之间的接口进行通信。
模块化设计可以提高软件的可维护性、可测试性和可重用性。
在设计中,应该将复杂的问题分解为简单的子问题,每个子问题由一个或多个模块来实现,从而降低了开发的难度。
最后,软件设计原理强调设计规范和设计模式的运用。
设计规范是指对软件设计进行规范化的要求,通过统一的设计规范可以提高软件的可读性和可维护性。
设计模式是在软件设计过程中,针对常见问题提出的一套解决方案,可以提供可复用的设计思想和模式。
设计规范和设计模式的运用可以使软件设计更加规范和灵活。
在软件设计中,了解和运用这些基本原理是非常重要的。
它们可以帮助设计人员更加合理地进行软件设计,提高软件的质量和效果。
同时,软件设计原理也是软件设计基础的核心内容,掌握它们可以为进一步学习和应用设计方法打下坚实的基础。
因此,软件设计原理是软件设计基础的重要组成部分。
软件设计基础

3.1 软件设计旳基本概念 3.2 软件设计过程 3.3 软件设计旳质量 3.4 软件体系构造设计 3.5 高可信软件设计 3.6 软件设计规格阐明 3.7 软件设计评审
▪ 高质量旳软件设计,能够有效缩短软件开发 时间,降低开发成本,提升最终软件产品质 量。
软件设计旳质量要素
▪ 评价软件设计旳质量 构造良好 充分性 可行性 简朴性 实用性 灵活性 强健性 可移植性 可复用性 原则化
软件设计旳质量
▪ 软件设计对最终软件产品质量产生旳影响 涉及:
模块数。 可见性和联通性
模块旳可见性:该模块可直接或间接引用旳一组模块。 模块旳联通性:模块可直接引用旳一组模块。
软件构造有关概念
A
扇出
深度
B
C
D
E
F
G
H
I
J 宽度
扇入
3)界面设计
▪ 顾客界面设计旳目旳是,为顾客使用目旳软件 系统以实现其全部业务需求而提供友好旳人机 交互界面。
▪ 软件界面设计需要考虑下列原因 :
过程/算法 设计
数据模型设计
未通过
通过
设计评审
设计规格说明
1)软件设计计划
▪ 在设计过程中,对设计活动进行计划应该最早 进行,然后按照计划实施体系构造设计、界面 设计、模块/子系统设计、数据模型设计、过 程/算法设计等活动。
▪ 软件设计计划旳任务是:明确设计过程旳输入 制品并使其处于就绪状态,定义设计过程旳目 旳、输出制品及其验收准则,拟定覆盖设计过 程中各个阶段旳全局性设计策略,分配设计过 程有关人员旳职责,针对设计过程中旳活动制 定工作计划。
大学计算机基础 第8章 程序设计基础

(1)支持对象(Object)的有关概念。 (2)将对象抽象为类(Class)。 (3)类通过继承(ance)形成类层次。 (4)对象间通过传递消息(Message)而相互联系
是将某些对象的相同特征(属性和方法)抽取出来,形成的一个关于这些 对象集合的抽象模型。类具有封装性、继承性、多态性等3个特征。
3. 类(Class)和实例(Instance) 具有相同特性和行为的对象的抽象就是类。因此,对象的抽象是类,类的
具体化就是对象,也可以说类的实例是对象。对象具有所属类的全部属性、 事件和方法。 4. 消息(Message) 面向对象的世界是通过对象与对象间彼此的相互合作来推动的,对象间的 这种相互合作需要有一个协调机制,这样的机制就称为“消息”,它是对 象之间进行通信的结构。
须能在有限的时间内完成。如果在数值计算过程中涉及到无穷数级的 情况,必须根据精度要求确定的计算过程才是有穷算法。 2.确切性,是指算法的每一步骤必须要有确切的定义,不能存在二义 性。 3.输入,是指算法在执行的过程中从外界获取的信息。一个算法可以 有0个或多个输入,当有0个输入时,是指算法本身指定了初始条件。 算法的执行结果总是与输入的初始数据相关的,不同的输入会产生不
算法写好后,要检查算法的正确性和完整性,然后再根据算法 用某种高级语言去编写程序。
8.2.3 常用的基本算法
(1)列举法 列举法通常用于解决“是否存在”或“有哪些可能”等问题。它的基
本思想是根据提出的问题,列举出所有可能的情况,并用问题中给定 的条件检验符合条件的解。列举法比较简单,在使用时,要对问题进 行详细的分析,将与问题有关的知识条理化、系统化,并从中找出规 律,优化方案减少运算工作量是应当注意的问题。 (2)归纳法 归纳是一种抽象,即从特殊现象中找出一般规律。归纳法的基本思想 是,通过分析列举的少量特殊情况,找出一般的关系。但这种方法得 到的结论只是一种猜测,还需要进行证明。
软件技术基础-ppt可编辑全文

《数据结构课程》所处的地位:
*
什么是数据结构? 几个概念: 数据(Data):是对信息的一种符号表示。在计算机科学中是指所有能输入(识别)到计算机中(存储)并被计算机程序处理(加工)的符号的总称。 数据元素(Data Element):是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。 一个数据元素可由若干个数据项组成。数据项是数据的不可分割的最小单位。 数据对象(Data Object):是性质相同的数据元素的集合。是数据的一个子集。
*
数据的逻辑结构分类 根据数据元素间关系的基本特性,有四种基本数据结构 (集合)——数据元素间除“同属于一个集合”外,无其 它关系 线性结构——一个对一个,如线性表、栈、队列 树形结构——一个对多个,如树 图状结构——多个对多个,如图
*
数据的逻辑结构
从逻辑关系上描述数据,与数据的存储无关; 从具体问题抽象出来的数据模型; 与数据元素本身的形式、内容无关; 与数据元素的相对位置无关。
*
例1 书目自动检索系统
登录号:
书名:
作者名:
分类号:
出版单位:
出版时间:
价格:
书目卡片
书目文件
按书名
按作者名
按分类号
索引表
线性表
*
树
……..
……..
…...
…...
…...
…...
例2 计算机和人对弈问题
*
例3 多叉路口交通灯管理问题
C
E
D
A
B
AB
AC
AD
BA
BC
BD
DA
DB
DC
EA
EB
*
数据的逻辑结构
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1. 软件设计过程 2. 软件设计基本概念 3. 过程设计技术和工具 4. 设计规格说明与评审
8.1 软件设计过程
开发阶段第一步,其基本任务是回答“如何做?” 软件设计过程是对程序结构、数据结构和过程细节逐步求精、复审并 编制文档的过程。 软件设计:总体结构设计、数据设计、过程设计。P185 图8.1 是软件开发过程中用以保证质量的关键步骤。 从工程角度,软件设计可分为概要设计和详细设计。
8.2 基本概念——模块化与信息隐藏 模块化与信息隐藏
模块化是软件结构设计技术的基础。可组合、分解和更换 的单元。 模块的基本属性:接口、功能(外部)、逻辑、状态(内 部)。 理论根据: C(P1+P2)>C(P1)+C(P2) 模块总数增加时,单独开发各个子模块的工作量之和减少 ,接口费用越来越大。P190 图8.2,存在一个最小成本的 模块数区域。 信息隐藏:数据细节、过程细节
1) 功能域(即一个特定控制结构的作用
8.3 过程设计技术和工具——判定表 判定表
清晰表示出复杂条件组合与各动作间的关系。 四个组成部分。左上部列出所有条件 条件,左下部是所有可 条件 能做的动作 动作,右上部是表示各种条件组合 条件组合的一个矩阵, 动作 条件组合 右下部是和每种条件组合相对应的动作 条件组合相对应的动作。 条件组合相对应的动作 判定表的每一列实质上是一条规则,规定了与特定的条 件组合相对应的动作。 特点:严格逻辑性,但不能描述循环处理特性
逻辑设计、物理设计、 基本概念——抽象与逐步求精 抽象与逐步求精
抽象是控制复杂性的基本策略。要求人们将注意 力集中在某一层次上考虑问题,忽略低层次细节。 软件工程每一步都是对较高一级抽象的解做一次 较具体化的描述。 例8.1 P187-188 逐步求精与抽象密切相关,层次结构上一层是下 一层的抽象,下一层是上一层的求精。 过程求精的同时伴随着数据求精。求精蕴含着某 种设计决策。
8.3 过程设计技术和工具——过程设计语言 过程设计语言
PDL 结构英语、伪码 PDL具有严格的关键字外部语法,用于定义控制结构和数据 结构;另一方面,PDL表示实际操作和条件的内部语法通常 又是灵活自由的。 PDL可以作到逐步求精:从比较概括和抽象的PDL程序起, 逐步写成更详细的精确的描述。 特点:P200
复审方式:正式、非正式 复审对事不对人
① 非直接耦合:两模块中任一个都不依赖对方能独立工作, ② 数据耦合:两模块通过参数交换信息,信息仅限于数据。
这类耦合度最低。
分解模块可望消除控制耦合。 ④ 特征耦合:介于数据耦合与控制耦合之间 ⑤ 外部耦合:当若干模块均与同一个外部环境关联,如,I/O处理使所有I/O模块与 特定的设备、格式和通信协议相关联。外部耦合尽管需要,但应限制在少数几个 模块上。 ⑥ 公共耦合:若干模块通过全局的数据环境相互作用, 全局数据环境中可能含有全 局变量、公用区、内存公共复盖区、任何存储介质上的文件、物理设备等。 ⑦ 内容耦合:一个模块使用另 一模块内部的数据或控制信息;一个模块直接转移 到另一模块内部等等。
8.1 软件设计过程例图
需求分析 结构化分析方法建立系 统逻辑模型DFD+DD 行为/功能设计 总体设计 逻辑模型—〉功能模型 (DFD+DD映射为体系/ 模块结构图) 结构/数据设计 概念设计 逻辑模型—〉数据模型 ( DFD+DD 映 射 为 ER 图 )
相 关
详细设计、编码、测试。。 。。。。
8.2 基本概念——软件过程设计 软件过程设计
所谓过程,应包括有关处理的精确说明,诸如事件的顺 序、确切地判断位置、循环操作及数据组成等等。过程 设计的任务是描述算法细节。P194 图8.6 程序结构中任何模块的所有从属模块必将引用出现在该 模块的过程说明中。P195 图8.7
8.3 过程设计技术和工具——结构化程序设计 结构化程序设计
③ 控制耦合:传递的信息含有控制信息。控制耦合通常会增加系统的复杂性,适当
设计原则:尽量使用数据耦合,少用控制耦合,限制外部和公共耦合, 杜绝内容耦合。
8.2 基本概念——总体结构设计 总体结构设计
软件总体结构:程序结构,数据 结构 软件总体结构设计的目标:软件
总体结构设计的目标是产生一个模块 化的程序结构并明确各模块之间的控 制关系,此外还要通过定义界面,说明程 序的输入输出数据流,进一步协调程序 结构和数据结构。P192
PDL符合。
8.4 设计规格说明与评审
规格说明:P204表8-2 复审的内容P203 :软件总体结构、数据结构、结构的界面、 模块过程细节。重点:
软件结构能否满足需求? 结构的形态是否合理? 层次是否清晰? 模块的划分是否遵循模型化和信息隐藏的思想? 系统的人机界面,各模块的接口,以及出错处理是否恰当?模块的 设计能否满足功能与性能要求? 选择的算法与数据结构是否合理,能否适应编程语言?等等。
关键字采用固定语法并支持结构化构件、数据说明机制和模块化; ② 处理部分采用自然语言描述; ③ 允许说明简单(标量、数组等)和复杂(链表、树等)的数据结构; ④ 子程序的定义与调用规则不受具体接口方式的影响。
①
8.3 过程设计技术和工具——过程设计工具比较 过程设计工具比较
好工具的属性:P202 (1)-(10)
仅用顺序、分支、循环三种基本控 制构件即能构造任何单入口、单出 口程序。 结构化程序设计是程序设计技术, 它采用自顶向下逐步求精的设计方 法和单入口单出口的控制构件。 图形表示法:
程序流程图:构件P196 图8.8,例 P197图8.9 盒图(N-S图):构件P198图8.11
域)明确。 2) 不可能任意转移控制。 3) 很容易确定局部和全程数据的作用域。 4) 很容易表现嵌套关系,也可以表示模 块的层次结构
E(P1+P2)>E(P1)+E(P2)
8.2 基本概念——模块内聚度 模块内聚度
内聚度表示一个模块内部各元素彼此结合的紧密程度,是衡量一个模 块内部组成部分间整体统一性度量。内聚分7类,从高到低依次为: 高级内聚度
功能性内聚:模块内所有成分形成一个整体,完成单个功能。 顺序性内聚:模块内的各处理成份均与同一功能相关,且这些处理必须顺序执行,则称 顺序内聚。
① ② ③ ④ ⑤ ⑥ ⑦
⑧ ⑨ ⑩
模块化:支持模块化软件的开发并提供描述接口的机制(例如直接表 示子程序 和块结构); 整体简洁性:设计表示相对易学、易用、易读; 便于编辑:支持后续设计、测试乃至维护阶段对过程设计进 行的修改; 机器可读性:计算机辅助软件工程(CASE)环境已被广泛接受, 一种设计表示 法若能直接输入并被CASE工具识别将带来极大便利; 可维护性:过程设计表示应支持各种软件配置项的维护; 强制结构化:过程设计工具应能强制设计人员采用 结构化构件,有助于产生 好的设计; 自动产生报告:设计人员通过分析详细设计的结果往往能突 发灵感,改进设计。 若存在自动处理器,能产生有关设计的分析报告必将增强设计人员在这 方面 的能力; 数据表示:详细设计应具备表示局部与全局数据的能力; 逻辑验证:能自动验证设计逻辑的正确性是软件测试 追求的最高目标,设计表 示愈易于逻辑验证其可测试性愈强; 可编码能力:一种设计表示若能自然地转换为代码则能减少开发 费用,降低出 错率。
中级内聚度
通信性内聚:模块中各成份都将对数据结构的同一区域进行操作,以达到通信的目的。 过程性内聚:模块具有过程性内聚度指,模块内成分彼此相关,并且必须按特定的次 序执行。
低级内聚度
时间性内聚:模块包含的诸任务必须在同一时间段内执行,如一个初始化模块。 逻辑性内聚:模块完成的诸任务逻辑上相关,如,一个模块产生所有与类型无关的输 出。 偶然性内聚:模块内各成分为完成一组功能而组合在一起,它们相互之间即使有关系, 也很松散。
内聚度和耦合度是判断软件结构 好坏的主要标准。 程序结构的表示工具:类树图, P193,图8.5 概念:深度、宽度、扇出、扇入、 可见域、流通域
8.2 基本概念——数据结构设计 数据结构设计
数据结构描述各数据分量之间的逻辑关系。 数据结构是影响软件总体结构的重要因素。数据 结构决定了数据的组织形式、访问方法和处理策 略。 数据抽象和信息隐藏两个概念是数据设计的基础。 数据设计方案不唯一。 数据结构完整讨论超出本书范围。
设计原则:力求高内聚、少用中内聚、不用低内聚。 一般高层模块内聚度低一些,较低层次模块的内聚度较高。
8.2 基本概念——模块耦合度 模块耦合度
耦合度表示软件结构内不同模块彼此间相互依赖的紧密程度,是衡量 软件模块结构质量好坏的度量,是对模块独立性的直接衡量指标。 耦合度的强弱取决于模块间接口的复杂性、进入或调用模块的位置、 接口传送数据的多少等。 耦合度也分为七级(按耦合度增序排列):