Discovery of Architectural Layers from Source Code.
Goal: Large software systems are generally very difficult to maintain and enhance. In a number of such systems this problem can be attributed to the monolithic structure of the system and absence of a well defined modular architecture. This project deals with discovering architectural layers in large software systems which have either no documented architectural layers or where the layering has deviated from the intended layering. Discovery of natural architectural layers in the system and correction of layering violations considerably improves the modularity of the system thereby indirectly easing the maintenance effort.
Identifying business concepts from source code
Goal:
One of the reasons for the difficulty in maintaining large software systems is the absence of a documented business domain ontology1 and correlation between this ontology and source code. This information is essential for answering question such as:
- Given a module, what is the purpose of this module? What are the business concepts addressed by this module?
- Given a business concept, which are the modules that address this business concept? If there is a change in the business concept which modules and specific entities in these modules are affected?
- How cohesive are the modules? Do they implement disparate business concepts?
However given that the business domain ontology is generally not available for large software systems, a major challenge in the program comprehension field is to discover business concepts from source code and then correlate source code entities with these business concepts.
This project aims to address this problem by discovering and grouping business terms into relevant business concepts and identifying the correlation between these business concepts and source code.
Software Modularization
Goal: This research project aims to define and develop a methodology and a user assisted tool for grouping cohesive functions and files into modules. The aim of modularization would not be restricted to module discovery, it will also have the following benefits:
- API discovery: Modularization will be followed by discovery of the possible API functions and suggest re-routing of inter-module interactions through API functions.
- Discovery of Functional Services for SOA: One of the intended benefits of modularization is to also discover the functional services offered by a module. Discovery of a service has a greater impact in the area of Service Oriented Architecture.
Source Code Metadata Extractor
Goal: As a basic necessity for program comprehension and modularization, it is required to have a metadata extractor that will analyze the source code and create various structural details. It is interesting to note that not many reliable and accurate fact extractors exist today specifically for the language like C and C++.
The aim of this project is to develop a reliable metadata extractor that can be easily extended for handling customer specific metadata extraction heuristics.
Large Software System Modularity Assessment, Diagnosis and Reporting
Goal: The goal of this research project is to quantitatively access modularity, identify design principle violations in the source code and suggest possible corrective measures. An additional requirement of the tool is to support a web interface and present an interactive report where the user can navigate from the report to the code through the browser.
Evaluating Large Software System Maintainers
Goal:
Evaluation of programmers maintaining large legacy software systems varies significantly from software development as maintaining the modularity of the system is as important as adding new features or bug fixes. This project aims to evaluate maintainers by detecting variations in modularity caused by changes to the source code. This project would help in identifying maintainers violating modularity principles and provide training thereby arresting the decline in modularity of the system as it evolves over time.
|