软件工程课件:swguide8(编辑修改稿)内容摘要:
了友好、直观的多媒体方式。 由于网状结构比较自由、松散,因此,超文本方法更容易修改可复用构件库的结构。 Windows 环境下的联机帮助系统就是一种典型的超文本系统。 为了构造可复用构件库的文档,首先要根据论域分析的结果,在说明文档中标识超文本结点,并在相关文档中建立链接关系。 然后用类似于联机帮助系统编译器的工具对构件的说明文档进行编译,最后用相应的工具运行编译后的目标程序代码即可。 (5) 可复用构件的 3C 模型 可以有很多方法来描述可复用的构件,其中最理想的是由 Tracz 提出的 3C 模型:概念(Concept)、内容 (Content)和 上下文 (Context)。 概念:描述软件构件做什么。 为此,需要完全地描述构件的接口和表示语义 (表示在前置条件和后置条件的上下文中 )。 概念将传达构件的意图。 内容:描述软件构件的概念如何实现。 一般来讲,内容是对外来用户隐蔽的信息,是只有试图修改或测试该构件的人才需要了解的信息。 上下文:将可复用的构件安置到它的应用论域中。 就是说,上下文将通过定义概念的、操作的和实现的特征,使软件人员能够找到合适的构件以满足应用的需求。 为了在实际背景下使用,必须把概念、内容和上下文转换成具体的规格说明模式。 关于可复用构件的分类模式,已有不少文章讨论过。 所有的方法大致归 为 3 个主要的方面:图书馆和信息科学方法、人工智能方法和超文本系统。 目前,绝大多数研究都建议使用图书馆科学方法为软件构件进行分类。 图 给出了一个使用图书馆科学索引法的分类法。 “受控的索引词汇表”限制了所有可用于分类对象 (或构件 )的术语或语法。 “不受控的索引词汇表”则对描述的自然状态不加限制。 软件构件的分类模式主要有如下 3 类: C 11 图 一种 4 层次的分层式体系结构 图 源于图书馆索引方法的分类 法 6. 分层式体系结构 所谓分层式体系结构,是按层次组织软件的一种软件体系结构,其中每一层软件建立在低一层的软件层上。 位于同一层的软件系统或子系统具有同等的通用性,在下一层的软件比在上一层的软件通用性更强。 一个层次可视为同等通用档次的一组 (子 )系统。 因此,在分层的体系结构中,最高层是应用层,可包容许多应用系统。 次高层是构件层,可包括多个可复用构件库系统,可用于建立应用系统。 应用系统建立在构件层之上,而此构件层中的许多构件库系统又是建立在更低层次的构件库系统之上。 软件的组织方式通常是指软件的静态分层 结构,就像在编译连接时软件各个模块之间的分层依赖关系那样,是一种静态的关系,而不是指软件在运行时的组织和动态结构。 一个系统的动态特征时由使用事例、协作、过程和结点模型来定义的。 这些动态模型需要与软件的静态分层组织联合起来使用。 即使按照上述的原则,人们仍然定义出多种形式的分层式体系结构。 层次的数目、层次的名称、层次的内容可随情况而定。 图 给出一种典型的 4 层次体系结构。 最顶层 (即最高层 )是应用系统层,此层包含多个应用系统,每个应用系统向系统的用户 提供一组使用事例。 有的应用系统还可具有不同的版本或若干变体。 应用系统可以通过其接口与其它系统操作,还可以通过低层软件提供的服务或对象 (如操作系统、特定业务服务 )间接地与其它系统交互操作。 次顶层 (即次高层 )是“特定业务”层。 此层应当包括专门针对不同业务类型的一系列构件库系统。 这样的构件库系统向用户提供可复用的使用事例和对象构件,用于开发应用系统,支持复用业务。 特定业务层的软件建立在中间件之上。 中间件层位于次高层下面,它为次顶层的各个构件库系统提供实用软件类,以及不依赖于平台的服务。 例如,在异种机型环境下 的分布式对象计算等等。 此层经常包括:图形用户界面构筑者使用的构件库系统、与数据库管理系统 (DBMS)的接口、不依赖平台的操作系统服务、对象请求代理 (ORBs)、对象链接和嵌入 OLE 构件,如电子表格和框图编辑器。 这些软件主要提供给应用软件和构件开发人员使用,使得他们能够专注于业务构件和应用系统的 应用软件层 特定业务层 中间件层 系统软件层 各个应用的各种变体 各 个应用系统 各个构件库系统 (针对特定论域、 特定业务 ) 不依赖平台的 低层构件等 特定的平台软件: 操作系统等 索引词汇表 受控的索引词汇表 不受控的索引词汇表 分类 枚举 多面 关键词 描述符 主题 头部 抽取术语的 表单文本 不抽取术语的 表单文本 具有语法 不具有语法 词典 12 构筑。 最低层是系统软件层,此层包括计算和网络等基础设施软件,如操作系统、专用的硬件接口软件等。 目前出现了一些专用操作系统,其本身就提供了不依赖于平台的服务,因此,在依稀结构的第三层和第四层之间,有时界限会变得模糊不 清。 例如 Java 就是这种情况。 它是一种语言,故它应该位于系统软件层。 但还可以把 Java 看作是组织分布对象的一个重要部分,通过Java 可将对象移到不同的机器上,从而改变客户机 ― 服务器系统的应用划分。 从另一个角度来看, Java 的一个重要部分又属于中间件层,至少位于中间件层的许多软件都是用 Java语言编写的。 为了确保分层式系统可管理,规定在一个系统内,不能从低层复用高层的构件。 一个分层式系统有两维:水平方向是在同层次内的相互引用的多个系统,垂直方向表达了跨层次的静态的依赖关系。 7. 软件构件的复用 (1) 检 索与提取构件 可复用构件库的检索方法与库的组织方式密切相关。 ① 基于关键词的检索 这种检索方法的基本思想是:系统 (CASE 工具 )在图形用户界面上将可复用构件库的关键词树直观地展示给用户,用户通过在树上的逐级浏览寻找需要的关键词并提取相应的构件。 当然,用户也可以直接给出关键词 (其中可含有通配符 ),由系统自动地给出合适的候选构件清单。 这种方法的优点是简单,易于实现。 ② 多面检索 这种检索方法基于多面分类法。 步骤如下: 构造查询:用户提供待查构件在每个“面”上的特征,生成构件描述子。 此时,用户可以从可复 用构件库已有的“概念”中挑选,也可以将某些特征值置为空。 系统在库中检索时将忽略特征值为空的“面”。 在构造查询的过程中,可以利用同义词库和概念距离图来帮助用户正确选择特征值。 检索构件:实现多面分类法的 CASE 工具利用同义词库和概念距离图,在可复用构件库中寻找相同的或相近的构件描述子及相应的构件。 对构件进行排序:按照相似程度对被检索出来的构件进行排序,还可以按照与复用有关的度量信息 (如构件的复杂性、可复用性、成功复用的次数等 )进行排序。 这种方法的优点是易于实现相似构件的查找。 ③ 超文本检索 这种 检索方法的步骤是:用户首先给出一个或若干个关键词,系统在构件的说明文档中做精确的或模糊的语法匹配。 匹配成功后,向用户提供相应的构件说明。 这些构件说明是含有许多超文本结点的正文。 用户在阅读这些正文时可实现多个构件说明文档之间的自由跳转,最终选择合适的构件。 为了避免用户在跳转过程中迷失方向,系统可以通过图形用户界面显示浏览历史图,允许将特定画面定义为有名“书签”并可随时跳转到“书签”。 此外,还可以帮助用户逆着跳转路径逐步返回。 这种方法的优点是用户界面友好。 ④ 其它检索方法 上述检索方法都是基于语法匹配,要求 用户对可复用构件库中的出现的众多词汇有较全面的把握,较精确的理解。 理论上,理想的检索方法是语义匹配:可复用构件库的用户以形 13 式化的手段描述所需要的构件的功能或行为的语义,系统通过定理证明或基于知识的推理过程寻找语义上等价的或相近的构件。 (2) 理解与评价构件 准确地理解构件,对于正确地使用和修改构件,都是至关重要的。 考虑到设计信息对于理解构件的必要性和构件库的用户逆向发掘设计信息的困难性,要求构件的开发过程必须遵循公共的软件工程规范,并在构件库的说明文档中全面、准确地说明下列内容: ① 构件的功能和行为; ② 相关的论域知识; ③ 可适应性约束条件和例外情况; ④ 可以预见的修改部分和修改方法。 但是,如果软件人员希望复用那些原先并非为复用而设计的构件,上述要求不能满足。 此时软件人员必须借助 CASE 工具对待选构件进行分析。 这种 CASE 工具对构件 (包括相应的文档 )进行扫描,将各类信息存入某种浏览数据库,然后回答构件用户的各种查询,进而帮助理解。 例如,对于以 C 或 C++ 源程序 形式出现的构件,用户可借助于 CASE 工具查询标识符 (包括变量、常量、宏、函数等 )的定义和引用。 如果源程序中以结构化注解的形式给出函数的前置条 件、后置断言、约束与例外情形、算法描述,用户也可以实现对这些信息的直观浏览。 逆向工程是理解构件的另一种重要手段。 通过对构件进行分析,结合论域知识,半自动地生成构件的设计信息,然后借助设计信息完成对构件的理解和修改。 对软件构件的可复用性进行评价,主要通过收集和分析构件的用户在实际复用构件的过程中所得到的各种反馈信息,按照某种论域模型来完成。 这些反馈信息包括:复用成功的次数、对构件的修改工作量、构件的健壮性度量 (如出错数量 )、性能度量 (如执行效率和资源消耗量 )等。 (3) 修改构件 理想的情况是对库中的构件 不做修改就可以直接用于新的软件项目。 但是,在多数情况下,需要对构件做或多或少的修改以适应新的需求。 为了减少修改的工作量,要求构件的开发人员尽量使构件的功能、行为、接口抽象化、通用化、参数化。 这样,构件的用户可以通过对实参的选择来调整构件的功能或行为。 如果这种调整仍不能使构件适应新的软件项目,用户就必须借助设计信息和说明文档来理解、修改构件。 因此,与构件有关的说明文档和抽象层次更高的设计信息对于构件的修改至关重要。 例如,如果需要将用 C 语言编写的构件 (源程序代码 )改写为其它语言的形式,构件的算法描述就十分必要。 有人在软件复用领域中尝试使构件的修改自动化。 例如,可以利用不同数据结构 (如链表和数组 )之间的相似性自动修改构件外部接口中的参数类型。 但是,这种自动修改方式还远远不能取代人工修改方式。 (4) 构件的合成 构件合成是指将可复用构件库中的构件 (经适当修改后 )相互连接,或将它们与当前软件项目中的软件元素相连接以构成最终的目标系统。 构件合成技术大致可分为基于功能的、基于数据的和面向对象的合成技术。 下面简单介绍前两种。 ① 基于功能的合成技术 基于功能的合成技术采用子程序调用和参数传递的方式将构件结合起来。 它要求在 库中的构件必须以标准子程序 (标准过程或函数 )的形式出现,并且接口说明必须准确、清楚。 当使用这种合成技术进行软件开发时,必须开发人员必须对目标软件系统进行自顶向下的功能分解,将系统分解为高内聚、低耦合的功能模块,然后根据各模块的功能需求提取构件,对它们进行适应性修改后,再纳入到上述功能分解的层次框架中。 14 ② 基于数据的合成技术 基于数据的合成技术首先根据当前应用问题的核心数据结构设计出一个框架,然后根据框架中各结点的需求提取构件并进行适应性修改,再把它们逐个分配给框架中的适当位置。 此后,构件的合成方式仍然是传 统的子程序调用与参数传递。 这种合成技术也要求库中的构件以子程序的形式出现,但它所依赖的软件设计方法不再是功能分解,而是面向数据结构的设计方法,如 Jackson 系统开发方法。 8. 面向对象的软件复用技术 由于封装和继承的特性,面向对象方法比其它软件开发方法更适合支持软件复用。 封装意味着可以将表示构件的类看作黑盒子。 使用它们时,只需了解其外部接口,即了解它能够响应哪些消息,相应的对象行为是什么。 继承是指在定义新的子类时可利用库中已有的父类的属性和操作。 当然,子类也可以修改父类的属性与操作,或者引进新的属性与操 作。 理论上构件的用户不需要了解构件的实现细节。 (1) 类库的构造 通常将面向对象的可复用构件库称为可复用类库 (简称类库 ),因为这时所有的构件都是以类的形式出现。 可复用基类的建立取决于论域分析阶段对当前应用 (族 )中具有一般适用性的对象和类的标识。 类库的组织方式采用类的继承层次结构。 这种结构与现实问题空间的实体继承关系有某种自然、直接的对应。 同时,类库的文档以超文本方式组织,每个类的说明文档中都可以包含指向其它说明文档的关键词结点的链接指针。 与图形用户界面有关的一种典型的类库结构如图 所示。 图 类库结构示例 (2) 类库的检索 一般而言,类库的组织方式直接决定检索方式。 常用的类库检索方法是对类库中类的继承层次结构进行树形浏览,以及基于类库文档的。软件工程课件:swguide8(编辑修改稿)
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。
用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。