рефакторинг - это серия преобразований, сохраняющих корректность, , но рефакторинг может привести к более общему коду, чем исходный
поэтому мы не можем просто утверждать, что преобразование рефакторинга T в программе P имеет одинаковые свойства R до и после рефакторинга, но свойства R 'реорганизованной программы P' должны быть по меньшей мере эквивалентны R
given program P implies R
refactoring transformation T(P) produces P'
where (P' implies R') and (R' is equivalent to or subsumes R')
мы также можем утверждать, что входы и выходы остаются неизменными или эквивалентными
но, следуя вашему примеру, возможно, мы хотим определить преобразование рефакторинга T как 4 кортежа P, I, O, R, где P - исходная программа, I - входные данные и / или предварительные условия, O - выходные данные. и / или постусловие, и R - преобразованная программа, затем утверждают (используя временную логику?), что
P:I -> O
сохраняется до преобразования
T(P) -> R
определяет преобразование, а
R:I -> O
сохраняется после преобразования
моя символическая математика ржавая, но это общее направление
это сделало бы хорошую магистерскую диссертацию, кстати