Beyond the Rainbow: Self-Adaptive Failure Avoidance in Configurable Systems

Jacob Swanson, Myra B. Cohen, Matthew B. Dwyer, Brady J. Garvin and Justin Firestone

Supplementary Data – FSE 2014

Abstract

Self-adaptive software systems monitor their state and then adapt when certain conditions are met, guided by a global utility function. In prior work we developed algorithms and conducted a post-hoc analysis demonstrating the possibility of adapting to software failures by judiciously changing configurations. In this paper we present the REFRACT framework that realizes this idea in practice by building on the self-adaptive Rainbow architecture. REFRACT extends Rainbow with new components and algorithms targeting failure avoidance. We use REFRACT in a case study running four independently executing Firefox clients with 36 passing test cases and 7 seeded faults. The study show that workarounds for all but one of the seeded faults are found and the one that is not found, never fails -- it is guarded from failing by a related workaround. Moreover, REFRACT finds workarounds for 8 configuration related failures from tests that were expected to pass (and did under the default configuration). Finally, the data show that when a failure and its workaround are found, configuration guards prevent the failure from appearing again. In a simulation lasting 24 hours we see over 150 guard activations and no failures with workarounds beyond 16 hours.

Supplemental Data

  1. Firefox Feature Model (in XML) used in study.
  2. Normal Test Cases. These are the Mozmill test cases that we expected to pass.
  3. Seeded Faulty Test Cases. These seven tests contains faults that we recreated based on real Firefox faults.
  4. MS Thesis: Tech Report.

Results

