SlideShare une entreprise Scribd logo
1  sur  106
Isolating Failure Causes
        through
  Test Case Generation

Jeremias Rößler • Gordon Fraser • Andreas Zeller • Alessandro Orso
        Saarland University / Georgia Institute of Technology
Joda Time Brazilian Date

public void testBrazil() {
  LocalDate date = new LocalDate(2009, 10, 18);
  DateTimeZone dtz =
     DateTimeZone.forID("America/Sao_Paulo");
  Interval interval = date.toInterval(dtz);
}
Joda Time Brazilian Date

public void testBrazil() {
  LocalDate date = new LocalDate(2009, 10, 18);
  DateTimeZone dtz =
     DateTimeZone.forID("America/Sao_Paulo");
  Interval interval = date.toInterval(dtz);
}
Statistical Debugging
Statistical Debugging
Statistical Debugging
Statistical Debugging




    Statement ~
Statistical Debugging




    Statement ~
Statement ~ Failure
Statement ~ Failure
5.5% – org.joda.time.chrono.BasicGJChronology#<clinit>:58
5.5% – org.joda.time.chrono.ISOChronology#assemble:169
5.5% – org.joda.time.field.UnsupportedDurationField#getInstance:48
5.5% – org.joda.time.DateTimeZone#<clinit>:123
5.5% – org.joda.time.DateTimeZone#<clinit>:130
5.5% – org.joda.time.field.ZeroIsMaxDateTimeField#<init>:46
5.5% – org.joda.time.tz.CachedDateTimeZone#<clinit>:45
5.5% – org.joda.time.chrono.BasicGJChronology#getMonthOfYear:94
5.5% – org.joda.time.chrono.GregorianChronology#getInstance:117
1.4% – org.joda.time.DateTimeZone#getDefaultProvider:425
1.4% – org.joda.time.DateTimeZone#getDefaultProvider:437
1.4% – org.joda.time.DateTimeZone#getDefaultProvider:446
1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:509
1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:521
1.4% – org.joda.time.DateTimeZone#setNameProvider0:491
1.4% – org.joda.time.DateTimeZone#setProvider0:392
Statement ~ Failure
5.5% – org.joda.time.chrono.BasicGJChronology#<clinit>:58
5.5% – org.joda.time.chrono.ISOChronology#assemble:169
5.5% – org.joda.time.field.UnsupportedDurationField#getInstance:48
5.5% – org.joda.time.DateTimeZone#<clinit>:123
5.5% – org.joda.time.DateTimeZone#<clinit>:130
5.5% – org.joda.time.field.ZeroIsMaxDateTimeField#<init>:46
5.5% – org.joda.time.tz.CachedDateTimeZone#<clinit>:45
5.5% – org.joda.time.chrono.BasicGJChronology#getMonthOfYear:94
5.5% – org.joda.time.chrono.GregorianChronology#getInstance:117
1.4% – org.joda.time.DateTimeZone#getDefaultProvider:425
1.4% – org.joda.time.DateTimeZone#getDefaultProvider:437
1.4% – org.joda.time.DateTimeZone#getDefaultProvider:446
1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:509
1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:521
1.4% – org.joda.time.DateTimeZone#setNameProvider0:491
1.4% – org.joda.time.DateTimeZone#setProvider0:392
Statement ~ Failure
  5.5% – org.joda.time.chrono.BasicGJChronology#<clinit>:58
  5.5% – org.joda.time.chrono.ISOChronology#assemble:169
  5.5% – org.joda.time.field.UnsupportedDurationField#getInstance:48
static– {org.joda.time.DateTimeZone#<clinit>:123
  5.5%
  ...
  5.5% – org.joda.time.DateTimeZone#<clinit>:130
  5.5% – minSum = 0;
  long org.joda.time.field.ZeroIsMaxDateTimeField#<init>:46
  5.5% – org.joda.time.tz.CachedDateTimeZone#<clinit>:45
  for (int i = 0; i < 11; i++) {
  5.5% – org.joda.time.chrono.BasicGJChronology#getMonthOfYear:94
     long millis =
  5.5% – org.joda.time.chrono.GregorianChronology#getInstance:117
  1.4% –MIN_DAYS_PER_MONTH_ARRAY[i] *
         org.joda.time.DateTimeZone#getDefaultProvider:425
  1.4% –MILLIS_PER_DAY;
         org.joda.time.DateTimeZone#getDefaultProvider:437
     minSum += millis;
  1.4% – org.joda.time.DateTimeZone#getDefaultProvider:446
     ...
  1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:509
  }
  1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:521
} 1.4% – org.joda.time.DateTimeZone#setNameProvider0:491
  1.4% – org.joda.time.DateTimeZone#setProvider0:392
Statement ~ Failure
  5.5% – org.joda.time.chrono.BasicGJChronology#<clinit>:58
  5.5% – org.joda.time.chrono.ISOChronology#assemble:169
   5.5% – org.joda.time.chrono.ISOChronology#assemble:169
  5.5% – org.joda.time.field.UnsupportedDurationField#getInstance:48
  5.5% – org.joda.time.DateTimeZone#<clinit>:123
protected void assemble(Fields fields) {
  5.5% – org.joda.time.DateTimeZone#<clinit>:130
  if (getBase().getZone() == DateTimeZone.UTC) {
  5.5% – org.joda.time.field.ZeroIsMaxDateTimeField#<init>:46
  5.5% Use zero based century and year of century.
     // – org.joda.time.tz.CachedDateTimeZone#<clinit>:45
     fields.centuryOfEra =
  5.5% – org.joda.time.chrono.BasicGJChronology#getMonthOfYear:94
  5.5% –new DividedDateTimeField(
          org.joda.time.chrono.GregorianChronology#getInstance:117
  1.4% – org.joda.time.DateTimeZone#getDefaultProvider:425
            ISOYearOfEraDateTimeField.INSTANCE,
  1.4% – org.joda.time.DateTimeZone#getDefaultProvider:437
            DateTimeFieldType.centuryOfEra(), 100);
  1.4% – org.joda.time.DateTimeZone#getDefaultProvider:446
     ...
  1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:509
  }
  1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:521
} 1.4% – org.joda.time.DateTimeZone#setNameProvider0:491
  1.4% – org.joda.time.DateTimeZone#setProvider0:392
Statement ~ Failure
 5.5% – org.joda.time.chrono.BasicGJChronology#<clinit>:58
 5.5% – org.joda.time.chrono.ISOChronology#assemble:169
 5.5% – org.joda.time.field.UnsupportedDurationField#getInstance:48
 5.5% – org.joda.time.DateTimeZone#<clinit>:123
public org.joda.time.DateTimeZone#<clinit>:130
 5.5% – static
UnsupportedDurationField
 5.5% – org.joda.time.field.ZeroIsMaxDateTimeField#<init>:46
 5.5% – org.joda.time.tz.CachedDateTimeZone#<clinit>:45
