一.设计思想的发展
- 1958:软件这个名词第一次在公开刊物上使用~
- 60年代中后期and70年代前中期:结构化编程、逐步求精、自顶向下理念是程序设计主要方法
- 70年代中后期and90年代:结构化设计方法、抽象数据类型、信息隐藏、封装、继承、多态等思想~
- 20世纪90年代之后:大规模软件设计年代、面向对象设计方法形成和发展~
二.设计的核心思想
软件开发的最大挑战:软件的复杂性,控制系统复杂度是软件设计方法的核心问题~
- 分解:是横向上将系统分割为几个相对简单的子系统
- 抽象:纵向上聚焦子系统的接口
- 接口:各子系统之间交流的契约
三.理解软件设计
1.设计与软件设计
设计的定义是一个对象的规格说明,亦或理解为一个环境中创建对象的规格说明。软件设计是关于对象的设计,是一种设计活动,自然具有设计的普遍特性,软件设计既指软件对象实现的规格说明,也指产生这个规格说明的过程~
2.工程设计与艺术设计
对于软件设计来说,工程设计和艺术设计都很重要:一方面软件设计要从工程师的视角出发,使用系统化方法构建软件的内部结构,进行这种的设计决策,生产队用户有用的产品;另一方面,软件设计也要从艺术人员的视角出发,注重效率与优雅,强调设计所带来的愉悦和所要传达的意境。
3.理性主义和经验主义
理性主义更看重设计的工程性,希望一科学化知识为基础,利用模型语言、建模方法、工具支持,将软件设计过程组织成系统、规律的模型建立过程;经验主义者则在重视工程性的同时,也强调艺术性,要求给软件设计过程框架添加一些灵活性以应对设计中人的因素~
4.软件设计的演化性
真实的设计过程是演化和迭代的,而不是一次完成的,需求分配和质量反思之间不断循环~
5.软件设计的决策性
软件设计是问题求解和决策的过程,问题空间是用户需求和项目约束,解空间是软件设计方案,从问题空间到解空间的转换是一个跳跃性的过程,需要发挥设计师的创造性,设计师跳跃性地建立解决方案的过程被称为决策~
6.软件设计的约束满足和多样性
设计问题往往具有多种解决方案,即能够实现某一功效的解决方案往往有很多种,这成为软件设计的多样性,而约束可以帮助设计师暂时验证解空间中多样设计方案的合理性
质量是主要的设计约束~
四.软件设计的分层
根据抽象程度的不同,软件设计可以分为高层设计、中层设计和低层设计~
- 高层设计:基于反映软件高层抽象的软件层次,描述关注点和设计决策
- 中层设计:关注与组成构建的模块的划分、导入
- 低层设计:深入模块和类的内部,关注具体的数据结构、算法等
五.软件设计的主要活动
在设计过程中,返工的现象很常见
六.软件设计的方法和模型
1.软件设计的方法
- 结构化设计:自下而上,逐步求精,按照功能对系统进行分解
- 面向对象设计:源于数据抽象和制作驱动
- 数据结构为中心设计:开始与系统操纵的数据结构而不是它所表现的功能
- 基于构件设计:基于构件的提供、开发和集成,以提高系统的可复用性
- 形式化方法设计:严格的数学模型来验证系统的相关属性
2.软件设计的模型
- 静态模型:通过快照的方式对系统进行描述,描述状态而不是行为
- 动态模型:通常描述的是系统行为和状态转移
七.软件设计描述
分享一些样例,大家自行研究~
1.设计视图和设计图
2.设计视角和设计关注
3.需求和涉众
4.设计理由
5.设计描述的模板
6.软件设计文档书写要点
- 充分利用标准的文档模板
- 可以利用体系结构风格示意图
- 利用完整的接口规格说明定义模块与模块之间的交互
- 要从多视角出发,让读者感受一个立体的软件系统
- 在设计文档中应体现对于变更的灵活性