{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,7,11]],"date-time":"2026-07-11T21:16:50Z","timestamp":1783804610900,"version":"3.55.0"},"reference-count":63,"publisher":"Association for Computing Machinery (ACM)","issue":"3","license":[{"start":{"date-parts":[[2015,5,13]],"date-time":"2015-05-13T00:00:00Z","timestamp":1431475200000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/www.acm.org\/publications\/policies\/copyright_policy#Background"}],"funder":[{"name":"Swiss National Science Foundation, with projects n. 200021-116287 (&ldquo;Perseos&rdquo;), n. 200020-124918 (&ldquo;WASH&rdquo;), and n. 200021-138006 (&ldquo;SHADE&rdquo;)"}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["ACM Trans. Softw. Eng. Methodol."],"published-print":{"date-parts":[[2015,5,13]]},"abstract":"<jats:p>\n            Despite the best intentions, the competence, and the rigorous methods of designers and developers, software is often delivered and deployed with faults. To cope with imperfect software, researchers have proposed the concept of\n            <jats:italic>self-healing<\/jats:italic>\n            for software systems. The ambitious goal is to create software systems capable of detecting and responding \u201cautonomically\u201d to functional failures, or perhaps even preempting such failures, to maintain a correct functionality, possibly with acceptable degradation. We believe that self-healing can only be an expression of some form of redundancy, meaning that, to automatically fix a faulty behavior, the correct behavior must be already present somewhere, in some form, within the software system either explicitly or implicitly. One approach is to\n            <jats:italic>deliberately<\/jats:italic>\n            design and develop redundant systems, and in fact this kind of deliberate redundancy is the essential ingredient of many fault tolerance techniques. However, this type of redundancy is also generally expensive and does not always satisfy the time and cost constraints of many software projects.\n          <\/jats:p>\n          <jats:p>\n            With this article we take a different approach. We observe that modern software systems naturally acquire another type of redundancy that is not introduced deliberately but rather arises\n            <jats:italic>intrinsically<\/jats:italic>\n            as a by-product of modern modular software design. We formulate this notion of intrinsic redundancy and we propose a technique to exploit it to achieve some level of self-healing. We first demonstrate that software systems are indeed intrinsically redundant. Then we develop a way to express and exploit this redundancy to tolerate faults with\n            <jats:italic>automatic workarounds.<\/jats:italic>\n            In essence, a workaround amounts to replacing some failing operations with alternative operations that are semantically equivalent in their intended effect, but that execute different code and ultimately avoid the failure. The technique we propose finds such workarounds automatically. We develop this technique in the context of Web applications. In particular, we implement this technique within a browser extension, which we then use in an evaluation with several known faults and failures of three popular Web libraries. The evaluation demonstrates that automatic workarounds are effective: out of the nearly 150 real faults we analyzed, 100 could be overcome with automatic workarounds, and half of these workarounds found automatically were not publicly known before.\n          <\/jats:p>","DOI":"10.1145\/2755970","type":"journal-article","created":{"date-parts":[[2015,5,15]],"date-time":"2015-05-15T16:05:34Z","timestamp":1431705934000},"page":"1-42","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":16,"title":["Automatic Workarounds"],"prefix":"10.1145","volume":"24","author":[{"given":"Antonio","family":"Carzaniga","sequence":"first","affiliation":[{"name":"University of Lugano, Switzerland"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Alessandra","family":"Gorla","sequence":"additional","affiliation":[{"name":"IMDEA Software Institute, Spain"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Nicol\u00f2","family":"Perino","sequence":"additional","affiliation":[{"name":"University of Lugano, Switzerland"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Mauro","family":"Pezz\u00e8","sequence":"additional","affiliation":[{"name":"University of Lugano, Switzerland and University of Milano-bicocca, italy"}],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"320","published-online":{"date-parts":[[2015,5,13]]},"reference":[{"key":"e_1_2_1_1_1","doi-asserted-by":"publisher","DOI":"10.1109\/12.2185"},{"key":"e_1_2_1_2_1","volume-title":"Proceedings of the IEEE Congress on Evolutionary Computation (CEC'08)","author":"Arcuri A.","unstructured":"A. Arcuri and X. Yao . 2008. A novel co-evolutionary approach to automatic software bug fixing . In Proceedings of the IEEE Congress on Evolutionary Computation (CEC'08) . A. Arcuri and X. Yao. 2008. A novel co-evolutionary approach to automatic software bug fixing. In Proceedings of the IEEE Congress on Evolutionary Computation (CEC'08)."},{"key":"e_1_2_1_3_1","doi-asserted-by":"publisher","DOI":"10.1109\/TSE.1985.231893"},{"key":"e_1_2_1_4_1","doi-asserted-by":"publisher","DOI":"10.1109\/TSE.2010.37"},{"key":"e_1_2_1_5_1","volume-title":"Proceedings of the International Conference on Software Maintenance. 368--377","author":"Baxter I.","unstructured":"I. Baxter , A. Yahin , L. Moura , M. Sant'anna , and L. Bier . 1998. Clone detection using abstract syntax trees . In Proceedings of the International Conference on Software Maintenance. 368--377 . I. Baxter, A. Yahin, L. Moura, M. Sant'anna, and L. Bier. 1998. Clone detection using abstract syntax trees. In Proceedings of the International Conference on Software Maintenance. 368--377."},{"key":"e_1_2_1_6_1","doi-asserted-by":"publisher","DOI":"10.1109\/32.44387"},{"key":"e_1_2_1_7_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.cl.2010.09.002"},{"key":"e_1_2_1_8_1","volume-title":"JAGR: An autonomous selfrecovering application server. In Active Middleware Services","author":"Candea G.","year":"2003","unstructured":"G. Candea , E. Kiciman , S. Zhang , P. Keyani , and A. Fox . 2003 . JAGR: An autonomous selfrecovering application server. In Active Middleware Services , IEEE , 168--178. G. Candea, E. Kiciman, S. Zhang, P. Keyani, and A. Fox. 2003. JAGR: An autonomous selfrecovering application server. In Active Middleware Services, IEEE, 168--178."},{"key":"e_1_2_1_9_1","volume-title":"Proceedings of the 2013 International Conference on Software Engineering. IEEE 782--791","author":"Carzaniga A.","unstructured":"A. Carzaniga , A. Gorla , A. Mattavelli , N. Perino , and M. Pezz\u00e8 . 2013. Automatic recovery from runtime failures . In Proceedings of the 2013 International Conference on Software Engineering. IEEE 782--791 . A. Carzaniga, A. Gorla, A. Mattavelli, N. Perino, and M. Pezz\u00e8. 2013. Automatic recovery from runtime failures. In Proceedings of the 2013 International Conference on Software Engineering. IEEE 782--791."},{"key":"e_1_2_1_10_1","doi-asserted-by":"publisher","DOI":"10.1145\/1882291.1882327"},{"key":"e_1_2_1_11_1","doi-asserted-by":"publisher","DOI":"10.1145\/1810295.1810371"},{"key":"e_1_2_1_12_1","doi-asserted-by":"publisher","DOI":"10.1007\/s10009-008-0088-8"},{"key":"e_1_2_1_13_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-10248-6_7"},{"key":"e_1_2_1_14_1","doi-asserted-by":"publisher","DOI":"10.1145\/2522920.2522923"},{"key":"e_1_2_1_15_1","doi-asserted-by":"publisher","DOI":"10.1109\/TC.1982.1676035"},{"key":"e_1_2_1_16_1","doi-asserted-by":"publisher","DOI":"10.1145\/1138912.1138918"},{"key":"e_1_2_1_17_1","doi-asserted-by":"publisher","DOI":"10.1109\/ASE.2009.15"},{"key":"e_1_2_1_18_1","doi-asserted-by":"publisher","DOI":"10.1109\/ICST.2010.66"},{"key":"e_1_2_1_19_1","doi-asserted-by":"publisher","DOI":"10.1145\/2522920.2522921"},{"key":"e_1_2_1_20_1","doi-asserted-by":"publisher","DOI":"10.1109\/EUROMICRO.2006.63"},{"key":"e_1_2_1_21_1","doi-asserted-by":"publisher","DOI":"10.1145\/325405.325443"},{"key":"e_1_2_1_22_1","doi-asserted-by":"publisher","DOI":"10.1145\/568522.568525"},{"key":"e_1_2_1_23_1","doi-asserted-by":"publisher","DOI":"10.1109\/TSE.2010.8"},{"key":"e_1_2_1_24_1","doi-asserted-by":"publisher","DOI":"10.1145\/1368088.1368132"},{"key":"e_1_2_1_25_1","doi-asserted-by":"publisher","DOI":"10.1145\/233008.233050"},{"key":"e_1_2_1_26_1","doi-asserted-by":"publisher","DOI":"10.1145\/2024436.2024443"},{"key":"e_1_2_1_27_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-540-25939-8_9"},{"key":"e_1_2_1_28_1","doi-asserted-by":"publisher","DOI":"10.1145\/2635868.2635888"},{"key":"e_1_2_1_29_1","doi-asserted-by":"publisher","DOI":"10.1145\/361227.361230"},{"key":"e_1_2_1_30_1","volume-title":"Proceedings of the 24th European Conference on Object-Oriented Programming (ECOOP'10)","author":"Guha A.","unstructured":"A. Guha , C. Saftoiu , and S. Krishnamurthi . 2010. The essence of javascript . In Proceedings of the 24th European Conference on Object-Oriented Programming (ECOOP'10) . Springer, 126--150. A. Guha, C. Saftoiu, and S. Krishnamurthi. 2010. The essence of javascript. In Proceedings of the 24th European Conference on Object-Oriented Programming (ECOOP'10). Springer, 126--150."},{"key":"e_1_2_1_31_1","volume-title":"Proceedings of the 25th European Conference on Object-oriented Programming (ECOOP'11)","author":"Harmanci D.","unstructured":"D. Harmanci , V. Gramoli , and P. Felber . 2011. Atomic boxes: Coordinated exception handling with transactional memory . In Proceedings of the 25th European Conference on Object-oriented Programming (ECOOP'11) . Springer, 634--657. D. Harmanci, V. Gramoli, and P. Felber. 2011. Atomic boxes: Coordinated exception handling with transactional memory. In Proceedings of the 25th European Conference on Object-oriented Programming (ECOOP'11). Springer, 634--657."},{"key":"e_1_2_1_32_1","doi-asserted-by":"publisher","DOI":"10.1109\/52.636672"},{"key":"e_1_2_1_33_1","volume-title":"Proceedings of the 35th International Conference on Software Engineering (ICSE'13)","author":"Hosek P.","unstructured":"P. Hosek and C. Cadar . 2013. Safe software updates via multi-version execution . In Proceedings of the 35th International Conference on Software Engineering (ICSE'13) . 612--621. P. Hosek and C. Cadar. 2013. Safe software updates via multi-version execution. In Proceedings of the 35th International Conference on Software Engineering (ICSE'13). 612--621."},{"key":"e_1_2_1_34_1","volume-title":"Proceedings of the 25th International Symposium on Fault-Tolerant Computing (FTCS'95)","author":"Huang Y.","unstructured":"Y. Huang , C. Kintala , N. Kolettis , and N. D. Fulton . 1995. Software rejuvenation: Analysis, module and applications . In Proceedings of the 25th International Symposium on Fault-Tolerant Computing (FTCS'95) . IEEE, 381. Y. Huang, C. Kintala, N. Kolettis, and N. D. Fulton. 1995. Software rejuvenation: Analysis, module and applications. In Proceedings of the 25th International Symposium on Fault-Tolerant Computing (FTCS'95). IEEE, 381."},{"key":"e_1_2_1_35_1","doi-asserted-by":"publisher","DOI":"10.1145\/1572272.1572283"},{"key":"e_1_2_1_36_1","volume-title":"Proceedings of the 2013 International Conference on Software Engineering (ICSE'13)","author":"Kim D.","unstructured":"D. Kim , J. Nam , J. Song , and S. Kim . 2013. Automatic patch generation learned from human-written patches . In Proceedings of the 2013 International Conference on Software Engineering (ICSE'13) . IEEE, 802--811. D. Kim, J. Nam, J. Song, and S. Kim. 2013. Automatic patch generation learned from human-written patches. In Proceedings of the 2013 International Conference on Software Engineering (ICSE'13). IEEE, 802--811."},{"key":"e_1_2_1_37_1","doi-asserted-by":"publisher","DOI":"10.1109\/TSE.1986.6312924"},{"key":"e_1_2_1_38_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-04694-0_8"},{"key":"e_1_2_1_39_1","doi-asserted-by":"publisher","DOI":"10.1109\/ICST.2013.24"},{"key":"e_1_2_1_40_1","volume-title":"Proceedings of the 34th International Conference on Software Engineering (ICSE'12)","author":"Long F.","unstructured":"F. Long , V. Ganesh , M. Carbin , S. Sidiroglou , and M. Rinard . 2012. Automatic input rectification . In Proceedings of the 34th International Conference on Software Engineering (ICSE'12) . 80--90. F. Long, V. Ganesh, M. Carbin, S. Sidiroglou, and M. Rinard. 2012. Automatic input rectification. In Proceedings of the 34th International Conference on Software Engineering (ICSE'12). 80--90."},{"key":"e_1_2_1_41_1","volume-title":"Proceedings of the 29th Annual International Computer Software and Applications Conference (COMPSAC'05)","volume":"2","author":"Looker N.","unstructured":"N. Looker , M. Munro , and J. Xu . 2005. Increasing Web service dependability through consensus voting . In Proceedings of the 29th Annual International Computer Software and Applications Conference (COMPSAC'05) . Vol. 2 , IEEE, 66--69. N. Looker, M. Munro, and J. Xu. 2005. Increasing Web service dependability through consensus voting. In Proceedings of the 29th Annual International Computer Software and Applications Conference (COMPSAC'05). Vol. 2, IEEE, 66--69."},{"key":"e_1_2_1_42_1","doi-asserted-by":"publisher","DOI":"10.1145\/1368088.1368157"},{"key":"e_1_2_1_43_1","doi-asserted-by":"publisher","DOI":"10.1145\/1169091.1169099"},{"key":"e_1_2_1_44_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-540-89652-4_20"},{"key":"e_1_2_1_45_1","doi-asserted-by":"publisher","DOI":"10.1145\/2460999.2461015"},{"key":"e_1_2_1_46_1","volume-title":"Proceedings of the International Conference on Software Engineering (ICSE'13)","author":"Nguyen H. D. T.","unstructured":"H. D. T. Nguyen , D. Qi , houdhury, A. Roy , and S. Chandra . 2013. Semfix: Program repair via semantic analysis . In Proceedings of the International Conference on Software Engineering (ICSE'13) . IEEE, 772--781. H. D. T. Nguyen, D. Qi, houdhury, A. Roy, and S. Chandra. 2013. Semfix: Program repair via semantic analysis. In Proceedings of the International Conference on Software Engineering (ICSE'13). IEEE, 772--781."},{"key":"e_1_2_1_47_1","volume-title":"Proceedings of the IEEE International Conference on Dependable Systems and Networks (DSN'08)","author":"Nguyen-Tuong A.","unstructured":"A. Nguyen-Tuong , D. Evans , J. C. Knight , B. Cox , and J. W. Davidson . 2008. Security through redundant data diversity . In Proceedings of the IEEE International Conference on Dependable Systems and Networks (DSN'08) . 187--196. A. Nguyen-Tuong, D. Evans, J. C. Knight, B. Cox, and J. W. Davidson. 2008. Security through redundant data diversity. In Proceedings of the IEEE International Conference on Dependable Systems and Networks (DSN'08). 187--196."},{"key":"e_1_2_1_48_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-540-89247-2_7"},{"key":"e_1_2_1_49_1","doi-asserted-by":"publisher","DOI":"10.1145\/1806799.1806832"},{"key":"e_1_2_1_50_1","doi-asserted-by":"publisher","DOI":"10.1145\/971701.50214"},{"key":"e_1_2_1_51_1","doi-asserted-by":"publisher","DOI":"10.1145\/1629575.1629585"},{"key":"e_1_2_1_52_1","volume-title":"Proceedings of the 27th Euromicro Conference (Euromicro'01)","author":"Popov P.","unstructured":"P. Popov , S. Riddle , A. Romanovsky , and L. Strigini . 2001. On systematic design of protectors for employing OTS items . In Proceedings of the 27th Euromicro Conference (Euromicro'01) . 22--29. P. Popov, S. Riddle, A. Romanovsky, and L. Strigini. 2001. On systematic design of protectors for employing OTS items. In Proceedings of the 27th Euromicro Conference (Euromicro'01). 22--29."},{"key":"e_1_2_1_53_1","doi-asserted-by":"publisher","DOI":"10.1145\/1275517.1275519"},{"key":"e_1_2_1_54_1","doi-asserted-by":"publisher","DOI":"10.1145\/800027.808467"},{"key":"e_1_2_1_55_1","doi-asserted-by":"publisher","DOI":"10.1109\/ICAC.2005.64"},{"key":"e_1_2_1_56_1","volume-title":"Proceedings of the 24th European Conference on Object-Oriented Programming (ECOOP'10)","author":"Samimi H.","unstructured":"H. Samimi , E. D. Aung , and T. Millstein . 2010. Falling back on executable specifications . In Proceedings of the 24th European Conference on Object-Oriented Programming (ECOOP'10) . 552--576. H. Samimi, E. D. Aung, and T. Millstein. 2010. Falling back on executable specifications. In Proceedings of the 24th European Conference on Object-Oriented Programming (ECOOP'10). 552--576."},{"key":"e_1_2_1_57_1","doi-asserted-by":"publisher","DOI":"10.1109\/SAINT.2008.12"},{"key":"e_1_2_1_58_1","doi-asserted-by":"publisher","DOI":"10.1109\/IDEAS.2006.45"},{"key":"e_1_2_1_59_1","doi-asserted-by":"publisher","DOI":"10.1145\/1831708.1831716"},{"key":"e_1_2_1_60_1","doi-asserted-by":"publisher","DOI":"10.1109\/ICSE.2009.5070536"},{"key":"e_1_2_1_61_1","doi-asserted-by":"publisher","DOI":"10.1145\/800027.808468"},{"key":"e_1_2_1_62_1","doi-asserted-by":"publisher","DOI":"10.1109\/ICWS.2007.127"},{"key":"e_1_2_1_63_1","doi-asserted-by":"publisher","DOI":"10.1145\/2001420.2001463"}],"container-title":["ACM Transactions on Software Engineering and Methodology"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/2755970","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/2755970","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T06:17:05Z","timestamp":1750227425000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/2755970"}},"subtitle":["Exploiting the Intrinsic Redundancy of Web Applications"],"short-title":[],"issued":{"date-parts":[[2015,5,13]]},"references-count":63,"journal-issue":{"issue":"3","published-print":{"date-parts":[[2015,5,13]]}},"alternative-id":["10.1145\/2755970"],"URL":"https:\/\/doi.org\/10.1145\/2755970","relation":{},"ISSN":["1049-331X","1557-7392"],"issn-type":[{"value":"1049-331X","type":"print"},{"value":"1557-7392","type":"electronic"}],"subject":[],"published":{"date-parts":[[2015,5,13]]},"assertion":[{"value":"2013-12-01","order":0,"name":"received","label":"Received","group":{"name":"publication_history","label":"Publication History"}},{"value":"2015-01-01","order":1,"name":"accepted","label":"Accepted","group":{"name":"publication_history","label":"Publication History"}},{"value":"2015-05-13","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}