skip to main content
research-article

Automatic Workarounds: Exploiting the Intrinsic Redundancy of Web Applications

Published: 13 May 2015 Publication History

Abstract

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 self-healing for software systems. The ambitious goal is to create software systems capable of detecting and responding “autonomically” 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 deliberately 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.
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 intrinsically 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 automatic workarounds. 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.

References

[1]
P. E. Ammann and J. C. Knight. 1988. Data diversity: An approach to software fault tolerance. IEEE Trans. Comput. 37, 4, 418--425.
[2]
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).
[3]
A. Avizienis. 1985. The N-version approach to fault-tolerant software. IEEE Trans. Software Eng. 11, 12, 1491--1501.
[4]
L. Baresi and S. Guinea. 2011. Self-supervising BPEL processes. IEEE Trans. Software Eng. 37, 2, 247--263.
[5]
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.
[6]
S. S. Brilliant, J. C. Knight, and N. G. Leveson. 1990. Analysis of faults in an N-version software experiment. IEEE Trans. Software Eng. 16, 2, 238--247.
[7]
B. Cabral and P. Marques. 2011. A transactional model for automatic exception handling. Computer Lang. Syst. Structures 37, 43--61.
[8]
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.
[9]
A. Carzaniga, A. Gorla, A. Mattavelli, N. Perino, and M. Pezzè. 2013. Automatic recovery from runtime failures. In Proceedings of the 2013 International Conference on Software Engineering. IEEE 782--791.
[10]
A. Carzaniga, A. Gorla, N. Perino, and M. Pezzè. 2010a. Automatic workarounds for web applications. In Proceedings of the Foundations of Software Engineering Conference (FSE'10). ACM, New York, 237--246.
[11]
A. Carzaniga, A. Gorla, N. Perino, and M. Pezzè. 2010b. RAW: runtime automatic workarounds. In Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering (ICSE'10). ACM, New York, 321--322.
[12]
A. Carzaniga, A. Gorla, and M. Pezzè. 2008. Healing Web applications through automatic workarounds. Int. J. Softw. Tools Technol. Transfer 10, 6, 493--502.
[13]
A. Carzaniga, A. Gorla, and M. Pezzè. 2009. Handling software faults with redundancy. In Architecting Dependable Systems VI, R. de Lemos, J.-C. Fabre, C. Gacek, F. Gadducci, and M. H. ter Beek, Eds., Springer, 148--171.
[14]
H. Chang, L. Mariani, and M. Pezzè. 2013. Exception handlers for healing component-based systems. ACM Trans. Softw. Engin. Methodol. 22, 4, 30:1--30:40.
[15]
F. Cristian. 1982. Exception handling and software fault tolerance. IEEE Trans. Comput. 31, 531--540.
[16]
V. Dallmeier, C. Lindig, A. Wasylkowski, and A. Zeller. 2006. Mining object behavior with adabu. In Proceedings of the International Workshop on Dynamic Systems Analysis (WODA'06). ACM, New York, 17--24.
[17]
V. Dallmeier, A. Zeller, and B. Meyer. 2009. Generating fixes from object behavior anomalies. In Proceedings of the 24th IEEE/ACM International Conference on Automated Software Engineering.
[18]
V. Debroy and W. E. Wong. 2010. Using mutation to automatically suggest fixes for faulty programs. In Proceedings of the Third International Conference on Software Testing, Verification and Validation (ICST'10). IEEE, 65--74.
[19]
G. Denaro, M. Pezzè, and D. Tosi. 2013. Test-and-adapt: An approach for improving service interchangeability. ACM Trans. Softw. Engin. Methodol. 22, 4, 28:1--28:43.
[20]
G. Dobson. 2006. Using WS-BPEL to implement software fault tolerance for Web services. In Proceedings of the 32nd EUROMICRO Conference on Software Engineering and Advanced Applications (EUROMICRO'06). IEEE, 126--133.
[21]
A. El Abbadi, D. Skeen, and F. Cristian. 1985. An efficient, fault-tolerant protocol for replicated data management. In Proceedings of the 4th ACM SIGACT-SIGMOD Symposium on Principles of Database Systems (PODS'85). ACM, New York, 215--229.
[22]
M. Elnozahy, L. Alvisi, Y.-M. Wang, and D. B. Johnson. 2002. A survey of rollback-recovery protocols in message-passing systems. ACM Comput. Surv. 34, 3, 375--408.
[23]
G. Friedrich, M. Fugini, E. Mussi, B. Pernici, and G. Tagni. 2010. Exception handling for repair in service-based processes. IEEE Trans. Software Eng. 36, 2, 198--215.
[24]
M. Gabel, L. Jiang, and Z. Su. 2008. Scalable detection of semantic clones. In Proceedings of the 30th International Conference on Software Engineering (ICSE'08). ACM, New York, 321--330.
[25]
S. Garg, Y. Huang, C. Kintala, and K. S. Trivedi. 1996. Minimizing completion time of a program by checkpointing and rejuvenation. SIGMETRICS Performance Evaluation Rev. 24, 1, 252--261.
[26]
B. J. Garvin, M. B. Cohen, and M. B. Dwyer. 2011. Using feature locality: Can we leverage history to avoid failures during reconfiguration? In Proceedings of the 8th Workshop on Assurances for Self-Adaptive Systems (ASAS'11). ACM, New York, 24--33.
[27]
I. Gashi, P. Popov, V. Stankovic, and L. Strigini. 2004. On designing dependable services with diverse off-the-shelf SQL servers. In Architecting Dependable Systems II. Lecture Notes in Computer Science Series, vol. 3069, Springer, 191--214.
[28]
A. Goffi, A. Gorla, A. Mattavelli, M. Pezzè, and P. Tonella. 2014. Search-based synthesis of equivalent method sequences. In Proceedings of the 22nd ACM SIGSOFT International Symposium on Foundations of Software Engineering (FSE'14). ACM, New York, 366--376.
[29]
J. B. Goodenough. 1975. Exception handling: issues and a proposed notation. Commun. ACM 18, 12, 683--696.
[30]
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.
[31]
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.
[32]
L. Hatton. 1997. N-version design versus one good version. IEEE Softw. 14, 6, 71--76.
[33]
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.
[34]
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.
[35]
L. Jiang and Z. Su. 2009. Automatic mining of functionally equivalent code fragments via random testing. In Proceedings of the 18th International Symposium on Software Testing and Analysis. 81--92.
[36]
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.
[37]
J. C. Knight and N. G. Leveson. 1986. An experimental evaluation of the assumption of independence in multiversion programming. IEEE Trans. Software Eng. 12, 96--109.
[38]
B. Křena, Z. Letko, Y. Nir-Buchbinder, R. Tzoref-Brill, S. Ur, and T. Vojnar. 2009. A concurrency testing tool and its plug-ins for dynamic analysis and runtime healing. In Runtime Verification, S. Bensalem and D. A. Peled, Eds., Springer, 101--114.
[39]
C. Liu, J. Yang, L. Tan, and M. Hafiz. 2013. R2fix: Automatically generating bug fixes from bug reports. In Proceedings of the International Conference on Software Testing, Verification and Validation (ICST'13). IEEE, 282--291.
[40]
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.
[41]
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.
[42]
D. Lorenzoli, L. Mariani, and M. Pezzè. 2008. Automatic generation of software behavioral models. In Proceedings of the 30th International Conference on Software Engineering (ICSE'08). ACM, New York, 501--510.
[43]
S. Modafferi, E. Mussi, and B. Pernici. 2006. SH-BPEL: A self-healing plug-in for WS-BPEL engines. In Proceedings of the 1st Workshop on Middleware for Service Oriented Computing (MW4SOC'06). ACM, New York, 48--53.
[44]
A. Mosincat and W. Binder. 2008. Transparent runtime adaptability for BPEL processes. In Proceedings of the 6th International Conference on Service Oriented Computing (ICSOC'08). A. Bouguettaya, I. Krüger, and T. Margaria, Eds., Lecture Notes in Computer Science Series, vol. 5364, 241--255.
[45]
A. S. Nascimento, C. M. F. Rubira, R. Burrows, and F. Castor. 2013. A systematic review of design diversity-based solutions for fault-tolerant soas. In Proceedings of the 17th International Conference on Evaluation and Assessment in Software Engineering (EASE'13). ACM, New York, 107--118.
[46]
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.
[47]
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.
[48]
Y. Nir-Buchbinder, R. Tzoref, and S. Ur. 2008. Deadlocks: From exhibiting to healing. In Runtime Verification, M. Leucker, Ed., Springer, 104--118.
[49]
M. Nita and D. Notkin. 2010. Using twinning to adapt programs to alternative apis. In Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering (ICSE'10). 205--214.
[50]
D. A. Patterson, G. Gibson, and R. H. Katz. 1988. A case for redundant arrays of inexpensive disks (RAID). SIGMOD Record 17, 3, 109--116.
[51]
J. H. Perkins, S. Kim, S. Larsen, et al. 2009. Automatically patching errors in deployed software. In Proceedings of the 22nd Symposium on Operating Systems Principles. 87--102.
[52]
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.
[53]
F. Qin, J. Tucek, Y. Zhou, and J. Sundaresan. 2007. Rx: Treating bugs as allergies—a safe method to survive software failures. ACM Trans. Comput. Syst. 25, 3, 7.
[54]
B. Randell. 1975. System structure for software fault tolerance. In Proceedings of the International Conference on Reliable Software. ACM, New York, 437--449.
[55]
S. M. Sadjadi and P. K. Mckinley. 2005. Using transparent shaping and Web services to support self-management of composite systems. In Proceedings of the 2nd International Conference on Automatic Computing (ICAC'05). IEEE, 76--87.
[56]
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.
[57]
S. Subramanian, P. Thiran, N. C. Narendra, G. K. Mostefaoui, and Z. Maamar. 2008. On the enhancement of BPEL engines for self-healing composite Web services. In Proceedings of the International Symposium on Applications and the Internet (SAINT'08). IEEE, 33--39.
[58]
Y. Taher, D. Benslimane, M.-C. Fauvet, and Z. Maamar. 2006. Towards an approach for Web services substitution. In Proceedings of the 10th International Database Engineering and Applications Symposium (IDEAS'06). IEEE, 166--173.
[59]
Y. Wei, Y. Pei, C. A. Furia, L. S. Silva, S. Buchholz, B. Meyer, and A. Zeller. 2010. Automated fixing of programs with contracts. In Proceedings of the 19th International Symposium on Software Testing and Analysis (ISSTA'10). ACM, New York, 61--72.
[60]
W. Weimer, T. Nguyen, C. L. Goues, and S. Forrest. 2009. Automatically finding patches using genetic programming. In Proceedings of the 31st International Conference on Software Engineering (ICSE'09). 364--374.
[61]
S. S. Yau and R. C. Cheung. 1975. Design of self-checking software. In Proceedings of the International Conference on Reliable Software. ACM, New York, 450--455.
[62]
R. Zhang. 2007. Modeling autonomic recovery in Web services with multi-tier reboots. In Proceedings of the IEEE International Conference on Web Services (ICWS'07).
[63]
S. Zhang, D. Saff, Y. Bu, and M. D. Ernst. 2011. Combined static and dynamic automated test generation. In Proceedings of the International Symposium on Software Testing and Analysis (ISSTA'11). ACM, New York, 353--363.

Cited By

View all
  • (2021)MeMo: Automatically identifying metamorphic relations in Javadoc comments for test automationJournal of Systems and Software10.1016/j.jss.2021.111041(111041)Online publication date: Jul-2021
  • (2020)Metamorphic Relations for Enhancing System Understanding and UseIEEE Transactions on Software Engineering10.1109/TSE.2018.287643346:10(1120-1154)Online publication date: 1-Oct-2020
  • (2020)Win with What You Have: QoS-Consistent Edge Services with Unreliable and Dynamic Resources2020 IEEE 40th International Conference on Distributed Computing Systems (ICDCS)10.1109/ICDCS47774.2020.00196(530-540)Online publication date: Nov-2020
  • Show More Cited By

Recommendations

Comments

Information & Contributors

Information

Published In

cover image ACM Transactions on Software Engineering and Methodology
ACM Transactions on Software Engineering and Methodology  Volume 24, Issue 3
May 2015
293 pages
ISSN:1049-331X
EISSN:1557-7392
DOI:10.1145/2776776
Issue’s Table of Contents
Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for components of this work owned by others than ACM must be honored. Abstracting with credit is permitted. To copy otherwise, or republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. Request permissions from [email protected]

Publisher

Association for Computing Machinery

New York, NY, United States

Publication History

Published: 13 May 2015
Accepted: 01 January 2015
Revised: 01 July 2014
Received: 01 December 2013
Published in TOSEM Volume 24, Issue 3

Permissions

Request permissions for this article.

Check for updates

Author Tags

  1. Automatic workarounds
  2. Web API
  3. Web applications

Qualifiers

  • Research-article
  • Research
  • Refereed

Funding Sources

  • Swiss National Science Foundation, with projects n. 200021-116287 (“Perseos”), n. 200020-124918 (“WASH”), and n. 200021-138006 (“SHADE”)

Contributors

Other Metrics

Bibliometrics & Citations

Bibliometrics

Article Metrics

  • Downloads (Last 12 months)15
  • Downloads (Last 6 weeks)3
Reflects downloads up to 16 Jan 2025

Other Metrics

Citations

Cited By

View all
  • (2021)MeMo: Automatically identifying metamorphic relations in Javadoc comments for test automationJournal of Systems and Software10.1016/j.jss.2021.111041(111041)Online publication date: Jul-2021
  • (2020)Metamorphic Relations for Enhancing System Understanding and UseIEEE Transactions on Software Engineering10.1109/TSE.2018.287643346:10(1120-1154)Online publication date: 1-Oct-2020
  • (2020)Win with What You Have: QoS-Consistent Edge Services with Unreliable and Dynamic Resources2020 IEEE 40th International Conference on Distributed Computing Systems (ICDCS)10.1109/ICDCS47774.2020.00196(530-540)Online publication date: Nov-2020
  • (2020)Fully Automated HTML and JavaScript Rewriting for Constructing a Self‐healing Web ProxySoftware Testing, Verification and Reliability10.1002/stvr.173130:2Online publication date: 14-Feb-2020
  • (2019)Automatic Software RepairIEEE Transactions on Software Engineering10.1109/TSE.2017.275501345:1(34-67)Online publication date: 1-Jan-2019
  • (2019)The emergence of software diversity in maven centralProceedings of the 16th International Conference on Mining Software Repositories10.1109/MSR.2019.00059(333-343)Online publication date: 26-May-2019
  • (2019)Optimum Interval for Application-level Checkpoints2019 6th IEEE International Conference on Cyber Security and Cloud Computing (CSCloud)/ 2019 5th IEEE International Conference on Edge Computing and Scalable Cloud (EdgeCom)10.1109/CSCloud/EdgeCom.2019.000-4(145-150)Online publication date: Jun-2019
  • (2019)Optimum checkpoints for programs with loopsSimulation Modelling Practice and Theory10.1016/j.simpat.2019.10195197(101951)Online publication date: Dec-2019
  • (2018)Automated workarounds from Java program specifications based on SAT solvingInternational Journal on Software Tools for Technology Transfer (STTT)10.5555/3288063.328808320:6(665-688)Online publication date: 1-Nov-2018
  • (2018)Fully Automated HTML and Javascript Rewriting for Constructing a Self-Healing Web Proxy2018 IEEE 29th International Symposium on Software Reliability Engineering (ISSRE)10.1109/ISSRE.2018.00012(1-12)Online publication date: Oct-2018
  • Show More Cited By

View Options

Login options

Full Access

View options

PDF

View or Download as a PDF file.

PDF

eReader

View online with eReader.

eReader

Media

Figures

Other

Tables

Share

Share

Share this Publication link

Share on social media