论文部分内容阅读
近年来软件开发呈现出了突飞猛进的发展,软件开发技术也从早期的结构化编程,发展到后来的面向对象技术,直至现在的软件构件技术。基于构件的软件工程(Component-Based Software Engineering,简称CBSE)凭借自身的可复用性,开发的高效性等优点,逐渐成为一种新的趋势。然而,软件构件技术在带来增加可重用性,减少开发成本的同时,也带来了前所未有的问题,例如构件系统的测试。由于构件本身的特殊性,当某个构件在投入使用之前经过了完整的测试,证明该构件不存在缺陷,但当将此构件部署到构件系统中时,未能从其它构件得到所依赖的服务,或者对内存、处理器周期出现竞争的情况,才发现并不能与当前的系统环境很好的配合使用。为此需在构件系统的集成阶段耗费更多的时间和精力进行测试,这样就使得构件技术的优势大打折扣。传统的构件测试技术,将多余的测试时间花在已经过充分验证的构件本身正确性上,由于构件并不像硬件存在老化现象,就造成了资源与时间的浪费。所以本文将重点放在了构件的配置变化对构件的影响上,包括部署环境、对应的服务组件和系统所在的平台。
本文从构件使用者和开发者的角度分析构件及构件化软件的测试,利用B.Meyer的合约化软件设计思想作为构件测试的理论基础,并在其上面进行了扩展与改进,提出了一种基于内置合约检查的构件测试技术,增强了构件对于运行环境的自测试能力。构件在被部署到新的系统环境中时,内置的合约测试组件能够自动测试其服务端(包括运行环境)是否遵守彼此之间合约,并验证自身在运行阶段履行其所声明的义务的能力。利用合约测试组件内提供的测试强度配置接口,可以方便的根据所部署环境的需求,对测试用例规模进行选择。若在系统的集成阶段出现了问题,也能够方便地从抛出的异常信息定位到出错的位置。基于内置合约检查的构件测试技术的提出,有效增强了构件的可复用性,降低了部署构件系统的成本,使构件开发向“即插即用”的目标更进了一步。本文从构件系统中最基本的客户-服务关系的两端对合约测试进行了设计,包括在服务端添加易于测试的合约测试接口,以及客户端的合约测试组件的详细设计,并在最后给出了合约测试构件的部分实现代码。