软件构件库技术研究

2018-07-02 22:35毛洪川韩洁胡豪王芳
科技传播 2018年11期

毛洪川 韩洁 胡豪 王芳

摘 要 近年来,大型应用系统软件逐渐增多,软件的质量和开发效率严重制约着系统软件的发展,软件代码的复用再次成为软件开发的研究热点,软件构件的建立为软件的重用提供了基本的技术支持。软件的构件库研究,被软件行业的执行者认为是提高软件开发的生产效率、解决软件危机和提高软件产品质量的必要途径之一。通过软件构件的重用,可以提高软件开发过程的质量和工作效率。

关键词 软件重用;软件构件;软件构件技术

中图分类号 TP3 文献标识码 A 文章编号 1674-6708(2018)212-0094-03

1 研究背景

构件库技术是通过组装一系列可复用的独立软件构件来组建软件系统的一种软件技术。利用这种构件组装技术,软件开发人员可以有效地使用有效的独立构件来复用软件,减少重复开发,缩短软件开发时间,降低软件开发成本。

构件库技术封装类的组合,表示可以执行一个或者多个功能点的特定类集合,还可以为不同的用户提供不同的接口。构件库的建立隐藏了构件的具体代码实现并仅通过对外接口来进行软件的复用。用分层的表示方法来说,构件库的建立可以将软件系统底层中的多个逻辑处理单元组合成更高一层次的软件构件,甚至可直接将这些可复用的软件单元封装成一个完成的软件系统,使软件构件的复用从最底层的代码层和对象层到软件体系架构层和系统层都可以实现,从而使软件像硬件一样,通过各种构件的组合可以快速的开发。

2 基于构件开发优点

软件的构件开发与软件系统的开发一样,在开发过程中可能包含有一定的问题和缺陷,但是当这个软件构件被其他软件复用时,那么复用的软件构件中所包含的问题和Bug已经趋于稳定,可能出现新的问题和Bug也会很少。对新开发的软件系统而言,复用稳定的软件构件相对于完全重新编码而言,软件的可靠性更高。从用户的角度看,软件构件可以被很好的集成在一起,拥有相同或相似的功能和用户界面。基于构件开发软件的优点。

1)缩短上市周期。一个新开发的软件系统在软件的研制初期,可以根据用户提出的需求在软件的构件库中查找可复用的软件构件,再以选定后软件构件为基础开发应用软件时,只需要编写除复用软件构件外的其他软件功能代码即可。复用的代码越多,需要重新编写的代码就越少,软件系统所需要的开发周期就会相应的缩短,从而采用软件构件可以有效地缩短软件产品的上市周期。

2)节省维护成本。在软件研制的生存周期内,软件的后期维护在整个软件的生存周期中是时间最长的,同时相应的开发成本也是最高的。对于大型软件应用系统而言,主要的成本消耗就是找后期的软件产品维护上,软件重新开发需求缩减可以很大程度降低软件开发的总成本。当维护一个由软件构件所集成出来不同软件产品时,只需要维护这个相对稳定软件构件,以及每个软件系统中其他需求部分即可。在维护软件系统是所有的变化只会出现在一个构件中产生,就可以保持软件产品一致性。与同时维护几个完全不同的软件应用相比较,采用软件构件方式可以大大節省软件维护成本。

3)节省测试成本。当一个软件构建被复用时,与该本构件所有相关的测试用例和结果也可被复用。对于软件而言,必须测试的对象是除复用软件构件以外其他新模块的测试,还要对新模块和复用的软件构件之间的集成代码的测试和与软件构件集成后的系统测试。因此,相对于完全新开发的代码测试与调试的数量大大缩减了,通过软件构件的复用可以大大节省测试的成本。

4)使软件开发标准化。遵循软件开发标准而精心设计出来的软件构件,是软件开发人员以最好实践经验为基础设计出来接近完美的构件。当软件开发人员以构件为基础进行软件开发时,复用的软件构件将新开发的软件代码的编码风格产生一定约束。这就导致构件必须要进行标准化的开发。

3 软件构件技术

软件构件是可以在软件应用系统中清楚地识别出来的可复用的构件。而可以复用的软件构件是指相对于软件应用的其他需求而言具有相对独立特性且有可重复利用价值的构件。

一般可复用的软件构件应具有以下属性:

1)通用性:必须提供可以被其他软件应用可以通用的功能。

2)可用性:对构件需求的描述必须使使用者易于理解和使用。

3)质量:构件及其适应性的改进后必须经过验证。

4)适应性:通过适应性的改进,可以在不同的环境中使用复用的构件。

5)可移植性:构件应能够在不同的硬件操作平台和软件环境中工作。

随着对软件构件技术认识的深入,软件构件的概念已经不仅仅局限于软件的源代码,而是从技术要求开始,扩展到软件的需求和需求的规则约束、系统需求和整体的软件架构、文档、不同阶段的测试计划、测试说明、测试记录和测试报告等有用信息的软件开发活动,这些内容都可以被称为可复用软件构件。

近年来构件技术以成为软件复用的核心技术,并逐渐受到软件开发人员重视的一个重要研究分支。其主要研究内容包括:

1)如何获取构件:在软件的研制过程中根据软件的需求有目的地研制软件可复用的通用构件和如何从现有软件系统的需求中提取可复用的通用软件构件。

2)构件模型建立:研究目前已获取的软件构件的特点和其他潜在软件共用构件之间的公共依赖关系。

