导航

代码自动生成技术

Posted on 2008-03-30 11:11  满延平  阅读(1334)  评论(0)    收藏  举报
一切自动化是人类的一个梦想,人们为了实现这个梦想不断努力。人们利用计算机软件与硬件实现办公自动化、管理自动化的同时,也在考虑程序代码的自动生成。

    在软件工程发展过程中,计算机科学家为了降低软件开发得强度,缩短开发周期,减少代码的重复书写,从而减轻程序员的编程负担,一直以来都致力于代码自动生成方面的研究。Lex/Yacc是最早用于自动化编写编译程序的工具。随着现代化信息环境日趋复杂,各种应用软件的开发难度随之加大,这需要更有技巧,更有方法地从事软件开发,开发团队之间也必须更无障碍地沟通,否则极可能无法在有限的开发时间中完成任务。由于时间上的压力,一般人只注重程序的编写速度,却忽略其完成后的实用性与维护性,加上大型程序多人共同参与开发,每个人都有各自的程序风格,容易造成严重的差异性,随着系统规模越来越大,这将造成系统完成后在测试及维护上沉重的负担,代码自动生成技术更显出了其显著的优越性。尽管这些应用没有代码生成工具也能开发完成,但利用代码生成技术可以大大加速软件的开发进度,提高软件的质量。 

    代码生成的优势与劣势分析
    传统的代码开发调试工作流包括“编辑、编译、以及测试”。如图1所示。代码生成增加了一些新的工作流元素。传统的编辑、编译、以及测试阶段仍然适用。在代码生成的工作流中,首先编辑模版和定义文件(或者生成器本身),然后运行生成器创建输出文件。接着对输出文件进行编译测试(如果目标语言不是编译的语言,不考虑图1(右)中的编译阶段)。


图1 传统工作流与代码生成工作流的对比
 代码生成技术是关于自动生成程序的程序的技术。与手工书写代码相比,代码生成器提供了下面的一些好处:
    (1)所有软件实体的一致的代码质量,代码的质量依赖且只依赖于代码生成的模板、文件和模型。与此相比,手工经常采用的拷贝粘贴的方法为前后代码质量的一致性带来了隐患。

    (2)提高了代码变更的能力,特别在需要大量更改代码的情况下,只需要更改模板并重新运行代码生成器即可。
    (3)提高了修复软件Bug的能力,只需要修复模板的Bug然后重新运行生成器就可以修复所有的生成文件的Bug。
    (4)提高了在不同框架之间的迁移能力,一个典型的情形是我们需要生成不同框架(如J2EE/.Net)的应用代码,代码生成技术将业务逻辑以语言无关的形式单独存放,通过为不同的框架提供代码模板可以基于同一逻辑生成不同框架的应用代码。
    (5)灵活的同步机制,代码生成技术自动维护代码和数据模型的一致性,通过重新运行生成器,对模型的修改可以自动反映到代码中,这种同步机制对维护数据的一致性是非常必要的。
    (6)大幅度提高了工作效率,运用代码生成技术可以将更多的时间花费在业务相关的设计和实现上,从而可以大大提高软件的开发效率和软件质量。
    (7)是代码学习的导师,由于生成的代码具有良好的风格和100%的健壮性,程序开发者很容易模仿代码风格,从中学习。
    当然,任何一种技术都有其缺点,代码生成器也不例外:

    (1)代码生成器必须首先写好。
    (2)只能适应指定的环境。
    (3)不能100%生成想要得代码,还有一些代码需要手动修改。
    (4)对于数据库代码,数据库必须涉及正确规范。生成器通常不能很好的应付有奇特设计特征的数据。