1、2体系构造设计n目标目标n 确定系统构造:构件的特征及构件之间的关系;确定系统构造:构件的特征及构件之间的关系;n 把软件需求变换为构件及其接口的定义;把软件需求变换为构件及其接口的定义;n 逻辑模型逻辑模型 实现模型。实现模型。n实施者实施者n 系统架构师系统架构师n 3n主要输出主要输出n-体系构造设计文档体系构造设计文档(ADD-Architectural Design Document);n-详细设计阶段的软件工程管理方案详细设计阶段的软件工程管理方案(SPMP/DD);n-详细设计阶段的软件配置管理方案详细设计阶段的软件配置管理方案(SCMP/DD);n-详细设计阶段的软件验证与确认
2、方案详细设计阶段的软件验证与确认方案(SVVP/DD);n-详细设计阶段的软件质量保证方案详细设计阶段的软件质量保证方案(SQAP/DD);n-集成测试方案集成测试方案(SVVP/IT).n-进度报告和配置状态审计报告。进度报告和配置状态审计报告。4n参与者参与者 开发者、用户代表、硬件工程师、操作人员。n过程过程 56n体系构造设计的根本原那么体系构造设计的根本原那么n -考虑多种设计方案;考虑多种设计方案;n -设计应该可跟踪到需求模型;设计应该可跟踪到需求模型;n -设计应尽可能地重用设计经历;设计应尽可能地重用设计经历;n -软件的构造应与问题域的构造相近;软件的构造应与问题域的构造相
3、近;n -设计模型应该符合统一标准;设计模型应该符合统一标准;n -设计不是编码,编码也不是设计;设计不是编码,编码也不是设计;n -对设计模型进展质量评审,而不是事后进展修改。对设计模型进展质量评审,而不是事后进展修改。7设计的根本概念n抽象抽象AbstractionAbstraction n -抽象是人类在解决复杂问题时经常采用的一种思维方抽象是人类在解决复杂问题时经常采用的一种思维方式,它是指将现实世界中具有共性的一类事物的相似的、式,它是指将现实世界中具有共性的一类事物的相似的、本质的方面集中概括起来,而暂时忽略它们之间的细节差本质的方面集中概括起来,而暂时忽略它们之间的细节差异。在系
4、统开发中运用抽象的概念,可以将复杂问题的求异。在系统开发中运用抽象的概念,可以将复杂问题的求解过程分层,在不同的抽象层上实现难度的分解。在抽象解过程分层,在不同的抽象层上实现难度的分解。在抽象级别较高的层次上,可以将琐碎的细节信息暂时隐藏起来,级别较高的层次上,可以将琐碎的细节信息暂时隐藏起来,以利于解决系统中的全局性的问题。以利于解决系统中的全局性的问题。n -在最高抽象层,其中的概念与问题域有关;在最高抽象层,其中的概念与问题域有关;n -在最低抽象层,其中的概念与计算相关。在最低抽象层,其中的概念与计算相关。8n细化细化Refinementn -一种自顶向下的设计策略;一种自顶向下的设计
5、策略;n -细节逐渐增加细节逐渐增加n n 逐步求精是人类解决复杂问题时采用的根本方法,也是许逐步求精是人类解决复杂问题时采用的根本方法,也是许多软件工程技术例如,规格说明技术,设计和实现技术的根多软件工程技术例如,规格说明技术,设计和实现技术的根底。可以把逐步求精定义为:底。可以把逐步求精定义为:“为了能集中精力解决主要问题而为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。尽量推迟对问题细节的考虑。n 逐步求精之所以如此重要,是因为人类的认知过程遵守逐步求精之所以如此重要,是因为人类的认知过程遵守Miller法那么:一个人在任何时候都只能把注意力集中在法那么:一个人在任何时候都只能把注
6、意力集中在72个知识块上。个知识块上。n Miller法那么是人类智力的根本局限,我们不可能战胜自法那么是人类智力的根本局限,我们不可能战胜自己的自然本性,只能承受这个事实,成认自身的局限性,并在这己的自然本性,只能承受这个事实,成认自身的局限性,并在这个前提下尽我们的最大努力工作。个前提下尽我们的最大努力工作。9n软件体系构造软件体系构造Software Architecturen -体系构造是一种构件的层次化构造、构件之间的交互体系构造是一种构件的层次化构造、构件之间的交互方式、构件使用的数据构造;方式、构件使用的数据构造;n -构件表示系统的功能单元。构件表示系统的功能单元。10有效地模
7、块化设计n模块化是指将整个系统划分为假设干个模块,每个模块用于实现一个特定的功能。划分模块对于解决大型复杂的问题是非常必要的,可以大大降低解决问题的难度。n n -设C(x)为问题x所对应的复杂度函数,E(x)为解决问题x所需要的工作量函数。对于两个问题P1和P2,如果:n C(P1)C(P2)即问题P1的复杂度比P2高,那么显然有:n E(P1)E(P2)即解决问题P1比P2所需的工作量大。11-在人们解决问题的过程中,发现存在有另一个有趣的规律:C(P1+P2)C(P1)+C(P2)即解决由多个问题复合而成的大问题的复杂度大于单独解决各个问题的复杂度之和。也就是说,对于一个复杂问题,将其分
8、解成多个小问题来分别解决比较容易。由此可以推出:E(P1+P2)E(P1)+E(P2)即将复杂问题分解成假设干个小问题,各个击破,所需要的工作量小于直接解决复杂问题所需的工作量。-根据上面的推理,可以得到这样一个结论:模块化可以降低解决问题的复杂度,从而降低系统开发的工作量。12-但是不是模块划分得越多越好呢?虽然增加程序中的模块数可以降低开发每个模块的工作量,但同时却增加了设计模块接口的工作量。模块数与系统开发本钱模块数与系统开发本钱 13 采用模块化设计可以带来以下好处:1模块化使系统构造清晰,容易设计也容易阅读和理解。2程序错误通常局限在有关的模块及它们之间的接口中,所以模块化能使系统容
9、易测试和调试,从而有助于提高系统的可靠性。3系统的变动往往只涉及少数几个模块,所以模块化还能够提高系统的可修改性。4模块化使得一个复杂的大型程序可以由许多程序员分工编写,并且可以进一步分配技术熟练的程序员编写困难的模块,有助于系统开发工程的组织管理。5模块化还有利于提高程序代码的可重用性。14n模块独立性模块独立性n-模块独立性是指每个模块只完成系统要求的独立的子功模块独立性是指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。能,并且与其他模块的联系最少且接口简单。n-模块独立性可以从两个方面来衡量:模块本身的内聚和模块独立性可以从两个方面来衡量:模块本身的内聚和模块
10、之间的耦合。前者反映的是模块内部各个成分之间的模块之间的耦合。前者反映的是模块内部各个成分之间的联系,所以也称块内联系;后者反映的是一个模块与其他联系,所以也称块内联系;后者反映的是一个模块与其他模块之间的联系,所以又称块间联系。模块的独立性越高,模块之间的联系,所以又称块间联系。模块的独立性越高,那么块内联系越强,块间联系越弱,因此必须尽可能得设那么块内联系越强,块间联系越弱,因此必须尽可能得设计出高内聚低耦合的模块。计出高内聚低耦合的模块。15n内聚内聚Cohesion n 模块的内聚是指模块内部各成分间联系的严密程度。一模块的内聚是指模块内部各成分间联系的严密程度。一个模块内部各成分之间
11、的联系越严密,该模块独立性越高。个模块内部各成分之间的联系越严密,该模块独立性越高。按照由弱到强的顺序,把模块的内聚分为按照由弱到强的顺序,把模块的内聚分为7种类型。种类型。16 1偶然性内聚 当几个模块内正好有一段代码是一样的,将它们抽取出来形成单独的模块,即偶然性内聚模块。偶然性内聚是内聚程度最低的一种,具有偶然性内聚的模块独立性差,不容易理解和修改,会给系统开发带来很大的困扰,出错的机率要比其他类型的模块大得多,因此在系统设计时应尽量防止。17 2逻辑性内聚 逻辑性内聚指模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。如将产生各种类型错误的信息输出放在一个模块,或将从不
12、同设备上的输入放在一个模块,形成一种单入口多功能模块。这种模块内聚程度有所提高,但不易修改,因为当某个调用模块要求修改此模块公用代码时,而另一些调用模块又不要求修改。另外,调用时需要进展控制参数的传递,造成模块间的控制耦合,而且在调用此模块时,不用的局部也占据了主存,从而降低了系统效率。18 3时间性内聚 假设一个模块包含了需要在同一时间段中执行的多个任务,那么称该模块的内聚为时间性内聚。例如,将多个变量的初始化放在同一个模块中实现,或将需要同时使用的多个库文件的翻开操作放在同一个模块中,都会产生时间性内聚的模块。由于时间性内聚模块中的各个局部在时间上的联系,其内聚程度比逻辑性内聚高一些。但这
13、样的模块往往会和其他相关模块有着严密的联系,因而会造成耦合性的增加。194过程性内聚 当一个模块中包含的一组任务必须按照某一特定的次序执行时,就称为过程性内聚模块。如用高斯消去法解线性方程组的流程为:建立方程组系数矩阵高斯消去回代,将其纳入一个模块中就形成了一个过程性内聚模块。20 5通信性内聚 如果一个模块内各功能局部都使用了一样的输入数据,或产生了一样的输出数据,那么称之为通信性内聚模块。通信性内聚的模块各局部都严密相关于同一数据(或者数据构造),所以内聚性要高于前几种类型。同时,如果把某一数据构造、文件及设备等操作都放在一个模块内,可到达信息隐藏的作用。21 6顺序性内聚 假设一个模块中
14、的各个局部都与同一个功能密切相关,并且必须按照先后顺序执行(通常前一个局部的输出数据就是后一个局部的输入数据),那么称该模块的内聚为顺序性内聚。由于顺序性内聚模块中的各个局部在功能和执行顺序上都密切相关,因此内聚程度很高且易于理解。22 7功能性内聚 一个模块中各个局部都是为了完成某一具体功能必不可少的组成局部,或者说该模块中所有局部都是为了完成一项具体功能而协同工作,严密联系,不可分割的,那么称该模块为功能性内聚模块。功能性内聚是所有内聚中内聚程度最高的一种,功能性内聚的模块易理解、易修改,有利于实现模块的重用,从而提高了系统开发的效率。23 综上所述,对于内聚应该采取这样的设计原那么:-禁
15、用偶然性内聚和逻辑性内聚,-限制使用时间性内聚,-少用过程性内聚和通信性内聚,-提倡使用顺序性内聚和功能性内聚。24n耦合耦合 模块的耦合是指模块之间相互联系的程度。相互联系复杂的模块耦合度强,模块独立性低;相互联系简单的模块耦合度弱,模块独立性高。按照由弱到强的顺序,把模块的耦合也分为7种类型。25 1非直接耦合 非直接耦合是指两个模块之间没有直接关系,相互之间没有信息传递,它们之间的联系完全是通过主模块的控制和调用来实现的。因此,模块间的这种耦合性最弱,但模块独立性最高。2数据耦合 数据耦合是指假设两个模块之间仅通过模块参数交换信息,且交换的信息全部为简单数据信息,相当于高级语言中的值传递
16、,那么称这种耦合为数据耦合。数据耦合的耦合程度较低,模块的独立性较高。通常软件系统中都包含有数据耦合。26 3特征耦合 特征耦合是指两个模块之间传递的是数据构造。其实模块间传递的是这个数据构造的地址,两个模块必须清楚这些数据构造,并按要求对其进展操作,这样就降低了可理解性。可采用“信息隐蔽的方法,把该数据构造以及在其上的操作全部集中在一个模块,就可消除这种耦合,但有时因为还有其他功能的缘故,特征耦合往往是不可防止的。274控制耦合 控制耦合是指一个模块调用另一个模块时,传递的是控制变量(如开关、标志等),被调模块通过该控制变量的值有选择地执行块内某一功能。因此被调模块内应具有多个功能,哪个功能
17、起作用受其调用模块的控制。控制耦合增加了理解、编程及修改的复杂性,调用模块必须知道被调模块内部的逻辑关系,即被调模块处理细节不能“信息隐藏,从而降低了模块的独立性。28 5外部耦合 外部耦合是指一组模块访问同一个全局变量。6公共耦合 公共耦合是指一组模块访问同一个全局性数据构造。如果在模块之间共享的数据很多,且通过参数的传递很不方便时,才使用公共耦合。29公共耦合会引起以下问题:耦合的复杂程度随模块的个数增加而增加,无法控制各个模块对公共数据的存取,假设某个模块有错,可通过公共区将错误延伸到其他模块,那么会影响到系统的可靠性。使系统的可维护性变差。假设某一模块修改了公共区的数据,那么会影响到与
18、此有关的所有模块。降低了系统的可理解性。因为各个模块使用公共区的数据,使用方式往往是隐含的,某些数据被哪些模块共享,不易很快搞清。30 7内容耦合 如果发生以下情形,两个模块之间就发生了内容耦合。一个模块可以直接访问另一个模块的内部数据;一个模块不通过正常入口转到另一模块内部;一个模块有多个入口。内容耦合是最高程度的耦合,也是最差的耦合。它会使因模块间的联系过于严密而对后期的开发和维护工作带来很大的麻烦。31 综上所述,对于耦合应该采取这样的设计原那么:尽量使用非直接耦合、数据耦合和特征耦合,少用控制耦合和外部耦合,限制公共耦合,完全不用内容耦合。32n封装封装/信息隐藏信息隐藏 n 应用模块
19、化设计原理时,自然会产生的一个问题是:应用模块化设计原理时,自然会产生的一个问题是:“为了得到最好的一组模块,应该怎样分解系统呢?为了得到最好的一组模块,应该怎样分解系统呢?n 信息隐蔽原理指出:应该这样设计和确定模块,信息隐蔽原理指出:应该这样设计和确定模块,使得一个模块内包含的信息使得一个模块内包含的信息(过程和数据过程和数据)对于不需要这对于不需要这些信息的模块来说,是不能访问的。些信息的模块来说,是不能访问的。n 这一原理是由这一原理是由D.L.Parnas在在1972年提出的,也年提出的,也就是说有效的模块化可以通过一组独立的模块来实现,就是说有效的模块化可以通过一组独立的模块来实现
20、,这些独立的模块彼此间仅仅交换那些为了完成系统功能这些独立的模块彼此间仅仅交换那些为了完成系统功能而必须交换的信息。而必须交换的信息。33n接口和实施别离接口和实施别离n 接口和实施别离包括通过描述一个公共接口定义一个构接口和实施别离包括通过描述一个公共接口定义一个构件,这是外界可知的,与构件的实施细节是分开的。件,这是外界可知的,与构件的实施细节是分开的。n充分性、完整性充分性、完整性 n 充分性、完整性意味着一个软件构件包含了一个抽象的充分性、完整性意味着一个软件构件包含了一个抽象的所有重要所有重要 特征。特征。34软件设计模型的描述软件设计模型的描述-存在很多符号和语言描述设计结果。有的
21、用于描述设计的构造组织,有的用于描述软件行为。有些符号主要用于体系构造设计,有的那么主要在详细设计时使用。此外,一些符号主要与具体的方法有关。-可以分为两类符号:描述构造视图静态和描述行为视图动态视图。35n构造描述构造描述(静态视图静态视图)n-体系构造描述语言体系构造描述语言:文本、形式化语言,以构件和连接子文本、形式化语言,以构件和连接子connectors描述软件构造;描述软件构造;n-类和对象图类和对象图:用于描述类及类之间的关系;用于描述类及类之间的关系;n-构件图构件图:用于描述一个系统中的构件及构件间的关系;用于描述一个系统中的构件及构件间的关系;36-分布图:用于描述物理节点
22、和节点之间的关系一个系统的物理模型;-实体-关系图:用于描述信息系统中数据的概念模型;-构造图:用于描述程序的调用构造。37部署图部署图ClientPCGUIC2C1C1C2C3Server38n行为描述行为描述(动态视图)-活动图:用于表示状态机中从活动到活动的控制流;-协作图:用于表示一组对象之间的交互,重点在于对象、对象之间的连接和连接上的信息交换;-数据流图:用于表示一组过程之间的数据流;-决策表和决策图:用于表示复杂的条件和活动组合;39-序列图:用于表示一组对象之间的交互,它强调的是消息的时间顺序;-状态转移图:用于表示状态机中从状态到状态的控制流;-形式化标准语言:利用基于数学符
23、号例如,logic,set,sequence的文本语言严格、抽象地定义软件构件接口和行为,通常以pre-and post-conditions的形式出现;-伪码和程序设计语言Pseudo-code and procedure design languages(PDLs):构造化的、与编程语言类似的、在详细设计阶段用于描述过程procedure或方法行为的语言。40体系构造设计方法n构造化设计构造化设计n-用构造图描述层次化的控制流和数据流;用构造图描述层次化的控制流和数据流;n-用伪码用伪码Pseudo Code描述处理过程。描述处理过程。414243例子例子:44 完成第一级分解,设计系统的
24、上层模块。完成第一级分解,设计系统的上层模块。工资计算系统的一级分解结果如以下图所示。工资计算系统的一级分解结果如以下图所示。45 完成二级分解后,工资计算系统的软件构造如以下图所示(图中省略了模块调用传递的信息)。46OOD设计活动:系统设计、对象设计、数据管理设计设计活动:系统设计、对象设计、数据管理设计-系统设计的主要目标描述软件体系构造。系统设计的主要目标描述软件体系构造。-对象设计强调对象描述和对象之间交互的描述。在对象设对象设计强调对象描述和对象之间交互的描述。在对象设计阶段,产生数据构造和算法。计阶段,产生数据构造和算法。-数据管理设计建立一组类和协同,使得系统能够管理永久数据管
25、理设计建立一组类和协同,使得系统能够管理永久性数据例如,文件和数据库。性数据例如,文件和数据库。47n系统设计过程系统设计过程 1 把分析模型划分为子系统;2 识别由问题域所决定的并发性;3 把子系统分配给处理器和任务;4 设计用户界面;5 选择实施数据管理的根本策略;6 识别全局资源和访问这些资源的控制机制;7 制定集成测试方案;488 制定详细设计阶段的方案 SPMP/DD,SCMP/DD,SVVP/DD,SQAP/DD9 评审 -体系构造设计文档 和集成测试方案由 用户、开发者、管理层和质量保证人员进展正式评审;-SPMP/DD,SCMP/DD,SVVP/DD,SQAP/DD由管理层和质
26、量保证人员进展评审。49定义子系统时,要遵循以下设计准那么:子系统应该具有良好的界面定义,可以与系统的其它局部进展通信;除了少数“通信构件外,构件之间的相互协同应该发生在子系统内部;子系统的数量应该较少;一个子系统可以进一步分解以减少复杂性。50n用户界面用户界面 n -OOA 模型包含了模型包含了use-cases和角色描述,这是用户界和角色描述,这是用户界面设计过程的输入。面设计过程的输入。n -一旦一旦actor和和use-cases被定义,一个命令层次被定义,一个命令层次command hierarchy就可以被定义。命令层次定义就可以被定义。命令层次定义了系统的主系统菜单类了系统的主
27、系统菜单类(menu bar或或tool palette)和所有和所有的子功能。重复细化命令层次直到通过浏览功能层次每个的子功能。重复细化命令层次直到通过浏览功能层次每个use-case都被实施为止。都被实施为止。51n数据管理数据管理-一个数据库管理系统通常用于所有子系统共有数据的存储。-数据管理构件设计包括管理对象所需的属性和操作。52n对象设计过程对象设计过程 n 对象设计侧重于属性类型的说明、操作的算法、对象之对象设计侧重于属性类型的说明、操作的算法、对象之间的连接。间的连接。n-对象描述对象描述n 对象的设计描述:对象的设计描述:(1)协议描述:通过定义对象承受的协议描述:通过定义对
28、象承受的每一个消息和相关操作建立对象接口;每一个消息和相关操作建立对象接口;(2)每一个操作的每一个操作的实施细节。实施细节。n-设计算法和数据构造设计算法和数据构造n 在很多情况下,在很多情况下,算法是一个简单的计算序列。如果操算法是一个简单的计算序列。如果操作的标准比较复杂,可能需要进展模块化。作的标准比较复杂,可能需要进展模块化。n 数据构造的设计与算法设计同时进展。由于操作涉及数据构造的设计与算法设计同时进展。由于操作涉及类属性,数据构造的设计对算法设计有影响。类属性,数据构造的设计对算法设计有影响。53n设计模式设计模式Design Patternsn 在在OOD过程中,软件工程师应
29、该寻找时机复用已有的设过程中,软件工程师应该寻找时机复用已有的设计模式。计模式。54nOOD 模型评审模型评审 n-一旦一旦OOD模型创立完毕,就需要进展系统设计和对象设模型创立完毕,就需要进展系统设计和对象设计的评审。通过检查计的评审。通过检查OOA模型中的对象行为模型,将所模型中的对象行为模型,将所需的系统行为映射到完成这些行为的子系统的方式进展评需的系统行为映射到完成这些行为的子系统的方式进展评审。在系统行为的上下文内评审并发性和任务分配。评估审。在系统行为的上下文内评审并发性和任务分配。评估系统的行为状态确定并发性。系统的行为状态确定并发性。Use-case被用来评审用户界被用来评审用
30、户界面设计。面设计。n-利用对象关系模型检查对象模型以保证所有设计对象包利用对象关系模型检查对象模型以保证所有设计对象包含必需的属性和操作。此外,操作的详细标准可以利用传含必需的属性和操作。此外,操作的详细标准可以利用传统的审查技术进展评审。统的审查技术进展评审。55软件体系构造设计标准软件体系构造设计标准 1 前言Introduction 1.1 目的Purpose 1.2 范围Scope 1.3 定义,首字母缩略词和简写Definitions,acronyms and abbreviations 1.4参考文献References 1.5文档概要Overview2 系统概要System O
31、verview3 系统上下文System Context3.n 外部接口定义External interface definition564 系统设计System Design 4.1 设计方法Design method 4.2 分解描述Decomposition description5 构件描述Component Description 5.n 构件标识符Component identifier 5.n.1 类型Type 5.n.2 目的Purpose 5.n.3 功能Function 5.n.4 子构件Subordinates 5.n.5 依赖性Dependencies 5.n.6 接口
32、Interfaces 5.n.7 资源Resources 5.n.8 参考文献References 5.n.9 处理Processing 5.n.10 数据Data576 可行性和资源估计Feasibility and Resource Estimates7 软件需求与构件跟踪矩阵Software Requirements vs Components Traceability matrix581 前言前言Introduction本节应提供整个文档的概览和软件范围的描述。本节应提供整个文档的概览和软件范围的描述。This section should provide an overview of
33、 the entire document and a description of the scope of the software.1.1 文档的目的文档的目的Purpose of the document本节应该本节应该:-描述描述ADD的目的的目的describe the purpose of the particular ADD;-描述描述ADD的潜在读者的潜在读者specify the intended readership of the ADD。591.2 软件范围软件范围Scope of the software本节应本节应:-描述软件产品的名字描述软件产品的名字identif
34、y the software product(s)to be produced;-解释软件将要做什么、不能做什么解释软件将要做什么、不能做什么explain what the proposed software will do(and will not do,if necessary);-尽可能准确地描述系统产生的利益、实现的目标尽可能准确地描述系统产生的利益、实现的目标describe the relevant benefits,objectives and goals as precisely as possible;-如果存在高层标准,那么应该与其描述相一致如果存在高层标准,那么应该与其
35、描述相一致be consistent with similar statements in higher-level specifications,if they exist。601.3定义,首字母缩略词和简写定义,首字母缩略词和简写Definitions,acronyms and abbreviations这一节应提供这一节应提供ADD中所用到的所有术语、缩写、简写的定义,中所用到的所有术语、缩写、简写的定义,或可参照的其它文档。或可参照的其它文档。1.4参考文献参考文献References这一节应提供一个完整的文献列表,包括:名称、作者、日期、这一节应提供一个完整的文献列表,包括:名称、作
36、者、日期、报告号、期刊名称、出版机构名称等。报告号、期刊名称、出版机构名称等。1.5文档概要文档概要Overview本节应该本节应该:-描述描述ADD其余局部的构造其余局部的构造describe what the rest of the ADD contains;-解释解释ADD如何组织如何组织explain how the ADD is organized。612 系统概要系统概要System Overview本节应简要介绍系统上下文和设计,讨论工程的背景;本节应简要介绍系统上下文和设计,讨论工程的背景;本节可以概述所选体系构造的本钱和效益,可以参照原型本节可以概述所选体系构造的本钱和效益,
37、可以参照原型化实验和所做的权衡研究。化实验和所做的权衡研究。This section should briefly introduce to the system context and design,and discuss the background to the project.This section may summarize the costs and benefits of the selected architecture,and may refer to trade-off studies and prototyping exercises.623 系统上下文系统上下文Sys
38、tem Context本节应定义所有的外部接口。该定义应基于系统方块图或本节应定义所有的外部接口。该定义应基于系统方块图或上下文图。上下文图。This section should define all the external interfaces.This discussion should be based on a system block diagram or context diagram to illustrate the relationship between this system and other systems.634 系统设计系统设计System Design 4.
39、1 设计方法设计方法Design Method应给出所用的设计方法的名字,并给出简要描述,有助于应给出所用的设计方法的名字,并给出简要描述,有助于不熟悉该方法的读者理解。对该方法的偏离和扩展都应给不熟悉该方法的读者理解。对该方法的偏离和扩展都应给出解释和理由。出解释和理由。The design method used should be named and referenced.A brief description may be added to aid readers not familiar with the method.Any deviations and extensions of
40、 the method should be explained and justified.644.2 分解描述分解描述Decomposition description 通过构造图或对象图的形式概述软件构件,表示其层次、构件间的通过构造图或对象图的形式概述软件构件,表示其层次、构件间的控制流和数据流。构件可以组织成不同的方式,为开发组织的不同成控制流和数据流。构件可以组织成不同的方式,为开发组织的不同成员提供不同的视图。员提供不同的视图。ANSI/IEEE 1016-1987给出了三种表示软件设计的给出了三种表示软件设计的方法:分解视图方法:分解视图Decomposition View、依赖
41、视图、依赖视图Dependency View和接口视图和接口视图Interface View。分解视图表示构件的分解。适宜的方法是表,列出构件标识符并带分解视图表示构件的分解。适宜的方法是表,列出构件标识符并带有一行目的说明。预期的读者包括:经理用于工作包定义、开发有一行目的说明。预期的读者包括:经理用于工作包定义、开发人员用于跟踪构件和功能。人员用于跟踪构件和功能。依赖视图强调构件之间的关系。适宜的方法是构造图和对象图。预依赖视图强调构件之间的关系。适宜的方法是构造图和对象图。预期的读者包括:经理用于确定工作包的执行顺序、维护人员用期的读者包括:经理用于确定工作包的执行顺序、维护人员用于评估
42、设计修改的影响。于评估设计修改的影响。接口视图强调构件的功能性和它们的接口。适宜的方法包括:接口接口视图强调构件的功能性和它们的接口。适宜的方法包括:接口文件和参数表。预期的读者包括:设计师、程序员、测试人员,他们文件和参数表。预期的读者包括:设计师、程序员、测试人员,他们需要知道在系统中如何使用构件。需要知道在系统中如何使用构件。655 构件描述构件描述Component Description 构件描述应采用层次化方式。采用分节构件描述应采用层次化方式。采用分节subsections描述构件描述构件的以下方面。数字的以下方面。数字n与构件在层次构造中的位置有关。与构件在层次构造中的位置有关
43、。5.n 构件标识符构件标识符Component Identifier 每一个构件应有一个唯一的标识符用于配置管理。构件命名应符每一个构件应有一个唯一的标识符用于配置管理。构件命名应符合所用编程语言的规那么。应尽可能采用层次化命名机制表示构件合所用编程语言的规那么。应尽可能采用层次化命名机制表示构件的父的父-子关系例如,子关系例如,ParentName_ChildName。标识符应反映构件的目的和功能,简短且有意义。如果需要缩标识符应反映构件的目的和功能,简短且有意义。如果需要缩写词,它们的使用必须一致且没有歧义。缩写词应被记录。构件标写词,它们的使用必须一致且没有歧义。缩写词应被记录。构件标
44、识符应相互一致例如,一个函数被命名为识符应相互一致例如,一个函数被命名为READ_RECORD,那,那么另一个函数应命名为么另一个函数应命名为WRITE_RECORD,而不是而不是 RECORD_WRITING_ROUTINE。665.n.1 类型类型Type 构件类型应通过其逻辑和物理特征进展定义。逻辑特征构件类型应通过其逻辑和物理特征进展定义。逻辑特征应通过构件所属的包应通过构件所属的包package、库、库library或类或类class进展定义。物理特征应通过实施术语进展定义进展定义。物理特征应通过实施术语进展定义例如,例如,task,subroutine,subprogram,pac
45、kage,file。有些构件描述的内容取决于构件类型:可执行指包含有些构件描述的内容取决于构件类型:可执行指包含计算机指令、不可执行指仅包含数据。计算机指令、不可执行指仅包含数据。675.n.2 目的目的Purpose 构件的目的应通过它实现的需求进展定义。后向可跟踪性取决构件的目的应通过它实现的需求进展定义。后向可跟踪性取决于每一个构件描述明确地标明相对应的需求。于每一个构件描述明确地标明相对应的需求。5.n.3 功能功能Function构件功能应通过描述构件做什么进展定义。构件功能应通过描述构件做什么进展定义。构件描述取决于构件类型,它可能描述:构件描述取决于构件类型,它可能描述:-过程过
46、程process;-存储或传送的信息存储或传送的信息the information stored or transmitted。过程描述可以使用构造化英语、前置过程描述可以使用构造化英语、前置-后置条件、状态转移图技后置条件、状态转移图技术。术。685.n.4 子构件子构件Subordinates一个构件的子构件应列出其直接子构件一个构件的子构件应列出其直接子构件immediate children。一个模块的子构件是被它调用的模块;一个对象的子构件是它一个模块的子构件是被它调用的模块;一个对象的子构件是它所使用的对象。所使用的对象。5.n.5 依赖性依赖性Dependencies一个构件的依
47、赖性应通过列出由使用该构件的其它构件所设定一个构件的依赖性应通过列出由使用该构件的其它构件所设定的约束进展定义。例如:的约束进展定义。例如:-该构件被调用之前有哪些操作必须完成该构件被调用之前有哪些操作必须完成?-当该构件正在执行时哪些操作需要被排除当该构件正在执行时哪些操作需要被排除?-该构件执行后哪些构件必须执行该构件执行后哪些构件必须执行?695.n.6 接口接口Interfaces 对于每一个可执行的构件,对于每一个可执行的构件,ADD中需要描述接口的控制流中需要描述接口的控制流和数据流。非执行构件的数据应在第和数据流。非执行构件的数据应在第10小节中定义。小节中定义。流入和流出一个构
48、件的控制流应通过该构件如何被激活如:流入和流出一个构件的控制流应通过该构件如何被激活如:subroutine call和如何被终止如:和如何被终止如:return进展定义。在构进展定义。在构件类型件类型type的定义中它们是隐含的。控制流可能在执行期的定义中它们是隐含的。控制流可能在执行期间发生如中断,也需要进展说明。间发生如中断,也需要进展说明。输入和输出每一个构件的数据流必须在输入和输出每一个构件的数据流必须在ADD中进展详细说中进展详细说明,与控制流有关的数据构造如调用参数表和通过公共数明,与控制流有关的数据构造如调用参数表和通过公共数据区和文件输入输出数据的接口构件应进展描述。据区和文
49、件输入输出数据的接口构件应进展描述。70 一个构件的输入可能是另一个构件的输出,为了防止接口定义的重复,具体的数据元素应该分开定义和描述,接口定义应仅标识出数据元素,不定义其内容。一个构件的接口应通过该构件如何与使用它的构件进展交互的方式进展定义。这可以通过描述以下机制进展定义:-调用invoking或中断interrupting构件的执行;-通过参数、共享数据区或消息的方式进展通信。如果一个构件接口只与同一系统中的其它构件有关,那么接口描述应包含在ADD中;如果一个构件接口与其它系统有关,接口描述应在接口控制文档ICD-Interface Control Document中定义。715.n.
50、7 资源资源Resources 可以通过列出执行构件功能需要其环境提供的支持来定义一个构件可以通过列出执行构件功能需要其环境提供的支持来定义一个构件所需的资源。资源的例子有显示器、打印机、内存等。所需的资源。资源的例子有显示器、打印机、内存等。5.n.8 参考文献参考文献References 在构件描述中如果使用或隐含使用另一个文档,那么需要在此说在构件描述中如果使用或隐含使用另一个文档,那么需要在此说明。明。5.n.9 处理处理Processing 一个构件需要的处理应通过概述其内部的控制流和数据流的形式一个构件需要的处理应通过概述其内部的控制流和数据流的形式进展描述,有些构件如文件没有控制