3)构件描述:基于软件的构件特点,要对构件的特征进行准确的描述和理解。

4)构件的分类:研究所有类型构件分类策略、集成模式和检索策略,建立完整构件库系统,支持构件的有效管理。

5)构件集成:研究了基于构件模型的构件集成机制,包括基于构件对象互操作性的源码级别集成和部件级集成。

4 构件库系统的设计与实现

采用C/S架构和XML语言结合的构件库设计模型(见图1),本模型中所有软件构件都有详细的构件描述,并使用工程化的方法对现有的软件构件进行实例化的验证。软件构件的提供者只有通过软件构件系统的实例化验证,才可以在相应类型的构件库中增加或更新构件。构件使用者可以通过检索构件库中XML文档来获得构件。

4.1 构件的增加

软件构件的提供者在进入构件库管理系统界面时,首先将构件的详细信息、主要功能和相应的接口说明等详细的构件信息输入到系统内。待构件库管理组织审核通过后,将输入的构件的信息生成XML文档,构件库管理员验证XML文档格式和构件有效性,验证后进行由管理员对此次提交的构件进行添加操作,构件添加的部分功能全部封装在addCpt类中,具体实现如下:

D o c u m e n t d o c = s a x B u i l d e r. build(newFile(“Cpts.xml”));//解析XML文件

Widget?editCom=?new?Widget?(“Component”);//按照构件的分类简历不同的软件界面

W i d g e t?e d i t C o m F = n e w?W i d g e t?(“ComponentForm”);

W i d g e t?e d i t R e p = n e w?W i d g e t?(“Represstation”);

………

editRep.setText(sourceCode);/将构件的详细信息写入构件库系统中

………

editCom.addContent(editComF);//把相近功能的软件构件关联起来

………

Element?root=doc.getRootElement();/获得XML文件根目录节点

……………

root.addContent(editCom);//把新增的构件加入到XML文件根目录节点

……………

Schema?Validation?validateCom=new? SchemaValidation();//验证新增软件构件

InputStream?xmlString=validateCom. getClass().getResource?AsStream(“compents. xml”);//获取相应构件的XML文件

InputStream?schemaStr=validatecom. g e t C l a s s ( ).g e t R e s o u r o e? AsStream(sStream((”);//获取XML文件的根节点

SAXReader?reader=createSAXReader(schemaS tr);//对需要验证的构件进行XML信息解析

D o c u m e n t?d o c u m e n t = r e a d e r. read(xmIString);//对XML文件进行验证;

……………

eltRep.setText(sourceCode);/把生成XML文档的构件详细信息写入构件库系统

……………

4.2 构件的检索

软件构件的使用者根据构件分类的详细描述,在不同类型的构件库中进行构件检索,也可结合界面的树形结构对需要的构件进行构件检索,检索结果包括树形结构所有分支的数量、每个分支的构件结构,并且找出他或她需要检索哪个分支构件描述。当检索构件时,构件使用者根据查询要求从各个方面选择术语合法的构件描述。当查询条件中有多个方面时,由每个方面检索的构件集的交集形成最终结果集。

构件库系统中层次划分完成的XML文件具有嵌套其他相关相近构件的功能,每个构件的开始标记都对应有一个结束标记,并且标记构件之间的嵌套没有错位,保证构件的版本正确,因此构件库系统采用的堆栈的方式来记录XML文档结构。堆栈的特征是先入先出,在start元素(?)中使用push方法向堆栈添加刻面名称,在end元素(?)中使用pop_ back方法将其弹出。对startelement?(?)方法的每次调用都必须对应于对endele?-?element?(?)方法的调用,因此push和pop是成对的,只需分析堆栈的结构,用字符方法对匹配刻面的术语做相应的处理,就可以知道文档结构中的当前标记。

4.3 构件的更新和删除

软件构件的管理者可以在构件库管理系统中更新或删除构件,首先管理者检索构件提供者提供的构件是否已存在,如果存在将新提交的构件和现有的构件进行版本比对并进行显示,列出新构件所增加的详细内容并更新此构件。当构件库中的构件长时间未使用或已有新版本替代时,构件库管理员直接调用remove?content方法删除构件节点并将其保存到回收站,并将构件删除的详细原因进行说明。

4.4 构件的集成

一个大的应用系统一般是由多个独立的构件组成,在提高软件生产率和软件产品质量的技术上,复用构件的集成为大型应用系统的研制提供了保障,由于软件代码的可以进行复用,因此从已经建立的构件庫中来集成软件应用系统将变得非容易。因此在进行大的软件系统研制时,就应考虑到软件架构的复用、软件代码的复用等可复用的构件,构件的集成可以以及客服用的算法和架构设计在一些通用借口而的基础上集各种各样的软件应用系统,基于构件的集成,软件的开发人员还可以将大系统分解成更小的独立的构件,更有效的进行软件设计。

5 结论

软件重用对于提高开发效率和软件质量具有很大的开发潜力。正确使用构件库可以实现软件重用。在构件库的支持下,软件工程师不仅可以“带头”,而且可以避免软件的重复开发。

参考文献

[1]杨敬君.基于构件的软件复用技术研究与应用实践[D].大连:大连海事大学,2009.

[2]杨森.曹宝香基于J2EE和XML的构件库系统设计[J].计算机技术与发展,2009,19(8):100-103.