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

一.设计思想的发展

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

二.设计的核心思想

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

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

三.理解软件设计

1.设计与软件设计

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

2.工程设计与艺术设计

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

3.理性主义和经验主义

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

4.软件设计的演化性

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

5.软件设计的决策性

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

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

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

质量是主要的设计约束~

四.软件设计的分层

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

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

五.软件设计的主要活动

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

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

1.软件设计的方法

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

2.软件设计的模型

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

七.软件设计描述

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

1.设计视图和设计图

2.设计视角和设计关注

3.需求和涉众

4.设计理由

5.设计描述的模板

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

  • 充分利用标准的文档模板
  • 可以利用体系结构风格示意图
  • 利用完整的接口规格说明定义模块与模块之间的交互
  • 要从多视角出发,让读者感受一个立体的软件系统
  • 在设计文档中应体现对于变更的灵活性
相关推荐
記億揺晃着的那天7 小时前
六大 API 架构风格
架构·软件工程·graphql·rest api
大今野12 小时前
考研规划手册
考研
云知谷16 小时前
【经典书籍】《代码整洁之道》第六章“对象与数据结构”精华讲解
c语言·开发语言·c++·软件工程·团队开发
元亓亓亓17 小时前
考研408--操作系统--day4--进程同步&互斥&信息量机制
java·数据库·考研·操作系统·408
okjohn3 天前
《架构师修炼之路》——②对架构的基本认识
java·架构·系统架构·软件工程·团队开发
数据最前线3 天前
数据管理技术发展的3个阶段
数据库·考研·数据库系统概论
雾江流3 天前
Aloha浏览器 7.10.1 |私人浏览器,极速上网,资源嗅探
软件工程
屁股割了还要学3 天前
【C++进阶】STL-string的简单实现
c语言·开发语言·数据结构·c++·学习·考研
立志成为大牛的小牛3 天前
数据结构——三十九、顺序查找(王道408)
数据结构·学习·程序人生·考研·算法
小哈里4 天前
【软考架构】2025H2系统架构设计师考试复习.jpg(软件架构、软件工程、数据库、Web开发、高项)
数据库·架构·系统架构·软件工程·后端开发