Random-10 3-hour, Run One. 15 minute intervals shown.
P—pass, F—failure, W—workaround, A—workaround already found, N—no workaround found, G—Guard.
Test 0:150:300:451:00 1:151:301:452:00 2:152:302:453:00 # Guards
Expected to Fail
344189FW2P2PPP2P3P3PG3P5P3P1
306208FFWAPG3PPPG4P4P4P2PPG2P6P3
797945FWPGG5P3P4P2P2P2P4P3P3PPG3
808290-PP2PP4PPPFW2P3PP-0
8404113P2P5PFPW2P3P-6PPPG-3PPG2
4429703P-2PP2P2P2P2PP3P2P4P0
505548-3P4P3P4P2P-P2P2PP2P0
Not Expected to Fail
testOpenSearchAutodiscoveryPP6P5P3P2P3P2P5PPFW3P2P0
testSSLDisabledErrorPageFPPA-2P3P2P2P5P4PP3P3P0
testUntrustedConnectionErrorPageFNP3P4P3PP2PP2P3P2P2P0
Total Guards9
Random-10 3-hour, Run Two. 15 minute intervals shown.
P—pass, F—failure, W—workaround, A—workaround already found, N—no workaround found, G—Guard.
Test 0:150:300:451:00 1:151:301:452:00 2:152:302:453:00 # Guards
Expected to Fail
344189FW2P4P5P-PG4P2P8PG7PG3P3P4PG2P4
306208P2PP5P5P3P3P4P2PP5P5P0
797945-FWP3P2GP2P3P5P3P5P2P6P2PGPPG5PG5
808290P3PP4P5PPP3P4P4P6PP0
8404112P4P2P3P-4P6P3P8P4P2P6P0
442970P2P4PP4PP3P2P5P2P2P5P0
5055487P7P-4P5P4P4P3P2P6P6P3P0
Not Expected to Fail
ClearFormHistory4P3P4P3PFPW5P3PP5PP3PG4PGP2
PopupsBlocked5P3PP4PPPF2PWP6P3P5P6P2P5P0
AddMozSearchProvider3P3PFPW2PP4P4P7P6P5P4P4P3P0
Total Guards11
Random-10 3-hour, Run Three. 15 minute intervals shown.
P—pass, F—failure, W—workaround, A—workaround already found, N—no workaround found, G—Guard.
Test 0:150:300:451:00 1:151:301:452:00 2:152:302:453:00 # Guards
Expected to Fail
344189FW2PG2P2G3P7P6P4P8P7PPP3P3
306208P6PP7P6P2PP4P4PP3P2P0
7979452FWA5P4P3P5P5P6PG4P4P2PGP5PPG3P3
8082902P4P4P5P-4P2P6P3P6P5P2PFPWP0
8404115PFPW7P5P4P2PGPG4P8P6PGP2PGP3P3P4P2PGP5
4429703P6PP4P6P6P6P4P2PPF2PNFPW7P0
5055486P2P3P9P5P5PP4P5P2P4P2P0
Not Expected to Fail
testPopupsAllowed4P6P4P5P5PP7P5PFPW3P8PP2P0
Total Guards11
Random-10 3-hour, Run Four. 15 minute intervals shown.
P—pass, F—failure, W—workaround, A—workaround already found, N—no workaround found, G—Guard.
Test 0:150:300:451:00 1:151:301:452:00 2:152:302:453:00 # Guards
Expected to Fail
344189FWPG5P3P5P7P4PG4P3P6P4P4P6P0
306208P3P5P6P5P8PPFPW3PP4P4P2P0
7979452FWAPG4P4PG6PG2PG6P2G2P5P2PG2PG2PG6P4P2P9
808290P2P6PP4P5P2P4PP3P5P2P0
8404112P4P3P5P2P9P2P2P3P3P3P4P0
4429704P3P2P3P6P5P3P5PP3P-3P0
505548P3P2P5P3P4P-4PP6P-7P0
Not Expected to Fail
testOpenSearchAutodiscoveryP3P3P7P-4P3P3P3P2PF2PW5P3P0
testClearFormHistoryP5P3P4P5P5P5P2PFWP3P3P6P0
testAutoCompleteOff5P3PFPN2P2P4PP4P5P5P4P5P4P0
Total Guards9
Random-10 3-hour, Run Five. 15 minute intervals shown.
P—pass, F—failure, W—workaround, A—workaround already found, N—no workaround found, G—Guard.
Test 0:150:300:451:00 1:151:301:452:00 2:152:302:453:00 # Guards
Expected to Fail
344189FWGPG2P7P4PG4PG2P2P2PG2P2P2P2PG2P6
3062083P3P4P3PP5PP2P4P2P4PP0
797945FW2P3P4P2PG2P2P6P3PP4P5P3P1
8082903P$-$PP4PPP2P2P6P7P3PF0
8404115P4P2P$-$3P4P5P5PPFWP2P2PGPG2
4429703P5P6PP2P3P4P$-$3P5P4P2P0
5055484P2P2P3P2P2P3P2P3P5P3P3P0
Not Expected to Fail
testPopupsAllowedPP5PFPPW2PPGPG5P4PG3P2P3P5P3P3
Total Guards12
2-CA 3-hour, Run One. 15 minute intervals shown.
P—pass, F—failure, W—workaround, A—workaround already found, N—no workaround found, G—Guard.
Test 0:150:300:451:00 1:151:301:452:00 2:152:302:453:00 # Guards
Expected to Fail
344189FWP2PG5P-2P3PP2PF3PNP5P5PPG2
306208FWPP4P2P4P2P3PFPPN3P3PG3P5P1
797945F2FW2A5P2PGP4P2P7P2P5P2P6P2P0
808290PP3P2PFWPP2P3P4P2P5PPGP1
840411FW2P-G4PGP5P3P3PGPG2PG4PGP2P6
442970-PFWP2P5P2PPP3P2P6P2P0
5055482P-2P3P2P5P4PP3P3P2P4P0
Not Expected to Fail
testClearFormHistory4PP2P2P3PF3PPN2PFPPW3P4PPG2P4P1
testSubmitUnencryptedInfoWarning--P6P3PP6P3P3PFPW6P3P0
Total Guards11
2-CA 3-hour, Run Two. 15 minute intervals shown.
P—pass, F—failure, W—workaround, A—workaround already found, N—no workaround found, G—Guard.
Test 0:150:300:451:00 1:151:301:452:00 2:152:302:453:00 # Guards
Expected to Fail
344189-FW--P3P2P2P2P3PP0
306208------P2FWPAGP2PG2P2
797945-2FWA----3P2P3P2PP3P0
8082902P-----2PP-2PF2PWP2PGP1
8404112P2PPPP5PP-----0
442970-P-PP-P-----0
505548-2P4P3P2P2P------0
Not Expected to Fail
testAutoCompleteOffP-2P---FPW3PP-PP0
testDisableFormManager3P-FN---2P-P-4P2P0
Total Guards3
2-CA 3-hour, Run Three. 15 minute intervals shown.
P—pass, F—failure, W—workaround, A—workaround already found, N—no workaround found, G—Guard.
Test 0:150:300:451:00 1:151:301:452:00 2:152:302:453:00 # Guards
Expected to Fail
344189FFWPA2PPFN2P2P2PP3P5P3PP0
3062082FWPAP2P5P2P2P2PP3PP3PP0
797945FWFP2PN4P7PP2P3P3P-4P3P4P0
808290-PP--2P2PFPW3P2PG2P3P1
8404112P-2PPP2PPP-2PPFPW4P0
442970P3PFPW2P2P2GP3P4P4PPPF3PPN5P2P2
505548-P2P3P3P2PPFNP2P7P-3P0
Not Expected to Fail
testPasteLocationBar2P2P-P-2P2P2PP5PFPW3P0
testClearFormHistory2PPFPW4P3P3PG2PPP-P2P1
testDisableFormManager3P3P2P-3PP2P3P4PP-FPN0
testOpenSearchAutodiscovery-4P3P3PFWPG3P-5P3P3PP1
Total Guards5
2-CA 3-hour, Run Four. 15 minute intervals shown.
P—pass, F—failure, W—workaround, A—workaround already found, N—no workaround found, G—Guard.
Test 0:150:300:451:00 1:151:301:452:00 2:152:302:453:00 # Guards
Expected to Fail
344189FFWAPPGPP3PPP----1
3062082FWA-PP2PPPG----1
797945P2FWA3P5P2PP4P2PP----0
8082902PP7P-2P2P3P-----0
8404112P2PPPP5PP-----0
442970-P-PP-P-----0
505548-2P4P3P2P2P------0
Not Expected to Fail
testSetToCurrentPage2P3PPFWP2P2P3P-----0
testOpenSearchAutodiscovery2PPPFFW2PW2PGPP----1
Total Guards3
2-CA 3-hour, Run Five. 15 minute intervals shown.
P—pass, F—failure, W—workaround, A—workaround already found, N—no workaround found, G—Guard.
Test 0:150:300:451:00 1:151:301:452:00 2:152:302:453:00 # Guards
Expected to Fail
344189F--FWA3P2PG4PP-2P4PF4PNP1
306208--FW2P2P2P3P7PPGP3P4PGP3P2
797945FN--FFWA2PP3P3P5P4PG3PP1
8082902P--2PPPP2PFW5PG2PGP6PP2
8404112P---2PF3PW3P--2P4P4PG2P1
442970---3P2PFW3P4PP2PG2P4P3PP1
505548-----4P2P2PP5P5P3P0
Not Expected to Fail
testSetToCurrentPagePFN----2P5P5P3P4P3P-0
testEnablePrivilegeP---PP5PFPW4PG3P2P2P3P1
testSSLDisabledErrorPage2P--FA-3P3P3PP3P5P2P0
Total Guards9
2-CA 3-hour, Alternative Covering Array One. 15 minute intervals shown.
P—pass, F—failure, W—workaround, A—workaround already found, N—no workaround found, G—Guard.
Test 0:150:300:451:00 1:151:301:452:00 2:152:302:453:00 # Guards
Expected to Fail
344189------2FWA----P0
306208FF-WPA---P---2P0
797945---FW--P3PP-P-0
808290---P-------P0
840411------P----3P0
442970---3P--P3PP-P-0
505548------2P----P0
Not Expected to Fail
testGoButtonFPN--P---2PP--P0
testSetToCurrentPage---FPN-3P-FN---0
Total Guards0
2-CA 3-hour, Alternative Covering Array Two. 15 minute intervals shown.
P—pass, F—failure, W—workaround, A—workaround already found, N—no workaround found, G—Guard.
Test 0:150:300:451:00 1:151:301:452:00 2:152:302:453:00 # Guards
Expected to Fail
344189F2FWAGA3PPP---P2PP-1
306208FW-3P2PPG2GP--P4P3P-3
7979452FFWP2AP2PPPG2PPP-2P2PP1
8082903PPP-P2PP--5P3P-0
840411-P-2PP4P---3P2PP0
442970-P2PP2P3P---4PPP0
5055482PPP3PPP--3P-3PP0
Not Expected to Fail
testClearFormHistoryPP3PPFWPP--P3P2P-0
testPopupsBlocked--2PP2P2P--PFPW5P-P0
testPaneRetention---2PP-F3PN--5P2PP0
testSearchViaShortcutP-P2PPFPN--PP2P0
Total Guards5
2-CA 3-hour, Alternative Covering Array Three. 15 minute intervals shown.
P—pass, F—failure, W—workaround, A—workaround already found, N—no workaround found, G—Guard.
Test 0:150:300:451:00 1:151:301:452:00 2:152:302:453:00 # Guards
Expected to Fail
344189-------F-FWAP-0
306208F-2FWAGA-P-P--PP1
797945F-WG2P5P--PP-3P-1
808290PP2P2P2PP-2P---P0
840411----P--P----0
442970----PP-2P---4P0
505548---P2P--P---P0
Not Expected to Fail
testClearFormHistoryFN--P-P-P--PP0
testSearchViaShortcutP--2P---FN---2P0
testDVCertificate--3PF2PN---PP-0
Total Guards2
2-CA 3-hour, Alternative Covering Array Four. 15 minute intervals shown.
P—pass, F—failure, W—workaround, A—workaround already found, N—no workaround found, G—Guard.
Test 0:150:300:451:00 1:151:301:452:00 2:152:302:453:00 # Guards
Expected to Fail
344189-FWFA5PGPP2PFN2PP2P-1
306208FWFNPGP3PPP2P2P4P-P1
797945FWP2PPFNPG2P2P2PPFGN2P-2
808290-P3PP-3P2PP2P2PP4P0
840411-P2P--PPFW2PP3P2PG2P3P1
442970P-3P3PFPW5P3P--P--0
505548-2P-3P-P4P-4P-3P5P0
Not Expected to Fail
testLocationBarSearchesP-3P3P-4P4PPPFWP--0
testOpenDownloadManagerNP2P--P--2P2P--0
testClearFormHistoryPP-5P3PPPFPWPPPP0
Total Guards5