Intrinsic software redundancy for self-healing software systems, automated oracle generation.
2015
Software systems are intrinsically redundant. We identify the sources of intrinsic software redundancy in good design practices, and suggest how to exploit intrinsic software redundancy to augment software systems with self-healing capabilities and to automatically generate test oracles. Reliability is becoming a necessity for many software systems used in everyday life, where failures may interrupt important services with severe economical and social consequences. In system and software engineering, reliability is traditionally approached by adding some form of redundancy to overcome the consequences of faults that are unavoidable in human artifacts. RAID (Redundant Array of Independent Disks) [PGK88], HDFS (Hadoop Distributed File Systems) and N-version programming [Avi85] are good examples of the use of redundancy for improving hardware, data and software reliability, respectively. In these approaches, redundancy is added deliberately to the systems to improve reliability, and comes with additional costs that may be acceptable for some systems, like safety critical systems, but may not meet the requirements of other domains, like many software applications used in everyday life. We observe that many software systems are characterized by an intrinsic form of redundancy that derives from good design practices: Design for reusability creates many distinct APIs to improve compatibility with different uses, and this results in a variety of implementations of the same functionality; Performance optimisation results in different methods implementing the same functionality with different, optimised code; Backward compatibility preserves the old versions of the reimplemented functionalities thus offering redundant methods. Redundancy is massively present in modern software systems: Our manual inspection of several popular libraries including Apache Ant, Google Guava, Joda Time, Eclipse SWT, GraphStream, Apache Lucene, GoogleMaps and YouTube identified over 4,700 redundant methods, with an average of 5 redundant methods per class [CGPP10, CGM13]. Redundancy is present at many abstraction levels. So far, we have exploited the redundancy intrinsically present at the method call level both to build self-healing software systems Alessandra Gorla is with the IMDEA Software Institute, Madrid, Spain Mauro Pezze is also with the University of Milano-Bicocca, Milano, Italy Paolo Tonella is with Fondazione Bruno Kessler, Trento, Italy
Keywords:
- Software reliability testing
- Software construction
- Redundancy (engineering)
- Real-time computing
- Software sizing
- Database
- Package development process
- Resource-oriented architecture
- Backporting
- Software development
- Computer science
- Software engineering
- Software system
- Component-based software engineering
- Software framework
- Software design
- Correction
- Source
- Cite
- Save
- Machine Reading By IdeaReader
6
References
0
Citations
NaN
KQI