Generative Programming and Component Engineering

Generative Programming and Component Engineering

Program Transformation Systems: Theory and Practice for Software Generation, Maintenance and Reengineering


As software demands grow, so does the need for tools to aid software engineers in designing, building and maintaining software systems. Software maintenance costs dominate software engineering costs, partly because most such engineering is done manually. Program transformation systems are semantically sound tools that modify programs (implement specifications, reverse engineer, change/modify/maintain code). These tools work by applying a knowledge base of software modification components called transformations that capture software system implementation knowledge. The transformations mechanically reuse domain engineering products to provide domain-specific automated analysis, modification, and generation of software, therefore enhancing productivity and quality over conventional methods.

Program transformation systems can capture software system implementation knowledge, as well as mechanically reuse domain-engineering products to provide domain-specific program generation. Because they provide automation, they can carry out massive changes to large-scale legacy systems that would be impractical by hand, such as Y2K remediation, system porting, refactoring, etc. The implementation knowledge available to a transformation system is key to carrying out reverse engineering, by explaining how code can implement proposed abstractions. Lastly, from the proper perspective, these systems can unify specification, design, and maintenance lifecycle phases.

An understanding of transformation system theory and technology can provide a deep understanding of how code generation, modification, and reuse of code and other software engineering artifacts can work. This tutorial provides a complete overview of transformation systems, from theory to implementation to application. The tutorial progresses from introductory to intermediate, all the necessary background will be provided, so attendees need only have basic software engineering knowledge and motivating experience modifying software.

Additional information about the topics covered in this tutorial can be found at Semantic Designs.


Meeting Room 14

Date and Time

Monday 10-25-2004 8:30 - 5:00 pm (full-day)


Ira Baxter, Semantic Designs, Inc., idbaxter (at)

Hongjun Zheng, Semantic Designs, Inc., hzheng (at)

Ira Baxter has been building system software since 1969. He acquired his Ph.D. with emphasis on software engineering and reuse from the University of California at Irvine in 1990. He has worked with a number transformation systems starting with Draco in 1975, and is presently the architect of DMS, a commercial program transformation system, and designer of the PARLANSE parallel programming language in which DMS is implemented. Dr. Baxter has been invited speaker at SSR’99, co-Chair of the 1997 International Conference on Software Reuse, Program co-Chair of the Working Conference on Reverse Engineering, and Program co-Chair of the 2002 International Conference on Software Maintenance, and has been a PC member of the International Conference on Software Maintenance for a number of years.

Hongjun Zheng, received Ph.D. on computer science at Peking University in 1997, M.S. on computer science at Jilin University in 1994. He is an active professional in R&D of software engineering. He played inseparable roles in diverse projects. Dr. Zheng, at Semantic Designs, is performing research on generalized compiler framework for programming languages used in large-scale software evolution and maintenance environment. He is member of ACM and senior member of IEEE. Dr. Zheng has served as committee member for computer-science conferences, especially those focused on software engineering and formal methods: International Conference on Formal Engineering Methods (2003, 2004), International Workshop on Source Code Analysis and Manipulation (2004), International Colloquium on Theoretical Aspects of Computing (2004).