getInstance(DurationFieldType type) {
 5.5% – org.joda.time.chrono.BasicGJChronology#getMonthOfYear:94
 UnsupportedDurationField field;
 5.5% – org.joda.time.chrono.GregorianChronology#getInstance:117
 if (cCache == null) {
 1.4% – org.joda.time.DateTimeZone#getDefaultProvider:425
    cCache = new HashMap(7);
 1.4% – org.joda.time.DateTimeZone#getDefaultProvider:437
    field = null;
 1.4% – org.joda.time.DateTimeZone#getDefaultProvider:446
 } else {
 1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:509
    field = (UnsupportedDurationField) cCache.get(type);
 1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:521
 }
 1.4% – org.joda.time.DateTimeZone#setNameProvider0:491
 1.4% – org.joda.time.DateTimeZone#setProvider0:392
 ...
Statement ~ Failure
5.5% – org.joda.time.chrono.BasicGJChronology#<clinit>:58
5.5% – org.joda.time.chrono.ISOChronology#assemble:169
5.5% – org.joda.time.field.UnsupportedDurationField#getInstance:48
5.5% – org.joda.time.DateTimeZone#<clinit>:123
5.5% – org.joda.time.DateTimeZone#<clinit>:130
5.5% – org.joda.time.field.ZeroIsMaxDateTimeField#<init>:46
5.5% – org.joda.time.tz.CachedDateTimeZone#<clinit>:45
5.5% – org.joda.time.chrono.BasicGJChronology#getMonthOfYear:94
5.5% – org.joda.time.chrono.GregorianChronology#getInstance:117
1.4% – org.joda.time.DateTimeZone#getDefaultProvider:425
1.4% – org.joda.time.DateTimeZone#getDefaultProvider:437
1.4% – org.joda.time.DateTimeZone#getDefaultProvider:446
1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:509
1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:521
1.4% – org.joda.time.DateTimeZone#setNameProvider0:491
1.4% – org.joda.time.DateTimeZone#setProvider0:392
Statement ~ Failure
5.5% – org.joda.time.chrono.BasicGJChronology#<clinit>:58
5.5% – org.joda.time.chrono.ISOChronology#assemble:169
5.5% – org.joda.time.field.UnsupportedDurationField#getInstance:48
5.5% – org.joda.time.DateTimeZone#<clinit>:123
5.5% – org.joda.time.DateTimeZone#<clinit>:130
5.5% – org.joda.time.field.ZeroIsMaxDateTimeField#<init>:46
5.5% – org.joda.time.tz.CachedDateTimeZone#<clinit>:45
5.5% – org.joda.time.chrono.BasicGJChronology#getMonthOfYear:94
5.5% – org.joda.time.chrono.GregorianChronology#getInstance:117
1.4% – org.joda.time.DateTimeZone#getDefaultProvider:425
1.4% – org.joda.time.DateTimeZone#getDefaultProvider:437
1.4% – org.joda.time.DateTimeZone#getDefaultProvider:446
1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:509
1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:521
1.4% – org.joda.time.DateTimeZone#setNameProvider0:491
1.4% – org.joda.time.DateTimeZone#setProvider0:392
Statement ~ Failure
5.5% – org.joda.time.chrono.BasicGJChronology#<clinit>:58
5.5% – org.joda.time.chrono.ISOChronology#assemble:169
5.5% – org.joda.time.field.UnsupportedDurationField#getInstance:48
5.5% – org.joda.time.DateTimeZone#<clinit>:123
5.5% – org.joda.time.DateTimeZone#<clinit>:130
5.5% – org.joda.time.field.ZeroIsMaxDateTimeField#<init>:46
5.5% – org.joda.time.tz.CachedDateTimeZone#<clinit>:45
5.5% – org.joda.time.chrono.BasicGJChronology#getMonthOfYear:94
5.5% – org.joda.time.chrono.GregorianChronology#getInstance:117
1.4% – org.joda.time.DateTimeZone#getDefaultProvider:425
1.4% – org.joda.time.DateTimeZone#getDefaultProvider:437
1.4% – org.joda.time.DateTimeZone#getDefaultProvider:446
1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:509
1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:521
1.4% – org.joda.time.DateTimeZone#setNameProvider0:491
1.4% – org.joda.time.DateTimeZone#setProvider0:392
Statement ~ Failure
5.5% – org.joda.time.chrono.BasicGJChronology#<clinit>:58
5.5% – org.joda.time.chrono.ISOChronology#assemble:169
5.5% – org.joda.time.field.UnsupportedDurationField#getInstance:48
5.5% – org.joda.time.DateTimeZone#<clinit>:123
5.5% – org.joda.time.DateTimeZone#<clinit>:130
5.5% – org.joda.time.field.ZeroIsMaxDateTimeField#<init>:46
5.5% – org.joda.time.tz.CachedDateTimeZone#<clinit>:45
5.5% – org.joda.time.chrono.BasicGJChronology#getMonthOfYear:94
5.5% – org.joda.time.chrono.GregorianChronology#getInstance:117
1.4% – org.joda.time.DateTimeZone#getDefaultProvider:425
1.4% – org.joda.time.DateTimeZone#getDefaultProvider:437
1.4% – org.joda.time.DateTimeZone#getDefaultProvider:446
1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:509
1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:521
1.4% – org.joda.time.DateTimeZone#setNameProvider0:491
1.4% – org.joda.time.DateTimeZone#setProvider0:392
Statement ~ Failure
                              0 %0 %0 %
                             0 %0 %0 %
                             0 %0 %0 %
                            0 %0 %0 % 6 % BasicGJChronology#<clinit>:58
                           0 %0 %
                          0 %0 %
                          0 %
                                  0 %
                                  0 %
                                 0 %
                            0 %0 %
                           0 %0 %
                         0 %
                         0 %
                        0 %
                        0 %
                       0 %
                       0 %
                      0 %
                      0 %
                     0 %
                     0 %
                    0 %
                    0 %                            6 % ISOChronology#assemble:169
                   0 %
                   0 %
                  0 %
                  0 %
                 0 %
                 0 %
                0 %
                0 %
               0 %
               0 %
              0 %
              0 %
             0 %
             0 %
            0 %
            0 %
           0 %
           0 %
          0 %
          0 %
         0 %
         0 %
        0 %                                               6 % UnsupportedDurationField#getInstance:48
        0 %
       0 %
       0 %
      0 %
      0 %
     1 %
     1 %
    1 %
    1 %                                                       6 % DateTimeZone#<clinit>:123
   1 %
   1 %
   1 %
   1 %                                                         6 % DateTimeZone#<clinit>:130
   1 %
    1 %
     1 %
      1 %                                                   6 % ZeroIsMaxDateTimeField#<init>:46
       1 %
          1 %
            1 %
              1 %                                     6 % CachedDateTimeZone#<clinit>:45
                 1 %
                    1 %
                      1 %1 %1 % 6 %          6 % BasicGJChronology#getMonthOfYear:94
                            ...    GregorianChronology#getInstance:117
Statistical Debugging
Two Issues
Two Issues

1. Many weak correlations
Two Issues

1. Many weak correlations


2. Only location
Two Issues
            and two solutions

1. Many weak correlations


2. Only location
Two Issues
            and two solutions

1. Many weak correlations
             – strengthen correlations

2. Only location
Two Issues
          and two solutions

1. Many weak correlations
             – strengthen correlations

2. Only location – provide explanations
Two Issues
          and two solutions

1. Many weak correlations
             – strengthen correlations

2. Only location – provide explanations



           BugEx
Two Issues
          and two solutions

1. Many weak correlations
             – strengthen correlations

2. Only location – provide explanations



           BugEx
Test Case Generation




    Statement ~
Test Case Generation




    Statement ~
Test Case Generation




                  stronger!
    Statement ~
Test Case Generation




                  stronger!
    Statement ~
Test Case Generation



directed
                     stronger!
       Statement ~
Joda Time Brazilian Date

public void testBrazil() {
  LocalDate date = new LocalDate(2009, 10, 18);
  DateTimeZone dtz =
     DateTimeZone.forID("America/Sao_Paulo");
  Interval interval = date.toInterval(dtz);
}
Statistical Debugging
                                   0 % 0 %0 %
                                  0 % 0 %0 % 6 %
                                   0 % 0 %
                                  0 %0 %
                                 0 %0 %
                                 0 %0 %
                                0 %0 %
                                0 %0 %
                               0 %0 %
                               0 %
                                          0 %
                                          0 %
                                         0 %
                                         0 %
                                        0 %
                                    0 % 0 %
                              0 %
                              0 %
                             0 %
                             0 %
                            0 %
                            0 %
                           0 %
                           0 %
                          0 %
                          0 %
                         0 %
                         0 %                        6 %
                        0 %
                        0 %
                       0 %
                       0 %
                      0 %
                      0 %
                     0 %
                     0 %
                     0 %
                    0 %
                    0 %
                   0 %
                   0 %
                  0 %
                  0 %
                 0 %                                      6 %
                 0 %
                 0 %
                0 %
                0 %
                0 %
               0 %
               0 %
              1 %
              1 %
             1 %
             1 %                                              6 %
            1 %
            1 %
            1 %
            1 %                                                6 %
            1 %
             1 %
              1 %
               1 %                                          6 %
                1 %
                  1 %
                   1 %
                      1 %                             6 %
                        1 %
                          1 %1 %1 %1 % 6 %      6 %
Statistical Debugging
                                            0 % 0 %0 %
                                           0 % 0 %0 % 6 %
                                                   0 %
                                                   0 %
                                                  0 %
                                                  0 %
                                                 0 %
                                             0 % 0 %
                                            0 % 0 %

         …
                                           0 %0 %
                                          0 %0 %
                                          0 %0 %
                                         0 %0 %
                                         0 %0 %
                                        0 %0 %
                                        0 %
                                       0 %
                                       0 %
                                      0 %
                                      0 %
                                     0 %
                                     0 %
                                    0 %
                                    0 %
                                   0 %                       6 %
                                   0 %
                                  0 %
                                  0 %
                                 0 %
                                 0 %
                                0 %
                                0 %
                               0 %
                               0 %
                              0 %
                              0 %
                              0 %
                             0 %
                             0 %
                            0 %
                            0 %
                           0 %
                           0 %
                          0 %
                          0 %
                          0 %                                      6 %
                         0 %
     T       F           0 %
                         0 %
                        0 %
                        0 %
                       1 %
                       1 %
                      1 %
                      1 %                                              6 %
                     1 %
                     1 %
                     1 %
                     1 %                                                6 %
T    F       T   F   1 %
                      1 %
                       1 %
                        1 %                                          6 %
                         1 %
                           1 %
…



     …


             …



                 …

                            1 %
                               1 %                             6 %
                                 1 %
                                   1 %1 %1 %1 % 6 %      6 %
Statistical Debugging
                                            0 % 0 %0 %
                                           0 % 0 %0 % 6 %
                                                   0 %
                                                   0 %
                                                  0 %
                                                  0 %
                                                 0 %
                                             0 % 0 %
                                            0 % 0 %

         …
                                           0 %0 %
                                          0 %0 %
                                          0 %0 %
                                         0 %0 %
                                         0 %0 %
                                        0 %0 %
                                        0 %
                                       0 %
                                       0 %
                                      0 %
                                      0 %
                                     0 %
                                     0 %
                                    0 %
                                    0 %
                                   0 %                       6 %
                                   0 %
                                  0 %
                                  0 %
                                 0 %
                                 0 %
                                0 %
                                0 %
                               0 %
                               0 %
                              0 %
                              0 %
                              0 %
                             0 %
                             0 %
                            0 %
                            0 %
                           0 %
                           0 %
                          0 %
                          0 %
                          0 %                                      6 %
                         0 %
     T       F           0 %
                         0 %
                        0 %
                        0 %
                       1 %
                       1 %
                      1 %
                      1 %                                              6 %
                     1 %
                     1 %
                     1 %
                     1 %                                                6 %
T    F       T   F   1 %
                      1 %
                       1 %
                        1 %                                          6 %
                         1 %
                           1 %
…



     …


             …



                 …

                            1 %
                               1 %                             6 %
                                 1 %
                                   1 %1 %1 %1 % 6 %      6 %
Directed Generation
                                            0 % 0 %0 %
                                           0 % 0 %0 % 6 %
                                                   0 %
                                                   0 %
                                                  0 %
                                                  0 %
                                                 0 %
                                             0 % 0 %
                                            0 % 0 %

         …
                                           0 %0 %
                                          0 %0 %
                                          0 %0 %
                                         0 %0 %
                                         0 %0 %
                                        0 %0 %
                                        0 %
                                       0 %
                                       0 %
                                      0 %
                                      0 %
                                     0 %
                                     0 %
                                    0 %
                                    0 %
                                   0 %                       6 %
                                   0 %
                                  0 %
                                  0 %
                                 0 %
                                 0 %
                                0 %
                                0 %
                               0 %
                               0 %
                              0 %
                              0 %
                              0 %
                             0 %
                             0 %
                            0 %
                            0 %
                           0 %
                           0 %
                          0 %
                          0 %
                          0 %                                      6 %
                         0 %
     T       F           0 %
                         0 %
                        0 %
                        0 %
                       1 %
                       1 %
                      1 %
                      1 %                                              6 %
                     1 %
                     1 %
                     1 %
                     1 %                                                6 %
T    F       T   F   1 %
                      1 %
                       1 %
                        1 %                                          6 %
                         1 %
                           1 %
…



     …


             …



                 …

                            1 %
                               1 %                             6 %
                                 1 %
                                   1 %1 %1 %1 % 6 %      6 %
Directed Generation
                                            0 % 0 %0 %
                                           0 % 0 %0 % 6 %
                                                   0 %
                                                   0 %
                                                  0 %
                                                  0 %
                                                 0 %
                                             0 % 0 %
                                            0 % 0 %

         …
                                           0 %0 %
                                          0 %0 %
                                          0 %0 %
                                         0 %0 %
                                         0 %0 %
                                        0 %0 %
                                        0 %
                                       0 %
                                       0 %
                                      0 %
                                      0 %
                                     0 %
                                     0 %
                                    0 %
                                    0 %
                                   0 %                       6 %
                                   0 %
                                  0 %
                                  0 %
                                 0 %
                                 0 %
                                0 %
                                0 %
                               0 %
                               0 %
                              0 %
                              0 %
                              0 %
                             0 %
                             0 %
                            0 %
                            0 %
                           0 %
                           0 %
                          0 %
                          0 %
                          0 %                                      6 %
                         0 %
     T       F           0 %
                         0 %
                        0 %
                        0 %
                       1 %
                       1 %
                      1 %
                      1 %                                              6 %
                     1 %
                     1 %
                     1 %
                     1 %                                                6 %
T    F       T   F   1 %
                      1 %
                       1 %
                        1 %                                          6 %
                         1 %
                           1 %
…



     …


             …



                 …

                            1 %
                               1 %                             6 %
                                 1 %
                                   1 %1 %1 %1 % 6 %      6 %
Directed Generation
                                           0 %0 %0 %
                                           0 %0 %0 %
                                                  0 %
                                          0 %0 %0 %
                                                 0 %
                                                 0 %
                                                0 %
                                                0 %
                                            0 %0 %
                                            0 %0 %

         …
                                       0 %
                                       0 %
                                      0 %
                                      0 % 0 %0 %
                                         0 %0 %
                                         0 %0 %
                                        0 %0 %
                                        0 %0 %           11 %
                                     0 %
                                     0 %
                                     0 %
                                    0 %
                                    0 %
                                    0 %
                                   0 %
                                   0 %
                                   0 %
                                  0 %
                                  0 %
                                 0 %
                                 0 %
                                 0 %
                                0 %
                                0 %
                               0 %
                               0 %
                              0 %
                              0 %
                             0 %
                             0 %
                            0 %
                            0 %
                           0 %                                    6 %
                           0 %
                           0 %
                          0 %
                          0 %
     T       F           0 %
                         0 %
                        1 %
                        1 %
                       1 %
                      1 %                                               6 %
                      1 %
                     1 %
                     1 %
                     1 %                                                 6 %
                     1 %
T    F       T   F   1 %
                      1 %
                       1 %                                              6 %
                        1 %
                         1 %
                          1 %
…



     …


             …



                 …

                            1 %                                   6 %
                              1 %
                               1 %
                                  1 %
                                    1 %
                                      1 %                   6 %
                                             6 %     6 %
Directed Generation
                                           0 %0 %0 %
                                           0 %0 %0 %
                                                  0 %
                                          0 %0 %0 %
                                                 0 %
                                                 0 %
                                                0 %
                                                0 %
                                            0 %0 %
                                            0 %0 %

         …
                                       0 %
                                       0 %
                                      0 %
                                      0 % 0 %0 %
                                         0 %0 %
                                         0 %0 %
                                        0 %0 %
                                        0 %0 %           11 %
                                     0 %
                                     0 %
                                     0 %
                                    0 %
                                    0 %
                                    0 %
                                   0 %
                                   0 %
                                   0 %
                                  0 %
                                  0 %
                                 0 %
                                 0 %
                                 0 %
                                0 %
                                0 %
                               0 %
                               0 %
                              0 %
                              0 %
                             0 %
                             0 %
                            0 %
                            0 %
                           0 %                                    6 %
                           0 %
                           0 %
                          0 %
                          0 %
     T       F           0 %
                         0 %
                        1 %
                        1 %
                       1 %
                      1 %                                               6 %
                      1 %
                     1 %
                     1 %
                     1 %                                                 6 %
                     1 %
T    F       T   F   1 %
                      1 %
                       1 %                                              6 %
                        1 %
                         1 %
                          1 %
…



     …


             …



                 …

                            1 %                                   6 %
                              1 %
                               1 %
                                  1 %
                                    1 %
                                      1 %                   6 %
                                             6 %     6 %
Directed Generation
                                          0 %0 %0 %
                                         0 %0 %0 %
                                         0 %0 %0 %
                                                0 %
                                                0 %
                                               0 %
                                               0 %
                                              0 %
                                              0 %
                                          0 %0 %

         …
                                         0 %0 %
                                        0 %0 %
                                        0 %0 %
                                       0 %0 %
                                       0 %0 %
                                      0 %0 %
                                      0 %
                                      0 %
                                     0 %
                                     0 %
                                     0 %
                                    0 %
                                    0 %
                                    0 %
                                   0 %
                                   0 %
                                   0 %
                                  0 %                       16 %
                                  0 %
                                  0 %
                                 0 %
                                 0 %
                                0 %
                                0 %
                                0 %
                               0 %
                               0 %
                              0 %
                              0 %
                             0 %
                             0 %
                            0 %
                            0 %
                           0 %
                           0 %
                           0 %
                          0 %
                          0 %
                         0 %
                         0 %
     T       F          1 %
                        1 %
                       1 %                                            5 %
                       1 %
                      1 %
                      1 %
                     1 %
                     1 %                                                  5 %
                     1 %
                     1 %
T    F       T   F   1 %
                      1 %
                      1 %                                             5 %
                       1 %
                        1 %
                         1 %                                        5 %
                          1 %
…



     …


             …



                 …

                            1 %
                              1 %
                               1 %
                                 1 %                          5 %
                                       5 %            5 %
                                                5 %
Directed Generation
                                          0 %0 %0 %
                                         0 %0 %0 %
                                         0 %0 %0 %
                                                0 %
                                                0 %
                                               0 %
                                               0 %
                                              0 %
                                              0 %
                                          0 %0 %

         …
                                         0 %0 %
                                        0 %0 %
                                        0 %0 %
                                       0 %0 %
                                       0 %0 %
                                      0 %0 %
                                      0 %
                                      0 %
                                     0 %
                                     0 %
                                     0 %
                                    0 %
                                    0 %
                                    0 %
                                   0 %
                                   0 %
                                   0 %
                                  0 %                       16 %
                                  0 %
                                  0 %
                                 0 %
                                 0 %
                                0 %
                                0 %
                                0 %
                               0 %
                               0 %
                              0 %
                              0 %
                             0 %
                             0 %
                            0 %
                            0 %
                           0 %
                           0 %
                           0 %
                          0 %
                          0 %
                         0 %
                         0 %
     T       F          1 %
                        1 %
                       1 %                                            5 %
                       1 %
                      1 %
                      1 %
                     1 %
                     1 %                                                  5 %
                     1 %
                     1 %
T    F       T   F   1 %
                      1 %
                      1 %                                             5 %
                       1 %
                        1 %
                         1 %                                        5 %
                          1 %
…



     …


             …



                 …

                            1 %
                              1 %
                               1 %
                                 1 %                          5 %
                                       5 %            5 %
                                                5 %
Directed Generation
                                          0 %0 %0 %
                                         0 %0 %0 %
                                         0 %0 %0 %
                                                0 %
                                                0 %
                                               0 %
                                               0 %
                                              0 %
                                              0 %
                                          0 %0 %

         …
                                         0 %0 %
                                        0 %0 %
                                        0 %0 %
                                       0 %0 %
                                       0 %0 %
                                      0 %0 %
                                      0 %
                                      0 %
                                     0 %
                                     0 %
                                     0 %
                                    0 %
                                    0 %
                                    0 %
                                   0 %
                                   0 %
                                   0 %
                                  0 %                       16 %
                                  0 %
                                  0 %
                                 0 %
                                 0 %
                                0 %
                                0 %
                                0 %
                               0 %
                               0 %
                              0 %
                              0 %
                             0 %
                             0 %
                            0 %
                            0 %
                           0 %
                           0 %
                           0 %
                          0 %
                          0 %
                         0 %
                         0 %
     T       F          1 %
                        1 %
                       1 %                                            5 %
                       1 %
                      1 %
                      1 %
                     1 %
                     1 %                                                  5 %
                     1 %
                     1 %
T    F       T   F   1 %
                      1 %
                      1 %                                             5 %
                       1 %
                        1 %
                         1 %                                        5 %
                          1 %
…



     …


             …



                 …

                            1 %
                              1 %
                               1 %
                                 1 %                          5 %
                                       5 %            5 %
                                                5 %
Directed Generation
                                           0 %0 %0 %
                                          0 %0 %0 %
                                          0 %0 %0 %
                                                 0 %
                                                 0 %
                                             0 %0 %
                                                0 %
                                                0 %
                                               0 %
                                               0 %

         …
                                         0 %0 %
                                         0 %0 %
                                        0 %0 %
                                        0 %0 %
                                       0 %0 %
                                       0 %0 %
                                       0 %
                                      0 %
                                      0 %
                                      0 %
                                     0 %
                                     0 %
                                    0 %
                                    0 %
                                    0 %
                                   0 %
                                   0 %
                                   0 %                     17 %
                                  0 %
                                  0 %
                                  0 %
                                 0 %
                                 0 %
                                0 %
                                0 %
                                0 %
                               0 %
                               0 %
                               0 %
                              0 %
                              0 %
                             0 %
                             0 %
                            0 %
                            0 %
                           0 %
                           0 %
                           0 %
                          0 %
                          0 %
                         0 %
     T       F           0 %
                        1 %
                        1 %
                       1 %                                           3 %
                      1 %
                      1 %
                     1 %                                               6 %
                     1 %
                     1 %
                     1 %
                     1 %
T    F       T   F   1 %                                               6 %
                      1 %
                       1 %
                        1 %                                          6 %
                         1 %
                          1 %
…



     …


             …



                 …

                            1 %
                              1 %                              6 %
                                1 %
                                  1 %
                                    1 %
                                         6 %             6 %
                                                   6 %
Directed Generation
                                           0 %0 %0 %
                                          0 %0 %0 %
                                          0 %0 %0 %
                                                 0 %
                                                 0 %
                                             0 %0 %
                                                0 %
                                                0 %
                                               0 %
                                               0 %

         …
                                         0 %0 %
                                         0 %0 %
                                        0 %0 %
                                        0 %0 %
                                       0 %0 %
                                       0 %0 %
                                       0 %
                                      0 %
                                      0 %
                                      0 %
                                     0 %
                                     0 %
                                    0 %
                                    0 %
                                    0 %
                                   0 %
                                   0 %
                                   0 %                     17 %
                                  0 %
                                  0 %
                                  0 %
                                 0 %
                                 0 %
                                0 %
                                0 %
                                0 %
                               0 %
                               0 %
                               0 %
                              0 %
                              0 %
                             0 %
                             0 %
                            0 %
                            0 %
                           0 %
                           0 %
                           0 %
                          0 %
                          0 %
                         0 %
     T       F           0 %
                        1 %
                        1 %
                       1 %                                           3 %
                      1 %
                      1 %
                     1 %                                               6 %
                     1 %
                     1 %
                     1 %
                     1 %
T    F       T   F   1 %                                               6 %
                      1 %
                       1 %
                        1 %                                          6 %
                         1 %
                          1 %
…



     …


             …



                 …

                            1 %
                              1 %                              6 %
                                1 %
                                  1 %
                                    1 %
                                         6 %             6 %
                                                   6 %
Directed Generation
                                          0 %0 %0 %
                                          0 %0 %0 %
                                                 0 %
                                         0 %0 %0 %
                                             0 %0 %
                                                0 %
                                                0 %
                                               0 %
                                               0 %
                                           0 %0 %

         …
                                         0 %0 %
                                        0 %0 %
                                        0 %0 %
                                       0 %0 %
                                       0 %0 %
                                       0 %
                                      0 %
                                      0 %
                                      0 %
                                     0 %
                                     0 %
                                    0 %
                                    0 %
                                   0 %
                                   0 %
                                   0 %
                                  0 %
                                  0 %
                                  0 %
                                 0 %
                                 0 %
                                0 %                           19 %
                                0 %
                                0 %
                               0 %
                               0 %
                               0 %
                              0 %
                              0 %
                             0 %
                             0 %
                            0 %
                            0 %
                           0 %
                           0 %
                           0 %
                          0 %
                          0 %
                         0 %
                         0 %
     T       F          1 %
                        1 %
                       1 %
                       1 %                                            1 %
                      1 %
                     1 %
                     1 %                                               5 %
                     1 %
                     1 %
                     1 %
T    F       T   F   1 %
                      1 %
                                                                       5 %
                      1 %
                       1 %
                        1 %                                          5 %
                          1 %
…



     …


             …



                 …

                           1 %
                             1 %
                               1 %                             5 %
                                 1 %
                                   1 %
                                        5 %             5 %
                                                  5 %
Directed Generation
                                            0 %0 %0 %
                                           0 %0 %0 %
                                                  0 %
                                           0 %0 %0 %
                                                 0 %
                                                 0 %
                                                0 %
                                                0 %
                                            0 %0 %

         …
                                          0 %0 %
                                          0 %0 %
                                         0 %0 %
                                         0 %0 %
                                        0 %0 %
                                        0 %
                                       0 %
                                       0 %
                                      0 %
                                      0 %
                                     0 %
                                     0 %
                                    0 %
                                    0 %
                                   0 %
                                   0 %
                                  0 %
                                  0 %
                                 0 %
                                 0 %
                                0 %
                                0 %
                                0 %
                               0 %
                               0 %
                               0 %
                              0 %
                              0 %
                              0 %
                             0 %
                             0 %
                            0 %
                            0 %
                           0 %
                           0 %
                          0 %
                          0 %
     T       F           0 %
                         0 %
                         0 %
                        0 %
                        0 %
                       0 %                                        37 %
                       1 %
                      1 %
                      1 %
                     1 %
                     1 %
                     1 %
                     1 %
T    F       T   F   1 %
                      1 %
                       1 %
                        1 %
                         1 %
                           1 %
…



     …


             …



                 …

                             1 %
                               1 %                            2 %
                                 1 %                        2 %
                                   1 %1 %                 2 %
                                         1 %1 % 2 % 2 % 2 %
                                              1 % 2 % 2 %
Directed Generation
         …
     T       F


T    F       T   F
…



     …


             …



                 …

                                    99.9 %

                     DateTimeZone#getOffsetFromLocal:864
Statement ~ Failure
0.01% org.joda.time.chrono.BasicGJChronology#<clinit>:58
99.9% – org.joda.time.DateTimeZone#getOffsetFromLocal:864
0.01% – org.joda.time.chrono.ISOChronology#assemble:169
0.01% – org.joda.time.field.UnsupportedDurationField#getInstance:48
0.01% – org.joda.time.DateTimeZone#<clinit>:123
0.01% – org.joda.time.DateTimeZone#<clinit>:130
0.01% – org.joda.time.field.ZeroIsMaxDateTimeField#<init>:46
// if the offsets differ, we must be
0.01% – org.joda.time.tz.CachedDateTimeZone#<clinit>:45
0.01% – org.joda.time.chrono.BasicGJChronology#getMonthOfYear:94
// near a DST boundary
5.5% – org.joda.time.chrono.GregorianChronology#getInstance:117
if (offsetLocal != offsetAdjusted) {
0.001% – org.joda.time.DateTimeZone#getDefaultProvider:425
    …
0.001% – org.joda.time.DateTimeZone#getDefaultProvider:437
0.001% – org.joda.time.DateTimeZone#getDefaultProvider:446
}
0.001% – org.joda.time.DateTimeZone#getDefaultNameProvider:509
0.001% – org.joda.time.DateTimeZone#getDefaultNameProvider:521
0.001% – org.joda.time.DateTimeZone#setNameProvider0:491
0.001% – org.joda.time.DateTimeZone#setProvider0:392
Statement ~ Failure
0.01% org.joda.time.chrono.BasicGJChronology#<clinit>:58
99.9% – org.joda.time.DateTimeZone#getOffsetFromLocal:864
0.01% – org.joda.time.chrono.ISOChronology#assemble:169
0.01% – org.joda.time.field.UnsupportedDurationField#getInstance:48
0.01% – org.joda.time.DateTimeZone#<clinit>:123
0.01% – org.joda.time.DateTimeZone#<clinit>:130
0.01% – org.joda.time.field.ZeroIsMaxDateTimeField#<init>:46
// if the offsets differ, we must be
0.01% – org.joda.time.tz.CachedDateTimeZone#<clinit>:45
0.01% – org.joda.time.chrono.BasicGJChronology#getMonthOfYear:94
// near a DST boundary         – failure condition!
5.5% – org.joda.time.chrono.GregorianChronology#getInstance:117
if (offsetLocal != offsetAdjusted) {
0.001% – org.joda.time.DateTimeZone#getDefaultProvider:425
    …
0.001% – org.joda.time.DateTimeZone#getDefaultProvider:437
0.001% – org.joda.time.DateTimeZone#getDefaultProvider:446
}
0.001% – org.joda.time.DateTimeZone#getDefaultNameProvider:509
0.001% – org.joda.time.DateTimeZone#getDefaultNameProvider:521
0.001% – org.joda.time.DateTimeZone#setNameProvider0:491
0.001% – org.joda.time.DateTimeZone#setProvider0:392
Two Issues
          and two solutions

1. Many weak correlations
             – strengthen correlations

2. Only location – provide explanations



           BugEx
Two Issues
          and two solutions

1. Many weak correlations
             – strengthen correlations

2. Only location – provide explanations



           BugEx
Directed Generation
                                            0 %0 %0 %
                                           0 %0 %0 %
                                                  0 %
                                           0 %0 %0 %
                                                 0 %
                                                 0 %
                                                0 %
                                                0 %
                                            0 %0 %

         …
                                          0 %0 %
                                          0 %0 %
                                         0 %0 %
                                         0 %0 %
                                        0 %0 %
                                        0 %
                                       0 %
                                       0 %
                                      0 %
                                      0 %
                                     0 %
                                     0 %
                                    0 %
                                    0 %
                                   0 %
                                   0 %
                                  0 %
                                  0 %
                                 0 %
                                 0 %
                                0 %
                                0 %
                                0 %
                               0 %
                               0 %
                               0 %
                              0 %
                              0 %
                              0 %
                             0 %
                             0 %
                            0 %
                            0 %
                           0 %
                           0 %
                          0 %
                          0 %
     T       F           0 %
                         0 %
                         0 %
                        0 %
                        0 %
                       0 %                                        37 %
                       1 %
                      1 %
                      1 %
                     1 %
                     1 %
                     1 %
                     1 %
T    F       T   F   1 %
                      1 %
                       1 %
                        1 %
                         1 %
                           1 %
…



     …


             …



                 …

                             1 %
                               1 %                            2 %
                                 1 %                        2 %
                                   1 %1 %                 2 %
                                         1 %1 % 2 % 2 % 2 %
                                              1 % 2 % 2 %
Directed Generation
                                                    0 %0 %0 %
                                                   0 %0 %0 %
                                                          0 %
                                                   0 %0 %0 %
                                                         0 %
                                                         0 %
                                                        0 %
                                                        0 %
                                                    0 %0 %

            …
                                                  0 %0 %
                                                  0 %0 %
                                                 0 %0 %
                                                 0 %0 %
                                                0 %0 %
                                                0 %
                                               0 %
                                               0 %
                                              0 %
                                              0 %
                                             0 %
                                             0 %
                                            0 %
                                            0 %
                                           0 %
                                           0 %
                                          0 %
                                          0 %
                                         0 %
                                         0 %
                                        0 %
                                        0 %
                                        0 %
                                       0 %
                                       0 %
                                       0 %
                                      0 %
                                      0 %
                                      0 %
                                     0 %
                                     0 %
                                    0 %
                                    0 %
                                   0 %
                                   0 %
                                  0 %
                                  0 %
        T       F                0 %
                                 0 %
                                 0 %
                                0 %
                                0 %
                               0 %                                        37 %
                               1 %
                              1 %
                              1 %
Arbitrary runtime features   1 %
                             1 %
                             1 %
                             1 %
 T     F        T      F     1 %
                              1 %
                               1 %
                                1 %
                                 1 %
                                   1 %
…



       …


                …



                      …

                                     1 %
                                       1 %                            2 %
                                         1 %                        2 %
                                           1 %1 %                 2 %
                                                 1 %1 % 2 % 2 % 2 %
                                                      1 % 2 % 2 %
Directed Generation
            …
        T       F
                             • Branches
Arbitrary runtime features
 T     F        T      F
…



       …


                …



                      …
Directed Generation
            …
        T       F
                             • Branches
Arbitrary runtime features   • State predicates
 T     F        T      F
…



       …


                …



                      …
Directed Generation
            …
        T       F
                             • Branches
Arbitrary runtime features   • State predicates
 T     F        T      F
                             • Thread schedules
…



       …


                …



                      …
Directed Generation
            …
        T       F
                             • Branches
Arbitrary runtime features   • State predicates
 T     F        T      F
                             • Thread schedules
                             • Def-use pairs
…



       …


                …



                      …
Directed Generation
            …
        T       F
                             • Branches
Arbitrary runtime features   • State predicates
 T     F        T      F
                             • Thread schedules
                             • Def-use pairs
…



       …


                …



                      …




                             • and more…
Directed Generation
            …
        T       F
                             • Branches
Arbitrary runtime features   • State predicates
 T     F        T      F
                             • Thread schedules
                             • Def-use pairs
…



       …


                …



                      …




                             • and more…
State Predicates

• Encode features of objects:
     attribute | inspector
         <|>|≤|≥|=|≠
              attribute | inspector | constant
State Predicates

• Encode features of objects:
     attribute | inspector
         <|>|≤|≥|=|≠
              attribute | inspector | constant

• e.g. “shape.area() ≥ 0” or
  “square.width = square.height”
Base64 Lookup

public void test() {
  byte[] byteArray = { -125, -10, 64 };
  Base64.isArrayByteBase64(byteArray);
}
Base64 Lookup

public void test() {
  byte[] byteArray = { -125, -10, 64 };
  Base64.isArrayByteBase64(byteArray);
}
Base64 Lookup

public void test() {
  byte[] byteArray = { -125, -10, 64 };
  Base64.isArrayByteBase64(byteArray);
}
Base64 Lookup

public void test() {
  byte[] byteArray = { -125, -10, 64 };
  Base64.isArrayByteBase64(byteArray);
}
        arrayOctect.length() == 3
Base64 Lookup

public void test() {
  byte[] byteArray = { -125, -10, 64 };
  Base64.isArrayByteBase64(byteArray);
}
        arrayOctect.length() == 3
             octect <= 0
Base64 Lookup

public void test() {
  byte[] byteArray = { -125, -10, 64 };
  Base64.isArrayByteBase64(byteArray);
}
                     octect <= 0
Base64 Lookup

public void test() {
  byte[] byteArray = { -125, -10, 64 };
  Base64.isArrayByteBase64(byteArray);
}
                     octect <= 0


       base64Alphabet[octect]
Quantitative Results
          Branches   Predicates
Quantitative Results
          Branches   Predicates
Quantitative Results
                         Branches      Predicates
Brazilian Date bug       2,380 s   1    13,55 s 25
Base64 Lookup bug          38 s    1     737 s    2
Sparse Iterator bug       216 s    8   10,267 s   9
Base64 Decoder bug        214 s    1    1,339 s 23
Western Hemisphere bug   8,422 s   7   30,937 s   9
Vending Machine bug        19 s    1       56 s   1
Parse French Date bug    1,577 s 15         n/a n/a
Quantitative Results
                         Branches      Predicates
Brazilian Date bug       2,380 s   1    13,55 s 25
Base64 Lookup bug          38 s    1     737 s    2
Sparse Iterator bug       216 s    8   10,267 s   9
Base64 Decoder bug        214 s    1    1,339 s 23
Western Hemisphere bug   8,422 s   7   30,937 s   9
Vending Machine bug        19 s    1       56 s   1
Parse French Date bug    1,577 s 15         n/a n/a
Quantitative Results
                         Branches      Predicates
Brazilian Date bug       2,380 s   1    13,55 s 25
Base64 Lookup bug          38 s    1     737 s    2
Sparse Iterator bug       216 s    8   10,267 s   9
Base64 Decoder bug        214 s    1    1,339 s 23
Western Hemisphere bug   8,422 s   7   30,937 s   9
Vending Machine bug        19 s    1       56 s   1
Parse French Date bug    1,577 s 15         n/a n/a
Quantitative Results
                         Branches      Predicates
Brazilian Date bug       2,380 s   1    13,55 s 25
Base64 Lookup bug          38 s    1     737 s    2
Sparse Iterator bug       216 s    8   10,267 s   9
Base64 Decoder bug        214 s    1    1,339 s 23
Western Hemisphere bug   8,422 s   7   30,937 s   9
Vending Machine bug        19 s    1       56 s   1
Parse French Date bug    1,577 s 15         n/a n/a
Quantitative Results
                         Branches      Predicates
Brazilian Date bug       2,380 s   1    13,55 s 25
Base64 Lookup bug          38 s    1     737 s    2
Sparse Iterator bug       216 s    8   10,267 s   9
Base64 Decoder bug        214 s    1    1,339 s 23
Western Hemisphere bug   8,422 s   7   30,937 s   9
Vending Machine bug        19 s    1       56 s   1
Parse French Date bug    1,577 s 15         n/a n/a
Quantitative Results
                         Branches      Predicates
Brazilian Date bug       2,380 s   1    13,55 s 25
Base64 Lookup bug          38 s    1     737 s    2
Sparse Iterator bug       216 s    8   10,267 s   9
Base64 Decoder bug        214 s    1    1,339 s 23
Western Hemisphere bug   8,422 s   7   30,937 s   9
Vending Machine bug        19 s    1       56 s   1
Parse French Date bug    1,577 s 15         n/a n/a
Quantitative Results
                         Branches      Predicates
Brazilian Date bug       2,380 s   1    13,55 s 25
Base64 Lookup bug          38 s    1     737 s    2
Sparse Iterator bug       216 s    8   10,267 s   9
Base64 Decoder bug        214 s    1    1,339 s 23
Western Hemisphere bug   8,422 s   7   30,937 s   9
Vending Machine bug        19 s    1       56 s   1
Parse French Date bug    1,577 s 15         n/a n/a
Qualitative Results
                            Branches     Predicates
  •   Correctbug
Brazilian Date results after2,380seconds 13,55 s 25
                             20 s 1
      in six out of seven cases
Base64 Lookup bug           38 s   1      737 s   2
Sparse Iterator bug        216 s   8   10,267 s   9
Base64 Decoder bug         214 s   1    1,339 s 23
Western Hemisphere bug   8,422 s   7   30,937 s   9
Vending Machine bug         19 s   1       56 s   1
Parse French Date bug    1,577 s 15         n/a n/a
Qualitative Results
                            Branches     Predicates
  •   Correctbug
Brazilian Date results after2,380seconds 13,55 s 25
                             20 s 1
      in six out of seven cases
Base64 Lookup bug           38 s   1      737 s   2
  •
Sparse Iterator bug effort 216 s
     No additional                 8   10,267 s   9
Base64 Decoder bug         214 s   1    1,339 s 23
Western Hemisphere bug   8,422 s   7   30,937 s   9
Vending Machine bug         19 s   1       56 s   1
Parse French Date bug    1,577 s 15         n/a n/a
Qualitative Results
                            Branches     Predicates
  •   Correctbug
Brazilian Date results after2,380seconds 13,55 s 25
                             20 s 1
      in six out of seven cases
Base64 Lookup bug           38 s   1      737 s    2
  •
Sparse Iterator bug effort 216 s
     No additional                8   10,267 s     9

  •
Base64 Decoder bug of branchess reported
     Small number         214     1    1,339 s    23
Western Hemisphere bug   8,422 s   7   30,937 s    9
Vending Machine bug         19 s   1       56 s    1
Parse French Date bug    1,577 s 15         n/a n/a
Qualitative Results
                            Branches     Predicates
  •   Correctbug
Brazilian Date results after2,380seconds 13,55 s 25
                             20 s 1
      in six out of seven cases
Base64 Lookup bug            38 s   1     737 s    2
  •
Sparse Iterator bug effort 216 s
     No additional                8   10,267 s     9

  •
Base64 Decoder bug of branchess reported
     Small number           214   1    1,339 s    23

  • Directly leads to failure19 s 1
Western Hemisphere bug 8,422 s 7
Vending Machine bug
                              cause
                                      30,937 s
                                          56 s
                                                   9
                                                   1
      in six out of seven cases
Parse French Date bug      1,577 s 15       n/a n/a
Future Work

• More runtime features
Future Work

• More runtime features
• Improve test case generation
Future Work

• More runtime features
• Improve test case generation
• Large-scale quantitative evaluation
Future Work

• More runtime features
• Improve test case generation
• Large-scale quantitative evaluation
• User study (like seen yesterday)
http://www.st.cs.uni-saarland.de/bugex/
Comparing Branches
                  Statistical
          BugEx   Debugging
Comparing Branches
                  Statistical
          BugEx   Debugging
Comparing Branches
                                       Statistical
                           BugEx       Debugging
Brazilian Date bug       2,380 s   1   25,223 s 24
Base64 Lookup bug          38 s    1     512 s 17
Sparse Iterator bug       216 s    8    1901 s 14
Base64 Decoder bug        214 s    1     496 s 51
Western Hemisphere bug   8,422 s   7   25,341 s 28
Vending Machine bug        19 s    1       n/a n/a
Parse French Date bug    1,577 s 15    25,542 s 26
Comparing Branches
                                       Statistical
                           BugEx       Debugging
Brazilian Date bug       2,380 s   1   25,223 s 24
Base64 Lookup bug          38 s    1     512 s 17
Sparse Iterator bug       216 s    8    1901 s 14
Base64 Decoder bug        214 s    1     496 s 51
Western Hemisphere bug   8,422 s   7   25,341 s 28
Vending Machine bug        19 s    1       n/a n/a
Parse French Date bug    1,577 s 15    25,542 s 26
Comparing Branches
                                       Statistical
                           BugEx       Debugging
Brazilian Date bug       2,380 s   1   25,223 s 24
Base64 Lookup bug          38 s    1     512 s 17
Sparse Iterator bug       216 s    8    1901 s 14
Base64 Decoder bug        214 s    1     496 s 51
Western Hemisphere bug   8,422 s   7   25,341 s 28
Vending Machine bug        19 s    1       n/a n/a
Parse French Date bug    1,577 s 15    25,542 s 26
Comparing Branches
                                       Statistical
                           BugEx       Debugging
Brazilian Date bug       2,380 s   1   25,223 s 24
Base64 Lookup bug          38 s    1     512 s 17
Sparse Iterator bug       216 s    8    1901 s 14
Base64 Decoder bug        214 s    1     496 s 51
Western Hemisphere bug   8,422 s   7   25,341 s 28
Vending Machine bug        19 s    1       n/a n/a
Parse French Date bug    1,577 s 15    25,542 s 26
Comparing Branches
                                       Statistical
                           BugEx       Debugging
Brazilian Date bug       2,380 s   1   25,223 s 24
Base64 Lookup bug          38 s    1     512 s 17
Sparse Iterator bug       216 s    8    1901 s 14
Base64 Decoder bug        214 s    1     496 s 51
Western Hemisphere bug   8,422 s   7   25,341 s 28
Vending Machine bug        19 s    1       n/a n/a
Parse French Date bug    1,577 s 15    25,542 s 26
Comparing Branches
                                       Statistical
                           BugEx       Debugging
Brazilian Date bug       2,380 s   1   25,223 s 24
Base64 Lookup bug          38 s    1     512 s 17
Sparse Iterator bug       216 s    8    1901 s 14
Base64 Decoder bug        214 s    1     496 s 51
Western Hemisphere bug   8,422 s   7   25,341 s 28
Vending Machine bug        19 s    1       n/a n/a
Parse French Date bug    1,577 s 15    25,542 s 26
Comparing Branches
                                       Statistical
                           BugEx       Debugging
Brazilian Date bug       2,380 s   1   25,223 s 24
Base64 Lookup bug          38 s    1     512 s 17
Sparse Iterator bug       216 s    8    1901 s 14
Base64 Decoder bug        214 s    1     496 s 51
Western Hemisphere bug   8,422 s   7   25,341 s 28
Vending Machine bug        19 s    1       n/a n/a
Parse French Date bug    1,577 s 15    25,542 s 26
Performance
Branches




                     Minutes
Joda Time

                               5.2%

Brazilian Date Test
                           94.8%



                       23.7%

3,497 Tests
                                 76.3%
Commons Codec

                        1.7%

Base64 Lookup Test
                       98.3%



                     14.2%

185 Tests
                         85.8%

Contenu connexe

En vedette

Prospects and Challenges of Structural Transformation in Ethiopia
Prospects and Challenges of Structural Transformation in Ethiopia Prospects and Challenges of Structural Transformation in Ethiopia
Prospects and Challenges of Structural Transformation in Ethiopia Ethiopian Economics Association
 
Comentario al zohar_tomo_6_toldoth
Comentario al zohar_tomo_6_toldothComentario al zohar_tomo_6_toldoth
Comentario al zohar_tomo_6_toldothCamilo Navarro Rubi
 
STUDENTS' ASPIRATION TOWARDS SKILL DEVELOPMENT
STUDENTS' ASPIRATION TOWARDS SKILL DEVELOPMENTSTUDENTS' ASPIRATION TOWARDS SKILL DEVELOPMENT
STUDENTS' ASPIRATION TOWARDS SKILL DEVELOPMENTKalinga Keshari Samal
 
Semi-Detailed Lesson plan in Affixes
Semi-Detailed Lesson plan in AffixesSemi-Detailed Lesson plan in Affixes
Semi-Detailed Lesson plan in Affixesnicapabs
 
De opkomst van marktonderzoek in merkenzaken
De opkomst van marktonderzoek in merkenzakenDe opkomst van marktonderzoek in merkenzaken
De opkomst van marktonderzoek in merkenzakenGregor Vos
 

En vedette (10)

Cabala para principiantes
Cabala para principiantes Cabala para principiantes
Cabala para principiantes
 
Instrumentação Basica
Instrumentação BasicaInstrumentação Basica
Instrumentação Basica
 
Prospects and Challenges of Structural Transformation in Ethiopia
Prospects and Challenges of Structural Transformation in Ethiopia Prospects and Challenges of Structural Transformation in Ethiopia
Prospects and Challenges of Structural Transformation in Ethiopia
 
Comentario al zohar_tomo_6_toldoth
Comentario al zohar_tomo_6_toldothComentario al zohar_tomo_6_toldoth
Comentario al zohar_tomo_6_toldoth
 
Project Full
Project FullProject Full
Project Full
 
Fixed wing aircrafts
Fixed wing aircraftsFixed wing aircrafts
Fixed wing aircrafts
 
STUDENTS' ASPIRATION TOWARDS SKILL DEVELOPMENT
STUDENTS' ASPIRATION TOWARDS SKILL DEVELOPMENTSTUDENTS' ASPIRATION TOWARDS SKILL DEVELOPMENT
STUDENTS' ASPIRATION TOWARDS SKILL DEVELOPMENT
 
Semi-Detailed Lesson plan in Affixes
Semi-Detailed Lesson plan in AffixesSemi-Detailed Lesson plan in Affixes
Semi-Detailed Lesson plan in Affixes
 
De opkomst van marktonderzoek in merkenzaken
De opkomst van marktonderzoek in merkenzakenDe opkomst van marktonderzoek in merkenzaken
De opkomst van marktonderzoek in merkenzaken
 
Ipotetico periodo
Ipotetico periodoIpotetico periodo
Ipotetico periodo
 

Similaire à Isolating Failure Causes through Test Case Generation

Quality Assurance for PHP projects - ZendCon 2012
Quality Assurance for PHP projects - ZendCon 2012Quality Assurance for PHP projects - ZendCon 2012
Quality Assurance for PHP projects - ZendCon 2012Michelangelo van Dam
 
Workshop quality assurance for php projects tek12
Workshop quality assurance for php projects tek12Workshop quality assurance for php projects tek12
Workshop quality assurance for php projects tek12Michelangelo van Dam
 
More on Fitnesse and Continuous Integration (Silicon Valley code camp 2012)
More on Fitnesse and Continuous Integration (Silicon Valley code camp 2012)More on Fitnesse and Continuous Integration (Silicon Valley code camp 2012)
More on Fitnesse and Continuous Integration (Silicon Valley code camp 2012)Jen Wong
 
Production profiling what, why and how technical audience (3)
Production profiling  what, why and how   technical audience (3)Production profiling  what, why and how   technical audience (3)
Production profiling what, why and how technical audience (3)RichardWarburton
 
DevDays: Profiling With Java Flight Recorder
DevDays: Profiling With Java Flight RecorderDevDays: Profiling With Java Flight Recorder
DevDays: Profiling With Java Flight RecorderMiro Wengner
 
Splunk bangalore user group 2020 08 01
Splunk bangalore user group 2020 08 01Splunk bangalore user group 2020 08 01
Splunk bangalore user group 2020 08 01NiketNilay
 
2014_07_28_Django環境安裝以及 Django Book Chapter 4: Templates
2014_07_28_Django環境安裝以及 Django Book Chapter 4: Templates2014_07_28_Django環境安裝以及 Django Book Chapter 4: Templates
2014_07_28_Django環境安裝以及 Django Book Chapter 4: TemplatesKe Wei Louis
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
2010 07-28-testing-zf-apps
2010 07-28-testing-zf-apps2010 07-28-testing-zf-apps
2010 07-28-testing-zf-appsVenkata Ramana
 

Similaire à Isolating Failure Causes through Test Case Generation (10)

Quality Assurance for PHP projects - ZendCon 2012
Quality Assurance for PHP projects - ZendCon 2012Quality Assurance for PHP projects - ZendCon 2012
Quality Assurance for PHP projects - ZendCon 2012
 
Django Deployment-in-AWS
Django Deployment-in-AWSDjango Deployment-in-AWS
Django Deployment-in-AWS
 
Workshop quality assurance for php projects tek12
Workshop quality assurance for php projects tek12Workshop quality assurance for php projects tek12
Workshop quality assurance for php projects tek12
 
More on Fitnesse and Continuous Integration (Silicon Valley code camp 2012)
More on Fitnesse and Continuous Integration (Silicon Valley code camp 2012)More on Fitnesse and Continuous Integration (Silicon Valley code camp 2012)
More on Fitnesse and Continuous Integration (Silicon Valley code camp 2012)
 
Production profiling what, why and how technical audience (3)
Production profiling  what, why and how   technical audience (3)Production profiling  what, why and how   technical audience (3)
Production profiling what, why and how technical audience (3)
 
DevDays: Profiling With Java Flight Recorder
DevDays: Profiling With Java Flight RecorderDevDays: Profiling With Java Flight Recorder
DevDays: Profiling With Java Flight Recorder
 
Splunk bangalore user group 2020 08 01
Splunk bangalore user group 2020 08 01Splunk bangalore user group 2020 08 01
Splunk bangalore user group 2020 08 01
 
2014_07_28_Django環境安裝以及 Django Book Chapter 4: Templates
2014_07_28_Django環境安裝以及 Django Book Chapter 4: Templates2014_07_28_Django環境安裝以及 Django Book Chapter 4: Templates
2014_07_28_Django環境安裝以及 Django Book Chapter 4: Templates
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
2010 07-28-testing-zf-apps
2010 07-28-testing-zf-apps2010 07-28-testing-zf-apps
2010 07-28-testing-zf-apps
 

Plus de SAP SE

Informationstechnik
InformationstechnikInformationstechnik
InformationstechnikSAP SE
 
Managing bias in data
Managing bias in dataManaging bias in data
Managing bias in dataSAP SE
 
Testing without assertions - #HUSTEF2019
Testing without assertions - #HUSTEF2019Testing without assertions - #HUSTEF2019
Testing without assertions - #HUSTEF2019SAP SE
 
Testing Without Assertions
Testing Without AssertionsTesting Without Assertions
Testing Without AssertionsSAP SE
 
Testing without Assertions
Testing without AssertionsTesting without Assertions
Testing without AssertionsSAP SE
 
recheck and the Sorcerer's Stone: Turning Selenium into Adamantium
recheck and the Sorcerer's Stone: Turning Selenium into Adamantiumrecheck and the Sorcerer's Stone: Turning Selenium into Adamantium
recheck and the Sorcerer's Stone: Turning Selenium into AdamantiumSAP SE
 
Lightning Talk: When will AI take my Job as a Tester
Lightning Talk: When will AI take my Job as a TesterLightning Talk: When will AI take my Job as a Tester
Lightning Talk: When will AI take my Job as a TesterSAP SE
 
Testing ohne assertions
Testing ohne assertionsTesting ohne assertions
Testing ohne assertionsSAP SE
 
How to apply AI to Testing
How to apply AI to TestingHow to apply AI to Testing
How to apply AI to TestingSAP SE
 
When will ai take my job as a tester
When will ai take my job as a testerWhen will ai take my job as a tester
When will ai take my job as a testerSAP SE
 
AI and the End of the World
AI and the End of the WorldAI and the End of the World
AI and the End of the WorldSAP SE
 
Wie man KI ins Testing bringt
Wie man KI ins Testing bringtWie man KI ins Testing bringt
Wie man KI ins Testing bringtSAP SE
 
Bei uns testen lauter Affen - Das Ende der Banensoftware
Bei uns testen lauter Affen - Das Ende der BanensoftwareBei uns testen lauter Affen - Das Ende der Banensoftware
Bei uns testen lauter Affen - Das Ende der BanensoftwareSAP SE
 

Plus de SAP SE (13)

Informationstechnik
InformationstechnikInformationstechnik
Informationstechnik
 
Managing bias in data
Managing bias in dataManaging bias in data
Managing bias in data
 
Testing without assertions - #HUSTEF2019
Testing without assertions - #HUSTEF2019Testing without assertions - #HUSTEF2019
Testing without assertions - #HUSTEF2019
 
Testing Without Assertions
Testing Without AssertionsTesting Without Assertions
Testing Without Assertions
 
Testing without Assertions
Testing without AssertionsTesting without Assertions
Testing without Assertions
 
recheck and the Sorcerer's Stone: Turning Selenium into Adamantium
recheck and the Sorcerer's Stone: Turning Selenium into Adamantiumrecheck and the Sorcerer's Stone: Turning Selenium into Adamantium
recheck and the Sorcerer's Stone: Turning Selenium into Adamantium
 
Lightning Talk: When will AI take my Job as a Tester
Lightning Talk: When will AI take my Job as a TesterLightning Talk: When will AI take my Job as a Tester
Lightning Talk: When will AI take my Job as a Tester
 
Testing ohne assertions
Testing ohne assertionsTesting ohne assertions
Testing ohne assertions
 
How to apply AI to Testing
How to apply AI to TestingHow to apply AI to Testing
How to apply AI to Testing
 
When will ai take my job as a tester
When will ai take my job as a testerWhen will ai take my job as a tester
When will ai take my job as a tester
 
AI and the End of the World
AI and the End of the WorldAI and the End of the World
AI and the End of the World
 
Wie man KI ins Testing bringt
Wie man KI ins Testing bringtWie man KI ins Testing bringt
Wie man KI ins Testing bringt
 
Bei uns testen lauter Affen - Das Ende der Banensoftware
Bei uns testen lauter Affen - Das Ende der BanensoftwareBei uns testen lauter Affen - Das Ende der Banensoftware
Bei uns testen lauter Affen - Das Ende der Banensoftware
 

Dernier

Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 

Dernier (20)

E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 

Isolating Failure Causes through Test Case Generation

  • 1. Isolating Failure Causes through Test Case Generation Jeremias Rößler • Gordon Fraser • Andreas Zeller • Alessandro Orso Saarland University / Georgia Institute of Technology
  • 2. Joda Time Brazilian Date public void testBrazil() { LocalDate date = new LocalDate(2009, 10, 18); DateTimeZone dtz = DateTimeZone.forID("America/Sao_Paulo"); Interval interval = date.toInterval(dtz); }
  • 3. Joda Time Brazilian Date public void testBrazil() { LocalDate date = new LocalDate(2009, 10, 18); DateTimeZone dtz = DateTimeZone.forID("America/Sao_Paulo"); Interval interval = date.toInterval(dtz); }
  • 7. Statistical Debugging Statement ~
  • 8. Statistical Debugging Statement ~
  • 10. Statement ~ Failure 5.5% – org.joda.time.chrono.BasicGJChronology#<clinit>:58 5.5% – org.joda.time.chrono.ISOChronology#assemble:169 5.5% – org.joda.time.field.UnsupportedDurationField#getInstance:48 5.5% – org.joda.time.DateTimeZone#<clinit>:123 5.5% – org.joda.time.DateTimeZone#<clinit>:130 5.5% – org.joda.time.field.ZeroIsMaxDateTimeField#<init>:46 5.5% – org.joda.time.tz.CachedDateTimeZone#<clinit>:45 5.5% – org.joda.time.chrono.BasicGJChronology#getMonthOfYear:94 5.5% – org.joda.time.chrono.GregorianChronology#getInstance:117 1.4% – org.joda.time.DateTimeZone#getDefaultProvider:425 1.4% – org.joda.time.DateTimeZone#getDefaultProvider:437 1.4% – org.joda.time.DateTimeZone#getDefaultProvider:446 1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:509 1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:521 1.4% – org.joda.time.DateTimeZone#setNameProvider0:491 1.4% – org.joda.time.DateTimeZone#setProvider0:392
  • 11. Statement ~ Failure 5.5% – org.joda.time.chrono.BasicGJChronology#<clinit>:58 5.5% – org.joda.time.chrono.ISOChronology#assemble:169 5.5% – org.joda.time.field.UnsupportedDurationField#getInstance:48 5.5% – org.joda.time.DateTimeZone#<clinit>:123 5.5% – org.joda.time.DateTimeZone#<clinit>:130 5.5% – org.joda.time.field.ZeroIsMaxDateTimeField#<init>:46 5.5% – org.joda.time.tz.CachedDateTimeZone#<clinit>:45 5.5% – org.joda.time.chrono.BasicGJChronology#getMonthOfYear:94 5.5% – org.joda.time.chrono.GregorianChronology#getInstance:117 1.4% – org.joda.time.DateTimeZone#getDefaultProvider:425 1.4% – org.joda.time.DateTimeZone#getDefaultProvider:437 1.4% – org.joda.time.DateTimeZone#getDefaultProvider:446 1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:509 1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:521 1.4% – org.joda.time.DateTimeZone#setNameProvider0:491 1.4% – org.joda.time.DateTimeZone#setProvider0:392
  • 12. Statement ~ Failure 5.5% – org.joda.time.chrono.BasicGJChronology#<clinit>:58 5.5% – org.joda.time.chrono.ISOChronology#assemble:169 5.5% – org.joda.time.field.UnsupportedDurationField#getInstance:48 static– {org.joda.time.DateTimeZone#<clinit>:123 5.5% ... 5.5% – org.joda.time.DateTimeZone#<clinit>:130 5.5% – minSum = 0; long org.joda.time.field.ZeroIsMaxDateTimeField#<init>:46 5.5% – org.joda.time.tz.CachedDateTimeZone#<clinit>:45 for (int i = 0; i < 11; i++) { 5.5% – org.joda.time.chrono.BasicGJChronology#getMonthOfYear:94 long millis = 5.5% – org.joda.time.chrono.GregorianChronology#getInstance:117 1.4% –MIN_DAYS_PER_MONTH_ARRAY[i] * org.joda.time.DateTimeZone#getDefaultProvider:425 1.4% –MILLIS_PER_DAY; org.joda.time.DateTimeZone#getDefaultProvider:437 minSum += millis; 1.4% – org.joda.time.DateTimeZone#getDefaultProvider:446 ... 1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:509 } 1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:521 } 1.4% – org.joda.time.DateTimeZone#setNameProvider0:491 1.4% – org.joda.time.DateTimeZone#setProvider0:392
  • 13. Statement ~ Failure 5.5% – org.joda.time.chrono.BasicGJChronology#<clinit>:58 5.5% – org.joda.time.chrono.ISOChronology#assemble:169 5.5% – org.joda.time.chrono.ISOChronology#assemble:169 5.5% – org.joda.time.field.UnsupportedDurationField#getInstance:48 5.5% – org.joda.time.DateTimeZone#<clinit>:123 protected void assemble(Fields fields) { 5.5% – org.joda.time.DateTimeZone#<clinit>:130 if (getBase().getZone() == DateTimeZone.UTC) { 5.5% – org.joda.time.field.ZeroIsMaxDateTimeField#<init>:46 5.5% Use zero based century and year of century. // – org.joda.time.tz.CachedDateTimeZone#<clinit>:45 fields.centuryOfEra = 5.5% – org.joda.time.chrono.BasicGJChronology#getMonthOfYear:94 5.5% –new DividedDateTimeField( org.joda.time.chrono.GregorianChronology#getInstance:117 1.4% – org.joda.time.DateTimeZone#getDefaultProvider:425 ISOYearOfEraDateTimeField.INSTANCE, 1.4% – org.joda.time.DateTimeZone#getDefaultProvider:437 DateTimeFieldType.centuryOfEra(), 100); 1.4% – org.joda.time.DateTimeZone#getDefaultProvider:446 ... 1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:509 } 1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:521 } 1.4% – org.joda.time.DateTimeZone#setNameProvider0:491 1.4% – org.joda.time.DateTimeZone#setProvider0:392
  • 14. Statement ~ Failure 5.5% – org.joda.time.chrono.BasicGJChronology#<clinit>:58 5.5% – org.joda.time.chrono.ISOChronology#assemble:169 5.5% – org.joda.time.field.UnsupportedDurationField#getInstance:48 5.5% – org.joda.time.DateTimeZone#<clinit>:123 public org.joda.time.DateTimeZone#<clinit>:130 5.5% – static UnsupportedDurationField 5.5% – org.joda.time.field.ZeroIsMaxDateTimeField#<init>:46 5.5% – org.joda.time.tz.CachedDateTimeZone#<clinit>:45 getInstance(DurationFieldType type) { 5.5% – org.joda.time.chrono.BasicGJChronology#getMonthOfYear:94 UnsupportedDurationField field; 5.5% – org.joda.time.chrono.GregorianChronology#getInstance:117 if (cCache == null) { 1.4% – org.joda.time.DateTimeZone#getDefaultProvider:425 cCache = new HashMap(7); 1.4% – org.joda.time.DateTimeZone#getDefaultProvider:437 field = null; 1.4% – org.joda.time.DateTimeZone#getDefaultProvider:446 } else { 1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:509 field = (UnsupportedDurationField) cCache.get(type); 1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:521 } 1.4% – org.joda.time.DateTimeZone#setNameProvider0:491 1.4% – org.joda.time.DateTimeZone#setProvider0:392 ...
  • 15. Statement ~ Failure 5.5% – org.joda.time.chrono.BasicGJChronology#<clinit>:58 5.5% – org.joda.time.chrono.ISOChronology#assemble:169 5.5% – org.joda.time.field.UnsupportedDurationField#getInstance:48 5.5% – org.joda.time.DateTimeZone#<clinit>:123 5.5% – org.joda.time.DateTimeZone#<clinit>:130 5.5% – org.joda.time.field.ZeroIsMaxDateTimeField#<init>:46 5.5% – org.joda.time.tz.CachedDateTimeZone#<clinit>:45 5.5% – org.joda.time.chrono.BasicGJChronology#getMonthOfYear:94 5.5% – org.joda.time.chrono.GregorianChronology#getInstance:117 1.4% – org.joda.time.DateTimeZone#getDefaultProvider:425 1.4% – org.joda.time.DateTimeZone#getDefaultProvider:437 1.4% – org.joda.time.DateTimeZone#getDefaultProvider:446 1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:509 1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:521 1.4% – org.joda.time.DateTimeZone#setNameProvider0:491 1.4% – org.joda.time.DateTimeZone#setProvider0:392
  • 16. Statement ~ Failure 5.5% – org.joda.time.chrono.BasicGJChronology#<clinit>:58 5.5% – org.joda.time.chrono.ISOChronology#assemble:169 5.5% – org.joda.time.field.UnsupportedDurationField#getInstance:48 5.5% – org.joda.time.DateTimeZone#<clinit>:123 5.5% – org.joda.time.DateTimeZone#<clinit>:130 5.5% – org.joda.time.field.ZeroIsMaxDateTimeField#<init>:46 5.5% – org.joda.time.tz.CachedDateTimeZone#<clinit>:45 5.5% – org.joda.time.chrono.BasicGJChronology#getMonthOfYear:94 5.5% – org.joda.time.chrono.GregorianChronology#getInstance:117 1.4% – org.joda.time.DateTimeZone#getDefaultProvider:425 1.4% – org.joda.time.DateTimeZone#getDefaultProvider:437 1.4% – org.joda.time.DateTimeZone#getDefaultProvider:446 1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:509 1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:521 1.4% – org.joda.time.DateTimeZone#setNameProvider0:491 1.4% – org.joda.time.DateTimeZone#setProvider0:392
  • 17. Statement ~ Failure 5.5% – org.joda.time.chrono.BasicGJChronology#<clinit>:58 5.5% – org.joda.time.chrono.ISOChronology#assemble:169 5.5% – org.joda.time.field.UnsupportedDurationField#getInstance:48 5.5% – org.joda.time.DateTimeZone#<clinit>:123 5.5% – org.joda.time.DateTimeZone#<clinit>:130 5.5% – org.joda.time.field.ZeroIsMaxDateTimeField#<init>:46 5.5% – org.joda.time.tz.CachedDateTimeZone#<clinit>:45 5.5% – org.joda.time.chrono.BasicGJChronology#getMonthOfYear:94 5.5% – org.joda.time.chrono.GregorianChronology#getInstance:117 1.4% – org.joda.time.DateTimeZone#getDefaultProvider:425 1.4% – org.joda.time.DateTimeZone#getDefaultProvider:437 1.4% – org.joda.time.DateTimeZone#getDefaultProvider:446 1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:509 1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:521 1.4% – org.joda.time.DateTimeZone#setNameProvider0:491 1.4% – org.joda.time.DateTimeZone#setProvider0:392
  • 18. Statement ~ Failure 5.5% – org.joda.time.chrono.BasicGJChronology#<clinit>:58 5.5% – org.joda.time.chrono.ISOChronology#assemble:169 5.5% – org.joda.time.field.UnsupportedDurationField#getInstance:48 5.5% – org.joda.time.DateTimeZone#<clinit>:123 5.5% – org.joda.time.DateTimeZone#<clinit>:130 5.5% – org.joda.time.field.ZeroIsMaxDateTimeField#<init>:46 5.5% – org.joda.time.tz.CachedDateTimeZone#<clinit>:45 5.5% – org.joda.time.chrono.BasicGJChronology#getMonthOfYear:94 5.5% – org.joda.time.chrono.GregorianChronology#getInstance:117 1.4% – org.joda.time.DateTimeZone#getDefaultProvider:425 1.4% – org.joda.time.DateTimeZone#getDefaultProvider:437 1.4% – org.joda.time.DateTimeZone#getDefaultProvider:446 1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:509 1.4% – org.joda.time.DateTimeZone#getDefaultNameProvider:521 1.4% – org.joda.time.DateTimeZone#setNameProvider0:491 1.4% – org.joda.time.DateTimeZone#setProvider0:392
  • 19. Statement ~ Failure 0 %0 %0 % 0 %0 %0 % 0 %0 %0 % 0 %0 %0 % 6 % BasicGJChronology#<clinit>:58 0 %0 % 0 %0 % 0 % 0 % 0 % 0 % 0 %0 % 0 %0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 6 % ISOChronology#assemble:169 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 6 % UnsupportedDurationField#getInstance:48 0 % 0 % 0 % 0 % 0 % 1 % 1 % 1 % 1 % 6 % DateTimeZone#<clinit>:123 1 % 1 % 1 % 1 % 6 % DateTimeZone#<clinit>:130 1 % 1 % 1 % 1 % 6 % ZeroIsMaxDateTimeField#<init>:46 1 % 1 % 1 % 1 % 6 % CachedDateTimeZone#<clinit>:45 1 % 1 % 1 %1 %1 % 6 % 6 % BasicGJChronology#getMonthOfYear:94 ... GregorianChronology#getInstance:117
  • 22. Two Issues 1. Many weak correlations
  • 23. Two Issues 1. Many weak correlations 2. Only location
  • 24. Two Issues and two solutions 1. Many weak correlations 2. Only location
  • 25. Two Issues and two solutions 1. Many weak correlations – strengthen correlations 2. Only location
  • 26. Two Issues and two solutions 1. Many weak correlations – strengthen correlations 2. Only location – provide explanations
  • 27. Two Issues and two solutions 1. Many weak correlations – strengthen correlations 2. Only location – provide explanations BugEx
  • 28. Two Issues and two solutions 1. Many weak correlations – strengthen correlations 2. Only location – provide explanations BugEx
  • 29. Test Case Generation Statement ~
  • 30. Test Case Generation Statement ~
  • 31. Test Case Generation stronger! Statement ~
  • 32. Test Case Generation stronger! Statement ~
  • 33. Test Case Generation directed stronger! Statement ~
  • 34. Joda Time Brazilian Date public void testBrazil() { LocalDate date = new LocalDate(2009, 10, 18); DateTimeZone dtz = DateTimeZone.forID("America/Sao_Paulo"); Interval interval = date.toInterval(dtz); }
  • 35. Statistical Debugging 0 % 0 %0 % 0 % 0 %0 % 6 % 0 % 0 % 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 6 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 6 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 1 % 1 % 1 % 1 % 6 % 1 % 1 % 1 % 1 % 6 % 1 % 1 % 1 % 1 % 6 % 1 % 1 % 1 % 1 % 6 % 1 % 1 %1 %1 %1 % 6 % 6 %
  • 36. Statistical Debugging 0 % 0 %0 % 0 % 0 %0 % 6 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % … 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 6 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 6 % 0 % T F 0 % 0 % 0 % 0 % 1 % 1 % 1 % 1 % 6 % 1 % 1 % 1 % 1 % 6 % T F T F 1 % 1 % 1 % 1 % 6 % 1 % 1 % … … … … 1 % 1 % 6 % 1 % 1 %1 %1 %1 % 6 % 6 %
  • 37. Statistical Debugging 0 % 0 %0 % 0 % 0 %0 % 6 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % … 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 6 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 6 % 0 % T F 0 % 0 % 0 % 0 % 1 % 1 % 1 % 1 % 6 % 1 % 1 % 1 % 1 % 6 % T F T F 1 % 1 % 1 % 1 % 6 % 1 % 1 % … … … … 1 % 1 % 6 % 1 % 1 %1 %1 %1 % 6 % 6 %
  • 38. Directed Generation 0 % 0 %0 % 0 % 0 %0 % 6 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % … 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 6 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 6 % 0 % T F 0 % 0 % 0 % 0 % 1 % 1 % 1 % 1 % 6 % 1 % 1 % 1 % 1 % 6 % T F T F 1 % 1 % 1 % 1 % 6 % 1 % 1 % … … … … 1 % 1 % 6 % 1 % 1 %1 %1 %1 % 6 % 6 %
  • 39. Directed Generation 0 % 0 %0 % 0 % 0 %0 % 6 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % … 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 6 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 6 % 0 % T F 0 % 0 % 0 % 0 % 1 % 1 % 1 % 1 % 6 % 1 % 1 % 1 % 1 % 6 % T F T F 1 % 1 % 1 % 1 % 6 % 1 % 1 % … … … … 1 % 1 % 6 % 1 % 1 %1 %1 %1 % 6 % 6 %
  • 40. Directed Generation 0 %0 %0 % 0 %0 %0 % 0 % 0 %0 %0 % 0 % 0 % 0 % 0 % 0 %0 % 0 %0 % … 0 % 0 % 0 % 0 % 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 %0 % 11 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 6 % 0 % 0 % 0 % 0 % T F 0 % 0 % 1 % 1 % 1 % 1 % 6 % 1 % 1 % 1 % 1 % 6 % 1 % T F T F 1 % 1 % 1 % 6 % 1 % 1 % 1 % … … … … 1 % 6 % 1 % 1 % 1 % 1 % 1 % 6 % 6 % 6 %
  • 41. Directed Generation 0 %0 %0 % 0 %0 %0 % 0 % 0 %0 %0 % 0 % 0 % 0 % 0 % 0 %0 % 0 %0 % … 0 % 0 % 0 % 0 % 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 %0 % 11 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 6 % 0 % 0 % 0 % 0 % T F 0 % 0 % 1 % 1 % 1 % 1 % 6 % 1 % 1 % 1 % 1 % 6 % 1 % T F T F 1 % 1 % 1 % 6 % 1 % 1 % 1 % … … … … 1 % 6 % 1 % 1 % 1 % 1 % 1 % 6 % 6 % 6 %
  • 42. Directed Generation 0 %0 %0 % 0 %0 %0 % 0 %0 %0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 %0 % … 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 16 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % T F 1 % 1 % 1 % 5 % 1 % 1 % 1 % 1 % 1 % 5 % 1 % 1 % T F T F 1 % 1 % 1 % 5 % 1 % 1 % 1 % 5 % 1 % … … … … 1 % 1 % 1 % 1 % 5 % 5 % 5 % 5 %
  • 43. Directed Generation 0 %0 %0 % 0 %0 %0 % 0 %0 %0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 %0 % … 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 16 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % T F 1 % 1 % 1 % 5 % 1 % 1 % 1 % 1 % 1 % 5 % 1 % 1 % T F T F 1 % 1 % 1 % 5 % 1 % 1 % 1 % 5 % 1 % … … … … 1 % 1 % 1 % 1 % 5 % 5 % 5 % 5 %
  • 44. Directed Generation 0 %0 %0 % 0 %0 %0 % 0 %0 %0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 %0 % … 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 16 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % T F 1 % 1 % 1 % 5 % 1 % 1 % 1 % 1 % 1 % 5 % 1 % 1 % T F T F 1 % 1 % 1 % 5 % 1 % 1 % 1 % 5 % 1 % … … … … 1 % 1 % 1 % 1 % 5 % 5 % 5 % 5 %
  • 45. Directed Generation 0 %0 %0 % 0 %0 %0 % 0 %0 %0 % 0 % 0 % 0 %0 % 0 % 0 % 0 % 0 % … 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 17 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % T F 0 % 1 % 1 % 1 % 3 % 1 % 1 % 1 % 6 % 1 % 1 % 1 % 1 % T F T F 1 % 6 % 1 % 1 % 1 % 6 % 1 % 1 % … … … … 1 % 1 % 6 % 1 % 1 % 1 % 6 % 6 % 6 %
  • 46. Directed Generation 0 %0 %0 % 0 %0 %0 % 0 %0 %0 % 0 % 0 % 0 %0 % 0 % 0 % 0 % 0 % … 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 17 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % T F 0 % 1 % 1 % 1 % 3 % 1 % 1 % 1 % 6 % 1 % 1 % 1 % 1 % T F T F 1 % 6 % 1 % 1 % 1 % 6 % 1 % 1 % … … … … 1 % 1 % 6 % 1 % 1 % 1 % 6 % 6 % 6 %
  • 47. Directed Generation 0 %0 %0 % 0 %0 %0 % 0 % 0 %0 %0 % 0 %0 % 0 % 0 % 0 % 0 % 0 %0 % … 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 19 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % T F 1 % 1 % 1 % 1 % 1 % 1 % 1 % 1 % 5 % 1 % 1 % 1 % T F T F 1 % 1 % 5 % 1 % 1 % 1 % 5 % 1 % … … … … 1 % 1 % 1 % 5 % 1 % 1 % 5 % 5 % 5 %
  • 48. Directed Generation 0 %0 %0 % 0 %0 %0 % 0 % 0 %0 %0 % 0 % 0 % 0 % 0 % 0 %0 % … 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % T F 0 % 0 % 0 % 0 % 0 % 0 % 37 % 1 % 1 % 1 % 1 % 1 % 1 % 1 % T F T F 1 % 1 % 1 % 1 % 1 % 1 % … … … … 1 % 1 % 2 % 1 % 2 % 1 %1 % 2 % 1 %1 % 2 % 2 % 2 % 1 % 2 % 2 %
  • 49. Directed Generation … T F T F T F … … … … 99.9 % DateTimeZone#getOffsetFromLocal:864
  • 50. Statement ~ Failure 0.01% org.joda.time.chrono.BasicGJChronology#<clinit>:58 99.9% – org.joda.time.DateTimeZone#getOffsetFromLocal:864 0.01% – org.joda.time.chrono.ISOChronology#assemble:169 0.01% – org.joda.time.field.UnsupportedDurationField#getInstance:48 0.01% – org.joda.time.DateTimeZone#<clinit>:123 0.01% – org.joda.time.DateTimeZone#<clinit>:130 0.01% – org.joda.time.field.ZeroIsMaxDateTimeField#<init>:46 // if the offsets differ, we must be 0.01% – org.joda.time.tz.CachedDateTimeZone#<clinit>:45 0.01% – org.joda.time.chrono.BasicGJChronology#getMonthOfYear:94 // near a DST boundary 5.5% – org.joda.time.chrono.GregorianChronology#getInstance:117 if (offsetLocal != offsetAdjusted) { 0.001% – org.joda.time.DateTimeZone#getDefaultProvider:425 … 0.001% – org.joda.time.DateTimeZone#getDefaultProvider:437 0.001% – org.joda.time.DateTimeZone#getDefaultProvider:446 } 0.001% – org.joda.time.DateTimeZone#getDefaultNameProvider:509 0.001% – org.joda.time.DateTimeZone#getDefaultNameProvider:521 0.001% – org.joda.time.DateTimeZone#setNameProvider0:491 0.001% – org.joda.time.DateTimeZone#setProvider0:392
  • 51. Statement ~ Failure 0.01% org.joda.time.chrono.BasicGJChronology#<clinit>:58 99.9% – org.joda.time.DateTimeZone#getOffsetFromLocal:864 0.01% – org.joda.time.chrono.ISOChronology#assemble:169 0.01% – org.joda.time.field.UnsupportedDurationField#getInstance:48 0.01% – org.joda.time.DateTimeZone#<clinit>:123 0.01% – org.joda.time.DateTimeZone#<clinit>:130 0.01% – org.joda.time.field.ZeroIsMaxDateTimeField#<init>:46 // if the offsets differ, we must be 0.01% – org.joda.time.tz.CachedDateTimeZone#<clinit>:45 0.01% – org.joda.time.chrono.BasicGJChronology#getMonthOfYear:94 // near a DST boundary – failure condition! 5.5% – org.joda.time.chrono.GregorianChronology#getInstance:117 if (offsetLocal != offsetAdjusted) { 0.001% – org.joda.time.DateTimeZone#getDefaultProvider:425 … 0.001% – org.joda.time.DateTimeZone#getDefaultProvider:437 0.001% – org.joda.time.DateTimeZone#getDefaultProvider:446 } 0.001% – org.joda.time.DateTimeZone#getDefaultNameProvider:509 0.001% – org.joda.time.DateTimeZone#getDefaultNameProvider:521 0.001% – org.joda.time.DateTimeZone#setNameProvider0:491 0.001% – org.joda.time.DateTimeZone#setProvider0:392
  • 52. Two Issues and two solutions 1. Many weak correlations – strengthen correlations 2. Only location – provide explanations BugEx
  • 53. Two Issues and two solutions 1. Many weak correlations – strengthen correlations 2. Only location – provide explanations BugEx
  • 54. Directed Generation 0 %0 %0 % 0 %0 %0 % 0 % 0 %0 %0 % 0 % 0 % 0 % 0 % 0 %0 % … 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % T F 0 % 0 % 0 % 0 % 0 % 0 % 37 % 1 % 1 % 1 % 1 % 1 % 1 % 1 % T F T F 1 % 1 % 1 % 1 % 1 % 1 % … … … … 1 % 1 % 2 % 1 % 2 % 1 %1 % 2 % 1 %1 % 2 % 2 % 2 % 1 % 2 % 2 %
  • 55. Directed Generation 0 %0 %0 % 0 %0 %0 % 0 % 0 %0 %0 % 0 % 0 % 0 % 0 % 0 %0 % … 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 %0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % 0 % T F 0 % 0 % 0 % 0 % 0 % 0 % 37 % 1 % 1 % 1 % Arbitrary runtime features 1 % 1 % 1 % 1 % T F T F 1 % 1 % 1 % 1 % 1 % 1 % … … … … 1 % 1 % 2 % 1 % 2 % 1 %1 % 2 % 1 %1 % 2 % 2 % 2 % 1 % 2 % 2 %
  • 56. Directed Generation … T F • Branches Arbitrary runtime features T F T F … … … …
  • 57. Directed Generation … T F • Branches Arbitrary runtime features • State predicates T F T F … … … …
  • 58. Directed Generation … T F • Branches Arbitrary runtime features • State predicates T F T F • Thread schedules … … … …
  • 59. Directed Generation … T F • Branches Arbitrary runtime features • State predicates T F T F • Thread schedules • Def-use pairs … … … …
  • 60. Directed Generation … T F • Branches Arbitrary runtime features • State predicates T F T F • Thread schedules • Def-use pairs … … … … • and more…
  • 61. Directed Generation … T F • Branches Arbitrary runtime features • State predicates T F T F • Thread schedules • Def-use pairs … … … … • and more…
  • 62. State Predicates • Encode features of objects: attribute | inspector <|>|≤|≥|=|≠ attribute | inspector | constant
  • 63. State Predicates • Encode features of objects: attribute | inspector <|>|≤|≥|=|≠ attribute | inspector | constant • e.g. “shape.area() ≥ 0” or “square.width = square.height”
  • 64. Base64 Lookup public void test() { byte[] byteArray = { -125, -10, 64 }; Base64.isArrayByteBase64(byteArray); }
  • 65. Base64 Lookup public void test() { byte[] byteArray = { -125, -10, 64 }; Base64.isArrayByteBase64(byteArray); }
  • 66. Base64 Lookup public void test() { byte[] byteArray = { -125, -10, 64 }; Base64.isArrayByteBase64(byteArray); }
  • 67. Base64 Lookup public void test() { byte[] byteArray = { -125, -10, 64 }; Base64.isArrayByteBase64(byteArray); } arrayOctect.length() == 3
  • 68. Base64 Lookup public void test() { byte[] byteArray = { -125, -10, 64 }; Base64.isArrayByteBase64(byteArray); } arrayOctect.length() == 3 octect <= 0
  • 69. Base64 Lookup public void test() { byte[] byteArray = { -125, -10, 64 }; Base64.isArrayByteBase64(byteArray); } octect <= 0
  • 70. Base64 Lookup public void test() { byte[] byteArray = { -125, -10, 64 }; Base64.isArrayByteBase64(byteArray); } octect <= 0 base64Alphabet[octect]
  • 71. Quantitative Results Branches Predicates
  • 72. Quantitative Results Branches Predicates
  • 73. Quantitative Results Branches Predicates Brazilian Date bug 2,380 s 1 13,55 s 25 Base64 Lookup bug 38 s 1 737 s 2 Sparse Iterator bug 216 s 8 10,267 s 9 Base64 Decoder bug 214 s 1 1,339 s 23 Western Hemisphere bug 8,422 s 7 30,937 s 9 Vending Machine bug 19 s 1 56 s 1 Parse French Date bug 1,577 s 15 n/a n/a
  • 74. Quantitative Results Branches Predicates Brazilian Date bug 2,380 s 1 13,55 s 25 Base64 Lookup bug 38 s 1 737 s 2 Sparse Iterator bug 216 s 8 10,267 s 9 Base64 Decoder bug 214 s 1 1,339 s 23 Western Hemisphere bug 8,422 s 7 30,937 s 9 Vending Machine bug 19 s 1 56 s 1 Parse French Date bug 1,577 s 15 n/a n/a
  • 75. Quantitative Results Branches Predicates Brazilian Date bug 2,380 s 1 13,55 s 25 Base64 Lookup bug 38 s 1 737 s 2 Sparse Iterator bug 216 s 8 10,267 s 9 Base64 Decoder bug 214 s 1 1,339 s 23 Western Hemisphere bug 8,422 s 7 30,937 s 9 Vending Machine bug 19 s 1 56 s 1 Parse French Date bug 1,577 s 15 n/a n/a
  • 76. Quantitative Results Branches Predicates Brazilian Date bug 2,380 s 1 13,55 s 25 Base64 Lookup bug 38 s 1 737 s 2 Sparse Iterator bug 216 s 8 10,267 s 9 Base64 Decoder bug 214 s 1 1,339 s 23 Western Hemisphere bug 8,422 s 7 30,937 s 9 Vending Machine bug 19 s 1 56 s 1 Parse French Date bug 1,577 s 15 n/a n/a
  • 77. Quantitative Results Branches Predicates Brazilian Date bug 2,380 s 1 13,55 s 25 Base64 Lookup bug 38 s 1 737 s 2 Sparse Iterator bug 216 s 8 10,267 s 9 Base64 Decoder bug 214 s 1 1,339 s 23 Western Hemisphere bug 8,422 s 7 30,937 s 9 Vending Machine bug 19 s 1 56 s 1 Parse French Date bug 1,577 s 15 n/a n/a
  • 78. Quantitative Results Branches Predicates Brazilian Date bug 2,380 s 1 13,55 s 25 Base64 Lookup bug 38 s 1 737 s 2 Sparse Iterator bug 216 s 8 10,267 s 9 Base64 Decoder bug 214 s 1 1,339 s 23 Western Hemisphere bug 8,422 s 7 30,937 s 9 Vending Machine bug 19 s 1 56 s 1 Parse French Date bug 1,577 s 15 n/a n/a
  • 79. Quantitative Results Branches Predicates Brazilian Date bug 2,380 s 1 13,55 s 25 Base64 Lookup bug 38 s 1 737 s 2 Sparse Iterator bug 216 s 8 10,267 s 9 Base64 Decoder bug 214 s 1 1,339 s 23 Western Hemisphere bug 8,422 s 7 30,937 s 9 Vending Machine bug 19 s 1 56 s 1 Parse French Date bug 1,577 s 15 n/a n/a
  • 80. Qualitative Results Branches Predicates • Correctbug Brazilian Date results after2,380seconds 13,55 s 25 20 s 1 in six out of seven cases Base64 Lookup bug 38 s 1 737 s 2 Sparse Iterator bug 216 s 8 10,267 s 9 Base64 Decoder bug 214 s 1 1,339 s 23 Western Hemisphere bug 8,422 s 7 30,937 s 9 Vending Machine bug 19 s 1 56 s 1 Parse French Date bug 1,577 s 15 n/a n/a
  • 81. Qualitative Results Branches Predicates • Correctbug Brazilian Date results after2,380seconds 13,55 s 25 20 s 1 in six out of seven cases Base64 Lookup bug 38 s 1 737 s 2 • Sparse Iterator bug effort 216 s No additional 8 10,267 s 9 Base64 Decoder bug 214 s 1 1,339 s 23 Western Hemisphere bug 8,422 s 7 30,937 s 9 Vending Machine bug 19 s 1 56 s 1 Parse French Date bug 1,577 s 15 n/a n/a
  • 82. Qualitative Results Branches Predicates • Correctbug Brazilian Date results after2,380seconds 13,55 s 25 20 s 1 in six out of seven cases Base64 Lookup bug 38 s 1 737 s 2 • Sparse Iterator bug effort 216 s No additional 8 10,267 s 9 • Base64 Decoder bug of branchess reported Small number 214 1 1,339 s 23 Western Hemisphere bug 8,422 s 7 30,937 s 9 Vending Machine bug 19 s 1 56 s 1 Parse French Date bug 1,577 s 15 n/a n/a
  • 83. Qualitative Results Branches Predicates • Correctbug Brazilian Date results after2,380seconds 13,55 s 25 20 s 1 in six out of seven cases Base64 Lookup bug 38 s 1 737 s 2 • Sparse Iterator bug effort 216 s No additional 8 10,267 s 9 • Base64 Decoder bug of branchess reported Small number 214 1 1,339 s 23 • Directly leads to failure19 s 1 Western Hemisphere bug 8,422 s 7 Vending Machine bug cause 30,937 s 56 s 9 1 in six out of seven cases Parse French Date bug 1,577 s 15 n/a n/a
  • 84. Future Work • More runtime features
  • 85. Future Work • More runtime features • Improve test case generation
  • 86. Future Work • More runtime features • Improve test case generation • Large-scale quantitative evaluation
  • 87. Future Work • More runtime features • Improve test case generation • Large-scale quantitative evaluation • User study (like seen yesterday)
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 94.
  • 95. Comparing Branches Statistical BugEx Debugging
  • 96. Comparing Branches Statistical BugEx Debugging
  • 97. Comparing Branches Statistical BugEx Debugging Brazilian Date bug 2,380 s 1 25,223 s 24 Base64 Lookup bug 38 s 1 512 s 17 Sparse Iterator bug 216 s 8 1901 s 14 Base64 Decoder bug 214 s 1 496 s 51 Western Hemisphere bug 8,422 s 7 25,341 s 28 Vending Machine bug 19 s 1 n/a n/a Parse French Date bug 1,577 s 15 25,542 s 26
  • 98. Comparing Branches Statistical BugEx Debugging Brazilian Date bug 2,380 s 1 25,223 s 24 Base64 Lookup bug 38 s 1 512 s 17 Sparse Iterator bug 216 s 8 1901 s 14 Base64 Decoder bug 214 s 1 496 s 51 Western Hemisphere bug 8,422 s 7 25,341 s 28 Vending Machine bug 19 s 1 n/a n/a Parse French Date bug 1,577 s 15 25,542 s 26
  • 99. Comparing Branches Statistical BugEx Debugging Brazilian Date bug 2,380 s 1 25,223 s 24 Base64 Lookup bug 38 s 1 512 s 17 Sparse Iterator bug 216 s 8 1901 s 14 Base64 Decoder bug 214 s 1 496 s 51 Western Hemisphere bug 8,422 s 7 25,341 s 28 Vending Machine bug 19 s 1 n/a n/a Parse French Date bug 1,577 s 15 25,542 s 26
  • 100. Comparing Branches Statistical BugEx Debugging Brazilian Date bug 2,380 s 1 25,223 s 24 Base64 Lookup bug 38 s 1 512 s 17 Sparse Iterator bug 216 s 8 1901 s 14 Base64 Decoder bug 214 s 1 496 s 51 Western Hemisphere bug 8,422 s 7 25,341 s 28 Vending Machine bug 19 s 1 n/a n/a Parse French Date bug 1,577 s 15 25,542 s 26
  • 101. Comparing Branches Statistical BugEx Debugging Brazilian Date bug 2,380 s 1 25,223 s 24 Base64 Lookup bug 38 s 1 512 s 17 Sparse Iterator bug 216 s 8 1901 s 14 Base64 Decoder bug 214 s 1 496 s 51 Western Hemisphere bug 8,422 s 7 25,341 s 28 Vending Machine bug 19 s 1 n/a n/a Parse French Date bug 1,577 s 15 25,542 s 26
  • 102. Comparing Branches Statistical BugEx Debugging Brazilian Date bug 2,380 s 1 25,223 s 24 Base64 Lookup bug 38 s 1 512 s 17 Sparse Iterator bug 216 s 8 1901 s 14 Base64 Decoder bug 214 s 1 496 s 51 Western Hemisphere bug 8,422 s 7 25,341 s 28 Vending Machine bug 19 s 1 n/a n/a Parse French Date bug 1,577 s 15 25,542 s 26
  • 103. Comparing Branches Statistical BugEx Debugging Brazilian Date bug 2,380 s 1 25,223 s 24 Base64 Lookup bug 38 s 1 512 s 17 Sparse Iterator bug 216 s 8 1901 s 14 Base64 Decoder bug 214 s 1 496 s 51 Western Hemisphere bug 8,422 s 7 25,341 s 28 Vending Machine bug 19 s 1 n/a n/a Parse French Date bug 1,577 s 15 25,542 s 26
  • 105. Joda Time 5.2% Brazilian Date Test 94.8% 23.7% 3,497 Tests 76.3%
  • 106. Commons Codec 1.7% Base64 Lookup Test 98.3% 14.2% 185 Tests 85.8%

Notes de l'éditeur

  1. Hello and Welcome my talk on How Test Case Generation isolates Failure Causes\nMy name is Jeremias R&amp;#xF6;&amp;#xDF;ler and this work was conducted together with Gordon Fraser, Andreas Zeller and Alex Orso\nThis is about automated debugging. So lets just start off with an example.\n
  2. Joda Time is a Date and Time library and a drop-in replacement for the default date and time api that ships with Java. It contained a bug that we named the Brazilian Date Bug, since it only manifests on a particular date in the Brazilian Time Zone. And what you see here is the test that reproduces the failure:\nYou create the specific date and time zone and than transform the date to an time interval that represents the 24 hours of that date in the Brazilian time zone. And if you execute this code: boom, your program crashes. Now, as a developer, what do you do?\n
  3. Well, you know there is this field called statistical debugging that is concerned with providing the developer with a defect location. The first ones in the field were Jones, Harrold and Stasko with their tarantula tool.\n
  4. And Liblit and colleagues improved this by focusing on predicate values.\n
  5. But since then, much has been done and so our implementation bases on the work from Rui Abreu and colleagues.\n
  6. And this is how Statistical Debugging works in a nutshell. You take a number of passing and failing executions, and you correlate them to for instance statements in the code to find the faulty ones. So what you do is, you count how many times a statement was executed that resulted in a success and how many times it was executed that resulted in a failure. The intuition is that the more often a statement was executed during a failing execution, and the less often during a passing one, more probable it is that the statement contains the defect that causes the failure. It has been shown to work well using a benchmark with thousands of test cases.\n
  7. And this is how Statistical Debugging works in a nutshell. You take a number of passing and failing executions, and you correlate them to for instance statements in the code to find the faulty ones. So what you do is, you count how many times a statement was executed that resulted in a success and how many times it was executed that resulted in a failure. The intuition is that the more often a statement was executed during a failing execution, and the less often during a passing one, more probable it is that the statement contains the defect that causes the failure. It has been shown to work well using a benchmark with thousands of test cases.\n
  8. And this is how Statistical Debugging works in a nutshell. You take a number of passing and failing executions, and you correlate them to for instance statements in the code to find the faulty ones. So what you do is, you count how many times a statement was executed that resulted in a success and how many times it was executed that resulted in a failure. The intuition is that the more often a statement was executed during a failing execution, and the less often during a passing one, more probable it is that the statement contains the defect that causes the failure. It has been shown to work well using a benchmark with thousands of test cases.\n
  9. So you crank out statistical debugging and apply it to the problem. And this is what you get: A long list of statements with their corresponding probability to contain the defect. In practice, this means that a developer would manually have to sift through that list to try to spot the defect.\n
  10. So you crank out statistical debugging and apply it to the problem. And this is what you get: A long list of statements with their corresponding probability to contain the defect. In practice, this means that a developer would manually have to sift through that list to try to spot the defect.\n
  11. So lets actually do the developers work and inspect some of the results. So this is some static initialization code. To me this doesn&amp;#x2019;t look very suspicious but then there is also no explanation provided what would make that code suspicious. So hmm, I don&amp;#x2019;t know. Maybe lets look at the second result.\n
  12. Now this looks like a place where the fields are assembled. Probably also some kind of initialization. Again this doesn&amp;#x2019;t look very suspicious. But again, I don&amp;#x2019;t really know. Maybe let&amp;#x2019;s have a look at the next result.\n
  13. This creates an instance of an UnsupportedOperationField. This sounds as it could have to do something with the failure. But when I look at the code, again this is an initialization of a cache. Hmm, without an explanation, this also doesn&amp;#x2019;t look very suspicious, but who knows?\n
  14. And in this fashion you would continue ... \n
  15. ... to go through the code ...\n
  16. ... until you loose interest.\n
  17. And this is what the probability distribution looks like on a pie chart. As you can see, there is no clearly probable location for the defect and the results quickly vanish into the long tail.\n
  18. This is an instance of a problem that already has been described by Parnin and Orso.\n
  19. So in summary, I think that statistical debugging actually is a very good idea. But in its current flour it comes with two issues: it produces a long list of results with weak correlations and it provides only the location, without context or explanation why that location would be correlated to the failure.\nAnd this is the contribution of our work: we remedy both issues. We strengthen the correlations, reducing the number of correlated locations in the process. And we not only provide a location but an explanation of the defect to the developer. Now lets focus on the first point for a moment: strengthening the correlations.\n
  20. So in summary, I think that statistical debugging actually is a very good idea. But in its current flour it comes with two issues: it produces a long list of results with weak correlations and it provides only the location, without context or explanation why that location would be correlated to the failure.\nAnd this is the contribution of our work: we remedy both issues. We strengthen the correlations, reducing the number of correlated locations in the process. And we not only provide a location but an explanation of the defect to the developer. Now lets focus on the first point for a moment: strengthening the correlations.\n
  21. So in summary, I think that statistical debugging actually is a very good idea. But in its current flour it comes with two issues: it produces a long list of results with weak correlations and it provides only the location, without context or explanation why that location would be correlated to the failure.\nAnd this is the contribution of our work: we remedy both issues. We strengthen the correlations, reducing the number of correlated locations in the process. And we not only provide a location but an explanation of the defect to the developer. Now lets focus on the first point for a moment: strengthening the correlations.\n
  22. So in summary, I think that statistical debugging actually is a very good idea. But in its current flour it comes with two issues: it produces a long list of results with weak correlations and it provides only the location, without context or explanation why that location would be correlated to the failure.\nAnd this is the contribution of our work: we remedy both issues. We strengthen the correlations, reducing the number of correlated locations in the process. And we not only provide a location but an explanation of the defect to the developer. Now lets focus on the first point for a moment: strengthening the correlations.\n
  23. So in summary, I think that statistical debugging actually is a very good idea. But in its current flour it comes with two issues: it produces a long list of results with weak correlations and it provides only the location, without context or explanation why that location would be correlated to the failure.\nAnd this is the contribution of our work: we remedy both issues. We strengthen the correlations, reducing the number of correlated locations in the process. And we not only provide a location but an explanation of the defect to the developer. Now lets focus on the first point for a moment: strengthening the correlations.\n
  24. So in summary, I think that statistical debugging actually is a very good idea. But in its current flour it comes with two issues: it produces a long list of results with weak correlations and it provides only the location, without context or explanation why that location would be correlated to the failure.\nAnd this is the contribution of our work: we remedy both issues. We strengthen the correlations, reducing the number of correlated locations in the process. And we not only provide a location but an explanation of the defect to the developer. Now lets focus on the first point for a moment: strengthening the correlations.\n
  25. So in summary, I think that statistical debugging actually is a very good idea. But in its current flour it comes with two issues: it produces a long list of results with weak correlations and it provides only the location, without context or explanation why that location would be correlated to the failure.\nAnd this is the contribution of our work: we remedy both issues. We strengthen the correlations, reducing the number of correlated locations in the process. And we not only provide a location but an explanation of the defect to the developer. Now lets focus on the first point for a moment: strengthening the correlations.\n
  26. So in summary, I think that statistical debugging actually is a very good idea. But in its current flour it comes with two issues: it produces a long list of results with weak correlations and it provides only the location, without context or explanation why that location would be correlated to the failure.\nAnd this is the contribution of our work: we remedy both issues. We strengthen the correlations, reducing the number of correlated locations in the process. And we not only provide a location but an explanation of the defect to the developer. Now lets focus on the first point for a moment: strengthening the correlations.\n
  27. How do we do this? Well the underlying problem simply is that the problematic code is not executed enough to create a strong correlation. So what we do is to simply add more executions. And this indeed makes the correlation stronger.\n
  28. How do we do this? Well the underlying problem simply is that the problematic code is not executed enough to create a strong correlation. So what we do is to simply add more executions. And this indeed makes the correlation stronger.\n
  29. How do we do this? Well the underlying problem simply is that the problematic code is not executed enough to create a strong correlation. So what we do is to simply add more executions. And this indeed makes the correlation stronger.\n
  30. How do we do this? Well the underlying problem simply is that the problematic code is not executed enough to create a strong correlation. So what we do is to simply add more executions. And this indeed makes the correlation stronger.\n
  31. How do we do this? Well the underlying problem simply is that the problematic code is not executed enough to create a strong correlation. So what we do is to simply add more executions. And this indeed makes the correlation stronger.\n
  32. How do we do this? Well the underlying problem simply is that the problematic code is not executed enough to create a strong correlation. So what we do is to simply add more executions. And this indeed makes the correlation stronger.\n
  33. How do we do this? Well the underlying problem simply is that the problematic code is not executed enough to create a strong correlation. So what we do is to simply add more executions. And this indeed makes the correlation stronger.\n
  34. How do we do this? Well the underlying problem simply is that the problematic code is not executed enough to create a strong correlation. So what we do is to simply add more executions. And this indeed makes the correlation stronger.\n
  35. How do we do this? Well the underlying problem simply is that the problematic code is not executed enough to create a strong correlation. So what we do is to simply add more executions. And this indeed makes the correlation stronger.\n
  36. How do we do this? Well the underlying problem simply is that the problematic code is not executed enough to create a strong correlation. So what we do is to simply add more executions. And this indeed makes the correlation stronger.\n
  37. How do we do this? Well the underlying problem simply is that the problematic code is not executed enough to create a strong correlation. So what we do is to simply add more executions. And this indeed makes the correlation stronger.\n
  38. But we even can do better than this: we implement a feedback loop that highly increases effectiveness AND efficiency. So how does this feedback loop work?\n
  39. But we even can do better than this: we implement a feedback loop that highly increases effectiveness AND efficiency. So how does this feedback loop work?\n
  40. Considering the test case I showed you earlier...\n
  41. that gives you this probability distribution. Now lets see what we can do about: So to now consider some of the branches in the program. And taking one of these branches, some these executions failed and some passed. But there is no clear picture, which is why we don&amp;#x2019;t get a consistent result.\n
  42. that gives you this probability distribution. Now lets see what we can do about: So to now consider some of the branches in the program. And taking one of these branches, some these executions failed and some passed. But there is no clear picture, which is why we don&amp;#x2019;t get a consistent result.\n
  43. that gives you this probability distribution. Now lets see what we can do about: So to now consider some of the branches in the program. And taking one of these branches, some these executions failed and some passed. But there is no clear picture, which is why we don&amp;#x2019;t get a consistent result.\n
  44. that gives you this probability distribution. Now lets see what we can do about: So to now consider some of the branches in the program. And taking one of these branches, some these executions failed and some passed. But there is no clear picture, which is why we don&amp;#x2019;t get a consistent result.\n
  45. that gives you this probability distribution. Now lets see what we can do about: So to now consider some of the branches in the program. And taking one of these branches, some these executions failed and some passed. But there is no clear picture, which is why we don&amp;#x2019;t get a consistent result.\n
  46. that gives you this probability distribution. Now lets see what we can do about: So to now consider some of the branches in the program. And taking one of these branches, some these executions failed and some passed. But there is no clear picture, which is why we don&amp;#x2019;t get a consistent result.\n
  47. that gives you this probability distribution. Now lets see what we can do about: So to now consider some of the branches in the program. And taking one of these branches, some these executions failed and some passed. But there is no clear picture, which is why we don&amp;#x2019;t get a consistent result.\n
  48. that gives you this probability distribution. Now lets see what we can do about: So to now consider some of the branches in the program. And taking one of these branches, some these executions failed and some passed. But there is no clear picture, which is why we don&amp;#x2019;t get a consistent result.\n
  49. that gives you this probability distribution. Now lets see what we can do about: So to now consider some of the branches in the program. And taking one of these branches, some these executions failed and some passed. But there is no clear picture, which is why we don&amp;#x2019;t get a consistent result.\n
  50. So now lets focus on one of these branches. Now we try to come up with an additional execution of this branch. And we see that it also fails, so this ...\n
  51. ... increases the correlation with the failure. And getting yet another execution that fails ...\n
  52. ... further increases that correlation. Now lets have a look at another branch.\n
  53. If we generate an additional execution for this one, and it passes.\n
  54. This lessens the correlation with the failure and further increases the correlation of the other branch. And getting yet another passing execution ...\n
  55. ... further decreases probability and increases it for the other branch.\n
  56. So we go on in a fashion like this until ...\n
  57. ... eventually we end up with an probability distribution like this. As you can see: now we get a single branch that is very highly correlated with the defect. And by this I mean like you know VERY highly correlated. And this actually is the result that our tool returns to the developer.\n
  58. So now let&amp;#x2019;s have a look at the result that we get: the single branch that is returned. And going to that part in the code we find that it compares two offsets. And the comment above the code explains what is going on: because the offsets differ, we must be near a DST boundary.\nAnd this already explains the failure: the specific date that we create is a daylight cut day and the cutover time is midnight. So indeed we are near a DST boundary. And the underlying problem is that since we are near a DST boundary, the time interval that starts at midnight starts at a nonexisting time, because the day does not start at midnight - which in turn triggers an internal consistency check.\n
  59. So I said we would remedy both issues. But the explanation that we got was just coincidentally, because we were lucky to find some comments in the code, right?\n
  60. So how else can we provide an explanation?\n
  61. Well, as it turns out, statistical debugging is a very general approach, that not only works with statements or branches, but with ANY runtime features.\n
  62. So if you change the focus from trying to locate the defect and instead try to explain it, we could for instance try to correlate state predicates. Or if we have a concurrent program and the bug is concurrency driven, than we could correlate the thread schedule. Or if the failure is data driven, we could use definition-usage pairs. In fact: you could use ANY runtime feature that you think will help you understand what is going on. So now for an example, let&amp;#x2019;s have a look at state predicates, because this is what we happened to also implement.\n
  63. So if you change the focus from trying to locate the defect and instead try to explain it, we could for instance try to correlate state predicates. Or if we have a concurrent program and the bug is concurrency driven, than we could correlate the thread schedule. Or if the failure is data driven, we could use definition-usage pairs. In fact: you could use ANY runtime feature that you think will help you understand what is going on. So now for an example, let&amp;#x2019;s have a look at state predicates, because this is what we happened to also implement.\n
  64. So if you change the focus from trying to locate the defect and instead try to explain it, we could for instance try to correlate state predicates. Or if we have a concurrent program and the bug is concurrency driven, than we could correlate the thread schedule. Or if the failure is data driven, we could use definition-usage pairs. In fact: you could use ANY runtime feature that you think will help you understand what is going on. So now for an example, let&amp;#x2019;s have a look at state predicates, because this is what we happened to also implement.\n
  65. So if you change the focus from trying to locate the defect and instead try to explain it, we could for instance try to correlate state predicates. Or if we have a concurrent program and the bug is concurrency driven, than we could correlate the thread schedule. Or if the failure is data driven, we could use definition-usage pairs. In fact: you could use ANY runtime feature that you think will help you understand what is going on. So now for an example, let&amp;#x2019;s have a look at state predicates, because this is what we happened to also implement.\n
  66. So if you change the focus from trying to locate the defect and instead try to explain it, we could for instance try to correlate state predicates. Or if we have a concurrent program and the bug is concurrency driven, than we could correlate the thread schedule. Or if the failure is data driven, we could use definition-usage pairs. In fact: you could use ANY runtime feature that you think will help you understand what is going on. So now for an example, let&amp;#x2019;s have a look at state predicates, because this is what we happened to also implement.\n
  67. So if you change the focus from trying to locate the defect and instead try to explain it, we could for instance try to correlate state predicates. Or if we have a concurrent program and the bug is concurrency driven, than we could correlate the thread schedule. Or if the failure is data driven, we could use definition-usage pairs. In fact: you could use ANY runtime feature that you think will help you understand what is going on. So now for an example, let&amp;#x2019;s have a look at state predicates, because this is what we happened to also implement.\n
  68. So first: what is a state predicate? Well, a state predicate encodes the features of an object. So for every object that we find in the state, we create a binary predicate for every attribute and inspector of this object with every other attribute and inspector and constant.\nSo for instance what you might get is something like: the shape area is greater or equal to zero. Or the width of the square equals the height of the square.\n
  69. So first: what is a state predicate? Well, a state predicate encodes the features of an object. So for every object that we find in the state, we create a binary predicate for every attribute and inspector of this object with every other attribute and inspector and constant.\nSo for instance what you might get is something like: the shape area is greater or equal to zero. Or the width of the square equals the height of the square.\n
  70. So first: what is a state predicate? Well, a state predicate encodes the features of an object. So for every object that we find in the state, we create a binary predicate for every attribute and inspector of this object with every other attribute and inspector and constant.\nSo for instance what you might get is something like: the shape area is greater or equal to zero. Or the width of the square equals the height of the square.\n
  71. And to show you a practical result, lets consider a bug that appeared in the Apache Commons Codec library. So these two lines of code trigger a failure. What you do is to create a small byteArray and simply ask whether this array is valid base64. And executing these, the program crashes.\n
  72. Now what does bugex return as a result for predicates? Well first it says that the input array always has length 3. This actually is an artifact from a limitation in the underlying test case generation technique. Actually, in the mean time this should be fixed, but anyway. And the second result we get is that the program crashes whenever octect, which is the name of the parameter of a method, is smaller or equal to zero.\n
  73. Now what does bugex return as a result for predicates? Well first it says that the input array always has length 3. This actually is an artifact from a limitation in the underlying test case generation technique. Actually, in the mean time this should be fixed, but anyway. And the second result we get is that the program crashes whenever octect, which is the name of the parameter of a method, is smaller or equal to zero.\n
  74. And if we look in the code, we find that the reason why the program fails is that the input is used unchecked to lookup its base64 equivalence from an array. And of course when that input is negative, the program is bound to fail.\n
  75. And if we look in the code, we find that the reason why the program fails is that the input is used unchecked to lookup its base64 equivalence from an array. And of course when that input is negative, the program is bound to fail.\n
  76. And if we look in the code, we find that the reason why the program fails is that the input is used unchecked to lookup its base64 equivalence from an array. And of course when that input is negative, the program is bound to fail.\n
  77. Actually we tried our tool on 7 defects. There are the Brazilian Date bug and the Base64 Lookup bug that I already showed. Then there&amp;#x2019;s the Sparse Iterator bug of the Apache Commons Math library and it is due to an inconsistency in the way that the state of &amp;#x201C;no more elements&amp;#x201D; is represented internally. And all 8 branches returned relate to this inconsistency, and the two predicates that are returned pinpoint that problem. Then there is another bug from Apache Commons Codec, where a buffer is handled incorrectly. And again, the single branch returned pinpoints this problem. Then we have another bug from Joda Time, where one of the 7 branches that was returned is the place where the bug was actually fixed and the 9 predicates contain the very reason of the failure as given in the bug report. Than we have a small artificial example where the problem was pinpointed by the branch returned. And then there&amp;#x2019;s the last example, also from the Joda Time library, where our approach fails. The reason why it fails is due to the oracle problem: in the test, a valid french date is created that is wrongly classified as invalid by the API. And our test generation technique happily generated lots and lots of input that failed with the same exception. But of course few of those were valid french dates, so we actually did not reproduce the problem when we made the program crash, which is why it didn&amp;#x2019;t work.\nSo if you look at the time needed, you first think that this is way to much time and its unpractical for reality, right. So first I want to mention that in ALL cases, we were faster than plain statistical debugging.\n
  78. Actually we tried our tool on 7 defects. There are the Brazilian Date bug and the Base64 Lookup bug that I already showed. Then there&amp;#x2019;s the Sparse Iterator bug of the Apache Commons Math library and it is due to an inconsistency in the way that the state of &amp;#x201C;no more elements&amp;#x201D; is represented internally. And all 8 branches returned relate to this inconsistency, and the two predicates that are returned pinpoint that problem. Then there is another bug from Apache Commons Codec, where a buffer is handled incorrectly. And again, the single branch returned pinpoints this problem. Then we have another bug from Joda Time, where one of the 7 branches that was returned is the place where the bug was actually fixed and the 9 predicates contain the very reason of the failure as given in the bug report. Than we have a small artificial example where the problem was pinpointed by the branch returned. And then there&amp;#x2019;s the last example, also from the Joda Time library, where our approach fails. The reason why it fails is due to the oracle problem: in the test, a valid french date is created that is wrongly classified as invalid by the API. And our test generation technique happily generated lots and lots of input that failed with the same exception. But of course few of those were valid french dates, so we actually did not reproduce the problem when we made the program crash, which is why it didn&amp;#x2019;t work.\nSo if you look at the time needed, you first think that this is way to much time and its unpractical for reality, right. So first I want to mention that in ALL cases, we were faster than plain statistical debugging.\n
  79. Actually we tried our tool on 7 defects. There are the Brazilian Date bug and the Base64 Lookup bug that I already showed. Then there&amp;#x2019;s the Sparse Iterator bug of the Apache Commons Math library and it is due to an inconsistency in the way that the state of &amp;#x201C;no more elements&amp;#x201D; is represented internally. And all 8 branches returned relate to this inconsistency, and the two predicates that are returned pinpoint that problem. Then there is another bug from Apache Commons Codec, where a buffer is handled incorrectly. And again, the single branch returned pinpoints this problem. Then we have another bug from Joda Time, where one of the 7 branches that was returned is the place where the bug was actually fixed and the 9 predicates contain the very reason of the failure as given in the bug report. Than we have a small artificial example where the problem was pinpointed by the branch returned. And then there&amp;#x2019;s the last example, also from the Joda Time library, where our approach fails. The reason why it fails is due to the oracle problem: in the test, a valid french date is created that is wrongly classified as invalid by the API. And our test generation technique happily generated lots and lots of input that failed with the same exception. But of course few of those were valid french dates, so we actually did not reproduce the problem when we made the program crash, which is why it didn&amp;#x2019;t work.\nSo if you look at the time needed, you first think that this is way to much time and its unpractical for reality, right. So first I want to mention that in ALL cases, we were faster than plain statistical debugging.\n
  80. Actually we tried our tool on 7 defects. There are the Brazilian Date bug and the Base64 Lookup bug that I already showed. Then there&amp;#x2019;s the Sparse Iterator bug of the Apache Commons Math library and it is due to an inconsistency in the way that the state of &amp;#x201C;no more elements&amp;#x201D; is represented internally. And all 8 branches returned relate to this inconsistency, and the two predicates that are returned pinpoint that problem. Then there is another bug from Apache Commons Codec, where a buffer is handled incorrectly. And again, the single branch returned pinpoints this problem. Then we have another bug from Joda Time, where one of the 7 branches that was returned is the place where the bug was actually fixed and the 9 predicates contain the very reason of the failure as given in the bug report. Than we have a small artificial example where the problem was pinpointed by the branch returned. And then there&amp;#x2019;s the last example, also from the Joda Time library, where our approach fails. The reason why it fails is due to the oracle problem: in the test, a valid french date is created that is wrongly classified as invalid by the API. And our test generation technique happily generated lots and lots of input that failed with the same exception. But of course few of those were valid french dates, so we actually did not reproduce the problem when we made the program crash, which is why it didn&amp;#x2019;t work.\nSo if you look at the time needed, you first think that this is way to much time and its unpractical for reality, right. So first I want to mention that in ALL cases, we were faster than plain statistical debugging.\n
  81. Actually we tried our tool on 7 defects. There are the Brazilian Date bug and the Base64 Lookup bug that I already showed. Then there&amp;#x2019;s the Sparse Iterator bug of the Apache Commons Math library and it is due to an inconsistency in the way that the state of &amp;#x201C;no more elements&amp;#x201D; is represented internally. And all 8 branches returned relate to this inconsistency, and the two predicates that are returned pinpoint that problem. Then there is another bug from Apache Commons Codec, where a buffer is handled incorrectly. And again, the single branch returned pinpoints this problem. Then we have another bug from Joda Time, where one of the 7 branches that was returned is the place where the bug was actually fixed and the 9 predicates contain the very reason of the failure as given in the bug report. Than we have a small artificial example where the problem was pinpointed by the branch returned. And then there&amp;#x2019;s the last example, also from the Joda Time library, where our approach fails. The reason why it fails is due to the oracle problem: in the test, a valid french date is created that is wrongly classified as invalid by the API. And our test generation technique happily generated lots and lots of input that failed with the same exception. But of course few of those were valid french dates, so we actually did not reproduce the problem when we made the program crash, which is why it didn&amp;#x2019;t work.\nSo if you look at the time needed, you first think that this is way to much time and its unpractical for reality, right. So first I want to mention that in ALL cases, we were faster than plain statistical debugging.\n
  82. Actually we tried our tool on 7 defects. There are the Brazilian Date bug and the Base64 Lookup bug that I already showed. Then there&amp;#x2019;s the Sparse Iterator bug of the Apache Commons Math library and it is due to an inconsistency in the way that the state of &amp;#x201C;no more elements&amp;#x201D; is represented internally. And all 8 branches returned relate to this inconsistency, and the two predicates that are returned pinpoint that problem. Then there is another bug from Apache Commons Codec, where a buffer is handled incorrectly. And again, the single branch returned pinpoints this problem. Then we have another bug from Joda Time, where one of the 7 branches that was returned is the place where the bug was actually fixed and the 9 predicates contain the very reason of the failure as given in the bug report. Than we have a small artificial example where the problem was pinpointed by the branch returned. And then there&amp;#x2019;s the last example, also from the Joda Time library, where our approach fails. The reason why it fails is due to the oracle problem: in the test, a valid french date is created that is wrongly classified as invalid by the API. And our test generation technique happily generated lots and lots of input that failed with the same exception. But of course few of those were valid french dates, so we actually did not reproduce the problem when we made the program crash, which is why it didn&amp;#x2019;t work.\nSo if you look at the time needed, you first think that this is way to much time and its unpractical for reality, right. So first I want to mention that in ALL cases, we were faster than plain statistical debugging.\n
  83. Actually we tried our tool on 7 defects. There are the Brazilian Date bug and the Base64 Lookup bug that I already showed. Then there&amp;#x2019;s the Sparse Iterator bug of the Apache Commons Math library and it is due to an inconsistency in the way that the state of &amp;#x201C;no more elements&amp;#x201D; is represented internally. And all 8 branches returned relate to this inconsistency, and the two predicates that are returned pinpoint that problem. Then there is another bug from Apache Commons Codec, where a buffer is handled incorrectly. And again, the single branch returned pinpoints this problem. Then we have another bug from Joda Time, where one of the 7 branches that was returned is the place where the bug was actually fixed and the 9 predicates contain the very reason of the failure as given in the bug report. Than we have a small artificial example where the problem was pinpointed by the branch returned. And then there&amp;#x2019;s the last example, also from the Joda Time library, where our approach fails. The reason why it fails is due to the oracle problem: in the test, a valid french date is created that is wrongly classified as invalid by the API. And our test generation technique happily generated lots and lots of input that failed with the same exception. But of course few of those were valid french dates, so we actually did not reproduce the problem when we made the program crash, which is why it didn&amp;#x2019;t work.\nSo if you look at the time needed, you first think that this is way to much time and its unpractical for reality, right. So first I want to mention that in ALL cases, we were faster than plain statistical debugging.\n
  84. Actually we tried our tool on 7 defects. There are the Brazilian Date bug and the Base64 Lookup bug that I already showed. Then there&amp;#x2019;s the Sparse Iterator bug of the Apache Commons Math library and it is due to an inconsistency in the way that the state of &amp;#x201C;no more elements&amp;#x201D; is represented internally. And all 8 branches returned relate to this inconsistency, and the two predicates that are returned pinpoint that problem. Then there is another bug from Apache Commons Codec, where a buffer is handled incorrectly. And again, the single branch returned pinpoints this problem. Then we have another bug from Joda Time, where one of the 7 branches that was returned is the place where the bug was actually fixed and the 9 predicates contain the very reason of the failure as given in the bug report. Than we have a small artificial example where the problem was pinpointed by the branch returned. And then there&amp;#x2019;s the last example, also from the Joda Time library, where our approach fails. The reason why it fails is due to the oracle problem: in the test, a valid french date is created that is wrongly classified as invalid by the API. And our test generation technique happily generated lots and lots of input that failed with the same exception. But of course few of those were valid french dates, so we actually did not reproduce the problem when we made the program crash, which is why it didn&amp;#x2019;t work.\nSo if you look at the time needed, you first think that this is way to much time and its unpractical for reality, right. So first I want to mention that in ALL cases, we were faster than plain statistical debugging.\n
  85. However, it turns out that it is just our implementation that keeps on running to really make sure we didn&amp;#x2019;t concentrate on the wrong runtime features and therefore keeps on trying to generate other executions. However, for 6 out of 7 cases, the final results for branches were already ready after 20 seconds. So if you use a life preview of the results, the developer can practically start to investigate the interesting branches right away. And also, I want to stress the fact, that this technique comes without any additional effort whatsoever. All you need is a failing test, and the approach can start. So you could for instance set it up to run on a build server right after a test of the continuous build crashes. Anyway, as long as computation time is cheaper than human time, this approach makes sense to use, right.\nAnd second interesting aspect is that the results are easy to review because only a small number of facts are highly correlated. So even in the case that not all predicates for instance where meaningful, reviewing only a handful of predicates is fast and easy and far different from receiving a list of all predicates ordered by probability. In four defects, it reports even a single branch. \nAnd I want to stress that in 6 out of 7 times, these results pinpointed the problem and give you the cause of the defect with no additional effort on the side of the developer.\n
  86. However, it turns out that it is just our implementation that keeps on running to really make sure we didn&amp;#x2019;t concentrate on the wrong runtime features and therefore keeps on trying to generate other executions. However, for 6 out of 7 cases, the final results for branches were already ready after 20 seconds. So if you use a life preview of the results, the developer can practically start to investigate the interesting branches right away. And also, I want to stress the fact, that this technique comes without any additional effort whatsoever. All you need is a failing test, and the approach can start. So you could for instance set it up to run on a build server right after a test of the continuous build crashes. Anyway, as long as computation time is cheaper than human time, this approach makes sense to use, right.\nAnd second interesting aspect is that the results are easy to review because only a small number of facts are highly correlated. So even in the case that not all predicates for instance where meaningful, reviewing only a handful of predicates is fast and easy and far different from receiving a list of all predicates ordered by probability. In four defects, it reports even a single branch. \nAnd I want to stress that in 6 out of 7 times, these results pinpointed the problem and give you the cause of the defect with no additional effort on the side of the developer.\n
  87. However, it turns out that it is just our implementation that keeps on running to really make sure we didn&amp;#x2019;t concentrate on the wrong runtime features and therefore keeps on trying to generate other executions. However, for 6 out of 7 cases, the final results for branches were already ready after 20 seconds. So if you use a life preview of the results, the developer can practically start to investigate the interesting branches right away. And also, I want to stress the fact, that this technique comes without any additional effort whatsoever. All you need is a failing test, and the approach can start. So you could for instance set it up to run on a build server right after a test of the continuous build crashes. Anyway, as long as computation time is cheaper than human time, this approach makes sense to use, right.\nAnd second interesting aspect is that the results are easy to review because only a small number of facts are highly correlated. So even in the case that not all predicates for instance where meaningful, reviewing only a handful of predicates is fast and easy and far different from receiving a list of all predicates ordered by probability. In four defects, it reports even a single branch. \nAnd I want to stress that in 6 out of 7 times, these results pinpointed the problem and give you the cause of the defect with no additional effort on the side of the developer.\n
  88. However, it turns out that it is just our implementation that keeps on running to really make sure we didn&amp;#x2019;t concentrate on the wrong runtime features and therefore keeps on trying to generate other executions. However, for 6 out of 7 cases, the final results for branches were already ready after 20 seconds. So if you use a life preview of the results, the developer can practically start to investigate the interesting branches right away. And also, I want to stress the fact, that this technique comes without any additional effort whatsoever. All you need is a failing test, and the approach can start. So you could for instance set it up to run on a build server right after a test of the continuous build crashes. Anyway, as long as computation time is cheaper than human time, this approach makes sense to use, right.\nAnd second interesting aspect is that the results are easy to review because only a small number of facts are highly correlated. So even in the case that not all predicates for instance where meaningful, reviewing only a handful of predicates is fast and easy and far different from receiving a list of all predicates ordered by probability. In four defects, it reports even a single branch. \nAnd I want to stress that in 6 out of 7 times, these results pinpointed the problem and give you the cause of the defect with no additional effort on the side of the developer.\n
  89. So these are current results. Now what next? For future work, we plan to implement the approach for more runtime features to help the developer understand other kinds of defects.\nAlso, the main limitations of the approach stem from the underlying test case generation approach. So there we want to both improve the underlying technique and perhaps try to incorporate other such techniques.\nAlso, as you saw, we applied the approach only to seven defects. These results are encouraging, but honestly this is only a start. To get a much deeper insight, we need to do a much larger evaluation with much more examples. And we are currently working on that.\nAnd last but not least, since the goal is to help a developer understand the bug, ultimately we will perform some kind of user study like the ones you saw in yesterdays &amp;#x201C;empirical studies&amp;#x201D; session.\n
  90. So these are current results. Now what next? For future work, we plan to implement the approach for more runtime features to help the developer understand other kinds of defects.\nAlso, the main limitations of the approach stem from the underlying test case generation approach. So there we want to both improve the underlying technique and perhaps try to incorporate other such techniques.\nAlso, as you saw, we applied the approach only to seven defects. These results are encouraging, but honestly this is only a start. To get a much deeper insight, we need to do a much larger evaluation with much more examples. And we are currently working on that.\nAnd last but not least, since the goal is to help a developer understand the bug, ultimately we will perform some kind of user study like the ones you saw in yesterdays &amp;#x201C;empirical studies&amp;#x201D; session.\n
  91. So these are current results. Now what next? For future work, we plan to implement the approach for more runtime features to help the developer understand other kinds of defects.\nAlso, the main limitations of the approach stem from the underlying test case generation approach. So there we want to both improve the underlying technique and perhaps try to incorporate other such techniques.\nAlso, as you saw, we applied the approach only to seven defects. These results are encouraging, but honestly this is only a start. To get a much deeper insight, we need to do a much larger evaluation with much more examples. And we are currently working on that.\nAnd last but not least, since the goal is to help a developer understand the bug, ultimately we will perform some kind of user study like the ones you saw in yesterdays &amp;#x201C;empirical studies&amp;#x201D; session.\n
  92. So these are current results. Now what next? For future work, we plan to implement the approach for more runtime features to help the developer understand other kinds of defects.\nAlso, the main limitations of the approach stem from the underlying test case generation approach. So there we want to both improve the underlying technique and perhaps try to incorporate other such techniques.\nAlso, as you saw, we applied the approach only to seven defects. These results are encouraging, but honestly this is only a start. To get a much deeper insight, we need to do a much larger evaluation with much more examples. And we are currently working on that.\nAnd last but not least, since the goal is to help a developer understand the bug, ultimately we will perform some kind of user study like the ones you saw in yesterdays &amp;#x201C;empirical studies&amp;#x201D; session.\n
  93. To sum up my talk, I introduced Statistical Debugging and showed you what it looks like when applied to a real live example. Which shows its limitations. But I also showed that statistical debugging is not inherently flawed, but rather makes some assumptions that are not met by reality. how our approach performs in comparison, and then gave an intuition of how our approach works.\nThank you for listening and now I will gladly try to answer your questions.\n
  94. To sum up my talk, I introduced Statistical Debugging and showed you what it looks like when applied to a real live example. Which shows its limitations. But I also showed that statistical debugging is not inherently flawed, but rather makes some assumptions that are not met by reality. how our approach performs in comparison, and then gave an intuition of how our approach works.\nThank you for listening and now I will gladly try to answer your questions.\n
  95. To sum up my talk, I introduced Statistical Debugging and showed you what it looks like when applied to a real live example. Which shows its limitations. But I also showed that statistical debugging is not inherently flawed, but rather makes some assumptions that are not met by reality. how our approach performs in comparison, and then gave an intuition of how our approach works.\nThank you for listening and now I will gladly try to answer your questions.\n
  96. To sum up my talk, I introduced Statistical Debugging and showed you what it looks like when applied to a real live example. Which shows its limitations. But I also showed that statistical debugging is not inherently flawed, but rather makes some assumptions that are not met by reality. how our approach performs in comparison, and then gave an intuition of how our approach works.\nThank you for listening and now I will gladly try to answer your questions.\n
  97. To sum up my talk, I introduced Statistical Debugging and showed you what it looks like when applied to a real live example. Which shows its limitations. But I also showed that statistical debugging is not inherently flawed, but rather makes some assumptions that are not met by reality. how our approach performs in comparison, and then gave an intuition of how our approach works.\nThank you for listening and now I will gladly try to answer your questions.\n
  98. \n
  99. Actually we tried our tool on 7 defects. There are the Brazilian Date bug and the Base64 Lookup bug that I already showed. Then there&amp;#x2019;s the Sparse Iterator bug of the Apache Commons Math library and it is due to an inconsistency in the way that the state of &amp;#x201C;no more elements&amp;#x201D; is represented internally. And all 8 branches returned relate to this inconsistency, and the two predicates that are returned pinpoint that problem. Then there is another bug from Apache Commons Codec, where a buffer is handled incorrectly. And again, the single branch returned pinpoints this problem. Then we have another bug from Joda Time, where one of the 7 branches that was returned is the place where the bug was actually fixed and the 9 predicates contain the very reason of the failure as given in the bug report. Than we have a small artificial example where the problem was pinpointed by the branch returned. And then there&amp;#x2019;s the last example, also from the Joda Time library, where our approach fails. The reason why it fails is due to the oracle problem: in the test, a valid french date is created that is wrongly classified as invalid by the API. And our test generation technique happily generated lots and lots of input that failed with the same exception. But of course few of those were valid french dates, so we actually did not reproduce the problem when we made the program crash, which is why it didn&amp;#x2019;t work.\nSo if you look at the time needed, you first think that this is way to much time and its unpractical for reality, right.\n
  100. Actually we tried our tool on 7 defects. There are the Brazilian Date bug and the Base64 Lookup bug that I already showed. Then there&amp;#x2019;s the Sparse Iterator bug of the Apache Commons Math library and it is due to an inconsistency in the way that the state of &amp;#x201C;no more elements&amp;#x201D; is represented internally. And all 8 branches returned relate to this inconsistency, and the two predicates that are returned pinpoint that problem. Then there is another bug from Apache Commons Codec, where a buffer is handled incorrectly. And again, the single branch returned pinpoints this problem. Then we have another bug from Joda Time, where one of the 7 branches that was returned is the place where the bug was actually fixed and the 9 predicates contain the very reason of the failure as given in the bug report. Than we have a small artificial example where the problem was pinpointed by the branch returned. And then there&amp;#x2019;s the last example, also from the Joda Time library, where our approach fails. The reason why it fails is due to the oracle problem: in the test, a valid french date is created that is wrongly classified as invalid by the API. And our test generation technique happily generated lots and lots of input that failed with the same exception. But of course few of those were valid french dates, so we actually did not reproduce the problem when we made the program crash, which is why it didn&amp;#x2019;t work.\nSo if you look at the time needed, you first think that this is way to much time and its unpractical for reality, right.\n
  101. Actually we tried our tool on 7 defects. There are the Brazilian Date bug and the Base64 Lookup bug that I already showed. Then there&amp;#x2019;s the Sparse Iterator bug of the Apache Commons Math library and it is due to an inconsistency in the way that the state of &amp;#x201C;no more elements&amp;#x201D; is represented internally. And all 8 branches returned relate to this inconsistency, and the two predicates that are returned pinpoint that problem. Then there is another bug from Apache Commons Codec, where a buffer is handled incorrectly. And again, the single branch returned pinpoints this problem. Then we have another bug from Joda Time, where one of the 7 branches that was returned is the place where the bug was actually fixed and the 9 predicates contain the very reason of the failure as given in the bug report. Than we have a small artificial example where the problem was pinpointed by the branch returned. And then there&amp;#x2019;s the last example, also from the Joda Time library, where our approach fails. The reason why it fails is due to the oracle problem: in the test, a valid french date is created that is wrongly classified as invalid by the API. And our test generation technique happily generated lots and lots of input that failed with the same exception. But of course few of those were valid french dates, so we actually did not reproduce the problem when we made the program crash, which is why it didn&amp;#x2019;t work.\nSo if you look at the time needed, you first think that this is way to much time and its unpractical for reality, right.\n
  102. Actually we tried our tool on 7 defects. There are the Brazilian Date bug and the Base64 Lookup bug that I already showed. Then there&amp;#x2019;s the Sparse Iterator bug of the Apache Commons Math library and it is due to an inconsistency in the way that the state of &amp;#x201C;no more elements&amp;#x201D; is represented internally. And all 8 branches returned relate to this inconsistency, and the two predicates that are returned pinpoint that problem. Then there is another bug from Apache Commons Codec, where a buffer is handled incorrectly. And again, the single branch returned pinpoints this problem. Then we have another bug from Joda Time, where one of the 7 branches that was returned is the place where the bug was actually fixed and the 9 predicates contain the very reason of the failure as given in the bug report. Than we have a small artificial example where the problem was pinpointed by the branch returned. And then there&amp;#x2019;s the last example, also from the Joda Time library, where our approach fails. The reason why it fails is due to the oracle problem: in the test, a valid french date is created that is wrongly classified as invalid by the API. And our test generation technique happily generated lots and lots of input that failed with the same exception. But of course few of those were valid french dates, so we actually did not reproduce the problem when we made the program crash, which is why it didn&amp;#x2019;t work.\nSo if you look at the time needed, you first think that this is way to much time and its unpractical for reality, right.\n
  103. Actually we tried our tool on 7 defects. There are the Brazilian Date bug and the Base64 Lookup bug that I already showed. Then there&amp;#x2019;s the Sparse Iterator bug of the Apache Commons Math library and it is due to an inconsistency in the way that the state of &amp;#x201C;no more elements&amp;#x201D; is represented internally. And all 8 branches returned relate to this inconsistency, and the two predicates that are returned pinpoint that problem. Then there is another bug from Apache Commons Codec, where a buffer is handled incorrectly. And again, the single branch returned pinpoints this problem. Then we have another bug from Joda Time, where one of the 7 branches that was returned is the place where the bug was actually fixed and the 9 predicates contain the very reason of the failure as given in the bug report. Than we have a small artificial example where the problem was pinpointed by the branch returned. And then there&amp;#x2019;s the last example, also from the Joda Time library, where our approach fails. The reason why it fails is due to the oracle problem: in the test, a valid french date is created that is wrongly classified as invalid by the API. And our test generation technique happily generated lots and lots of input that failed with the same exception. But of course few of those were valid french dates, so we actually did not reproduce the problem when we made the program crash, which is why it didn&amp;#x2019;t work.\nSo if you look at the time needed, you first think that this is way to much time and its unpractical for reality, right.\n
  104. Actually we tried our tool on 7 defects. There are the Brazilian Date bug and the Base64 Lookup bug that I already showed. Then there&amp;#x2019;s the Sparse Iterator bug of the Apache Commons Math library and it is due to an inconsistency in the way that the state of &amp;#x201C;no more elements&amp;#x201D; is represented internally. And all 8 branches returned relate to this inconsistency, and the two predicates that are returned pinpoint that problem. Then there is another bug from Apache Commons Codec, where a buffer is handled incorrectly. And again, the single branch returned pinpoints this problem. Then we have another bug from Joda Time, where one of the 7 branches that was returned is the place where the bug was actually fixed and the 9 predicates contain the very reason of the failure as given in the bug report. Than we have a small artificial example where the problem was pinpointed by the branch returned. And then there&amp;#x2019;s the last example, also from the Joda Time library, where our approach fails. The reason why it fails is due to the oracle problem: in the test, a valid french date is created that is wrongly classified as invalid by the API. And our test generation technique happily generated lots and lots of input that failed with the same exception. But of course few of those were valid french dates, so we actually did not reproduce the problem when we made the program crash, which is why it didn&amp;#x2019;t work.\nSo if you look at the time needed, you first think that this is way to much time and its unpractical for reality, right.\n
  105. Actually we tried our tool on 7 defects. There are the Brazilian Date bug and the Base64 Lookup bug that I already showed. Then there&amp;#x2019;s the Sparse Iterator bug of the Apache Commons Math library and it is due to an inconsistency in the way that the state of &amp;#x201C;no more elements&amp;#x201D; is represented internally. And all 8 branches returned relate to this inconsistency, and the two predicates that are returned pinpoint that problem. Then there is another bug from Apache Commons Codec, where a buffer is handled incorrectly. And again, the single branch returned pinpoints this problem. Then we have another bug from Joda Time, where one of the 7 branches that was returned is the place where the bug was actually fixed and the 9 predicates contain the very reason of the failure as given in the bug report. Than we have a small artificial example where the problem was pinpointed by the branch returned. And then there&amp;#x2019;s the last example, also from the Joda Time library, where our approach fails. The reason why it fails is due to the oracle problem: in the test, a valid french date is created that is wrongly classified as invalid by the API. And our test generation technique happily generated lots and lots of input that failed with the same exception. But of course few of those were valid french dates, so we actually did not reproduce the problem when we made the program crash, which is why it didn&amp;#x2019;t work.\nSo if you look at the time needed, you first think that this is way to much time and its unpractical for reality, right.\n
  106. Actually we tried our tool on 7 defects. There are the Brazilian Date bug and the Base64 Lookup bug that I already showed. Then there&amp;#x2019;s the Sparse Iterator bug of the Apache Commons Math library and it is due to an inconsistency in the way that the state of &amp;#x201C;no more elements&amp;#x201D; is represented internally. And all 8 branches returned relate to this inconsistency, and the two predicates that are returned pinpoint that problem. Then there is another bug from Apache Commons Codec, where a buffer is handled incorrectly. And again, the single branch returned pinpoints this problem. Then we have another bug from Joda Time, where one of the 7 branches that was returned is the place where the bug was actually fixed and the 9 predicates contain the very reason of the failure as given in the bug report. Than we have a small artificial example where the problem was pinpointed by the branch returned. And then there&amp;#x2019;s the last example, also from the Joda Time library, where our approach fails. The reason why it fails is due to the oracle problem: in the test, a valid french date is created that is wrongly classified as invalid by the API. And our test generation technique happily generated lots and lots of input that failed with the same exception. But of course few of those were valid french dates, so we actually did not reproduce the problem when we made the program crash, which is why it didn&amp;#x2019;t work.\nSo if you look at the time needed, you first think that this is way to much time and its unpractical for reality, right.\n
  107. Depending on the example, we generate some 10s of thousands of test cases. Now this might sound like a lot. However, as this graph shows, in most cases already after 12 minutes, the final result is ready. Also, for some cases we observed something weird: bugex was faster than executing the code instrumented for regular statistical analysis or even running the bare complete test suite.\n
  108. \n
  109. \n