In our days due to the evolution of the software products and their increasing complexity, the importance of the tools and methodologies integrated in the software development processes supporting the work of programmers are continually growing. This kind of supporting of the development contributes to the creation of well maintainable and high quality software.
The software design patterns belong to this methodologies and their tasks are to offer efficient and flexible solutions for challenges and problems that come up during the development process. By using these the code becomes simpler and more transparent, which leads to higher maintainability of the created software.
The aim of my thesis is to create a software that can recognize software design patterns in any source code written in C# language, thus giving an effective tool to the programmers, which can be used to automate the inspection of a software in its high-level construction. Although I cannot undertake to recognize all of the design patterns, the framework construction of the software and its simple extensibility provides later an opportunity for anyone to easily recognize a pattern that I have not detected.
For detecting design patterns the exploring and scanning of the source code is necessary. The .NET Compiler Platform makes the information available for the programmers that are accumulated in the compilation process in C# and Visual Basic languages. With the help of this platform the deep analysis of the source code is possible and since the analysis of the source code is highly needed for recognizing the design patterns, thus I used this service platform to create the recognizer software.
Finally, because to provide accurate results of an analyser software is very important, I tested my software in a real environment and compared its results to existing ones to make myself sure the accuracy of them and thus the reliability of the program.
The usage of such a recognizer software serves the correct application of design patterns, by this helps to assist in the software development process and, finally, to enhance the quality of the developed software.