Possible Applications of the DMS Software Reengineering Toolkit
Where could DMS be applied?
DMS can enable an organization to carry out a variety of useful analyses and modifications on a large system. We list some ideas below.
- Formatting: Making source codes more readable, and its converse, obfuscation
- Application evolution: Functionality, Performance or Implementation Technology change
- Migration: Moving software systems to new platforms and languages
- Massive Regular Change: Probe insertion, adaptation to new target APIs, automated documentation insertion...
- Restructuring: Clone removal, Y2K fix, Class hierarchy revision.
- Refactoring: Revising code to improve quality without changing functionality
- Optimization: Dead code removal, parallelization.
- Partial Evaluation: Building specialized codes based on constant function/procedure arguments
- Aspect Weaving: Combining advice with application code to implement solutions
- Metrics: SLOC, Statement counts, cyclomatic complexity, cohesion/coupling measures, language construct counting.
- Test Coverage: Determining what part of an application has NOT been tested
- Profilers: Finding execution-time hot spots in code
- Organization style checking: Comment headers, disallowed code constructs.
- Programming information extraction: Smart Source Browers, Slices, Call Graphs, Side effects, Architecture analysis
- Domain information extraction: Business rules, Idiom recognition.
- Semantic Faults: erroneous/dead/useless code.
Domain-specific program generation
- Partial Differential Equation solvers
- Factory control synthesis
- Entity-Relationship compilers, including data base conversion generators
- Protocol compilers
- Automated Test Generation
- Generation of fast XML parsers from DTDs/Schemas
Legacy code reverse engineering
- Design recovery to domain abstractions
- Incremental design capture
- reusable component extraction
- component extraction for domains
- Legacy mergers: unify application data schemas, convert existing data
- Business rule extraction: make them explicit, easy to read/change
Semantic Designs would be pleased to help your organization assess the possibility of any of these or other activities. Contact email@example.com