An An#Ab #Abstract ct#In #Inter erpreta-on
- n#
Fr Frame amework#f rk#for#R r#Refact actorin ring# g#
P.#Cousot,#NYU,%ENS,%CNRS,%INRIA R.#Cousot,#ENS,%CNRS,%INRIA F.#Logozzo,#M.#BarneA,#Microso3%Research
The#problem
Refactoring#is#a#very#common#programmer#ac-vity Useful#to#maintain#the#code,#avoid#code#bloats,#etc. Examples:#rename,#reLorder#parameters,#extract#method,#etc. IDEs##guarantee#that#the#refactored#program#is:
- 1. a#syntac-cally#valid#program
- 2. a#seman-cally#equivalent#program
There#is#no#guarantee#about#the#
- 1. Preserva-on#of#the#correctness#proof
- 2. Interac-on#with#the#sta-c#analysis
Example:#extract#method
public'int'Decrement(int'x)' {' ''Contract.Requires(x'>='5);' ''Contract.Ensures(Contract.Result<int>()'>='0);' ' ''while'(x'!='0)'xCC;'' ' ''return'x;' } public'int'Decrement(int'x)' {' ''Contract.Requires(x'>='5);' ''Contract.Ensures(Contract.Result<int>()'>='0);' ' ''x'='NewMethod(x);' ' ''return'x;' }' ' private'static'int'NewMethod(int'x)' {' ''while'(x'!='0)'xCC;' ''' ''return'x;' }
and#the#(modular)#proof?
public'int'Decrement(int'x)' {' ''Contract.Requires(x'>='5);' ''Contract.Ensures(Contract.Result<int>()'>='0);' ' ''while'(x'!='0)'xCC;'' ' ''return'x;' } public'int'Decrement(int'x)' {' ''Contract.Requires(x'>='5);' ''Contract.Ensures(Contract.Result<int>()'>='0);' ' ''x'='NewMethod(x);' ' ''return'x;' }' ' private'static'int'NewMethod(int'x)' {' ''while'(x'!='0)'xCC;' ''' ''return'x;' }
Postcondi-on:#
- k
No#
- verlofw
Possible#
- verlofw
Postcondi-on Viola-on?