1、3.1 3.1 软件设计的任务软件设计的任务3.2 3.2 软件设计的步骤软件设计的步骤3.3 3.3 软件设计的模块化思想软件设计的模块化思想3.4 3.4 软件设计的原则软件设计的原则3.5 3.5 软件设计文档软件设计文档主要内容主要内容开发阶段的信息流3.1 软件设计的任务软件设计的任务软件设计的任务, ,就是把需求阶段产生的软件需求说明、就是把需求阶段产生的软件需求说明、逻辑系统转换为计算机可以实现的软件系统描述。逻辑系统转换为计算机可以实现的软件系统描述。软件需求解决“做什么”软件设计解决“怎么做”从软件需求规格说明书出发,形成软件的具体设计方案。实际问题现实的处理方法逻辑模型抽象
2、和逻辑计算机软件的处理方法实际问题解决方案1逻辑模型解决方案3解决方案2针对同一问题的不同形式的处理方法同一逻辑模型的不同的计算机解决方案软件设计实际工作中的误区软件设计实际工作中的误区1,软件设计阶段,开发人员不清楚某个系统功能2,忽略软件设计过程,直接进入代码编写阶段3,想的太多,导致软件实现复杂4,意图鱼和熊掌兼得5,一味迎合客户软件设计是后续开发步骤及软件维护工作的软件设计是后续开发步骤及软件维护工作的基础。如果没有设计,只能建立一个不稳定基础。如果没有设计,只能建立一个不稳定的系统结构的系统结构1,两种设计思路 由底向上(由底向上(Bottom-up design) 选择关键部分先设
3、计选择关键部分先设计 从局部开始扩展到整个系统从局部开始扩展到整个系统 自顶向下自顶向下 顶层开始顶层开始 逐步分解逐步分解3.2 3.2 软件设计步骤软件设计步骤软件的设计阶段是软件开发时期中最富有活力、最需要发挥创造精神的阶段。软件设计分为三个步骤:(1)概要设计(Preliminary design) 确定软件的结构以及各组成成分(子系统或模块)之间的相互关系。(2)详细设计(Detail design) 确定模块内部的算法和数据结构,产生描述各模块程序过程的详细文档。(3)设计复审(Design review) 通过复审指出的错误和测试指出的错误有同等重要的效果。开发中较早发现错误,可
4、减少错误扩大的机会。2. 2. 概要设计(概要设计(preliminary designpreliminary design)概要设计指基于功能层次结构,确定软件总体结构,制定测试计划,形成概要设计说明书。从工程管理的角度来看,软件设计分为概要设计和详细设计概要设计说明书由模块结构图、模块说明和测试计划构成 数据设计数据设计侧重于数据结构的定义。侧重于数据结构的定义。 系统结构设计系统结构设计定义软件系统各主要成份定义软件系统各主要成份之间的关系。之间的关系。 过程设计过程设计则是把结构成份转换成软件的则是把结构成份转换成软件的过程性描述。在编码步骤,根据这种过过程性描述。在编码步骤,根据这种
5、过程性描述,生成源程序代码,然后通过程性描述,生成源程序代码,然后通过测试最终得到完整有效的软件。测试最终得到完整有效的软件。从技术角度来看,软件设计分为从技术角度来看,软件设计分为数据设计、系统设计数据设计、系统设计和和过程设计过程设计2. 2. 详细设计(详细设计(detail designdetail design)其结果决定了最终的程序代码质量。详细设计说明书由每一模块的详细数据结构设计、详细流程设计和每一模块的测试实例组成。其结果决定了最终的程序代码质量。确定每一个模块内所采用的数据结构和处理算法,同时还要设计完成测试实例,形成详细设计说明书。采取自顶向下、逐步求精的方法。3. 3.
6、 设计复审(设计复审(design reviewdesign review)复审概要设计和详细设计的所有文档,以完成设计阶段工作。 正式复审(Formal Review) 非正式复审(informal review)设计文档也需要复审复审的方式分为设计复审的目的在于设计复审的目的在于及早发现设计中的缺陷和错误及早发现设计中的缺陷和错误复审的经济效益对比复审的经济效益对比3.3 3.3 软件设计的模块化思想软件设计的模块化思想软件系统的软件系统的模块化模块化是指整个软件被划分成若是指整个软件被划分成若干单独命名和可编址的部分,称之为干单独命名和可编址的部分,称之为模块模块。这些模块可以被组装起来
7、以满足整个问题的这些模块可以被组装起来以满足整个问题的需求。需求。把问题子问题的分解与软件开发中的系统子系统或系把问题子问题的分解与软件开发中的系统子系统或系统模块对应起来,就能够把一个大而复杂的软件系统划统模块对应起来,就能够把一个大而复杂的软件系统划分成易于理解的比较单纯的模块结构。分成易于理解的比较单纯的模块结构。模块模块是具有一定功能的可以用名词调用的程序语句集合。是具有一定功能的可以用名词调用的程序语句集合。3.3.1,模块化(Modularity) 模块化是好的软件设计的一个基本准则。模块化是好的软件设计的一个基本准则。 高层模块高层模块 从整体上把握问题从整体上把握问题,隐蔽细节
8、隐蔽细节 复杂问题复杂问题 较小问题较小问题 分解分解 可减小解题所需的总的工作可减小解题所需的总的工作分解分解分解、信息隐藏分解、信息隐藏和和模块独立性,模块独立性,是实现模是实现模块化设计的重要指导思想。块化设计的重要指导思想。例:将问题(P1+P2)分解为问题P1,问题P2设函数C(x)定义问题 x 的复杂程度函数E(x)确定解决问题 x 需要的工作量对问题P1和P2,如果: C(P1) C(P2)显然: E(P1) E(P2)试验发现:C(P1+P2) C(P1)+C(P2) E(P1+P2) E(P1)+E(P2) 各个击破理论模块数与开发工作量的关系模块数与开发工作量的关系成本或工
9、作量模块数量软件总成本集成成本成本/模块M最小成本区域模块划分得越小成本越低 ,但是集成成本却随着模块划分得越小成本越高。如何确定模块化分的最小成本区,并保证模块的最佳性能,是设计活动中的主要任务之一。3.3.2 3.3.2 抽象化(抽象化(AbstractionAbstraction) 软件系统进行模块设计时,可有不同的抽象层次。软件系统进行模块设计时,可有不同的抽象层次。 在最高的抽象层次上,可以使用问题所处环境的语言概在最高的抽象层次上,可以使用问题所处环境的语言概括地描述问题的解法。括地描述问题的解法。 在较低的抽象层次上,则采用过程化的方法。在较低的抽象层次上,则采用过程化的方法。(
10、1) 过程的抽象在软件工程中,从系统定义到实现,每进展一步都可以看做是对软件解决方法的抽象化过程的一次细化。 在软件需求分析阶段,用“问题所处环境的为大家所熟悉的术语”来描述软件的解决方法。 在从概要设计到详细设计的过程中,抽象化的层次逐次降低。当产生源程序时到达最低抽象层次。例: 开发一个CAD软件的三层抽象 抽象层次抽象层次. 用问题所处环境的术语来描述这个软件用问题所处环境的术语来描述这个软件:该软件包括一个计算机绘图界面,向绘图员显示图形,以及该软件包括一个计算机绘图界面,向绘图员显示图形,以及一个数字化仪界面,用以代替绘图板和丁字尺。所有直线、一个数字化仪界面,用以代替绘图板和丁字尺
11、。所有直线、折线、矩形、圆及曲线的描画、所有的几何计算、所有的剖折线、矩形、圆及曲线的描画、所有的几何计算、所有的剖面图和辅助视图都可以用这个面图和辅助视图都可以用这个CAD软件实现软件实现。n抽象层次. 任务需求的描述。CAD SOFTWARE TASKS user interaction task; 2-D drawing creation task; graphics display task; drawing file management task; end. 在这个抽象层次上,未给出“怎样做”的信息,不能直接实现。 抽象层次抽象层次. 程序过程表示。程序过程表示。 以以2-D (二
12、维二维)绘图生成任务为例绘图生成任务为例: PROCEDURE:2-D drawing creation REPEAT UNTIL (drawing creation task terminates) DO WHILE (digitizer interaction occurs) digitizer interface task; DETERMINE drawing request CASE; line: line drawing task; rectangle:rectangle drawing task; circle: circle drawing task; (2) 数据抽象数据抽象在
13、不同层次上描述数据对象的细节,定义与该数据对在不同层次上描述数据对象的细节,定义与该数据对象相关的操作。象相关的操作。例如,在例如,在CAD软件中,定义一个叫做软件中,定义一个叫做drawing的数据对的数据对象。可将象。可将drawing规定为一个抽象数据类型,定义它的规定为一个抽象数据类型,定义它的内部细节为内部细节为: TYPE drawing IS STRUCTURE DEFIND number IS STRING LENGTH(12); geometry DEFIND notes IS STRING LENGTH(256); BOM DEFIND END drawing TYPE;
14、数据抽象数据抽象drawing本身由另外一些数据抽象,如本身由另外一些数据抽象,如geometry、BOM (bill of materials) 构成构成 定义定义drawing的抽象数据类型之后,可引用它来定义的抽象数据类型之后,可引用它来定义其它数据对象,而不必涉及其它数据对象,而不必涉及drawing的内部细节的内部细节 例如,定义例如,定义:blue-print IS INSTANCE OF drawing;或或 schematic IS INSTANCE OF drawing;3.3.3 信息隐蔽和局部化模块所包含的信息,不允许其它不需要这些信息的模块访问,独立的模块间仅仅交换为完
15、成系统功能而必须交换的信息。由 Parnas 方法提倡的信息隐蔽是指,每个模块的实现细节对于其它模块来说是隐蔽的。也就是说,模块中所包含的信息(包括数据和过程)不允许其它不需要这些信息的模块使用。信息隐蔽信息隐蔽(Information Hiding)优点:优点:1,支持模块的并行开发;,支持模块的并行开发;2,减少修改或维护时的工作量;,减少修改或维护时的工作量;3,提高模块的独立性。扩充功能只需插入新模块。,提高模块的独立性。扩充功能只需插入新模块。分解、信息隐藏分解、信息隐藏和和模块独立性,模块独立性,是实现模块化设计的重要指导是实现模块化设计的重要指导思想。思想。信息局部化信息局部化
16、把关系密切的软件元素物理地放得彼此靠近。把关系密切的软件元素物理地放得彼此靠近。优点:可维护性好可靠性好可理解性好有助于实现信息隐藏3.3.4 模块的独立性模块的独立性n 在描述一个模块时,还必须按模块的外部特性与内部特性分别描述n 模块的外部特性u 模块的模块名、参数表、其中的输入参数和输出参数,以及给程序以至整个系统造成的影响n 模块的内部特性u 完成其功能的程序代码和仅供该模块内部使用的数据模块独立的含义:n 模块完成独立的功能n 符合信息隐蔽和信息局部化原则n 模块间关连和依赖程度尽量小模块的独立性概念:模块的独立性概念:SD方法提出的定性的度量标准: 模块之间的耦合性(Couplin
17、g) 模块自身的内聚性(Cohesion)耦合耦合内聚内聚1.1.模块独立性的度量之一:模块独立性的度量之一:耦合耦合描述模块间相对独立性(相互依赖程度)的度量无耦合没有依赖关系松散耦合有少量依赖关系紧密耦合有很多依赖关系 耦合强度依赖的因素:耦合强度依赖的因素:一模块对另一模块的引用一模块对另一模块的引用一模块向另一模块传递的数据量一模块向另一模块传递的数据量一模块施加到另一模块的控制的数量一模块施加到另一模块的控制的数量模块间接口的复杂程度模块间接口的复杂程度耦合性越高,模块独立性越弱。耦合性越高,模块独立性越弱。耦合强度的等级耦合强度的等级如果两个模块之间没有直接关系,它们之间的联系如果
18、两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,这就是完全是通过主模块的控制和调用来实现的,这就是非直接耦合。这种耦合的模块独立性最强。非直接耦合。这种耦合的模块独立性最强。(1 1)非直接耦合)非直接耦合(Nondirect Coupling)(Nondirect Coupling)如果一个模块访问另一个模块时,彼此之间是通如果一个模块访问另一个模块时,彼此之间是通过过简单数据参数简单数据参数 ( (不是控制参数、公共数据结构不是控制参数、公共数据结构或外部变量或外部变量) ) 来交换输入、输出信息的,则称这来交换输入、输出信息的,则称这种耦合为数据耦合。种耦合
19、为数据耦合。属于松散耦合属于松散耦合开发票计算水费单价数量金额(2 2)数据耦合)数据耦合 (Data Coupling)(Data Coupling)两个模块都要使用同一数据结构的一部分,不是采用全两个模块都要使用同一数据结构的一部分,不是采用全程公共数据区共享,而是通过模块接口传递数据结构的程公共数据区共享,而是通过模块接口传递数据结构的一部分(不是简单的数据),称为一部分(不是简单的数据),称为特征耦合特征耦合。( (不是简单数据,而是记录、数组等不是简单数据,而是记录、数组等) )加以联系,或都与加以联系,或都与一个一个数据结构数据结构有关系有关系, , 则这两个模块间存在则这两个模块
20、间存在标记偶合。标记偶合。(3 3)特征耦合)特征耦合 (Stamp Coupling)(Stamp Coupling)( (标记耦合标记耦合 ) )举例举例计算水电费计算水费计算电费住户情况住户情况“住户情况”是一个数据结构,图中模块都与此数据结构有关.“计算水费”和“计算电费”本无关,由于引用了此数据结构产生依赖关系,它们之间也是标记偶合.水费电费将特征耦合修改为数据耦合举例将特征耦合修改为数据耦合举例计算水电费计算水电费计算水费计算水费计算电费计算电费本月本月用水量用水量本月本月用电量用电量水费水费电费电费(4 4)控制耦合)控制耦合 (Control Coupling)(Control
21、 Coupling)如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,如右图。控制耦合举例控制耦合举例A计算平均分或最高分B平均/最高(控制信号)成绩读入分数输出结果计算平均分计算最高分平均/最高?B控制耦合增加了理解和编程的复杂性,调用模块必须知道被调模控制耦合增加了理解和编程的复杂性,调用模块必须知道被调模块的内部逻辑,增加了相互依赖,降低了独立性。块的内部逻辑,增加了相互依赖,降低了独立性。去除模块间控制耦合的方法:去除模块间控制耦合的方法:(1)(1)将被调用模块内的判定上移到调用模块中进行将被调用模块内的判定上移到调用模块中进行(2)(2)被调用模块分解成
22、若干单一功能模块被调用模块分解成若干单一功能模块改控制耦合为数据耦合举例AB1计算平均分平均成绩最高成绩计算最高分B2(5 5)外部耦合()外部耦合(External CouplingExternal Coupling)一组模块均与同一外部环境关联(例如,I/O模块与特定的设备、格式和通信协议相关联),它们之间便存在外部耦合。一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。 外部偶合必不可少,但这种模块数目应尽量少。(6 6)公共耦合)公共耦合(Common Coupling)(1)软件可维护性差,修改一个数据会影响所有模块;(2
23、)软件可靠性和适应性差;(3)软件可理解性降低,公共数据名的使用。(4)诊断错误困难(公共数据区及全程变量无保护措施)慎用公共数据区和全程变量!公共耦合存在的问题公共耦合存在的问题若一组模块都访问若一组模块都访问同一个公共数据环境同一个公共数据环境,则它们之间的耦,则它们之间的耦合就称为公共耦合。合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。存的公共覆盖区等。公共耦合的复杂程度随耦合模块的个数增加而显著公共耦合的复杂程度随耦合模块的个数增加而显著增加。若只是两模块间有公共数据环境,则公共耦增加。若只是两模
24、块间有公共数据环境,则公共耦合有两种情况。松散公共耦合和紧密公共耦合合有两种情况。松散公共耦合和紧密公共耦合。(7 7)内容耦合)内容耦合 (Content Coupling)如果发生下列情形,两个模块之间就发生了内容耦合 (1) 一个模块直接访问另一个模块的内部数据; (2) 一个模块不通过正常入口转到另一模块内部; (3) 两个模块有一部分程序代码重迭(只可能出现在汇编语言中); (4) 一个模块有多个入口。模块化设计的原则和目标模块化设计的原则和目标耦合是影响软件复杂程度和设计质量的重要因素耦合是影响软件复杂程度和设计质量的重要因素目标目标:建立模块间耦合度尽可能松散的系统:建立模块间耦
25、合度尽可能松散的系统(1) 尽量使用数据耦合少用控制耦合限制公共耦合的范围坚决避免使用内容耦合(2) 降低接口的复杂性(3) 把模块的通信信息放在缓冲区内如何降低模块间耦合度如何降低模块间耦合度:2. 2. 模块独立性的度量之二:内聚性模块独立性的度量之二:内聚性一个模块内部各成分彼此结合的紧密程度。一个模块内部各成分彼此结合的紧密程度。 偶然内聚:偶然内聚:各成分之间并没有关系,只是把分散在多处的功能合在一起 逻辑内聚:逻辑内聚:仅仅是逻辑功能相关成分合在一起 时间内聚:时间内聚:必须在同一时间执行,并无功能逻辑的成分合在一起 过程内聚:过程内聚:过程顺序相关的功能成分合在一起 通讯内聚:通
26、讯内聚:要对相同的外部数据进行操作的成分合在一起 顺序内聚:顺序内聚:一个内部成分的输出是另一个内部成分的输入,将它们合起来 功能内聚:功能内聚:只完成单一的功能内聚强弱的等级内聚强弱的等级设计目标设计目标高内聚高内聚 (模块在软件过程中完成单一的任务模块在软件过程中完成单一的任务)软件设计的概念和原理软件设计的概念和原理内聚:一个模块内各个元素彼此结合的紧密程度。偶然内聚:一个模块完成一组任务,任务之间的关系很松散。公共语句。逻辑内聚:若干个逻辑功能类似的任务组成一个模块。时间内聚:若干个任务必须在同一段时间内执行。如初始化工作。低内聚中内聚高内聚过程内聚:模块内的处理元素是相关的,且必须以
27、特定次序执行。通信内聚:模块中所有元素都使用同一个输入数据,和/或产生同一个 输出数据。顺序内聚:模块中所有处理元素和同一个功能密切相关,且这些处理必 须顺序执行。功能内聚:所有处理元素属于一个整体,完成一个单一的功能。模块A模块B模块CS1;S2;模块A模块B模块C模块A模块B模块C模块D(1 1)偶然内聚)偶然内聚(Coincidental Cohesion)又称为巧合内聚。当模块内各部分之间没有联系,或者即使有联系,这种联系也很松散,则称这种模块为巧合内聚模块,它是内聚程度最低的模块。缺点: 可修改性差; 可理解性差。(2 2)逻辑内聚)逻辑内聚(Logical Cohesion)这种模
28、块把几种相关的功能组合在一起,每次被调用时,由传送给模块的判定参数来确定该模块应执行哪一种功能。缺点:不易修改,效率低增强了耦合程度(控制耦合)(3 3)时间内聚)时间内聚(Classical Cohesion)例如例如:初始化系统模块、系统结束模块、紧急故障处理模块等均是时间性聚合模块.又称为经典内聚。这种模块大多为多功能模块,但模又称为经典内聚。这种模块大多为多功能模块,但模块的各个功能的执行与时间有关,通常要求所有功块的各个功能的执行与时间有关,通常要求所有功能必须在同一时间段内执行。能必须在同一时间段内执行。(4 4)过程内聚()过程内聚(Procedural CohesionProc
29、edural Cohesion)读入成绩单审查成绩单统计成绩打印成绩读入并审查成绩单统计并打印成绩单例如,把流程图中的循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。使用流程图做为工具设计程序时,把流程图中的使用流程图做为工具设计程序时,把流程图中的某一部分划出组成模块,就得到过程内聚模块。某一部分划出组成模块,就得到过程内聚模块。(5 5)通信内聚)通信内聚 (Communication Cohesion)如果一个模块内各如果一个模块内各功能部分都使用了功能部分都使用了相同的输入数据,相同的输入数据,或产生了相同的输或产生了相同的输出数据,则称之为出数据,则称之为通信内
30、聚模块。通通信内聚模块。通常,通信内聚模块常,通信内聚模块是通过数据流图来是通过数据流图来定义的。定义的。通信内聚模块例通信内聚模块例产生工产生工资报表资报表计算平计算平均工资均工资职工工职工工资记录资记录职工工资报表职工工资报表产生职工工资报表并计算平均工资模块产生职工工资报表并计算平均工资模块平均工资平均工资通信内聚模块例通信内聚模块例开领开领书单书单登记登记售书售书发票发票领书单领书单售售 书书登记表登记表文件文件删除删除修改修改(6 6)信息内聚)信息内聚 (Informational Cohesion)几个加工同时引用一个共同的数据这种模块这种模块完成多个功能完成多个功能,各个功能都
31、在同一数据结构上操各个功能都在同一数据结构上操作作,每一项功能有一个唯一的入口点。这个模块将根据不,每一项功能有一个唯一的入口点。这个模块将根据不同的要求,确定该执行哪一个功能。由于这个模块的所有同的要求,确定该执行哪一个功能。由于这个模块的所有功能都是基于同一个数据结构(符号表),因此,它是一功能都是基于同一个数据结构(符号表),因此,它是一个信息内聚的模块。个信息内聚的模块。(7 7)功能内聚)功能内聚 (Functional Cohesion)一个模块中各个部分都是一个模块中各个部分都是完成某一具体功能完成某一具体功能必不可少的组必不可少的组成部分,或者说该模块中所有部分都是为了完成一项
32、具体成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割的。则称该模块为功能而协同工作,紧密联系,不可分割的。则称该模块为功能内聚模块。功能内聚模块。模块内聚判定树模块内聚判定树3.4 软件设计的原则软件设计的原则1,提高模块的独立性,提高模块的独立性通过模块分解或合并,降低耦合提高内聚。通过模块分解或合并,降低耦合提高内聚。提取相同部分2,调整模块的大小,调整模块的大小 模块的大小可用模块中所含语句的数量多少来衡量。 通常语句行数为50-100行,一页纸之内。 软件的深度(Depth):控制的层数 软件的宽度(Width):控制的跨度 模块的扇出(Fanout
33、):该模块直接控制的模块数。 模块的扇入(Fanin):能直接控制该模块的模块数。3,适当的模块深度、宽度、扇出和扇入,适当的模块深度、宽度、扇出和扇入4,模块的作用范围应在控制范围之内,模块的作用范围应在控制范围之内MAGBCEFD5,简化模块接口的复杂程度,简化模块接口的复杂程度n例如:求一元二次方程的根的模块例如:求一元二次方程的根的模块方案1:QUAD_ROOT(TBL,X) 其中用数组TBL传送方程系数, 用数组X回送求得的根。方案2:QUAD_ROOT(A,B,C,ROOT1,ROOT2) 其中A,B,C是方程系数, ROOT1,ROOT2是求得的根方案方案1使用使用标记耦合标记耦
34、合,方案方案2使用使用数据耦合数据耦合,接口简单,设计合理。,接口简单,设计合理。3.5 3.5 软件设计的后处理软件设计的后处理 为每一个模块写一份处理说明 为每一个模块提供一份接口说明 确定全局数据结构和局部数据结构 指出所有的设计约束和限制 进行概要设计的评审 进行设计的优化(如果需要和可能的话)概要设计阶段的文件主要是概要设计阶段的文件主要是概要设计说明书概要设计说明书,又称为系统,又称为系统设计说明书。设计说明书。编写本说明的目的,是说明对程序系统的设计考虑,包括编写本说明的目的,是说明对程序系统的设计考虑,包括程序系统的基本处理流程、程序系统的组织机构、功能分程序系统的基本处理流程
35、、程序系统的组织机构、功能分配、模块划分、接口设计、运行设计、数据结构设计和出配、模块划分、接口设计、运行设计、数据结构设计和出错处理设计等,为系统的详细设计打下基础。概要设计说错处理设计等,为系统的详细设计打下基础。概要设计说明书是概要设计阶段结束时提交的技术文档。除了概要设明书是概要设计阶段结束时提交的技术文档。除了概要设计说明书之外,还有用户手册、测试计划等文件。见下表计说明书之外,还有用户手册、测试计划等文件。见下表概要设计说明书1 引言11目的12背景13定义14参考资料2 概要设计 21 需求规定 22 运行规定 23 基本设计原则与处理流程 24 结构 25 功能需求与程序关系
36、26 人工处理过程 27 未解决问题3 总体设计 3.1 处理流程 3.2 总体结构和模块外部设计 3.3 功能分配4 接口设计 41 用户接口(用户界面) 42 内部接口(模块间) 43 外部接口(软硬件间)5 数据结构设计 51 逻辑结构设计 52 物理结构设计 53 设计结构与程序的关系6 运行设计 61 运行模块组合 62 运行控制 63 运行时间7 出错处理设计 71 出错输出信息 72 出错处理721 后备技术722 恢复技术723 再启动技术724 性能降级技术8 安全保密设计概要设计概要设计评审评审 可追溯性可追溯性:确认该设计是否复盖了所有已确定:确认该设计是否复盖了所有已确
37、定的软件需求,软件每一成份是否可追溯到某一的软件需求,软件每一成份是否可追溯到某一项需求项需求 接口接口:确认该软件的内部接口与外部接口是否:确认该软件的内部接口与外部接口是否已经明确定义。模块是否满足高内聚和低耦合已经明确定义。模块是否满足高内聚和低耦合的要求。模块作用范围是否在其控制范围之内的要求。模块作用范围是否在其控制范围之内 风险风险:确认该设计在现有技术条件下和预算范:确认该设计在现有技术条件下和预算范围内是否能按时实现围内是否能按时实现 实用性实用性:确认该设计对于需求的解决方案是否:确认该设计对于需求的解决方案是否实用实用 技术清晰度技术清晰度:确认该设计是否以一种易于翻译成:
38、确认该设计是否以一种易于翻译成代码的形式表达代码的形式表达 可维护性可维护性:确认该设计是否考虑了方便未来的维:确认该设计是否考虑了方便未来的维护护 质量质量:确认该设计是否表现出良好的质量特征:确认该设计是否表现出良好的质量特征 各种选择方案各种选择方案:看是否考虑过其它方案,比较各:看是否考虑过其它方案,比较各种选择方案的标准是什么种选择方案的标准是什么 限制限制:评估对该软件的限制是否现实,是否与需:评估对该软件的限制是否现实,是否与需求一致求一致 其它具体问题其它具体问题:对于文档、可测试性、设计过程:对于文档、可测试性、设计过程.等进行评估等进行评估详细设计阶段应交付的文件有: 1)
39、详细设计说明书;详细设计说明书; 2)初步的模块开发卷宗。初步的模块开发卷宗。模块开发卷宗是在模块开发过程中逐步编写出来的,每完成一个模块或一组密切相关的模块的复审时编写一份,应该把所有的模块开发卷宗汇集在一起。编写的目的是记录和汇总低层次开发的进度和结果,以便于对整个模块开发工作的管理和复审,并为将来的维护提供非常有用的技术信息。详细设计说明书详细设计说明书1 引言1.1 编写目的:阐明编写详细设计说明书的目的,指明读者对象。1.2 项目背景:应包括项目的来源和主管部门等。1.3 定义:列出本文档中所用到的专门术语的定义和缩写词。 列出有关资料的作者、标题、编号、发表日期、出版单位或资料来源
40、 文档所引用的资料、软件开发的标准或规范。1.4 参考资料:项目经核准的计划任务书、合同或上级机关的批文;项目开发计划;需求规格说明书;概要设计说明书;测试计划(初稿);用户操作手册。2 总体设计2.1 需求概述2.2 软件结构:如给出软件系统的结构图。3 程序描述3.1 逐个模块给出以下说明: 性能 输出项目 功能 输入项目3.2 算法:模块所选用的算法。3.3 程序逻辑:详细描述模块实现的算法,可采用:标准流程图;PDL语言;N-S图;判定表等描述算法的图表。3.4 接口 限制条件 存储分配3.5测试要点:给出测试模块的主要测试要求。设计规格说明的评审设计规格说明的评审 为了确保文档的质量
41、,还必须对设计文档进行评审。评审的目的在于及早发现设计中的缺陷和错误。 评审包括软件总体结构、数据结构、结构之间的界面以及模块过程细节四个方面,重点考虑:软件结构能否满足需求?结构的形态是否合理?层次是否清晰?模块的划分是否遵循模块化和信息隐蔽的思想?系统的人机界面、各模块的接口以及出错处理是否恰当?模块的设计能否满足功能与性能要求?选择的算法与数据结构是否合理,能否适应编程语言,等等。设计规格说明的评审设计规格说明的评审 评审分正式与非正式的两种方式。 正式评审除软件开发人员外,还邀请用户代表和领域专家参加,通常采用答辩形式,与会者有备而来(即提前审阅了文档),设计人员在对设计方案详细说明后,答复与会者的问题并记下各种重要的评审意见。 非正式评审多少有些同行切磋的性质,不拘时间,不拘形式。 需求阶段使用的“走查”法同样适用于设计评审,此时由一名设计人员带领到会的同事逐行审阅文档,记录发现的问题。 评审应对事不对人,防止把评审变为质询或辩论。最后,对评审中提出的问题应详细记录。评审结束前,还应对本次评审做出结论。谢 谢!