Investigating design anti-pattern and design pattern mutations and their change- and fault-proneness

During software evolution, inexperienced developers may introduce design anti-patterns when they modify their software systems to fix bugs or to add new functionalities based on changes in requirements. Developers may also use design patterns to promote software quality or as a possible cure for som...

Ausführliche Beschreibung

Gespeichert in:
Bibliographische Detailangaben
Veröffentlicht in:Empirical software engineering : an international journal 2021-01, Vol.26 (1), Article 9
Hauptverfasser: Kermansaravi, Zeinab Azadeh, Rahman, Md Saidur, Khomh, Foutse, Jaafar, Fehmi, Guéhéneuc, Yann-Gaël
Format: Artikel
Sprache:eng
Schlagworte:
Online-Zugang:Volltext
Tags: Tag hinzufügen
Keine Tags, Fügen Sie den ersten Tag hinzu!
container_end_page
container_issue 1
container_start_page
container_title Empirical software engineering : an international journal
container_volume 26
creator Kermansaravi, Zeinab Azadeh
Rahman, Md Saidur
Khomh, Foutse
Jaafar, Fehmi
Guéhéneuc, Yann-Gaël
description During software evolution, inexperienced developers may introduce design anti-patterns when they modify their software systems to fix bugs or to add new functionalities based on changes in requirements. Developers may also use design patterns to promote software quality or as a possible cure for some design anti-patterns. Thus, design patterns and design anti-patterns are introduced, removed, and mutated from one another by developers. Many studies investigated the evolution of design patterns and design anti-patterns and their impact on software development. However, they investigated design patterns or design anti-patterns in isolation and did not consider their mutations and the impact of these mutations on software quality. Therefore, we report our study of bidirectional mutations between design patterns and design anti-patterns and the impacts of these mutations on software change- and fault-proneness. We analyzed snapshots of seven Java software systems with diverse sizes, evolution histories, and application domains. We built Markov models to capture the probability of occurrences of the different design patterns and design anti-patterns mutations. Results from our study show that (1) design patterns and design anti-patterns mutate into other design patterns and–or design anti-patterns. They also show that (2) some change types primarily trigger mutations of design patterns and design anti-patterns (renaming and changes to comments, declarations, and operators), and (3) some mutations of design anti-patterns and design patterns are more faulty in specific contexts. These results provide important insights into the evolution of design patterns and design anti-patterns and its impact on the change- and fault-proneness of software systems.
doi_str_mv 10.1007/s10664-020-09900-0
format Article
fullrecord <record><control><sourceid>proquest_cross</sourceid><recordid>TN_cdi_proquest_journals_2478168223</recordid><sourceformat>XML</sourceformat><sourcesystem>PC</sourcesystem><sourcerecordid>2478168223</sourcerecordid><originalsourceid>FETCH-LOGICAL-c319t-c5fd8d4a738432764f2f4100929907bc220c9be39df0c9c267293642395ebcba3</originalsourceid><addsrcrecordid>eNp9UE1PAyEQJUYTa_UPeGriGYWBheVoGj-aNPGiZ8Ky7Hablq3Amvjvpbs23rwMw5v3ZvIeQreU3FNC5EOkRAiOCRBMlCK5nqEZLSTDUlBxnntWAmZQiEt0FeOWEKIkL2aoXvkvF1PXmtT5dlG72LV-YXzq8MGk5MLxU5_wE7QfUub3Po7DtHFdWNiN8a3DI9KYYZfwIfTeeRfjNbpozC66m993jj6en96Xr3j99rJaPq6xZVQlbIumLmtuJCs5Ayl4Aw3P9hRkS7KyAMSqyjFVN7mxICQoJjgwVbjKVobN0d20N1_-HLItve2H4PNJDVyWVJQALLNgYtnQxxhcow-h25vwrSnRxzT1lKbOaeoxTU2yiE2imMnZZ_hb_Y_qByIgeEU</addsrcrecordid><sourcetype>Aggregation Database</sourcetype><iscdi>true</iscdi><recordtype>article</recordtype><pqid>2478168223</pqid></control><display><type>article</type><title>Investigating design anti-pattern and design pattern mutations and their change- and fault-proneness</title><source>SpringerLink Journals - AutoHoldings</source><creator>Kermansaravi, Zeinab Azadeh ; Rahman, Md Saidur ; Khomh, Foutse ; Jaafar, Fehmi ; Guéhéneuc, Yann-Gaël</creator><creatorcontrib>Kermansaravi, Zeinab Azadeh ; Rahman, Md Saidur ; Khomh, Foutse ; Jaafar, Fehmi ; Guéhéneuc, Yann-Gaël</creatorcontrib><description>During software evolution, inexperienced developers may introduce design anti-patterns when they modify their software systems to fix bugs or to add new functionalities based on changes in requirements. Developers may also use design patterns to promote software quality or as a possible cure for some design anti-patterns. Thus, design patterns and design anti-patterns are introduced, removed, and mutated from one another by developers. Many studies investigated the evolution of design patterns and design anti-patterns and their impact on software development. However, they investigated design patterns or design anti-patterns in isolation and did not consider their mutations and the impact of these mutations on software quality. Therefore, we report our study of bidirectional mutations between design patterns and design anti-patterns and the impacts of these mutations on software change- and fault-proneness. We analyzed snapshots of seven Java software systems with diverse sizes, evolution histories, and application domains. We built Markov models to capture the probability of occurrences of the different design patterns and design anti-patterns mutations. Results from our study show that (1) design patterns and design anti-patterns mutate into other design patterns and–or design anti-patterns. They also show that (2) some change types primarily trigger mutations of design patterns and design anti-patterns (renaming and changes to comments, declarations, and operators), and (3) some mutations of design anti-patterns and design patterns are more faulty in specific contexts. These results provide important insights into the evolution of design patterns and design anti-patterns and its impact on the change- and fault-proneness of software systems.</description><identifier>ISSN: 1382-3256</identifier><identifier>EISSN: 1573-7616</identifier><identifier>DOI: 10.1007/s10664-020-09900-0</identifier><language>eng</language><publisher>New York: Springer US</publisher><subject>Compilers ; Computer Science ; Design modifications ; Evolution ; Interpreters ; Markov chains ; Mutation ; Programming Languages ; Software development ; Software Engineering/Programming and Operating Systems ; Software quality</subject><ispartof>Empirical software engineering : an international journal, 2021-01, Vol.26 (1), Article 9</ispartof><rights>The Author(s), under exclusive licence to Springer Science+Business Media, LLC part of Springer Nature 2021</rights><rights>The Author(s), under exclusive licence to Springer Science+Business Media, LLC part of Springer Nature 2021.</rights><lds50>peer_reviewed</lds50><woscitedreferencessubscribed>false</woscitedreferencessubscribed><citedby>FETCH-LOGICAL-c319t-c5fd8d4a738432764f2f4100929907bc220c9be39df0c9c267293642395ebcba3</citedby><cites>FETCH-LOGICAL-c319t-c5fd8d4a738432764f2f4100929907bc220c9be39df0c9c267293642395ebcba3</cites></display><links><openurl>$$Topenurl_article</openurl><openurlfulltext>$$Topenurlfull_article</openurlfulltext><thumbnail>$$Tsyndetics_thumb_exl</thumbnail><linktopdf>$$Uhttps://link.springer.com/content/pdf/10.1007/s10664-020-09900-0$$EPDF$$P50$$Gspringer$$H</linktopdf><linktohtml>$$Uhttps://link.springer.com/10.1007/s10664-020-09900-0$$EHTML$$P50$$Gspringer$$H</linktohtml><link.rule.ids>314,776,780,27901,27902,41464,42533,51294</link.rule.ids></links><search><creatorcontrib>Kermansaravi, Zeinab Azadeh</creatorcontrib><creatorcontrib>Rahman, Md Saidur</creatorcontrib><creatorcontrib>Khomh, Foutse</creatorcontrib><creatorcontrib>Jaafar, Fehmi</creatorcontrib><creatorcontrib>Guéhéneuc, Yann-Gaël</creatorcontrib><title>Investigating design anti-pattern and design pattern mutations and their change- and fault-proneness</title><title>Empirical software engineering : an international journal</title><addtitle>Empir Software Eng</addtitle><description>During software evolution, inexperienced developers may introduce design anti-patterns when they modify their software systems to fix bugs or to add new functionalities based on changes in requirements. Developers may also use design patterns to promote software quality or as a possible cure for some design anti-patterns. Thus, design patterns and design anti-patterns are introduced, removed, and mutated from one another by developers. Many studies investigated the evolution of design patterns and design anti-patterns and their impact on software development. However, they investigated design patterns or design anti-patterns in isolation and did not consider their mutations and the impact of these mutations on software quality. Therefore, we report our study of bidirectional mutations between design patterns and design anti-patterns and the impacts of these mutations on software change- and fault-proneness. We analyzed snapshots of seven Java software systems with diverse sizes, evolution histories, and application domains. We built Markov models to capture the probability of occurrences of the different design patterns and design anti-patterns mutations. Results from our study show that (1) design patterns and design anti-patterns mutate into other design patterns and–or design anti-patterns. They also show that (2) some change types primarily trigger mutations of design patterns and design anti-patterns (renaming and changes to comments, declarations, and operators), and (3) some mutations of design anti-patterns and design patterns are more faulty in specific contexts. These results provide important insights into the evolution of design patterns and design anti-patterns and its impact on the change- and fault-proneness of software systems.</description><subject>Compilers</subject><subject>Computer Science</subject><subject>Design modifications</subject><subject>Evolution</subject><subject>Interpreters</subject><subject>Markov chains</subject><subject>Mutation</subject><subject>Programming Languages</subject><subject>Software development</subject><subject>Software Engineering/Programming and Operating Systems</subject><subject>Software quality</subject><issn>1382-3256</issn><issn>1573-7616</issn><fulltext>true</fulltext><rsrctype>article</rsrctype><creationdate>2021</creationdate><recordtype>article</recordtype><sourceid>BENPR</sourceid><recordid>eNp9UE1PAyEQJUYTa_UPeGriGYWBheVoGj-aNPGiZ8Ky7Hablq3Amvjvpbs23rwMw5v3ZvIeQreU3FNC5EOkRAiOCRBMlCK5nqEZLSTDUlBxnntWAmZQiEt0FeOWEKIkL2aoXvkvF1PXmtT5dlG72LV-YXzq8MGk5MLxU5_wE7QfUub3Po7DtHFdWNiN8a3DI9KYYZfwIfTeeRfjNbpozC66m993jj6en96Xr3j99rJaPq6xZVQlbIumLmtuJCs5Ayl4Aw3P9hRkS7KyAMSqyjFVN7mxICQoJjgwVbjKVobN0d20N1_-HLItve2H4PNJDVyWVJQALLNgYtnQxxhcow-h25vwrSnRxzT1lKbOaeoxTU2yiE2imMnZZ_hb_Y_qByIgeEU</recordid><startdate>20210101</startdate><enddate>20210101</enddate><creator>Kermansaravi, Zeinab Azadeh</creator><creator>Rahman, Md Saidur</creator><creator>Khomh, Foutse</creator><creator>Jaafar, Fehmi</creator><creator>Guéhéneuc, Yann-Gaël</creator><general>Springer US</general><general>Springer Nature B.V</general><scope>AAYXX</scope><scope>CITATION</scope><scope>7SC</scope><scope>8FD</scope><scope>8FE</scope><scope>8FG</scope><scope>ABJCF</scope><scope>AFKRA</scope><scope>ARAPS</scope><scope>BENPR</scope><scope>BGLVJ</scope><scope>CCPQU</scope><scope>DWQXO</scope><scope>HCIFZ</scope><scope>JQ2</scope><scope>L6V</scope><scope>L7M</scope><scope>L~C</scope><scope>L~D</scope><scope>M7S</scope><scope>P5Z</scope><scope>P62</scope><scope>PQEST</scope><scope>PQQKQ</scope><scope>PQUKI</scope><scope>PRINS</scope><scope>PTHSS</scope><scope>S0W</scope></search><sort><creationdate>20210101</creationdate><title>Investigating design anti-pattern and design pattern mutations and their change- and fault-proneness</title><author>Kermansaravi, Zeinab Azadeh ; Rahman, Md Saidur ; Khomh, Foutse ; Jaafar, Fehmi ; Guéhéneuc, Yann-Gaël</author></sort><facets><frbrtype>5</frbrtype><frbrgroupid>cdi_FETCH-LOGICAL-c319t-c5fd8d4a738432764f2f4100929907bc220c9be39df0c9c267293642395ebcba3</frbrgroupid><rsrctype>articles</rsrctype><prefilter>articles</prefilter><language>eng</language><creationdate>2021</creationdate><topic>Compilers</topic><topic>Computer Science</topic><topic>Design modifications</topic><topic>Evolution</topic><topic>Interpreters</topic><topic>Markov chains</topic><topic>Mutation</topic><topic>Programming Languages</topic><topic>Software development</topic><topic>Software Engineering/Programming and Operating Systems</topic><topic>Software quality</topic><toplevel>peer_reviewed</toplevel><toplevel>online_resources</toplevel><creatorcontrib>Kermansaravi, Zeinab Azadeh</creatorcontrib><creatorcontrib>Rahman, Md Saidur</creatorcontrib><creatorcontrib>Khomh, Foutse</creatorcontrib><creatorcontrib>Jaafar, Fehmi</creatorcontrib><creatorcontrib>Guéhéneuc, Yann-Gaël</creatorcontrib><collection>CrossRef</collection><collection>Computer and Information Systems Abstracts</collection><collection>Technology Research Database</collection><collection>ProQuest SciTech Collection</collection><collection>ProQuest Technology Collection</collection><collection>Materials Science &amp; Engineering Collection</collection><collection>ProQuest Central UK/Ireland</collection><collection>Advanced Technologies &amp; Aerospace Collection</collection><collection>ProQuest Central</collection><collection>Technology Collection</collection><collection>ProQuest One Community College</collection><collection>ProQuest Central Korea</collection><collection>SciTech Premium Collection</collection><collection>ProQuest Computer Science Collection</collection><collection>ProQuest Engineering Collection</collection><collection>Advanced Technologies Database with Aerospace</collection><collection>Computer and Information Systems Abstracts – Academic</collection><collection>Computer and Information Systems Abstracts Professional</collection><collection>Engineering Database</collection><collection>Advanced Technologies &amp; Aerospace Database</collection><collection>ProQuest Advanced Technologies &amp; Aerospace Collection</collection><collection>ProQuest One Academic Eastern Edition (DO NOT USE)</collection><collection>ProQuest One Academic</collection><collection>ProQuest One Academic UKI Edition</collection><collection>ProQuest Central China</collection><collection>Engineering Collection</collection><collection>DELNET Engineering &amp; Technology Collection</collection><jtitle>Empirical software engineering : an international journal</jtitle></facets><delivery><delcategory>Remote Search Resource</delcategory><fulltext>fulltext</fulltext></delivery><addata><au>Kermansaravi, Zeinab Azadeh</au><au>Rahman, Md Saidur</au><au>Khomh, Foutse</au><au>Jaafar, Fehmi</au><au>Guéhéneuc, Yann-Gaël</au><format>journal</format><genre>article</genre><ristype>JOUR</ristype><atitle>Investigating design anti-pattern and design pattern mutations and their change- and fault-proneness</atitle><jtitle>Empirical software engineering : an international journal</jtitle><stitle>Empir Software Eng</stitle><date>2021-01-01</date><risdate>2021</risdate><volume>26</volume><issue>1</issue><artnum>9</artnum><issn>1382-3256</issn><eissn>1573-7616</eissn><abstract>During software evolution, inexperienced developers may introduce design anti-patterns when they modify their software systems to fix bugs or to add new functionalities based on changes in requirements. Developers may also use design patterns to promote software quality or as a possible cure for some design anti-patterns. Thus, design patterns and design anti-patterns are introduced, removed, and mutated from one another by developers. Many studies investigated the evolution of design patterns and design anti-patterns and their impact on software development. However, they investigated design patterns or design anti-patterns in isolation and did not consider their mutations and the impact of these mutations on software quality. Therefore, we report our study of bidirectional mutations between design patterns and design anti-patterns and the impacts of these mutations on software change- and fault-proneness. We analyzed snapshots of seven Java software systems with diverse sizes, evolution histories, and application domains. We built Markov models to capture the probability of occurrences of the different design patterns and design anti-patterns mutations. Results from our study show that (1) design patterns and design anti-patterns mutate into other design patterns and–or design anti-patterns. They also show that (2) some change types primarily trigger mutations of design patterns and design anti-patterns (renaming and changes to comments, declarations, and operators), and (3) some mutations of design anti-patterns and design patterns are more faulty in specific contexts. These results provide important insights into the evolution of design patterns and design anti-patterns and its impact on the change- and fault-proneness of software systems.</abstract><cop>New York</cop><pub>Springer US</pub><doi>10.1007/s10664-020-09900-0</doi></addata></record>
fulltext fulltext
identifier ISSN: 1382-3256
ispartof Empirical software engineering : an international journal, 2021-01, Vol.26 (1), Article 9
issn 1382-3256
1573-7616
language eng
recordid cdi_proquest_journals_2478168223
source SpringerLink Journals - AutoHoldings
subjects Compilers
Computer Science
Design modifications
Evolution
Interpreters
Markov chains
Mutation
Programming Languages
Software development
Software Engineering/Programming and Operating Systems
Software quality
title Investigating design anti-pattern and design pattern mutations and their change- and fault-proneness
url https://sfx.bib-bvb.de/sfx_tum?ctx_ver=Z39.88-2004&ctx_enc=info:ofi/enc:UTF-8&ctx_tim=2025-02-07T23%3A00%3A49IST&url_ver=Z39.88-2004&url_ctx_fmt=infofi/fmt:kev:mtx:ctx&rfr_id=info:sid/primo.exlibrisgroup.com:primo3-Article-proquest_cross&rft_val_fmt=info:ofi/fmt:kev:mtx:journal&rft.genre=article&rft.atitle=Investigating%20design%20anti-pattern%20and%20design%20pattern%20mutations%20and%20their%20change-%20and%20fault-proneness&rft.jtitle=Empirical%20software%20engineering%20:%20an%20international%20journal&rft.au=Kermansaravi,%20Zeinab%20Azadeh&rft.date=2021-01-01&rft.volume=26&rft.issue=1&rft.artnum=9&rft.issn=1382-3256&rft.eissn=1573-7616&rft_id=info:doi/10.1007/s10664-020-09900-0&rft_dat=%3Cproquest_cross%3E2478168223%3C/proquest_cross%3E%3Curl%3E%3C/url%3E&disable_directlink=true&sfx.directlink=off&sfx.report_link=0&rft_id=info:oai/&rft_pqid=2478168223&rft_id=info:pmid/&rfr_iscdi=true