种豆资源网

当前位置:首页 > 百科 > 百科综合 / 正文

软体设计

(2019-03-22 18:31:21) 百科综合
软体设计

软体设计

软体设计是从软体需求规格说明书出发,根据需求分析阶段确定的功能设计软体系统的整体结构、划分功能模组、确定每个模组的实现算法以及编写具体的代码,形成软体的具体设计方案。

软体设计是把许多事物和问题抽象起来,并且抽象它们不同的层次和角度。将问题或事物分解并模组化使得解决问题变得容易,分解的越细模组数量也就越多,它的副作用就是使得设计者考虑更多的模组之间耦合度的情况。

基本介绍

  • 中文名:软体设计
  • 外文名:software design
  • 要求人群:程式设计师
  • 设计阶段:结构设计,接口设计,过程设计等
  • 设计区域:模组 Module、数据 Data等
  • 特点:抽象,模组化等

设计阶段

1、概要设计,主要包括:
1)结构设计
2)接口设计
3)全局数据结构设计
4)过程设计
2、详细设计。

特徵

1、抽象
2、模组化
3、信息隐蔽
4、模组独立性:
1)内聚性:偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚、功能内聚。
2)耦合性:内容耦合、公共耦合、外部耦合、控制耦合、标记耦合、数据耦合、非直接耦合

设计要素

软体设计包括软体的结构设计,数据设计,接口设
计和过程设计。
软体设计软体设计
结构设计:定义软体系统各主要部件之间的关係。
数据设计:将模型转换成数据结构的定义。
接口设计:软体内部,软体和作业系统间以及软体和人之间如何通信。
过程设计:系统结构部件转换成软体的过程描述。

设计原则

1、设计对于分析模型应该是可跟蹤的:软体的模组可能被映射到多个需求上。
2、设计结构应该儘可能的模拟实际问题。
3、设计应该表现出一致性。
4、不要把设计当成编写代码。
5、在创建设计时就应该能够评估质量。
6、评审设计以减少语义性的错误。
7、设计应该模组化,将软体逻辑地划分为元素或子系统,并包含数据、体系结构、接口和构件的清晰表示。

设计过程

 软体的设计是一个将需求转变为软体陈述(表达)的过程。这种陈述给了
一个对软体的全局观点。系统通过逐步求精使得设计陈述逐渐接近原始码。这里有两个基本步骤,第一步是初步设计(Preliminary design) ,关注于如何将需求转换成数据和软体框架。
软体设计软体设计
第二步是 详细设计(Detail design),关注于将框架逐步求精细化为具体的数据结构和软体的算法表达。发生中的设计行为、数据、算法和程式设计都需要由现代程式所需的界面设计这一清晰的行为来结合起来。界面设计(Interface design) 建立程式布局和人机互动机制。贯穿设计过程的质量由一系列的正式技术评定(formal technical reviews)或设计排演(design walkthroughs)来评价。

指导方针

1、设计应该展现层次结构使得软体各部分之间的控制更明智。
2、设计应当模组化;这就是说,软体应在逻辑上分割为实现特定的功能和子功能的部分。
3、设计应当由清晰且可分离的数据和过程表达来构成。
4、设计应使得模组展现独立的功能特性。
5、设计应使得界面能降低模组之间及其与外部环境的连线複杂性。
6、设计应源自于软体需求分析期间获得的信息所定的可重複方法的使用。要拥有良好的设计特徵不是靠碰运气,在设计过程中通过综合运用基础设计原理、系统方法论、彻底的评定回顾可以有助于完成良好的设计。软体设计方法每天都在进化,作为已经经过测试和细化的方法,良好的设计应具有以下的四种特性,并在所有这些特性之间保持一致:
软体设计软体设计
1)将信息领域的表达转换为软体设计的表达的机制。
2)表示功能组件及其界面的符号。
3)逐步求精和分割的试探。
4)质量评估的指导方针。
开发软体的时候,不管採用何种设计方法设计者必须能够熟练运用一套关于数据、算法和程式设计的基本原理。
7、设计应该导出降低模组和外部环境间複杂连线的接口。

设计基础

