{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,1,21]],"date-time":"2026-01-21T11:40:55Z","timestamp":1768995655572,"version":"3.49.0"},"reference-count":24,"publisher":"Wiley","issue":"8","license":[{"start":{"date-parts":[[2021,5,31]],"date-time":"2021-05-31T00:00:00Z","timestamp":1622419200000},"content-version":"vor","delay-in-days":0,"URL":"http:\/\/onlinelibrary.wiley.com\/termsAndConditions#vor"}],"content-domain":{"domain":["onlinelibrary.wiley.com"],"crossmark-restriction":true},"short-container-title":["Softw Pract Exp"],"published-print":{"date-parts":[[2021,8]]},"abstract":"<jats:title>Abstract<\/jats:title><jats:p>New code in projects can introduce violations that deviate the code implementation from the intended architecture. This process is known as architecture erosion. In this article, we propose an approach for recovering the implemented architecture, and detecting violations when comparing it with the intended architecture. Given a code repository, the continuous integration pipeline calls the solution to detect the incidences of architecture violations as well as some quality and social metrics. This data is presented in metric\u2010centered views that help development teams to manage architecture erosion. Our approach is based on model\u2010driven engineering techniques since models serve to represent the code, and a model\u2010based pattern language helps us to automate the search for violation occurrences and execute corresponding actions (e.g., creation\/assignment of issues). We confirm the approach benefits in a real project implemented by a software developing company, in a sample project available on the internet, and in a software development course, including 20 projects, where every single project decreases its architecture violations density through time.<\/jats:p>","DOI":"10.1002\/spe.3004","type":"journal-article","created":{"date-parts":[[2021,5,31]],"date-time":"2021-05-31T13:10:49Z","timestamp":1622466649000},"page":"1822-1845","update-policy":"https:\/\/doi.org\/10.1002\/crossmark_policy","source":"Crossref","is-referenced-by-count":5,"title":["Architecture violations detection and visualization in the continuous integration pipeline"],"prefix":"10.1002","volume":"51","author":[{"ORCID":"https:\/\/orcid.org\/0000-0001-8256-1386","authenticated-orcid":false,"given":"Camilo","family":"Mendoza","sequence":"first","affiliation":[{"name":"School of Engineering, Department of Systems and Computing Engineering Universidad de los Andes  Bogot\u00e1 Colombia"}]},{"ORCID":"https:\/\/orcid.org\/0000-0002-8342-7346","authenticated-orcid":false,"given":"Jos\u00e9","family":"Bocanegra","sequence":"additional","affiliation":[{"name":"School of Engineering, Department of Systems and Computing Engineering Universidad de los Andes  Bogot\u00e1 Colombia"}]},{"ORCID":"https:\/\/orcid.org\/0000-0002-1070-439X","authenticated-orcid":false,"given":"Kelly","family":"Garc\u00e9s","sequence":"additional","affiliation":[{"name":"School of Engineering, Department of Systems and Computing Engineering Universidad de los Andes  Bogot\u00e1 Colombia"}]},{"given":"Rubby","family":"Casallas","sequence":"additional","affiliation":[{"name":"School of Engineering, Department of Systems and Computing Engineering Universidad de los Andes  Bogot\u00e1 Colombia"}]}],"member":"311","published-online":{"date-parts":[[2021,5,31]]},"reference":[{"key":"e_1_2_12_2_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.jss.2016.01.017"},{"key":"e_1_2_12_3_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.jss.2016.06.007"},{"key":"e_1_2_12_4_1","doi-asserted-by":"publisher","DOI":"10.1049\/iet-sen.2019.0246"},{"key":"e_1_2_12_5_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.jss.2011.07.036"},{"issue":"2","key":"e_1_2_12_6_1","first-page":"82","article-title":"Software architecture erosion: impacts, causes, and management","volume":"14","author":"Andrews S","year":"2020","journal-title":"Int J Comput Sci Secur"},{"key":"e_1_2_12_7_1","doi-asserted-by":"publisher","DOI":"10.1109\/ACCESS.2020.3024671"},{"key":"e_1_2_12_8_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.jss.2005.10.017"},{"key":"e_1_2_12_9_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.jss.2007.08.025"},{"key":"e_1_2_12_10_1","doi-asserted-by":"crossref","unstructured":"\u015eoraI GlodeanG GligorM. Software architecture reconstruction: an approach based on combining graph clustering and partitioning. Paper presented at: Proceedings of the International Joint Conference on Computational Cybernetics and Technical Informatics;2010:259\u2010264; IEEE Timisora Romania.","DOI":"10.1109\/ICCCYB.2010.5491289"},{"key":"e_1_2_12_11_1","doi-asserted-by":"crossref","unstructured":"LutellierT ChollakD GarciaJ et al. Comparing software architecture recovery techniques using accurate dependencies. Paper presented at: Proceedings of the 37th IEEE International Conference on Software Engineering;2015:69\u201078; IEEE\/ACM New York NY.","DOI":"10.1109\/ICSE.2015.136"},{"key":"e_1_2_12_12_1","doi-asserted-by":"crossref","unstructured":"ShahbazianA LeeYK LeD BrunY MedvidovicN. Recovering architectural design decisions. Paper presented at: Proceedings of the International Conference on Software Architecture (ICSA);2018:95\u20109509; IEEE Seattle USA.","DOI":"10.1109\/ICSA.2018.00019"},{"key":"e_1_2_12_13_1","doi-asserted-by":"crossref","unstructured":"GarciaJ PopescuD MattmannC MedvidovicN CaiY. Enhancing architectural recovery using concerns. Paper presented at: Proceedings of the International Conference on Automated Software Engineering (ASE 2011);2011:552\u2010555; IEEE\/ACM New York NY.","DOI":"10.1109\/ASE.2011.6100123"},{"key":"e_1_2_12_14_1","doi-asserted-by":"publisher","DOI":"10.1109\/TSE.2015.2479217"},{"key":"e_1_2_12_15_1","doi-asserted-by":"crossref","unstructured":"EliassonU MartiniA KaufmannR OdehS. Identifying and visualizing architectural debt and its efficiency interest in the automotive domain: a case study. Paper presented at: Proceedings of the 7th International Workshop on Managing Technical Debt (MTD);2015:33\u201040 Bremen Germany.","DOI":"10.1109\/MTD.2015.7332622"},{"key":"e_1_2_12_16_1","doi-asserted-by":"crossref","unstructured":"LiZ LiangP AvgeriouP. Architectural technical debt identification based on architecture decisions and change scenarios. Paper presented at: Proceedings of the 12th Working IEEE\/IFIP Conference on Software Architecture;2015:65\u201074 Montreal QC Canada.","DOI":"10.1109\/WICSA.2015.19"},{"key":"e_1_2_12_17_1","doi-asserted-by":"crossref","unstructured":"LudwigJ XuS WebberF. Compiling static software metrics for reliability and maintainability from GitHub repositories. Paper presented at: Proceedings of the International Conference on Systems Man and Cybernetics (SMC);2017:5\u20109; IEEE Banff Canada.","DOI":"10.1109\/SMC.2017.8122569"},{"key":"e_1_2_12_18_1","doi-asserted-by":"crossref","unstructured":"TornhillA. Prioritize technical debt in large\u2010scale systems using codescene. Paper presented at: Proceedings of the International Conference on Technical Debt;2018:59\u201060; IEEE Gothenburg Sweden.","DOI":"10.1145\/3194164.3194187"},{"key":"e_1_2_12_19_1","unstructured":"SonarSourceSonarQube. Online Accesed October 2020."},{"key":"e_1_2_12_20_1","doi-asserted-by":"crossref","unstructured":"MendozaC Garc\u00e9sK CasallasR BocanegraJ. Detecting architectural issues during the continuous integration pipeline. Paper presented at: Proceedings of the 22nd International Conference on Model Driven Engineering Languages and Systems Companion (MODELS\u2010C);2019:589\u2010597; IEEE\/ACM New York NY.","DOI":"10.1109\/MODELS-C.2019.00090"},{"key":"e_1_2_12_21_1","doi-asserted-by":"publisher","DOI":"10.1080\/00207543.2012.701779"},{"key":"e_1_2_12_22_1","doi-asserted-by":"crossref","unstructured":"BruneliereH CabotJ JouaultF MadiotF. MoDisco: a generic and extensible framework for model driven reverse engineering. Paper presented at: Proceedings of the IEEE\/ACM International Conference on Automated Software Engineering;2010:173\u2010174; ACM New York NY.","DOI":"10.1145\/1858996.1859032"},{"key":"e_1_2_12_23_1","volume-title":"Architecting Modern Web Applications with ASP.NET Core and Microsoft Azure","author":"Smith S","year":"2019"},{"key":"e_1_2_12_24_1","doi-asserted-by":"crossref","unstructured":"De SilvaM PereraI. Preventing software architecture erosion through static architecture conformance checking. Paper presented at: Proceedings of the 10th International Conference on Industrial and Information Systems (ICIIS);2015:43\u201048; IEEE.","DOI":"10.1109\/ICIINFS.2015.7398983"},{"key":"e_1_2_12_25_1","doi-asserted-by":"crossref","unstructured":"MairM HeroldS. Towards extensive software architecture erosion repairs. Paper presented at: Proceedings of the European Conference on Software Architecture;2013:299\u2010306; Springer New York NY.","DOI":"10.1007\/978-3-642-39031-9_25"}],"container-title":["Software: Practice and Experience"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/onlinelibrary.wiley.com\/doi\/pdf\/10.1002\/spe.3004","content-type":"application\/pdf","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/onlinelibrary.wiley.com\/doi\/full-xml\/10.1002\/spe.3004","content-type":"application\/xml","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/onlinelibrary.wiley.com\/doi\/pdf\/10.1002\/spe.3004","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2023,8,30]],"date-time":"2023-08-30T19:01:10Z","timestamp":1693422070000},"score":1,"resource":{"primary":{"URL":"https:\/\/onlinelibrary.wiley.com\/doi\/10.1002\/spe.3004"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2021,5,31]]},"references-count":24,"journal-issue":{"issue":"8","published-print":{"date-parts":[[2021,8]]}},"alternative-id":["10.1002\/spe.3004"],"URL":"https:\/\/doi.org\/10.1002\/spe.3004","archive":["Portico"],"relation":{},"ISSN":["0038-0644","1097-024X"],"issn-type":[{"value":"0038-0644","type":"print"},{"value":"1097-024X","type":"electronic"}],"subject":[],"published":{"date-parts":[[2021,5,31]]},"assertion":[{"value":"2020-11-28","order":0,"name":"received","label":"Received","group":{"name":"publication_history","label":"Publication History"}},{"value":"2021-05-17","order":1,"name":"accepted","label":"Accepted","group":{"name":"publication_history","label":"Publication History"}},{"value":"2021-05-31","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}