软件工程与计算总结(八)软件设计基础

一.设计思想的发展

  • 1958:软件这个名词第一次在公开刊物上使用~
  • 60年代中后期and70年代前中期:结构化编程、逐步求精、自顶向下理念是程序设计主要方法
  • 70年代中后期and90年代:结构化设计方法、抽象数据类型、信息隐藏、封装、继承、多态等思想~
  • 20世纪90年代之后:大规模软件设计年代、面向对象设计方法形成和发展~

二.设计的核心思想

软件开发的最大挑战:软件的复杂性,控制系统复杂度是软件设计方法的核心问题~

  • 分解:是横向上将系统分割为几个相对简单的子系统
  • 抽象:纵向上聚焦子系统的接口
  • 接口:各子系统之间交流的契约

三.理解软件设计

1.设计与软件设计

设计的定义是一个对象的规格说明,亦或理解为一个环境中创建对象的规格说明。软件设计是关于对象的设计,是一种设计活动,自然具有设计的普遍特性,软件设计既指软件对象实现的规格说明,也指产生这个规格说明的过程~

2.工程设计与艺术设计

对于软件设计来说,工程设计和艺术设计都很重要:一方面软件设计要从工程师的视角出发,使用系统化方法构建软件的内部结构,进行这种的设计决策,生产队用户有用的产品;另一方面,软件设计也要从艺术人员的视角出发,注重效率与优雅,强调设计所带来的愉悦和所要传达的意境。

3.理性主义和经验主义

理性主义更看重设计的工程性,希望一科学化知识为基础,利用模型语言、建模方法、工具支持,将软件设计过程组织成系统、规律的模型建立过程;经验主义者则在重视工程性的同时,也强调艺术性,要求给软件设计过程框架添加一些灵活性以应对设计中人的因素~

4.软件设计的演化性

真实的设计过程是演化和迭代的,而不是一次完成的,需求分配 和质量反思之间不断循环~

5.软件设计的决策性

软件设计是问题求解和决策的过程,问题空间是用户需求和项目约束,解空间是软件设计方案,从问题空间到解空间的转换是一个跳跃性的过程,需要发挥设计师的创造性,设计师跳跃性地建立解决方案的过程被称为决策~

6.软件设计的约束满足和多样性

设计问题往往具有多种解决方案,即能够实现某一功效的解决方案往往有很多种,这成为软件设计的多样性,而约束可以帮助设计师暂时验证解空间中多样设计方案的合理性

质量是主要的设计约束~

四.软件设计的分层

根据抽象程度的不同,软件设计可以分为高层设计、中层设计和低层设计~

  • 高层设计:基于反映软件高层抽象的软件层次,描述关注点和设计决策
  • 中层设计:关注与组成构建的模块的划分、导入
  • 低层设计:深入模块和类的内部,关注具体的数据结构、算法等

五.软件设计的主要活动

在设计过程中,返工的现象很常见

六.软件设计的方法和模型

1.软件设计的方法

  • 结构化设计:自下而上,逐步求精,按照功能对系统进行分解
  • 面向对象设计:源于数据抽象和制作驱动
  • 数据结构为中心设计:开始与系统操纵的数据结构而不是它所表现的功能
  • 基于构件设计:基于构件的提供、开发和集成,以提高系统的可复用性
  • 形式化方法设计:严格的数学模型来验证系统的相关属性

2.软件设计的模型

  • 静态模型:通过快照的方式对系统进行描述,描述状态而不是行为
  • 动态模型:通常描述的是系统行为和状态转移

七.软件设计描述

分享一些样例,大家自行研究~

1.设计视图和设计图

2.设计视角和设计关注

3.需求和涉众

4.设计理由

5.设计描述的模板

6.软件设计文档书写要点

  • 充分利用标准的文档模板
  • 可以利用体系结构风格示意图
  • 利用完整的接口规格说明定义模块与模块之间的交互
  • 要从多视角出发,让读者感受一个立体的软件系统
  • 在设计文档中应体现对于变更的灵活性
相关推荐
搞科研的小刘选手2 小时前
【广州大学主办 | IEEE出版 | 落地广州】第八届国际科技创新学术交流大会暨通信、信息系统和软件工程学术会议(CISSE 2026)
软件工程·通信·信息系统·学术会议·广州大学·科技创新·会议推荐
希和20272 小时前
考研高数综合题|微分方程 + 平面面积 + 旋转体体积
考研·平面
电子科技圈2 小时前
2026 RISC-V中国峰会观察:编译调试工具链的“在场节奏”,释放了什么信号?
大数据·人工智能·设计模式·软件工程·软件构建·代码规范·risc-v
长不大的杨瑞杰3 小时前
OpenCode v2 运行时预热实战:Warming、Prompt Cache、后台服务与成本治理
人工智能·安全·云计算·软件工程·devops
长不大的杨瑞杰15 小时前
OpenCode v2 会话可靠性实战:Snapshots、Compaction、Instructions 与 Formatters
人工智能·安全·云计算·软件工程·devops
女神下凡1 天前
芯参谋(79):嵌入式学习进阶_(硬件与软件)深入实践指南
arm开发·单片机·嵌入式硬件·学习·fpga开发·设计规范
希和20271 天前
考研高数|曲率圆选择题【拉格朗日版本解法】
考研
Old Uncle Tom2 天前
LLM 替代 SAST?Claude Code 安全审查工具的设计取舍与工程启示
人工智能·安全·软件工程
地图小课堂2 天前
Bigemap Pro如何打开无人机航拍影像并套合配准(有坐标 geoTiff、ecw)
无人机·软件工程
女神下凡2 天前
芯参谋(77):裸机(无 OS)存储驱动开发指南
arm开发·单片机·嵌入式硬件·设计规范·1024程序员节