软体设计方法论的这套基本原理已经经过了多年的进化,在软体开发的生命周期中,软体设计是在软体描述提供的的基础上,对软体需求进行分析以形成软体内部结构的描述说明的活动之一。耦合和内聚是两个用来评估软体设计质量的方法。每种概念的影响程度不尽相同,但它们都经历了时间的洗礼。基于这些基本原理设计者可以採用更多更成熟的设计方法。这些基本原理有助于设计者回答以下的问题:
软体设计软体设计
1、将软体分割成独立的组件时会採用何种标準?
2、怎样将软体的原则性表示详细分割成函式或数据结构?
3、有没有定义一个软体设计的技术质量的统一标準?
M.A. Jackson 曾经说过:“对一个计算机程式设计师来说,分辨让程式运行和让程式正确之间的差异是一个良好的开端。”为了“ 使程式正确 ” ,基本设计原理提供了必须的框架。
抽象(Abstraction)在最高层次上指的是使用待解决的问题领域内的术语描述的解决方案。相对较低层次的抽象则更多的面向程式语言,最低层的抽象则是解决方案的可直接实现的方式描述。软体设计的每一个步骤都是对相应层次解决方案的抽象的逐步求精。
求精(Refinement)又叫做逐步求精指的是通过程式细节连续细化来开发程式体系的策略。分步骤的对程式抽象进行分解直至成为编程语言的过程同时造就了程式的层次结构。在这一点上要对细节多做考虑,这也展示了求精实际上是个苦心经营的过程。
模组化(Modularity)指的是软体可被分割为分别命名并可定址的组件(也叫做模组),将模组综合起来又可以满足问题的需求的性质。" 软体的模组化是允许智慧型化管理程式的唯一属性。" 换句话说,当您将一个複杂问题分解为一些小问题时会更容易解决。需要重点解释的是即使一个系统必须象“单片机”一样来实现,它也可以採用模组化设计。
软体体系(架构,Software Architecture)涉及到程式的两个重要特性:1) 模组的
层次结构。2) 数据结构。这源自于需求分析时将真实世界问题的含蓄定义与软体解决方案的要素关联起来的分割过程。当问题的每个部分通过一个或多个软体要素得到解决后,与问题的定义和解决相一致软体和数据结构的进化就开始了。这个过程代表了软体的需求分析和设计之间的位置。控制层级(Control Hierarchy)也称作程式结构,描述程式组件的组织并意味着控制层级。它并不描述软体的程式方面,比如进程顺序、决定的事件 / 命令、或工作循环。如下的层级图表展示了模组之间的通信流,并显示哪些模组是重複的。这个图表描述了一个能够读档案,计算每个记录的值并书写报表来显示记录的信息和所完成的计算。
软体设计软体设计
数据结构(Data structure)描述了单个数据间的逻辑关係。数据结构规定了数据的组织、访问方法、关联程度、和信息的选择处理。数据结构的组织和複杂性只受限于设计者的灵活性。唯一的限制就是经典数据结构的数量阻碍了更多的久经考验的结构出现。
软体程式(Software Procedure)着重于处理每个模组的细节并必须提供一个精确的处理规範,包括事件顺序、準确的判定点、重複操作、甚至数据结构。软体的程式表现是分层的,处理方法应该包括其所有子模组的参考。
信息隐藏(Information Hiding)的法则建议 由设计决定所刻划的模组特性应该对其余的模组不可见。换句话说,模组应被设计和指定为包含在模组内部且其他模组不可访问的内容对其他模组来说是无需的。隐藏意味着有效的模组性能够通过定义一套独立的模组来实现,这些模组相互之间的通信仅仅包括实现软体功能的所必须的信息。将使用信息隐藏作为设计标準在测试或今后的维护期间需要修改系统时带来了最大的好处。

设计方法论

设计过程中用以促成模组化设计的四个区域:模组(Module)、数据(Data)、体系(Architectural)和程式(Procedural)设计。
模组设计(Modular design) 降低了複杂性、便于修改、且使得支持
系统不同部分的并行开发实现起来更容易。模组类型提供的操作特性通过结合时间历史、激活机制、和控制模式来表现。在程式结构内部,模组可以被分类为:
软体设计软体设计
1. 顺序(sequential)模组,由套用程式引用和执行,但不能从表观上中断。
2. 增量(incremental)模组,可被套用程式先行中断,而后再从中断点重新开始。
3. 并行(parallel)模组,在多处理器环境下可以与其他模组同时执行。单独的模组更容易开发,因为功能可以被划分出来,而界面只是用来确保功能的独立。功能的独立性可以使用两个定性的标準来衡量:凝聚性 (cohesion)-衡量模组的功能强度的相关性,和耦合性(coupling)-衡量模组间的相互依赖的相关性。
数据设计(Data design)首先并且有些人也坚信,是最重要的设计行为。数据结构的影响和程式上的複杂性导致数据设计对软体质量有着深远的影响。这种质量由以下的原理来实施:
1、适用于功能和行为分析的系统分析原理同样应该适用于数据。
2、所有的数据结构,以及各自所完成的操作都应该被确定。
3、创建数据词典并用来详细说明数据和程式的设计。
4、底层的数据设计决定应该延迟至设计过程的后期。
5、数据结构的陈述(具体说明)应该只被那些直接使用包含在此结构内的数据的模组所知道。
6、有用的数据结构和操作库可以在适当的时候使用。
7、软体设计和程式语言应该支持抽象数据类型的规範和实现。
体系设计(Architectural Design)的主要目标是开发模组化的程式结
构并表达出模组间的控制相关性。另外,体系设计融合了程式结构与数据结构,以及使得数据得以在程式中流动的界面定义。这种方法鼓励设计者关注系统的整体设计而不是系统中单独的组件。选用不同的方法会採用不同的途径来接近体系的原点,但所有这些方法都应该认识到具有软体全局观念的重要性。程式设计(Procedural Design)在数据、程式结构、和陈述详细算法的说明都已使用类似英语的自然语言来呈现后,再确定程式设计。使用自然语言来陈述的原因是当开发小组的绝大多数成员使用自然语言来交流的话,那幺小组外的一个新手在不经学习的情况下会更容易理解这些说明。这里有个问题:程式设计必须毫无歧义的来详细说明程式,但我们都知道不含糊的自然语言也就不自然了。
软体设计软体设计

