Bootstrap

软件工程之结构化设计篇

1 软件设计的基本概念

完成了需求分析,回答了软件系统能“做什么”的问题后,软件的生命周期就进入了设计阶段。软件设计阶段,研发人员将集中精力研究如何把需求规格说明书里归纳的分析模型转换成功可行的设计模型,将解决方案记录到相关的设计文档中。软件设计是回答“怎么做”才能实现软件系统的问题。即把软件系统能做什么的逻辑模型转换成怎么做的物理模型。
软件设计在开发中处于核心地位。

1.1 软件设计的意义和目标

软件设计是保证质量的关键步骤,提供了可以用于评估质量的软件表示,是我们能够将用户需求准确转化为软件产品或系统的唯一方法,它也是一个迭代的过程,通过设计过程,需求被变换为用于构建软件的蓝图。

1.2 软件设计的原则

1 模块化

		模块的公共属性:
		1、每个模块都有输入、输出的接口,接口都指向相同的调用者。
		2、每个模块都具有特定的逻辑功能,完成一定的任务。
		3、模块的逻辑功能由一段可运行的程序来实现
		4、模块还用有属于自己的内部数据。
		注意:
		1、模块的规模要适中
		2、提高模块的独立性
		3、提高模块的内聚程度
		4、加强模块的保护性

2 抽象

3 逐步求精

4 信息隐藏

5 复用性设计

6 灵活性设计

	1 降低耦合并提高内聚
	2 建立抽象
	3 不要将代码写死
	4 抛出异常
	5 使用并创建可复用的代码

1.3 软件设计的分类

1 从活动任务分类
软件设计是对软件需求进行数据设计、体系结构设计、接口设计、构件设计和部署设计
2 从工程管理分类
软件设计分为概要设计(总体设计)和详细设计。前期进行概要设计,得到软件系统的基本框架,后期进行详细设计,明确系统内部的实现细节。

2 数据库结构设计

数据库结构设计包括概念结构设计、逻辑结构设计和物理结构设计

3 用户界面设计

3.1、设计驱动开发

3.2、目标用户群体

3.3、简洁与清晰

3.4、实现模型与心智模型

3.5、设计的规范性

3.6、设计的可用性与易用性

3.7、设计的一致性

3.8、设计的容错性

4、体系结构设计

4.1 表示软件结构的图形工具

1、层次图和HIPO图
2、结构图

4.2 面向数据流的设计方法

1、变换型数据流
2、事务性数据流

4.3 面向数据结构的设计方法

Jackson方法和Warnier方法,
Jackson方法把数据结构分为3种基本类型:顺序型结构,选择型结构,循环型结构。

5、接口设计

5.1 接口设计包括:用户接口、外部接口、内部接口。

5.2 界面设计

1、3个黄金原则:

  • 置用户于控制之下。
  • 减少用户的记忆负担
  • 保持界面一致
    2、核心活动
  • 创建系统功能的外部模型
  • 确定为此完成此系统功能的人和计算机应分别完成的任务
  • 考虑界面设计种的典型问题
  • 借助CASE工具构造界面原型
  • 实现设计模型
  • 评估界面质量

3、4个模型

  • 由软件工程师创建的设计模型
  • 由人机工程师(或软件工程师)创建的用户模型
  • 终端用户对未来系统的假想
  • 系统实现后得到的系统映像

4、界面设计考虑4个问题

  • 系统响应时间
  • 用户求助机制
  • 出错信息
  • 命令方式

6、数据设计

两个部分:

  • 程序级的数据结构设计
  • 应用级的数据库设计

数据库的主要特点:

  • 可以实现数据共享
  • 减少数据的冗余度
  • 数据具有独立性
  • 可以实现数据集中控制
  • 数据具有一致性和可维护性,以确保数据的安全性和可靠性
  • 出现故障可以恢复

基本结构分为三个层次:1、物理数据层;2、概念数据层;3、逻辑数据层

数据库不同层次之间的联系的通过映射进行转换的。
5个步骤:
1、需求分析
2、概念设计
3、逻辑设计
4、物理设计
5、验证设计

数据库常用的存取方法如下:
1、索引方法
2、聚簇索引方法
3、HASH方法

7、过程设计

7.1 用到的工具

  • 程序流程图
    优势:简单,结构清晰,逻辑性强,便于描述,容易理解
    劣势:不利于逐步求精,箭头随意移动,与结构化程序设计精神违背

  • N-S图(合图)
    特点:不允许随意控制转移,有利于严格的结构化程序设计,可以很方便确定一个个特定的控制结构的作用域,以及局部数据和全局数据的作用域,可以很方便地表示嵌套关系以及模块之间的层次结构

  • PAD图(问题分析图)
    特点:自左向右,自上而下,结构清晰,层次分明,只能用于结构化的程序设计,不仅可以表示程序逻辑,还能表示数据结构。

  • 过程设计语言(PDL),伪代码
    特点:关键字的固定语法,自然语言的自由语法,数据说明的手段,模块定义和调用的技术。
    优点:可以作为注释直接写在源程序中间,可以普通的编辑器编写,如果有自动处理程序,可以自动由PDL生成程序代码。

;