第13章软件重用技术13.1 典型问题分析和解答【例1】实施软件重用的目的是要使软件开发工作进行得( A )。
软件重用的实际效益除了( B )之外,在企业的经营管理方面也渴望达到理想的效益。
新的应用软件开发技术和工具是以( C )作为关键,重用大粒度的( D ),为的是快速开发应用软件。
这些新技术包括微软的( E )、( F )、(G ),SUN公司的Java,OMG公司的CORBA、IDL等。
供选择的答案:A. ①更简捷②更方便③更快、更好、更省④更丰富B. ①重用率②功能扩充③效率④空间利用率C, D. ①软件②固件③构件④属性⑤对象⑥事物⑦数据⑧代码E~G. ①office ②Visual Basic ③Active X ④Photoshop⑤OLE ⑥Fortran ⑦COBOL ⑧Delphi答案:A. ③, B. ①, C. ③, D. ⑤, E. ②, F. ③, G. ⑤。
其中,E、F、G的答案顺序可互换。
分析:实施软件重用的目的是要使软件开发工作进行得是更快、更好、更省。
“更快”是指在市场竞争环境中,软件开发工作能满足市场上时间方面的要求(即在提供软件产品的时间方面能赛过竞争对手);“更好”是指开发出来的软件在未来的运行中失效可能性小;“更省”是指在开发和维护期间所花费的开销少。
日美一些大公司的资料表明,软件重用率最高可望达到90 %,而且软件重用使得企业在及时满足市场、软件质量、软件开发和维护费用等方面都得到显著的改进。
除了重用率之外,在企业的经营管理方面也可望达到理想的效益。
例如,上市时间可缩短2 ~ 5倍;软件产品的缺陷密度可减少5 ~ 10倍;软件产品的维护费用可减少5 ~ 10倍;软件开发总费用可减少15% ~ 75%,其中,75%是针对长期项目,包括开发可重用构件及支持重用的负担。
新的应用软件开发技术和工具是以“构件”作为关键,重用大粒度的“对象”,为的是快速开发应用软件。
这些新技术包括微软的Visual Basic、Active X、OLE(对象链接与嵌入),SUN公司的Java,OMG公司的CORBA(公用对象请求代理程序体系结构)、IDL(接口定义语言)等。
非面向对象语言(如COBOL和Fortran)在重用实践中已经相当的成功。
这些非面向对象程序设计语言构件技术的成功实践说明了实现软件重用并不限于面向对象语言构件或类库。
【例2】以往的软件工程技术不能满足重用的需要,体现在工程、( A )、( B )、经营业务等4个方面。
“工程”指软件开发工程,表现在缺乏( C )手段,缺乏( D )构件,缺乏对潜在可重用的( E ),缺乏实施重用的工具。
供选择的答案:A, B. ①需求②过程③环境④组织管理C ~ E. ①重用②可靠性③灵活性④界定⑤工具⑥互连性答案:A. ②, B. ④, C. ④, D. ①, E. ③。
其中,A、B的答案的顺序可互换。
分析:以往的软件工程技术不能满足重用的需要,体现在工程、过程、组织管理、经营业务等4个方面。
这里所说的“工程”是指软件开发工程,其技术和方法面对重用的需要已显得低效,主要表现在:▪缺乏界定手段:为了软件重用,需要循软件开发流程的各个阶段,通过分析它们的描述模型,明确界定出潜在可重用的部分,被界定出的部分,可能是可被重用的部分,也可能是可被可重用构件代用的部分。
而以往的软件工程缺乏这种界定手段。
▪缺乏可重用的构件:这反映在许多方面。
例如,不能有效地挑选出可重用构件并对它们进行强化;缺乏对构件打包、文档化、分类、界定的技术;缺乏有效方法进行(构件)库的设计和实现;缺乏良好的构件库存取方法。
▪缺乏对潜在可重用构件的灵活性:如果一个构件很死板,那么它被重用的机会就很少。
而过去的软件工程方法在设计灵活的、分层的软件体系结构方面一直没有成熟的办法。
过去的方法是对构件进行调节使之满足新的需求,或者使对新的体系结构进行限制。
▪缺乏实施重用的工具:为了实施重用,需要一系列新的工具,并把它们集成到面向重用的软件工程环境中去。
而过去的工程缺乏这方面的工具。
【例3】论域工程过程要在选定的应用论域中界定出( A )和( B ),要为多个应用和构件定义一个( C ),并开发一系列可适度扩展的( D )。
创建可重用构件既困难又昂贵。
所以,应当帮助软件人员进行界定工作,以及按重要性对各项( E )进行优先性排队。
在一定程度上,这项工作要依赖于( F )。
供选择的答案:A, B, E, F:①共性②特性③可变性④属性⑤灵活性⑥可靠性⑦健壮性⑧适用性C, D:①固件②构件③体系结构④组件⑤总体框图⑥数据结构答案:A. ①, B. ③, C. ③, D. ②, E. ②, F. ⑥。
其中,A、B的答案顺序可互换。
分析:论域工程过程要在选定的应用论域中界定出共性和可变性,要为多个应用和构件定义一个体系结构,并开发一系列可适度扩展的构件。
创建可重用构件既困难又昂贵。
所以,应当帮助软件人员进行界定工作,以及按重要性对各项“特性”进行优先性排队。
在一定程度上,这项工作要依赖于预测的可靠性(预测需要哪些应用层的可靠性和构件层的可靠性),这也关系到我们要冒多大的风险。
【例4】软件体系设计的一个中心问题是能否( A ),以及采用何种软件体系结构风格。
有原则地使用体系结构风格可带来一些实际的好处:(1)它促进了对设计的( B );(2)它可以带来显著的( C )(体系结构风格的不变部分使它们可以共享同一个实现代码);(3)只要系统是使用常用的、规范的方法组织起来的,就可以让其它设计者很容易地理解软件的体系结构;(4) 对标准或规范风格的使用也支持了( D ),例如像CORBA这样的面向对象的架构和基于事件机制的工具的集成;(5)在限制了设计空间的情况下体系结构风格通常允许进行特殊的与风格有关的分析;(6)通常可以对特定的风格提供( E )手段。
供选择的答案:A C. ①使用特定的体系模式②使用重复的体系模式③重用④专用⑤代码重用⑥结构重用D ~ E. ①可视化②构件③互操作性④可移植性⑤可调度性⑥框架答案:A. ②, B. ③, C. ⑤, D. ③, E. ①。
分析:软件体系设计的一个中心问题是能否使用重复的体系模式,以及采用何种软件体系结构风格。
例如可以采用通用的基于层次或数据流的系统体系结构,或者采用特殊的系统组织(如经典的编译器分解方式),OSI七层协议,MVC用户界面语义图等。
有原则地使用体系结构风格可带来一系列实际的好处。
(1)它促进了对设计的重用。
一些经过实践证实的解决方案可以拿来可靠地解决新问题。
(2)它可以带来显著的代码重用。
体系结构风格的不变部分使它们可以共享同一个实现代码。
(3)只要系统是使用常用的、规范的方法组织起来的,就可以让其它设计者很容易地理解软件的体系结构。
例如,如果某人把系统描述为“客户机∕服务器”模式,则不必给出细节,人们立刻就会明白它们是如何一部分一部分地组织起来,并在脑海中清晰地得到这个图像。
(4) 对标准或规范风格的使用也支持了互操作性,例如像CORBA这样的面向对象的架构和基于事件机制的工具的集成;(5)在限制了设计空间的情况下,体系结构风格通常允许进行特殊的与风格有关的分析。
例如,分析管道过滤器系统的可调度性(吞吐量、延时、死锁的解决)是可行的,但对于任意的、或用其它方法构造的架构来说,这种分析可能毫无意义。
(6) 通常可以对特定的风格提供可视化的手段。
例如,可以对与客户的专业领域有关的设计作出图解或文字说明。
对于应用软件体系结构风格来说,由于视点的不同,软件人员有很大的选择空间。
要为系统选择或设计某一个体系结构风格,必须根据特定项目的具体特点,进行分析比较后再确定。
体系结构风格的使用几乎完全是特化的。
【例5】分层系统采用层次化的组织方法,每一层向其( A )提供服务,并利用( B )的服务。
在一些分层系统中,( C )全部被隐藏起来,只有( D )和一部分精心选择的功能可以被系统外部看到。
在这种系统中,( E )是实现在层次结构中的一些虚拟机,( F )是层次与层次之间交互的协议,(G )包括对层次之间交互的限制。
分层系统中有许多可取的属性。
首先,它支持( H )的系统设计,这使得设计者可以把一个复杂的系统按递增的步骤分解开来;其次,它支持(I ),像管道结构的系统一样,因为每一层至多和相邻的上下层交互,因此,功能的改变最多只影响相邻的上下层。
另外,它能支持(J ),和抽象数据类型一样,只要提供的服务接口定义不变,同一层的不同实现可以交换使用。
供选择的答案:A ~ D. ①下层②内部层次③外部层次④上层⑤中间件⑥接口E ~ G. ①接口定义②软件部件③连接④拓扑约束⑤规范定义⑥推理机制⑦系统结构H ~ J. ①基于抽象程度递增②基于具体细节递增③重用④可视化⑤互操作⑥功能增强⑦效率提高⑧结构化答案:A. ④, B. ①, C. ②, D. ③, E. ②, F. ③, G. ④, H. ①, I. ⑥, J. ③。
r t L L t r L L R )C /C 1(1C r n n --t t E L n nE L R )C /C (1C r n n -t r n n L )E /E (1E -分析:对于分层系统:(1) 基本结构:分层系统采用层次化的组织方法,每一层向其上层提供服务,并利用其下层的服务。
在一些分层系统中,内部层次全部被隐藏起来,只有外部层次及一部分精心选择的功能可以被系统外部所见。
在这种系统中,软件部件是实现在层次结构中的一些虚拟机,连接是层次与层次之间交互的协议,拓扑约束包括对层次之间交互的限制。
如图所示。
(2) 应用:这种系统最广泛的应用是分层通信协议。
在这一应用论域中,每一层提供一级抽象的功能,作为上层通信的基础。
较低的层次定义低层的交互,最低层通常只定义硬件物理连接。
其它应用论域有数据库系统、操作系统等。
(3) 分层系统中有许多可取的属性。
首先,它支持基于抽象程度递增的系统设计,这使得设计者可以把一个复杂的系统按递增的步骤分解开来;其次,它支持功能增强,像管道结构的系统一样,因为每一层至多和相邻的上下层交互,因此,功能的改变最多只影响相邻的上下层。
另外,它能支持重用,和抽象数据类型一样,只要提供的服务接口定义不变,同一层的不同实现可以交换使用。
这样,就可以定义一组标准的接口,并允许有各种不同的实现方法(典型的例子是ISO OSI 参考模型和某些Windows 的系统协议)。
【例6】软件重用可分为以下三个层次:( A ),例如软件工程知识的重用。
( B ),例如面向对象方法或国家制定的软件开发规范的重用。
软件成分的重用。
软件成分的重用又可进一步划分为( C ),如剪贴;( D ),如重用设计模型;( E ),更高级别重用。