By: Sohair Ali
Software products go through several stages as they mature from initial concept to finished product. After the purpose and specifications of software are determined, software developers will design to develop a plan for software. It is important to design and document software in an organized way so that it can be easily understood and maintained after the initial release.
While designing software a lot of concepts and practices are the tools of software designers like abstraction, patterns, modularity, cohesion , separation of responsibilities, modularization and OO design principles
After accomplishing the task of design, this work needs to be maintained, reviewed and modified if needed while implementation and we are facing the question of How to write a code that preserves the initial architecture design, make sure of preserving and recovering the design of software in its implementation phase and avoid losing design in code?
Yet the code is all that exists at run time and it is all what we have
"The source code is often the only accurate description of the software. On many projects, the only documentation available to programmers is the code itself. Requirements specifications and design documents can go out of date, but the source code is always up to date. Consequently, it's imperative that the code be of the highest possible quality. “ - Steve C McConnell, Code Complete: A Practical Handbook of Software Construction
Problems to Track Design within Implementation Phase
- Relies on well structured and named code, which could be accomplished by defined Naming conventions within source code.
- Design validation
- Real measurement of design metrics items e.g. Cyclomatic complexity and dependency.
Many possible types of design information but two broad groups: static and dynamic
| || |
By Using combination of tools to maintain check and retrieve design information from code it could be easier to overcome the previous problems.
Static Design Information Tools
Currently there exist a lot of tools which provide the following features:
- Collecting metrics about the code
- Analyze code structure
- Specify design rules
Where Did My Architecture Go? http://www.infoq.com/presentations/Where-Did-My-Architecture-Go
Steve C McConnell, Code Complete2: A Practical Handbook of Software Construction