Debugging without Testing

It is so inconceivable to debug a program without testing it that these two words are used nearly interchangeably. Yet we argue that using the concept of relative correctness we can indeed remove a fault from a program and prove that the fault has been removed, by proving that the new program is more correct than the original. This is a departure from the traditional roles of proving and testing methods, whereby static proof methods are applied to a correct program to prove its correctness, and dynamic testing methods are applied to an incorrect program to expose its faults.

[1]  Ali Mili,et al.  On Faults and Faulty Programs , 2013, RAMiCS.

[2]  Lauretta O. Osho,et al.  Axiomatic Basis for Computer Programming , 2013 .

[3]  Harrie de Swart,et al.  Relational Methods in Computer Science , 2003, Lecture Notes in Computer Science.

[4]  Jules Desharnais,et al.  Relational heuristics for the design of deterministic programs , 2004, Acta Informatica.

[5]  Thomas Ball,et al.  Modular and verified automatic program repair , 2012, OOPSLA '12.

[6]  Shuvendu K. Lahiri,et al.  Differential assertion checking , 2013, ESEC/FSE 2013.

[7]  Jules Desharnais,et al.  Relational Mathematics for Relative Correctness , 2015, RAMICS.

[8]  Dawei Qi,et al.  SemFix: Program repair via semantic analysis , 2013, 2013 35th International Conference on Software Engineering (ICSE).

[9]  Sam Blackshear,et al.  Verification modulo versions: towards usable verification , 2014, PLDI.

[10]  Ali Mili,et al.  Correctness and Relative Correctness , 2015, 2015 IEEE/ACM 37th IEEE International Conference on Software Engineering.

[11]  Claire Le Goues,et al.  Automatically finding patches using genetic programming , 2009, 2009 IEEE 31st International Conference on Software Engineering.

[12]  Harlan D. Mills,et al.  Trace: Tennessee Research and CreativeExchange , 2022 .

[13]  Lamia Labed Jilani,et al.  Verifying while loops with invariant relations , 2014, Int. J. Crit. Comput. Based Syst..