diff --git a/architecture.html b/architecture.html index 609ac6c..5db56e0 100644 --- a/architecture.html +++ b/architecture.html @@ -52,6 +52,8 @@
The most common approach to dealing with both architectural mismatch and the changing of requirements over time is refactoring, which means changing the architecture of an implementation without changing its behavior. Refactoring is something most developers do as part of changing a system (Murphy-Hill et al 2009, Silva et al. 2016). Refactoring code to eliminate mismatch and technical debt can simplify change in the future, saving time (Ng et al. 2006) and prevent future defects (Kim et al. 2012). +
Research on the actual activity of software architecture is actually somewhat sparse. One of the more recent syntheses of this work is Petre et al.'s book, Software Design Decoded (Petre et al. 2016), which distills many of the practices and skills of software design into a set of succinct ideas. For example, the book states, "Every design problem has multiple, if not infinite, ways of solving it. Experts strongly prefer simpler solutions over complex ones, for they know that such solutions are easier to understand and change in the future." These ideas, while powerful in their conciseness, are also grounded in substantial research on how software architects think and work.
+Miryung Kim, Thomas Zimmermann, and Nachiappan Nagappan. 2012. A field study of refactoring challenges and benefits. In Proceedings of the ACM SIGSOFT 20th International Symposium on the Foundations of Software Engineering (FSE '12). ACM, New York, NY, USA, , Article 50 , 11 pages.
Emerson Murphy-Hill, Chris Parnin, and Andrew P. Black. 2009. How we refactor, and how we know it. In Proceedings of the 31st International Conference on Software Engineering (ICSE '09). IEEE Computer Society, Washington, DC, USA, 287-297.
T. H. Ng, S. C. Cheung, W. K. Chan, and Y. T. Yu. 2006. Work experience versus refactoring to design patterns: a controlled experiment. In Proceedings of the 14th ACM SIGSOFT international symposium on Foundations of software engineering (SIGSOFT '06/FSE-14). ACM, New York, NY, USA, 12-22.
-Marian Petre. 2013. UML in practice. In Proceedings of the 2013 International Conference on Software Engineering (ICSE '13). IEEE Press, Piscataway, NJ, USA, 722-731.
+Marian Petre. 2013. UML in practice. In Proceedings of the 2013 International Conference on Software Engineering (ICSE '13). IEEE Press, Piscataway, NJ, USA, 722-731.
+Petre, M., van der Hoek, A., & Quach, Y. (2016). Software Design Decoded: 66 Ways Experts Think. MIT Press.
Danilo Silva, Nikolaos Tsantalis, and Marco Tulio Valente. 2016. Why we refactor? Confessions of GitHub contributors. In Proceedings of the 2016 24th ACM SIGSOFT International Symposium on Foundations of Software Engineering (FSE 2016). ACM, New York, NY, USA, 858-870.
Dong Qiu, Bixin Li, and Zhendong Su. 2013. An empirical analysis of the co-evolution of schema and code in database applications. In Proceedings of the 2013 9th Joint Meeting on Foundations of Software Engineering (ESEC/FSE 2013). ACM, New York, NY, USA, 125-135.
Robert J. Walker, Shreya Rawal, and Jonathan Sillito. 2012. Do crosscutting concerns cause modularity problems? In Proceedings of the ACM SIGSOFT 20th International Symposium on the Foundations of Software Engineering (FSE '12). ACM, New York, NY, USA, , Article 49 , 11 pages.