Task: Even though C + + is one of the most widespread programming languages and is used in many different areas very effectively, C++ IDEs only have limited support for features fostering agile development. Such features, for example refactoring, have been made popular by Java's IDEs, most notably Eclipse's Java Development Tools (JDT), and are considered a must-have feature of an IDE by many developers today. At HSR's Institute for Software, several improvements to Eclipse's C/C++ Development Tooling (CDT) have been developed, and this work continues that tradition.
In the scope of this master thesis, the ReDHead tool was developed, adding the ability to optimize header dependencies of C + + programs in CDT. ReDHead's features provide functionality to statically analyze the include dependencies of C + + files and provide suggestions on how the include structure of a C + + software project can be optimized.The aim of these optimizations is to (1) improve code quality, (2) reduce code coupling, (3) lower compile-time and (4) improve the speed of the development. Existing C++ projects often span millions of lines of code distributed over hundreds of files. Long-living projects tend to develop a complex net of include dependencies leading to an unmanageable physical architecture of the system. As a side effect of huge coupling and often unnecessary parts not being removed, compile times rise significantly. Hence, the possibility to approach such design issues supported by an automated static include analysis tool is a crucial advantage.
This is a list of features that the ReDHead tool provides: - Organize / Optimize includes
- Find unused includes
- Directly include referenced files
- Find unused files Static code coverage
[1]
John Stuart Lakos,et al.
Large-Scale C++ Software Design
,
1996
.
[2]
Mary Jean Harrold,et al.
Slicing object-oriented software
,
1996,
Proceedings of IEEE 18th International Conference on Software Engineering.
[3]
Dawson R. Engler,et al.
A few billion lines of code later
,
2010,
Commun. ACM.
[4]
Mark Weiser,et al.
Minimizing Communication for Synchronizing Parallel Dataflow Programs
,
1988,
International Conference on Parallel Processing.
[5]
Thomas Corbat,et al.
Refactoring support for the ruby development tools
,
2007,
Software Engineering.
[6]
Eugene H. Spafford,et al.
Debugging with dynamic slicing and backtracking
,
1993,
Softw. Pract. Exp..
[7]
Mark Weiser,et al.
Reconstructing Sequential Behavior from Parallel Behavior Projections
,
1983,
Inf. Process. Lett..
[8]
David W. Binkley,et al.
Interprocedural slicing using dependence graphs
,
1988,
SIGP.
[9]
Thomas W. Reps,et al.
Integrating non-intering versions of programs
,
1988,
POPL '88.
[10]
Mads Torgersen,et al.
The c# programming language, third edition
,
2008
.