ABSTRACT
The prevalence of design problems may cause re-engineering or even discontinuation of the system. Due to missing, informal or outdated design documentation, developers often have to rely on the source code to identify design problems. Therefore, developers have to analyze different symptoms that manifest in several code elements, which may quickly turn into a complex task. Although researchers have been investigating techniques to help developers in identifying design problems, there is little knowledge on how developers actually proceed to identify design problems. In order to tackle this problem, we conducted a multi-trial industrial experiment with professionals from 5 software companies to build a grounded theory. The resulting theory offers explanations on how developers identify design problems in practice. For instance, it reveals the characteristics of symptoms that developers consider helpful. Moreover, developers often combine different types of symptoms to identify a single design problem. This knowledge serves as a basis to further understand the phenomena and advance towards more effective identification techniques.
- M Abbes, F Khomh, Y Gueheneuc, and G Antoniol. 2011. An Empirical Study of the Impact of Two Antipatterns, Blob and Spaghetti Code, on Program Comprehension. In Proceedings of the 15th European Software Engineering Conference; Oldenburg, Germany. 181--190. Google ScholarDigital Library
- Holger Bär and Oliver Ciupke. 1998. Exploiting Design Heuristics for Automatic Problem Detection. In Workshop Ion on Object-Oriented Technology (ECOOP '98). Springer-Verlag, London, UK, UK, 73--74. Google ScholarDigital Library
- Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerlad, and Michael Stal. 1996. Pattern-Oriented Software Architecture - Volume 1: A System of Patterns. Wiley Publishing. Google ScholarDigital Library
- G Campbell and Patroklos P Papapetrou. 2013. SonarQube in action. Manning Publications Co. Google ScholarDigital Library
- Munkhnasan Choinzon and Yoshikazu Ueda. 2006. Detecting Defects in Object Oriented Designs Using Design Metrics. In Proceedings of the 2006 Conference on Knowledge-Based Software Engineering: Proceedings of the Seventh Joint Conference on Knowledge-Based Software Engineering. IOS Press, Amsterdam, The Netherlands, The Netherlands, 61--72. http://dl.acm.org/citation.cfm?id=1565098.1565107 Google ScholarDigital Library
- O. Ciupke. 1999. Automatic detection of design problems in object-oriented reengineering. In Proceedings of Technology of Object-Oriented Languages and Systems - TOOLS 30 (Cat. No.PR00278). 18--32. Google ScholarDigital Library
- Bill Curtis, Jay Sappidi, and Alexandra Szynkarski. 2012. Estimating the Size, Cost, and Types of Technical Debt. In Proceedings of the Third International Workshop on Managing Technical Debt (MTD '12). IEEE Press, Piscataway, NJ, USA, 49--53. http://dl.acm.org/citation.cfm?id=2666036.2666045 Google ScholarDigital Library
- K. Anders Ericsson and Herbert A. Simon. 1993. Protocol Analysis: Verbal Reports as Data (2 ed.). A Bradford Book.Google Scholar
- M. Fokaefs, N. Tsantalis, and A. Chatzigeorgiou. 2007. JDeodorant: Identification and Removal of Feature Envy Bad Smells. In 2007 IEEE International Conference on Software Maintenance. 519--520.Google Scholar
- M Fowler. 1999. Refactoring: Improving the Design of Existing Code. Addison-Wesley Professional, Boston. Google ScholarDigital Library
- Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. 1995. Design Patterns: Elements of Reusable Object-oriented Software. Addison-Wesley Longman Publishing Co., Inc., Boston, MA, USA. Google ScholarDigital Library
- J Garcia, D Popescu, G Edwards, and N Medvidovic. 2009. Identifying Architectural Bad Smells. In CSMR09; Kaiserslautern, Germany. IEEE. Google ScholarDigital Library
- B.G. Glaser. 1998. Doing Grounded Theory: Issues and Discussions. Sociology Press. https://books.google.com.br/books?id=XStmQgAACAAJGoogle Scholar
- M Godfrey and E Lee. 2000. Secrets from the Monster: Extracting Mozilla's Software Architecture. In CoSET-00; Limerick, Ireland. 15--23.Google Scholar
- J. E. Hannay, D. I. K. Sjoberg, and T. Dyba. 2007. A Systematic Review of Theory Use in Software Engineering Experiments. IEEE Transactions on Software Engineering 33, 2 (Feb 2007), 87--107. Google ScholarDigital Library
- Ross Jeffery. 2013. Paths to Software Engineering Evidence. Springer Berlin Heidelberg, Berlin, Heidelberg, 133--144.Google Scholar
- P. Johnson, M. Ekstedt, and I. Jacobson. 2012. Where's the Theory for Software Engineering? IEEE Software 29, 5 (Sept 2012), 96--96. Google ScholarDigital Library
- P. Kaminski. 2007. Reforming Software Design Documentation. In 14th Working Conference on Reverse Engineering (WCRE 2007). 277--280. Google ScholarDigital Library
- A MacCormack, J Rusnak, and C Baldwin. 2006. Exploring the Structure of Complex Software Designs: An Empirical Study of Open Source and Proprietary Code. Manage. Sci. 52, 7 (2006), 1015--1030. Google ScholarDigital Library
- I. Macia, R. Arcoverde, E. Cirilo, A. Garcia, and A. von Staa. 2012. Supporting the identification of architecturally-relevant code anomalies. In ICSM12. 662--665. Google ScholarDigital Library
- I. Macia, R. Arcoverde, A. Garcia, C. Chavez, and A. von Staa. 2012. On the Relevance of Code Anomalies for Identifying Architecture Degradation Symptoms. In CSMR12. 277--286. Google ScholarDigital Library
- Isela Macia, Joshua Garcia, Daniel Popescu, Alessandro Garcia, Nenad Medvidovic, and Arndt von Staa. 2012. Are Automatically-detected Code Anomalies Relevant to Architectural Modularity?: An Exploratory Analysis of Evolving Systems. In AOSD '12. ACM, New York, NY, USA, 167--178. Google ScholarDigital Library
- J.G. March and H.A. Simon. 1958. Organizations. Wiley. https://books.google.com.br/books?id=fx1HAAAAMAAJGoogle Scholar
- R Martin. 2002. Agile Principles, Patterns, and Practices. Prentice Hall, New Jersey. Google ScholarDigital Library
- Robert C. Martin and Micah Martin. 2006. Agile Principles, Patterns, and Practices in C# (Robert C. Martin). Prentice Hall PTR, Upper Saddle River, NJ, USA. Google ScholarDigital Library
- Complementar Material. 2017. https://ssousaleo.github.io/ICSE2018/. (2017).Google Scholar
- Ran Mo, Yuanfang Cai, R. Kazman, and Lu Xiao. 2015. Hotspot Patterns: The Formal Definition and Automatic Detection of Architecture Smells. In Software Architecture (WICSA), 2015 12th Working IEEE/IFIP Conference on. 51--60. Google ScholarDigital Library
- N Moha, Y Gueheneuc, L Duchien, and A Le Meur. 2010. DECOR: A Method for the Specification and Detection of Code and Design Smells. IEEE Transaction on Software Engineering 36 (2010), 20--36. Google ScholarDigital Library
- Emerson Murphy-Hill and Andrew P Black. 2010. An interactive ambient visualization for code smells. In Proceedings of the 5th international symposium on Software visualization; Salt Lake City, USA. ACM, 5--14. Google ScholarDigital Library
- W. T. Norman. 1963. Toward an adequate taxonomy of personality attributes: replicated factors structure in peer nomination personality ratings. Journal of abnormal and social psychology 66 (June 1963), 574--583.Google ScholarCross Ref
- W Oizumi and A Garcia. 2015. Organic: A Prototype Tool for the Synthesis of Code Anomalies. (2015). http://wnoizumi.github.io/organic/Google Scholar
- W Oizumi, A Garcia, L Sousa, B Cafeo, and Y Zhao. 2016. Code Anomalies Flock Together: Exploring Code Anomaly Agglomerations for Locating Design Problems. In The 38th International Conference on Software Engineering; USA. Google ScholarDigital Library
- F. Palomba, G. Bavota, M. D. Penta, R. Oliveto, and A. D. Lucia. 2014. Do They Really Smell Bad? A Study on Developers' Perception of Bad Code Smells. In 2014 IEEE International Conference on Software Maintenance and Evolution. 101--110. Google ScholarDigital Library
- David L. Parnas. 1978. Designing Software for Ease of Extension and Contraction. In Proceedings of the 3rd International Conference on Software Engineering (ICSE '78). IEEE Press, Piscataway, NJ, USA, 264--277. Google ScholarDigital Library
- Dewayne E. Perry and Alexander L. Wolf. 1992. Foundations for the Study of Software Architecture. SIGSOFT Softw. Eng. Notes 17, 4 (Oct. 1992), 40--52. Google ScholarDigital Library
- Per Runeson, Martin Host, Austen Rainer, and Bjorn Regnell. 2012. Case Study Research in Software Engineering: Guidelines and Examples. Wiley Publishing. Google ScholarDigital Library
- S Schach, B Jin, D Wright, G Heller, and A Offutt. 2002. Maintainability of the Linux kernel. Software, IEE Proceedings - 149, 1 (2002), 18--23.Google Scholar
- W. R. Shadish, T. D. Cook, and Donald T. Campbell. 2001. Experimental and Quasi-Experimental Designs for Generalized Causal Inference (2 ed.). Houghton Mifflin.Google Scholar
- Marcelino Campos Oliveira Silva, Marco Tulio Valente, and Ricardo Terra. 2016. Does Technical Debt Lead to the Rejection of Pull Requests?. In Proceedings of the 12th Brazilian Symposium on Information Systems (SBSI '16). 248--254. Google ScholarDigital Library
- Dag I. K. Sjøberg, Tore Dybå, Bente C. D. Anda, and Jo E. Hannay. 2008. Building Theories in Software Engineering. Springer London, London, 312--336.Google Scholar
- Leonardo Sousa, Roberto Oliveira, Alessandro Garcia, Jaejoon Lee, Tayana Conte, Willian Oizumi, Rafael de Mello, Adriana Lopes, Natasha Valentim, Edson Oliveira, and Carlos Lucena. 2017. How Do Software Developers Identify Design Problems?: A Qualitative Analysis. In Proceedings of 31st Brazilian Symposium on Software Engineering (SBES'17). 12. Google ScholarDigital Library
- Klaas-Jan Stol and Brian Fitzgerald. 2015. Theory-oriented software engineering. Science of Computer Programming 101 (2015), 79--98. Towards general theories of software engineering.Google ScholarCross Ref
- Klaas-Jan Stol, Paul Ralph, and Brian Fitzgerald. 2016. Grounded Theory in Software Engineering Research: A Critical Review and Guidelines. In Proceedings of the 38th International Conference on Software Engineering (ICSE '16). ACM, New York, NY, USA, 120--131. Google ScholarDigital Library
- A. Strauss and J.M. Corbin. 1998. Basics of Qualitative Research: Techniques and Procedures for Developing Grounded Theory. SAGE Publications.Google Scholar
- Antony Tang, Aldeida Aleti, Janet Burge, and Hans van Vliet. 2010. What makes software design effective? Design Studies 31, 6 (2010), 614--640. Special Issue Studying Professional Software Design.Google ScholarCross Ref
- Richard N. Taylor and Andre van der Hoek. 2007. Software Design and Architecture The Once and Future Focus of Software Engineering. In 2007 Future of Software Engineering (FOSE '07). IEEE Computer Society, Washington, DC, USA, 226--243. Google ScholarDigital Library
- A. Trifu and R. Marinescu. 2005. Diagnosing design problems in object oriented systems. In WCRE'05. 10 pp. Google ScholarDigital Library
- Adrian Trifu and Urs Reupke. 2007. Towards Automated Restructuring of Object Oriented Systems. In CSMR '07. IEEE, Washington, DC, USA, 39--48. Google ScholarDigital Library
- J van Gurp and J Bosch. 2002. Design erosion: problems and causes. Journal of Systems and Software 61, 2 (2002), 105--119. Google ScholarDigital Library
- S. Vidal, E. Guimaraes, W. Oizumi, A. Garcia, A. D. Pace, and C. Marcos. 2016. Identifying Architectural Problems through Prioritization of Code Smells. In SBCARS16. 41--50.Google Scholar
- Santiago A. Vidal, Hernán Ceferino Vázquez, Jorge Andrés Díaz Pace, Claudia Marcos, Alessandro F. Garcia, and Willian Nalepa Oizumi. 2015. JSpIRIT: a flexible tool for the analysis of code smells. In 34th International Conference of the Chilean Computer Science Society (SCCC). IEEE, Santiago, Chile, 1--6.Google ScholarCross Ref
- S. Wong, Y. Cai, M. Kim, and M. Dalton. 2011. Detecting software modularity violations. In Software Engineering (ICSE), 2011 33rd International Conference on. 411--420. Google ScholarDigital Library
- Lu Xiao, Yuanfang Cai, Rick Kazman, Ran Mo, and Qiong Feng. 2016. Identifying and Quantifying Architectural Debt. In Proceedings of the 38th International Conference on Software Engineering (ICSE '16). ACM, New York, NY, USA, 488--498. Google ScholarDigital Library
- A Yamashita and L Moonen. 2012. Do code smells reflect important maintainability aspects?. In ICSM12. 306--315. Google ScholarDigital Library
Index Terms
- Identifying design problems in the source code: a grounded theory
Recommendations
How Do Software Developers Identify Design Problems?: A Qualitative Analysis
SBES '17: Proceedings of the XXXI Brazilian Symposium on Software EngineeringWhen a software design decision has a negative impact on one or more quality attributes, we call it a design problem. For example, the Fat Interface problem indicates that an interface exposes non-cohesive services Thus, clients and implementations of ...
Revealing design problems in stinky code: a mixed-method study
SBCARS '17: Proceedings of the 11th Brazilian Symposium on Software Components, Architectures, and ReuseDevelopers often have to locate design problems in the source code. Several types of design problem may manifest as code smells in the program. A code smell is a source code structure that may reveal a partial hint about the manifestation of a design ...
Incidence of code smells in the application of design patterns: a method-level analysis
SBCARS '19: Proceedings of the XIII Brazilian Symposium on Software Components, Architectures, and ReuseDesign patterns are reusable solutions that can be applied to solve specific problems in software design. Such patterns can be misapplied, though, and give rise to code smells, i.e., fragments in the code that indicate possible design flaws. In this ...
Comments