8 软件设计基础

什么是软件设计

为什么要软件设计

软件的复杂是系统性的,而不是偶然的。

软件工程的复杂性来自:问题域的复杂,管理开发过程的复杂,软件的灵活性,刻画分离系统的行为的复杂。

软件设计的核心思想:分解与抽象。并用分解和抽象,使之具有层次性,来解决软件工程的复杂。

设计的类别

工程 or 艺术?
设计=工程设计+艺术设计

理性主义 or 经验主义?

理性主义:形式化软件工程等,更看重设计的工程性。

经验主义:考虑人(程序员等)的因素,增加灵活性,文档化、原型、尽早验证、迭代式开发等都被实践证明能够有效弥补人类的缺陷。

将设计视为决策

非常复杂的问题,从问题空间到解空间存在巨大的跳跃性。

决策问题存在约束:需求;环境;资源;技术等。

多解问题:决策存在多样性。

设计是一个顺序决策:

  • 顺序性:前一个决策会影响后一个,而且不可预⻅
  • 不可逆性:无法完全消除一个前期错误的决策

软件设计的分层

在这里插入图片描述

在这里插入图片描述
从底层到顶层不断抽象,在每层中不断分解。

低层设计是代码设计,屏蔽程序中复杂数据结构与算法的实现细节,将算法数据的接口暴露给中层

中层设计的目标:模块化;信息隐藏;OO原则。

高层设计是体系结构的设计。

高层设计由部件,连接件和配置组成。部件和连接件具有同等的地位。

敏捷视点

  • 只有高层设计良好,底层设计才可能良好
  • 只有写完并测试代码之后,才能算是完成了设计
  • 源代码可能是主要的设计文档,但它通常不是唯一一个必须的

软件设计过程、方法和模型、描述

设计的活动

在这里插入图片描述

软件设计的方法和模型

结构化设计方法、 面向对象设计、 数据为中心设计、 基于构件的设计、 形式化方法设计。

静态模型vs动态模型

静态模型:通常描述的是状态,而不是行为。比如:一个数字的列表是按大小排序好的。

动态模型:通常描述的是系统行为和状态转移。比如:排序的过程中如何进行排序。

在结构化设计中

  • 静态模型:实体关系图
  • 动态模型:数据流图和结构图(Structure Chart)

在面向对象设计中

  • 静态模型:类图、对象图、构件图、部署图
  • 动态模型:交互图(顺序图和通信图)、状态图、 活动图等

软件设计描述

在这里插入图片描述
在这里插入图片描述
设计视⻆必须符合在需求(Requiement)中利益相关者(Stakeholder)的设计关注点 (Design Concern),因为每个利益相关者目的不一样,对设计就会产生不同的设计关注点。而我们的设计得全面考量各个利益相关者的设计关注点,给出相应的设计视⻆下的设计视图。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页