1 Venkat Subramaniam Quality of Software Design Good design is critical to a software application A good design has following characteristics –Specific to problem –Yet, general enough –Simple –Easier to understand and maintain –Is extensible and maintainable
2 Venkat Subramaniam Design Principles How do you measure quality of design? One architect said “The design is good because I did it.” Well, we need better metrics than that Thankfully good object-oriented design principles are there to help us To name a few –High cohesion and low coupling –Open-closed principle –Liskov’s substitution principle –Dependency Inversion principles –…
3 Venkat Subramaniam Evolutionary Design We often need to balance over design vs. extensibility Rather than overly complication, it is better to start simple and evolve into an appropriate design Evolutionary design and simplicity are key elements in Agile Software Development –A result-oriented approach where working software is considered true measure of progress –Feedback and communication play a key role in this approach
4 Venkat Subramaniam How to do evolutionary design? Agile development relies on three key practices for this –Test First Development You use unit tests to help structure your application and influence your design decisions –Collaboration Your team constantly evaluates design decisions Best designs emerge from passionate developers collaboration –Refactoring Design considerations don’t happen up-front but happen constantly as the system is developed