I have background and interests in artificial intelligence, software engineering, software psychology and cognitive science.
My work is in artificial intelligence and software engineering, especially software engineering with existing programs. My research addresses automatic program understanding theory, technology and applications.
I developed the practical UNPROG program understander and demonstrated its application to reverse engineering and reengineering.
I am interestd in software engineering involving exisiting programs. More is spent on old software than new development. Most of this effort involves understanding exisitng programs, and modifying them accordingly.
My research investigates knowledge-based program understanding and its applications. Its complementary goals are:
I developed mutually reinforcing approaches to these goals in my dissertation research. The UNPROG program understander was designed to investigate automatic program understanding and its applications using real-world programs. UNPROG practically recognizes abstract concepts like "read-process loop" by using programming knowledge. Recognized concepts were used to perform automatic Cobol restructuring with quality not possible wirth existing methods. Methodologies and measures were demonstrated for empircally determining a program's conceptual content and evaluating program understanding perfromance.
Industry and government have recognized the importance of exisitng software. $100 billion is spent annually on maintanance activites such as corection, com=nversion, improvemtn, asnd extension. Futhermore, much new development reuses exisiting systems and components. There is tremendous need for reverse engineering and reeengineering tools which effectively assist and automate these processes. many tools have been deveolped, but there usefulness is limited because their analysis is shallow, like a compiler's. Deeper knowledge-based program understanding is the key to more effectifve and valable tools. UNPROG an dmy approaches will attract funding because they are ideal for investigating and developing such automation.
Many kinds of "industry-as-laboratory" projects can provide specific problems and support for method development, application development, and empirical characterization. In "Knowledge-Based Software Reenginerring Tools" and "Knowledge-Based Software Reverse Engineering", I propose to enhance exisitng tools with UNPROG, performing method development and testing as needed. "Automatic Program Understanding Empricial Studies" will investigate recognition preformance in a program population, as required for particular maintanance tasks and tools. "Inteactive Knowledge Acquistion and Visualiztion for Automatic Program Understanding" will imporve UNPROG with efficient knowledge acquisition and a visual interface. Proposals are being prepared for toher kinds of projects, including recognition for reuse, reengineering for reuse, entry inot CASE, and domain concept recognition.
Update: 30-Nov-1994