|
知识路径: > 软件工程 > 新技术应用 > 构件与软件重用 >
|
相关知识点:7个
|
|
|
|
构件开发的目的是重用,为了让构件在新的软件项目中发挥作用,库的使用者必须完成以下工作:检索与提取构件、理解与评价构件、修改构件,最后将构件组装到新的软件产品中。
|
|
|
|
构件库的检索方法与组织方式密切相关,因此,我们针对11.1.4节介绍的关键字分类法、刻面分类法和超文本组织方法分别讨论相应的检索方法。
|
|
|
(1)基于关键字的检索。系统在图形用户界面上将构件库的关键字树形结构直观地展示给用户;用户通过对树形结构的逐级浏览寻找需要的关键字并提取相应的构件。当然,用户也可直接给出关键字(其中可含通配符),由系统自动给出合适的候选构件清单。这种方法的优点是简单、易于实现,但在某些场合没有应用价值,因为用户往往无法用构件库中已有的关键字描述期望的构件功能或行为,对库的浏览也容易使用户迷失方向。
|
|
|
(2)刻面检索法。该方法基于刻面分类法,由三步构成,分别是构造查询、检索构件、对构件进行排序。这种方法的优点是它易于实现相似构件的查找,但用户在构造查询时比较麻烦。
|
|
|
(3)超文本检索法。用户首先给出一个或数个关键字,系统在构件的说明文档中进行精确或模糊的语法匹配,匹配成功后,向用户列出相应的构件说明。这种方法的优点是用户界面友好,但在某些情况下用户难以在超文本浏览过程中正确选取构件。
|
|
|
(4)其他检索方法。上述检索方法基于语法(syntax)匹配,要求使用者对构件库中出现的众多词汇有较全面的把握和较精确的理解。理论的检索方法是语义(semantic)匹配:构件库的用户以形式化手段描述所需要的构件的功能或行为语义,系统通过定理证明及基于知识的推理过程寻找语义上等价或相近的构件。遗憾的是,这种基于语义的检索方法涉及许多人工智能难题,目前尚难于支持大型构件库的工程实现。
|
|
|
|
要使库中的构件在当前的开发项目中发挥作用,准确地理解构件是至关重要的。当开发人员需要对构件进行某些修改时,情况更是如此。考虑到设计信息对于理解构件的必要性以及构件的用户逆向发掘设计信息的困难性,必须要求构件的开发过程遵循公共软件工程规范,并且在构件库的文档中,全面、准确地说明以下内容:构件的功能与行为;相关的领域知识;可适应性约束条件与例外情形;可以预见的修改部分及修改方法。
|
|
|
但是,如果软件开发人员希望重用以前并非专为重用而设计的构件,上述假设不能成立。此时开发人员必须借助于CASE工具对候选构件进行分析。这种CASE工具对构件进行扫描,将各类信息存入某种浏览数据库,然后回答构件用户的各类查询,进而帮助理解。
|
|
|
逆向工程是理解构件的另一种重要手段。它试图通过对构件的分析,结合领域知识,半自动地生成相应的设计信息,然后借助设计信息完成对构件的理解和修改。
|
|
|
对构件可重用的评价,是通过收集并分析构件的用户在实际重用该构件的历史过程中的各种反馈信息来完成的。这些信息包括:重用成功的次数,对构件的修改量,构件的健壮性度量,性能度量等。
|
|
|
|
理想的情形是对构件库中的构件不作修改而直接用于新的软件项目。但是,在大多数情况下,必须对构件进行或多或少的修改,以适应新的需求。为了减少构件修改的工作量,要求开发人员尽量使构件的功能、行为和接口设计更为抽象化、通用化和参数化。这样,构件的用户即可通过对实参的选取来调整构件的功能或行为。如果这种调整仍不足以使构件适用于新的软件项目,用户就必须借助设计信息和文档来理解、修改构件。所以,与构件有关的文档和抽象层次更高的设计信息对于构件的修改至关重要。例如,如果需要将C语言书写的构件改写为Java语言形式,构件的算法描述就十分重要。
|
|
|
|
构件组装是指将库中的构件经适当修改后相互连接,或者将它们与当前开发项目中的软件元素相连接,最终构成新的目标软件。构件组装技术大致可分为基于功能的组装技术、基于数据的组装技术和面向对象的组装技术。
|
|
|
(1)基于功能的组装技术。基于功能的组装技术采用子程序调用和参数传递的方式将构件组装起来。它要求库中的构件以子程序/过程/函数的形式出现,并且接口说明必须清晰。当使用这种组装技术进行软件开发时,开发人员首先应对目标软件系统进行功能分解,将系统分解为强内聚、松耦合的功能模块。然后根据各模块的功能需求提取构件,对它进行适应性修改后再挂接在上述功能分解框架(framework)中。
|
|
|
(2)基于数据的组装技术。基于数据的组装技术首先根据当前软件问题的核心数据结构设计出一个框架,然后根据框架中各节点的需求提取构件并进行适应性修改,再将构件逐个分配至框架中的适当位置。此后,构件的组装方式仍然是传统的子程序调用与参数传递。这种组装技术也要求库中构件以子程序形式出现,但它所依赖的软件设计方法不再是功能分解,而是面向数据的设计方法,例如Jackson系统开发方法。
|
|
|
(3)面向对象的组装技术。由于封装和继承特征,面向对象方法比其他软件开发方法更能支持软件重用。在面向对象的软件开发方法中,如果从类库中检索出来的基类能够完全满足新软件项目的需求,则可以直接应用。否则,必须以类库中的基类为父类采用构造法或子类法生成子类。
|
|
|