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

一.设计思想的发展

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

二.设计的核心思想

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

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

三.理解软件设计

1.设计与软件设计

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

2.工程设计与艺术设计

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

3.理性主义和经验主义

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

4.软件设计的演化性

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

5.软件设计的决策性

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

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

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

质量是主要的设计约束~

四.软件设计的分层

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

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

五.软件设计的主要活动

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

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

1.软件设计的方法

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

2.软件设计的模型

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

七.软件设计描述

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

1.设计视图和设计图

2.设计视角和设计关注

3.需求和涉众

4.设计理由

5.设计描述的模板

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

  • 充分利用标准的文档模板
  • 可以利用体系结构风格示意图
  • 利用完整的接口规格说明定义模块与模块之间的交互
  • 要从多视角出发,让读者感受一个立体的软件系统
  • 在设计文档中应体现对于变更的灵活性
相关推荐
深念Y18 小时前
我放弃了造轮子,反而更快
ai·软件工程·源代码·缝合·组装·造轮子·参考
深念Y20 小时前
AI 写代码总跑偏?我逼它回到“函数级颗粒度”
ai·软件工程·agent·函数·coding·vibe coding·代码补全
其实防守也摸鱼1 天前
软件工程基础知识:软件开发模型重点理论总结
软件工程
米码收割机1 天前
【考研】2025 沈阳工业大学827自动控制原理考研真题及答案
考研
Java_小白呀1 天前
考研408数据结构(栈与队列)
数据结构·考研·栈和队列·考研408
九成宫2 天前
IT项目管理期末复习——Chapter 10 项目沟通管理
笔记·项目管理·软件工程
_Evan_Yao2 天前
RAG中的“Chunk”艺术:我试过10种切分策略后总结的结论
java·人工智能·后端·python·软件工程
skylijf2 天前
2026 高项第 6 章 预测考点 + 练习题(共 12 题,做完稳拿分)
笔记·程序人生·其他·职场和发展·软件工程·团队开发·产品经理
九成宫2 天前
IT项目管理期末复习——Chapter 9 项目人力资源管理
笔记·项目管理·软件工程
郝学胜-神的一滴2 天前
从零起步:CMake基础入门与实战跨平台编译
c++·软件工程·软件构建·cmake