软件设计综述

软件设计综述

1.软件设计的任务与目标

任务:
根据SRS提出的系统目标,设计出软件系统的体系结构、接口、数据结构和处理流程,形成软件的具体实现方案,并且撰写SDS。
目标:

撰写出《软件设计说明书》SDS

2.软件体系结构的内涵与主要类型

(1)、概念:

体系结构设计关心的是理解如何组织一个系统和设计系统的整体结构。体系结构设计是设计和需求工程之间的桥梁,因为它识别系统的主要的结构组件以及他们之间的关系。体系结构设计过程的输出是体系结构模型。

(2)、两个抽象层次上设计软件体系结构:

A、小规模体系结构:小规模体系结构与单个程序的体系结构有关。在这个层次上,我们将关注单个程序分解成许多组成部分的方法。
B、大规模体系结构:大规模体系结构与复杂的企业系统的体系结构相关,包括其他的系统、程序和程序组件。这些企业系统分布在不同的计算机上,这些计算机可能由不同的企业拥有和管理。

(3)软件体系结构体系化的好处:

A、信息持有者之间的沟通:体系结构是系统的一个高层表示,可以作为不同的信息持有者之间的讨论;
B、系统分析:在系统开发的最早期阶段明确给出系统的体系结构,实际上就是对系统的分析过程,体系结构设计决策对系统能否满足关键性需求具有极深的影响;
C、大规模复用:系统体系结构的模型是一个紧凑的、易于管理的描述,描述系统如何组织和组件之间如何交互。体系结构能在具有相似需求的系统之间互用,由此来支持大规模的软件的复用。

(4)、主要类型:

A、MVC(模型-视图-控制器)体系结构:
描述:将表示和交互从系统数据中分离出来,系统被设计成由三个彼此交互的逻辑组件组成:模型组件管理系统数据和在数据上的操作,视图组件定义和管理如何显示数据给用户,控制器组件管理用户的交互,并且传递这些交互给视图和模型。
优点:允许数据独立的改变,不影响表示,反之亦然。支持对相同的数据的多种不同方式的表达,对某种表示的变更会传递到所有其他的表示。
缺点:可能需要额外的代码,当数据模型和交互很简单时代码的复杂程度相对较高。
B、分层体系结构模式:
描述:将系统组织成分层结构,每一层中包含一组相关的功能,每一层提供服务给紧邻的上一层,因此最底层是有可能被整个系统所使用的核心服务。
优点:允许在接口保持不变的条件下更换整个一层,在每一层中可以提供冗余服务以增加系统的可靠性。
缺点:在具体实践中,在各层之间提供一个干净的分离通常是困难的,搞成可能不得不直接与底层进行直接交互而不是间接通过紧邻的下一层进行交互。性能可能是个问题,因为服务请求会在每一层中被处理,所以会需要多层解释。
C、容器体系结构:
描述:系统的所有数据在一个中央容器中管理,该中央容器可以被所有系统组件访问。组件之间不能直接进行交互,它们只通过容器进行交互。
优点:组件是独立的,它们需要知道其他组件的存在,一个组建的变更可以传播到所有的组件,所有的数据可以得到一致的管理,因为他们是存放在同一个地方。
缺点:容器是一个单个失败点,因而容器中的问题会影响整个系统。在组织所有通过容器进行的通信时会比较低效,将容分布到多个计算机上时会比较困难。
D、客户机-服务器体系结构:
描述:在客户机-服务器体系结构中,系统的功能是以服务的形态存在的,每一个服务来自于某个单独的服务器。客户机是那些使用服务和访问服务器的用户。
优点:该模型的主要优点是服务器可以分不到网络上。一般性的功能可以被所有的客户机使用,但并不需要被所有的服务所实现。
缺点:每个服务都是单个失败点,所以对阻止拒绝服务攻击或者服务器失败缺乏免疫性,性能也可能是取法预知的,因为它依赖于网络也依赖于系统。当服务器属于不同的机构时,也存在管理方面的问题。
E、管道和过滤器体系结构:
描述:系统中数据的处理是这样组织的,每个处理组件都是分离的并执行某个类型的数据转换。数据流从一个组件流向另外一个组件。
优点:易于理解并支持变换的复用。工作流风格与很多业务处理体系结构很匹配。通过添加变换的方式进行进化是很显然的。可以实现为顺序地系统,也可以实现为并发的系统
缺点:在通信变换间所传输的数据格式必须协商好。每个变换必须解析它的输入并携程约定格式输出。这增加了系统的负荷,意味着不可能复用使用不兼容的数据结构的函数变换。

3、软件设计的流程、内容与主要的技术

(1)

软件设计是针对需求分析阶段提出的系统需求,给出具体的软件设计方案,解决如何做的问题。

(2)、软件的设计模型:

软件设计综述_第1张图片
其中
过程设计:处理流程与算法;并发控制;
接口设计:在外部:人机、其他系统;内部:模块之间的接口
体系结构设计:物理架构;逻辑架构;
数据设计:内部数据结构;数据存储(数据库或者文件)

(3)、软件设计的两个阶段:

A、总体设计(概要设计、结构设计)
确定软件系统是由哪些模块(‘软件单元’,即面型对象的类或者面向过程的函数构成的,以及模块之间相互的关系)
B、详细设计(过程设计)
确定每个模块的内部具体处理过程。

(4)、设计描述与建模:

A、类图:表示系统中类及类和类之间的关系,用于对系统的静态结构进行描述。类用来表示系统中需要处理的失误;类之间的关系包括关联、依赖、泛化或打包等。类之间的关系体现在类的内部结构中,通过类的属性和操作进行反映。
B、状态图:是一个类对象所可能经历的所有历程的模型图。状态机由对象的各个状态和连接这些状态的转换组成。每个状态对一个对象在其生命周期中满足某种条件的一个时间 段的建模。当一个事件发生时,它会触发状态间的转换,导致对象从一种状态转化到另一新的状态。与转换相关的活动执行时,转换也同时发生。
状态图可以用于描述用户接口、设备控制器和其他具有反馈的子系统,它还可以用于描述在生命周期中跨越多个不同性质阶段的被动对象的行为,在每个阶段对象都有自己的特殊行为。
C、包图:UML为复杂系统建模所提供的模型元素组织与管理的通用。包用于定义一个名字空间或容器,通过包可以把类、用例、组件等语义联系紧密元素聚集在一起,从而实现从不同抽象层次、不同角度对系统或子系统进行建模描述,将对包中的元素作为一个整体对待,并且控制它们的可视性的存取。
D、构件图:构件图用来描述代码构件的物理结构以及各个构件之间的物理关系。构件是定义了良好的接口的物理实现单元,它是系统中可以替换的部分。每个构件体现了系统设计中特定类的实现。良好定义的构件不直接依赖于其他构件而依赖于构件所支持的接口。
E、部署图:描述位于节点实例上的运行构件实例的安排。节点是一组运行资源。这个视图允许评估分配结果和资源分配。

(5)、体系结构:

一个系统的高层次的组织结构,表现为系统的组件、组件之间的相互关系、组件与环境之间的相互关系以及设计和进化的原理。
重点关注:
如何对一个系统的组件进行组织;
如何对当前系统的总体结构进行设计。
体系结构模式:根据软件设计开发经验总结出来,且命名的,针对某一类型软件具有通用型和推广价值的设计方案。

(6)、人机交互设计

交互:用户通过某种方式发出指令,且系统对此作出相应的反应。
A、交互设计:生成产品原型线框图
B、视觉设计:生成产品模型效果图
C、SS/HTML:生成产品DEMO

(7)、业务逻辑层设计

A、领域模型:领域模型是对真是世界对概念类的表示,而不是软件对象的表示。它不是用来描述软件类、软件架构领域层或有职责软件对象的一组图。

(8)、数据存储设计

设计范围:
业务数据在内存中的管理组织;
业务数据在外存中的存储结构。
1.内存数据管理与组织
自定义数据结构;
开发语言内建的数据结构:
Java:集合类(java.util)
C++:STL
NET: 集合(System.Collections)
内存数据库

(9)、数据库的设计

设计内容
数据表
索引
视图
存储过程/函数
信息来源:领域模型、业务规则
经典工具:PowerDesigner
数据表的设计:
业务实体→数据表,实体属性→表字段
实体关系→表关联
一对一、一对多→外键
多对多→两个一对多
自关联→递归表(外键为自身主键)
主键:唯一确定一条记录
标识列(Identity),数据库自己维护
非标识列(Identity),自己维护,可定制
数据表设计策略:
表命名:与业务实体保持一致,避免保留字,单词 之间用下划线隔开;
字段命名:表名简写_属性名,如表为student,属性 name的字段名为stu_name;
拆分大表:经常访问的字段一张表;其他一张表。
使用数据字典:增强可扩充性;
使用递归表:支持无限级树状结构数据。
主键设计:
尽量使用系统标识列;
避免使用复合主键;
不要使用用户字段作为主键,如身份证号码。

4、软件设计说明书的用途和主要内容

用途:主要从软件开发(程序员)角度描述软件需要实现功能,如何划分这些功能模块,各个功能模块的关系,软件的业务流程等。
主要内容:
1.前言
1.1 编写目的
1.2 项目概述
1.3 术语定义、缩写词
1.4 引用文档
2.设计约束
2.1 设计目标
2.2 设计原则
2.3 设计约束
2.3.1 遵循标准
2.3.2 环境与工具
2.3.3 技术限制
3.逻辑架构设计
3.1 设计决策
3.2 软件单元
3.3 处理流程
4.接口设计
4.1 外部接口(包括界面、与外部系统)
4.2 内部接口
5.数据库存储设计
5.1 数据库表
5.2 视图、函数及存储过程
6.详细设计
6.1 软件单元1
6.1.1 功能描述
6.1.2 处理流程
6.1.3 内部数据
6.1.4 出错处理
7.开发架构设计
7.1 工程结构
7.2 源代码文件
7.3 系统组件
8.物理架构设计
8.1 网络环境
8.2 部署方案
9.安全保密设计
10.运行设计

你可能感兴趣的:(软件工程)