设计文档

在任何系统中,开发文档都是有价值的东西。当下已经有许多不同的经过发展的文档计画可供您在创建系统时候进行选择。软体设计的输出文档包括架构设计文档、详细设计文档、单元测试文档和集成测试文。其中相当不错的一种模型就是所谓的设计规範。第一部分展示了源自于系统说明和其他定义文档的设计成果的总体範围。第二部分展示的是涉及支持文档的详细说明。第三部分的内容又称作设计描述,在初步设计阶段完成。第四、五部分的内容将初步设计阶段的内容发展至详细设计阶段。第六部分展示了确保以下两条原则的交叉参考矩阵:
软体设计软体设计
1、用软体设计满足所有的需求。
2、指出实现特定需求的关键模组。
第七部分在开发测试程式(步骤)的第一步对系统的功能性和正确性进行测试是必要的。如果在开发设计规範的同时已经并行开发了详细的测试程式规範的话,本部分可以删除。第八部分详细说明了将系统打包传送至用户站点的考虑和要求。在文档剩下的第九、十部分中包括了算法描述、选择程式、列表数据、流程图、伪代码、数据流图表、以及所有在设计规範开发时所用到的相关信息都可以放在此处。

面向对象

面向对象的设计(OOD)通过模组化信息及其加工方法而不单单是加工方法来让数据对象和加工操作得以互相连线。这个过程依赖于三个极其重要的设计概念:抽象、信息隐藏、和模组化。所有的设计方法都力争展现这些特性;但只有 OOD 的机制才能使设计者能够无需增加複杂性或加以折衷就获得所有三种特性。在 OOD 中,我们有 objects (对象),operations (操作),和 messages (讯息)。Objects (对象),又称作类,可以是人、机器、命令、档案、汽车、房子,等等。operations (操作),包含了私有的数据结构和用于变换数据结构的加工方法。messages (讯息) 用于激活调用操作控制和对象的程式构造。这就是说对象的共享部分是其的接口而讯息在接口之间移动并指定希望使用对象的何种操作,但并不知道操作是怎样具体实现的。对象在收到讯息之后决定如何来执行讯息。以下是面向对象的系统中的某些工具的使用方法:
1. 伪代码 - 接近计算机程式语言的指令,但使用的是近似英语的语言而不是真正的程式语言以便于查看程式逻辑。下面是一个加工档案中的记录的範例 :
Start (开始)
Initialize program (初始化程式)
Read a record (读一个记录)
Process record (加工记录)
Move record to print area (将记录移至列印区)
Write a line (写一行)
End job (结束任务)
Stop run. (停止运行)
2. 原型 - 在开发软体包的第一个版本或模型,或者计算机硬体準备好作生产前测试时的步骤。通常可以使用您所喜爱的 RAD 工具来创建。
3. TOE 图表 - (Task 任务,Object 对象,Event 事件 图表) 用来展示需要完成的任务或工作、执行工作的对象、以及完成此过程的事件或动作。请看下面将两个数相加的 TOE 图表:
任务、对象、事件
启动程式 Main Form OnStartup
输入第一个数 EdtFirstNumber User types in
输入第二个数 EdtSecondNumber User types in
求和 EdtResult OnClick
程式退出 BtnExit OnClick
正如您在上例中所见,这正确说明了要执行什幺、谁来执行、以及什幺时候来执行。

发展方向

软体开发过程是随着开发技术的演化而随之改进的。从早期的瀑布式(Waterfall)的开发模型到后来出现的螺旋式的叠代(Spiral)开发,以后来开始兴起的敏捷开发方法(Agile),他们展示出了在不同的时代软体产业对于开发过程的不同的认识,以及对于不同类型项目的理解方法。
注意区分软体开发过程和软体过程改进之间的重要区别。诸如像ISO15504,ISO9000,CMM,CMMI这样的名词阐述的是一些软体过程改进框架,他们提供了一系列的标準和策略来指导软体组织如何提升软体开发过程的质量、软体组织的能力,而不是给出具体的开发过程的定义。
“敏捷开发”(AgileDevelopment)是软体工程的一个重要的发展。它强调软体开发应当是能够对未来可能出现的变化和不确定性作出全面反应的。
敏捷开发被认为是一种“轻量级”的方法。在轻量级方法中最负盛名的应该是“极限编程”(ExtremeProgramming),简称为XP)。而与轻量级方法相对应的是“重量级方法”的存在。重量级方法强调以开发过程为中心,而不是以人为中心。重量级方法的例子比如CMM、PSP、TSP。
面向侧面的程式设计(AspectOrientedProgramming),简称(AOP)被认为是软体工程的另外一个重要发展。这里的方面指的是完成一个功能的对象和函式的集合。在这一方面相关的内容有泛型编程(GenericProgramming)和模板。

标 签

搜索
随机推荐

Powered By 种豆资源网||