9 research outputs found
Towards sound refactoring in erlang
Erlang is an actor-based programming
language used extensively for building concurrent, reactive
systems that are highly available and suff er minimum
downtime. Such systems are often mission critical, making
system correctness vital. Refactoring is code restructuring
that improves the code but does not change
behaviour. While using automated refactoring tools is
less error-prone than performing refactorings manually,
automated refactoring tools still cannot guarantee that
the refactoring is correct, i.e., program behaviour is preserved.
This leads to lack of trust in automated refactoring
tools. We rst survey solutions to this problem
proposed in the literature. Erlang refactoring tools as
commonly use approximation techniques which do not
guarantee behaviour while some other works propose the
use of formal methodologies. In this work we aim to
develop a formal methodology for refactoring Erlang
code. We study behavioural preorders, with a special focus
on the testing preorder as it seems most suited to
our purpose.peer-reviewe
Refactoring = Substitution + Rewriting
We present an approach to describing refactorings that abstracts away from
particular refactorings to classes of similar transformations, and presents an
implementation of these that works by substitution and subsequent rewriting.
Substitution is language-independent under this approach, while the rewrites
embody language-specific aspects. Intriguingly, it also goes back to work on
API migration by Huiqing Li and the first author, and sets refactoring in that
general context.Comment: 6p
Refactoring = Substitution + Rewriting: Towards Generic, Language-Independent Refactorings
Eelco Visser’s work has always encouraged stepping back from the particular to look at the underlying, conceptual problems.
In that spirit we present an approach to describing refactorings that abstracts away from particular refactorings to classes of similar transformations, and presents an implementation of these that works by substitution and subsequent rewriting.
Substitution is language-independent under this approach, while the rewrites embody language-specific aspects. Intriguingly, it also goes back to work on API migration by Huiqing Li and the first author, and sets refactoring in that general context
Validating Formal Semantics by Property-Based Cross-Testing
To describe the behaviour of programs in a programming language we can define a formal semantics for the language, and formalise it in a proof assistant. From this semantics we can derive the behaviour of each particular program in the language. But there remains the question of validating the formal semantics: have we got the formalisation right?
Our approach is to use property-based cross-testing of formal semantics, which is based on the combination of a number of existing approaches to validation. In particular, we give a concrete implementation of our ideas for a set of formalisations of Erlang and Core Erlang. We describe the adjustments that need to be made to execute these seman- tics, then we present and evaluate property-based testing in the context of cross-checking semantics, including random program generation and counterexample shrinking
Verification and Application of Program Transformations
A programtranszformáciĂł Ă©s a refaktorálás alapvetĹ‘ elemei a szoftverfejlesztĂ©si folyamatnak. A refaktorálást a kezdetektĹ‘l prĂłbálják szoftvereszközökkel támogatni, amelyek megbĂzhatĂłan Ă©s hatĂ©konyan valĂłsĂtják meg a szoftverminĹ‘sĂ©get javĂtĂł, a működĂ©st nem Ă©rintĹ‘ programtranszformáciĂłkat. A statikus elemzĂ©sre alapulĂł hibakeresĂ©s Ă©s a refaktorálási transzformáciĂłk az akadĂ©miában Ă©s a kutatás-fejlesztĂ©sben is nagy Ă©rdeklĹ‘dĂ©sre tartanak számot, ám mĂ©g ennĂ©l is fontosabb a szerepĂĽk a nagy bonyolultságĂş szoftvereket kĂ©szĂtĹ‘ vállalatoknál. Egyre pontosabbak Ă©s megbĂzhatĂłbbak a szoftverfejlesztĂ©st támogatĂł eszközök, de bĹ‘ven van mĂ©g min javĂtani.
A disszertáciĂł olyan definĂciĂłs Ă©s verifikáciĂłs mĂłdszereket tárgyal, amelyekkel megbĂzhatĂłbb Ă©s szĂ©lesebb körben használt programtranszformáciĂłs eszközöket tudunk kĂ©szĂteni. A dolgozat a statikus Ă©s a dinamikus verifikáciĂłt is Ă©rinti. ElsĹ‘kĂ©nt egy Ăşjszerű, tömör leĂrĂł nyelvet mutat be L-attribĂştum grammatikákhoz, amelyet tulajdonságalapĂş tesztelĂ©shez használt vĂ©letlenszerű adatgenerátorra kĂ©pezĂĽnk le. Ehhez egy esettanulmány társul, amely az Erlang programozási nyelv grammatikáját, majd a tesztelĂ©shez valĂł felhasználását mutatja be. A tesztelĂ©s mellett a formális helyessĂ©gbizonyĂtás kĂ©rdĂ©sĂ©t is vizsgáljuk, ehhez bevezetĂĽnk egy refaktorálások leĂrására szolgálĂł nyelvet, amelyben vĂ©grehajthatĂł Ă©s automatikusan bizonyĂthatĂł specifikáciĂłkat tudunk megadni. A nyelv környezetfĂĽggĹ‘ Ă©s feltĂ©teles termátĂráson, stratĂ©giákon Ă©s Ăşgynevezett refaktorálási sĂ©mákon alapszik. VĂ©gĂĽl, de nem utolsĂł sorban a programtranszformáciĂłk egy speciális alkalmazása kerĂĽl bemutatásra, amikor egy refaktorálĂł keretrendszert elĹ‘fordĂtĂłkĂ©nt használunk a feldolgozott programozási nyelv kiterjesztĂ©sĂ©re. UtĂłbbi mĂłdszerrel könnyen implementálhatĂł az Erlang nyelvben a kĂłdmigráciĂł
Quickchecking Refactoring Tools
Refactoring is the transformation of program source code in a way that preserves the behaviour of the program. Many tools exist for automating a number of refactoring steps, but these tools are often poorly tested. We present an automated testing framework based on QuickCheck for testing refactoring tools written for the Erlang programming language