Thomas Steinmann. Adding Class Support and Global Methods to Polite Smalltalk. Bachelor’s thesis, University of Bern, May 2016. Details.
Polite Smalltalk was created as part of a proposed study about the impact of Sentence Identifier Names on code readability and maintainability. It was based on a Smalltalk environment where it was parsed and compiled to Smalltalk code. Polite syntax was kept very minimal and did not support class or method definitions, even though Smalltalk classes and their methods could be used. In order to create code that is both more readable and very similar to natural language, the goal of this thesis is to extend the grammar and implementation of Polite Smalltalk with class and method definitions, as well as the necessary tools to provide a workspace for writing and executing a complete Polite program. In order to handle these new requirements, the original Polite’s compiler architecture must be improved. The validation of our work shows that several non-trivial programs, each highlighting one aspect of the new functionality, can be written and executed yielding the expected results. Furthermore, arbitrary code can be parsed and evaluated in the Polite Playground with expected features and results.
Rathesan Iyadurai. Parsing Ruby with an Island Parser. Bachelor’s thesis, University of Bern, April 2016. Details.
Ruby is a challenging language to parse because of a large and ambiguous grammar that is not only scarcely documented but subject to change on minor releases. Therefore, third-party Ruby parsers for software analysis tools either translate the standard implementation’s parser code rule for rule or deal with compatibility issues. In this thesis we propose an alternative approach by using the island grammar methodology. Island grammars only extract the structures of interest (islands) with precise rules while skipping over the rest (water). This makes them fitting for quick and robust data extraction for software development tools. We present a parsing expression grammar based island grammar for Ruby that is able to extract classes, modules and methods. As verification we measure precision, recall and error rate of our parser’s output to one generated by the jRuby parser.
Oscar Nierstrasz. The Death of Object-Oriented Programming. In Perdita Stevens and Andrzej Wasowski (Ed.), FASE 2016, LNCS 9633, Springer-Verlag, 2016. Details.
Modern software systems are increasingly long-lived. In order to gracefully evolve these systems as they address new requirements, developers need to navigate effectively between domain concepts and the code that addresses those domains. One of the original promises of object-orientation was that the same object-oriented models would be used throughout requirements analysis, design and implementation. Software systems today however are commonly constructed from a heterogeneous “language soup of mainstream code and dedicated DSLs addressing a variety of application and technical domains. Has object-oriented programming outlived its purpose? In this essay we argue that we need to rethink the original goals of object-orientation and their relevance for modern software development. We propose as a driving maxim, “Programming is Modeling, and explore what this implies for programming languages, tools and environments. In particular, we argue that: (1) source code should serve not only to specify an implementation of a software system, but should encode a queryable and manipulable model of the application and technical domains concerned; (2) IDEs should exploit these domain models to enable inexpensive browsing, querying and analysis by developers; and (3) barriers between the code base, the running application, and the software ecosystem at large need to be broken down, and their connections exploited and monitored to support developers in comprehension and evolution tasks.
Andrea Caracciolo. A Unified Approach to Architecture Conformance Checking. PhD thesis, University of Bern, March 2016. Details.
Architectural decisions can be interpreted as structural and behavioral constraints that must be enforced in order to guarantee overarching qualities in a system. Enforcing those constraints in a fully automated way is often challenging and not well supported by current tools. Current approaches for checking architecture conformance either lack in usability or offer poor options for adaptation. To overcome this problem we analyze the current state of practice and propose an approach based on an extensible, declarative and empirically-grounded specification language. This solution aims at reducing the overall cost of setting up and maintaining an architectural conformance monitoring environment by decoupling the conceptual representation of a user-defined rule from its technical specification prescribed by the underlying analysis tools. By using a declarative language, we are able to write tool-agnostic rules that are simple enough to be understood by untrained stakeholders and, at the same time, can be can be automatically processed by a conformance checking validator. Besides addressing the issue of cost, we also investigate opportunities for increasing the value of conformance results by evaluating a technique which guides developers in removing package cycles. We perform various case studies to show how our approach can be successfully adopted to support truly diverse industrial projects. We also investi- gate the dynamics involved in choosing and adopting a new automated conformance checking solution within an industrial context.
Dominic Sina. TestView Plugin — A Nautilus Plugin to facilitate Unit Testing. Bachelor’s thesis, University of Bern, February 2016. Details.
The purpose of this bachelor project is to improve the Pharo environment by making it more unit test friendly. Instead of writing a new system browser we chose to realize this as a Nautilus plugin since this builds on established parts of the Pharo environment. This plugin includes various functionalities that help with finding and writing unit tests. Furthermore it provides ways to check if a method is untested, to see all tests that have been written for a certain method, to add new tests for existing methods and the ability to view a method and a corresponding test side by side. Before explaining the plugin and its functionalities in more detail we will take a look at various terms surrounding unit testing and analyze the development environments Eclipse and Pharo. They will be compared to each other in how unit test friendly they are. We also discuss opportunities for improvement. The aim of this thesis is to take a closer look at unit testing and in the form of a Nautilus plugin provide an example of how unit testing can be facilitated.