笔记参考:广州大学软件工程教学

软件工程是软件工程专业的一门重要学科,掌握好软件工程原理是开发软件的重要基础知识。本博客对软件工程导论进行了详细的讲解,以方便理解。

六. 软件设计概论

6.1 软件设计的概念

软件设计:针对需求工程给出的软件需求模型,综合考虑各种制约因素,探求切实可行的软件解决方案并最终给出方案的逻辑表示,这种表示又被称为设计模型

软件设计的制约因素主要来自于资源技术两方面。
资源制约:在软件开发过程中可以获取的时间,人力,财力,开发辅助工具等
技术制约:待开发目标软件系统可以使用的技术平台

软件设计是需求模型和实现代码之间的“桥梁”,是达成软件质量目标的关键性阶段。

6.1.1 软件设计模型

设计元素:出现在设计模型中的模块,这些模块的表现形式包括子系统,构建和类

  • 子系统:完成一组逻辑上相互关联的系统功能的模块的集合,他应该作为一个整体进行设计,构造和部署,因为其功能相对独立于其他软件模块的功能
    • 子系统与软件系统的其余部分的协作主要通过接口来完成,子系统内部的模块及其协作应尽量被子系统的接口隐藏。
  • 构件:可执行软件系统中一个可分离、可独立部署的部分
    • 构件的封装性比子系统更严格,他仅仅通过接口对外提供服务,内部实现细节完全隐藏,他的设计更专注于易复用性,易组装性

设计模型是软件问题解决方案的逻辑表示

设计模型的内容应该包括:

  • 宏观说明目标软件系统的整体结构,这种宏观的软件结构在软件工程中称为“体系结构”
    • 从高层抽象的角度刻画组成目标软件系统的模块以及他们之间的逻辑关联和协作关系
  • 用户界面的设计——界面类
  • 必须说明用户界面模型和体系结构模型中设计元素如何协同工作以实现每项软件需求
  • 数据存储也是设计模型中不可缺失的环节
  • 如果体系结构中的子系统或构件规模较大,需要对其内部进行展开——子系统设计模型和构件设计模型
  • 类设计模型

综上,典型的软件设计模型一般包含体系结构模型,用户界面模型,用例设计模型,数据模型,子系统/构件/类设计模型

就像我们搭房子要先搭框架,然后再细化房子里面的内容。

6.1.2 设计模型的质量要素

软件设计的目标是构建高质量的设计模型。
设计模型的质量要素:正确性(一致性和可行性)、充分性、优化性和简单性

6.2 软件设计的基本原则

软件设计原则包含:
抽象与逐步求精、强内聚及松耦合、信息隐藏及关注点分离

6.2.1 抽象与逐步求精

抽象:集中在某一层次上考虑问题,暂时忽略那些低层次的细节
抽象是管理、控制问题复杂性的基本策略。
软件设计的抽象原则是指:软件设计一般要自顶向下经历一系列抽象级别从高到低的设计阶段,后续阶段会在前一阶段的基础上引入更接近于软件实现的设计元素,这一过程称为“逐步求精”。

6.2.2 模块化

将软件系统划分为若干相对独立的部件(模块),所有模块组装后可获得满足问题需要的软件解
但是,并不是意味着我们要不断的将软件系统划分模块,因为总耗费并不是随着划分的模块越多而减少的
软件工程导论(中)

为了解决模块化分解相关的难题,引入模块内聚度和耦合度两个概念

内聚度
内聚度表示一个模块内部各成分彼此关联的程度
内聚度的表现形式:

  • 偶然性内聚
    • 模块各成分为完成一组功能而组合在一起,他们互相之间即使有关系,也很松散
  • 逻辑性的内聚
    • 模块完成多项功能,这些功能在逻辑上具有某种相关性
  • 时间性内聚
    • 模块完成的任务必须在同一个时间段内执行
  • 过程性内聚
    • 在逻辑性内聚的基础上,进一步要求模块内各功能必须按特定的次序执行
  • 通信性内聚
    • 模块中各成分对数据结构的同一区域进行操作,以达到通信的目的
  • 顺序性内聚
    • 模块内各处理均与同一功能相关,且这些处理必须依序执行
  • 功能性内聚
    • 模块内各成分协同完成单一功能

前三种内聚度较低,4、5内聚度居中,后面两种内聚度最高
模块的内聚度越高越好

耦合度
耦合度是指软件结构中多个模块之间的关联程度。耦合的强弱取决于模块间接口的复杂性,通过接口传递的数据量的大小及复杂性等。

在设计软件时应追求尽可能松散耦合的系统结构

模块间的耦合度直接影响软件系统的可理解性、可测试性、可维护性和可靠性

模块间的耦合度从低到高有五种表现形式:

  • 非直接耦合:两模块中任意一个都不依赖于另一个而独立工作
  • 数据耦合:如果两个模块通过参数的交换信息,这些信息仅参与计算而不影响模块的功能或执行路径
  • 控制耦合:模块间交换的参数因为取值不同而导致模块功能或执行路径的变化
  • 外部耦合:当若干个模块与同一外部设备或外部环境相关联
  • 公共耦合:当若干模块通过公共的数据环境相互作用时。公共数据环境的种类包括全局变量,被多个模块共用的内存区或存储介质上的文件等
  • 内容耦合:两模块的业务逻辑处理线索相互交织,或他们交互的复杂度高于前面的耦合形式

软件设计时应尽量使用非直接耦合和数据耦合,减少控制耦合,限制外部耦合和公共耦合,杜绝内容耦合

强内聚、松耦合原则
是软件设计领域最重要,最经典的原则之一

6.2.3 信息隐藏

模块应设计得使其所含信息(过程和数据)对于那些不需要这些信息的模块不可访问,模块之间仅交换那些为完成系统功能必须交换的信息
好处:支持模块的并行开发,减少测试和后期维护工作量

6.2.4 关注点分离

关注点是指问题求解者针对概念、任务或目标的某个部分或侧面的聚焦
抽象与逐步求精,模块化都是关注点分离原则的具体应用:前者分离“结构”和“细节”,后者分离指责型和功能型关注点
其实就是一个分而治之的原则

可以沿 “职责划分”、“结构-细节”及“通用-专用” 三个维度来分离关注点

软件工程导论(中)

6.3 软件设计活动

6.3.1 软件设计活动概念

完整的软件设计过程的活动:

  • 设计策划
  • 体系结构的设计
    • 软件的体系结构是指,软件系统中主干模块的组织形式,包括这些模块的职责分派,他们之间的接口定义,协作关系及协作行为
  • 人机交互设计
  • 详细设计
  • 设计整合与验证
  • 总结
    软件工程导论(中)

6.3.3 设计过程模型的裁剪

软件设计过程模型的裁剪方法与需求工程过程模型的裁剪方法相似

相关文章: