Software design
Software design is the internal quality of the design of software and the properties that make the software easier to understand and change in the future, specifically focusing on maintainability. It emphasizes object-oriented technology due to its prevalence in modern software development, addressing design quality at the class and package level, including aspects such as source code organization, class identification, interface use, design patterns, and the application of design guidelines [1].
An agile team thrives on change. The team invests little upfront; therefore, it is not vested in an aging initial design. Rather, they keep the design of the system as clean and simple as possible, and back it up with lots of unit tests and acceptance tests. This keeps the design flexible and easy to change. The team takes advantage of that flexibility to continuously improve the design so that each iteration ends with a system whose design is as appropriate as it can be for the requirements in that iteration [2].
Relates to
- design principles
- SOLID
- Law of Demeter
- DRY
- small methods
- Design by contract
blogs
- What is Connascence? - connascence.io
- About Connascence - codesai.com
- Rules of Simple Design
-
BeckDesignRules
- same as the four simple design rules
-
- passes the tests
-
- reveals intention
-
- no duplication
-
- few elements
-
- same as the four simple design rules
- Xp Simplicity Rules
- The Four Elements of Simple Design
-
BeckDesignRules
youtube videos
- Youtube playlist
- Understanding Coupling and Cohesion
- CppCon 2017: Jon Cohen “A Type, by Any Other Name”
- ETE 2012 - Jim Weirich - Connascence Examined
- YOW! 2012 Jim Weirich - Connascence Examined #YOW
- LA RubyConf 2009 - The Building Blocks of Modularity
papers
- Is designing software different from designing other things?
- Comparación de herramientas de Detección de Design Smells
- How the practice of TDD influences class design in object-oriented systems: Patterns of unit tests feedback
References
- [1]J. Stevenson and M. Wood, “Recognising object-oriented software design quality: a practitioner-based questionnaire survey,” Software Quality Journal, vol. 26, pp. 321–365, 2018.
- [2]R. C. Martin, Agile software development: principles, patterns, and practices. Prentice Hall PTR, 2003.