论文部分内容阅读
随着敏捷开发、终端用户编程等的流行。软件开发人员的个人能力受到了软件工程研究的重视。作为提升软件开发人员能力的重要途径之一,编程过程的复用利用已有方案解决新的编程问题,避免了一切从头开始,并且能够提高个人编程的效率及质量。编程过程是软件开发人员利用工具对软件制品进行操作的过程。其复用主要有基于软件制品和基于编程过程两种方式。基于软件制品的编程过程复用从描述软件制品变化的角度刻画编程过程,适合于编码过程的复用。基于动作的编程过程复用将编程过程看做是开发人员的一系列编程动作的集合。适合于软件安装、配置、运行、测试等过程的复用。
随着集成化软件开发环境IDE的普及,编程方式由原来的手工编写代码为主,转变为利用工具生成代码与手工编写代码相结合。据统计。近一半的用户动作发生在代码编辑器之外,相当部分的代码由工具自动生成。因此,越来越多的编程过程是工具使用的过程或者同工具使用紧密结合的过程.如软件安装过程、软件配置过程、自动生成代码框架过程、代码浏览过程等。基于制品的过程复用难以有效支持此类编程过程。另一方面。IDE的图形界面作为编程动作的实施对象,将无形的编程动作有形化,基于动作的过程复用可以捕捉这些制品以外的可复用内容,从而实现IDE环境下的编程过程复用。
基于动作的编程过程复用面临三个基本问题:(1)有可复用的编程过程,即,要有执行这个过程的动作序列;(2)编程动作可以抽象,能体现出编程过程中的可选和必选的部分,使得编程过程具有适应性;(3)基于动作的编程过程能够被高效合理地使用,以便软件开发人员提高编程效率和质量。现有研究均围绕这三个问题展开,提出了手工收集与执行、动作记录与回放这两种编程动作收集和使用技术,试图解决第一个和第三个基本问题:提出了专家手工分析和通过规则引擎、状态模型、数据挖掘等自动化方法分析编程动作的技术,以获得具有适应性的编程过程,从而试图解决第二个问题。然而,在解决第一个问题的过程中,相关工作没有考虑收集到的动作序列的质量,即,包含无用、无效甚至是有副作用的动作。在解决第二个问题的过程中,相关工作中的自动化方法往往需要一些参数预估,或者人工规则制定,而这些参数的预估难度颇高,人工规则制定也需要针对特定的应用逐个进行。这些方法的实用性亟待改进。
针对上述问题,本文建立了一套基于动作的编程过程复用原理、方法与技术框架,其主要特色和贡献包括:
首先,给出了集成化软件开发环境IDE下基于动作的编程过程复用原理。其贡献包括(1)通过对编程过程与编程动作的关系的形式化推导,论证了基于动作的编程过程复用方法的适用范围:(2)归纳了基于动作的编程过程复用方法的使用场景,根据使用场景提出编程过程在新的应用中可能的变化性,进一步提出衡量该方法成功实施的定性指标:(3)给出了一种IDE环境下编程动作、编程过程、可复用编程过程的定义,并形式化描述之;将可复用编程过程建模为一种有向图。这些形式化描述及模型,是编程过程抽象的基础,也是整个复用方法描述与推导的基础;(4)给出了一种IDE环境下的动作分类方法,并形式化表达该分类。它是编程过程抽象的基础,也是衡量动作质量及其复用价值的指标。
其二,针对动作序列往往包含无效、无用甚至有副作用的动作的问题,提出了一种基于用户行为模式的动作序列过滤方法,通过检测用户行为模式,发现有问题的动作,将其过滤以提高编程动作序列的质量。给出了IDE上常见的四种需要过滤的动作的行为模式及其过滤方法,构造了四种过滤器,自动删除四种常见的无效、无用甚至有副作用的动作。
其三,针对编程过程应适应不同人或不同任务的需求,提出了一种将多个编程过程合成为一个具有多种执行路径的编程过程的方法。将动作序列抽象为具有编程语义的编程活动序列,通过对编程活动的比较,找出编程过程中的可选部分和必选部分;通过对编程活动的组合,将各种编程过程合成为一个包含多种执行路径的复合的编程过程,允许用户选择执行路径、设置编程参数值。
最后,基于主流的IDE环境Eclipse,实现了一个基于动作的编程过程复用支撑工具,提供编程动作自动收集、可复用编程过程自动生成与交互式回放等功能。特别地,为了降低学习成本和提高用户体验,回放界面采用了Eclipse主流的编程向导Cheat Sheet界面形式。在回放过程中,可以修改软件制品的参数值、选择不同的执行路径,以适应不同的编程过程。基于该工具对本文的方法进行了正确性和有效性评估。