The shape of chemical compounds is governed by principles of molecular structure which can understood using valence bond theory. The acquired understanding can be used to manipulate chemical compounds to obtain useful products such as plastics. Similarly, the internal shape of software is governed by the principles of source code structure which can be made insightful by the theory of grammars. This has enabled the creation of useful products such as compilers. Grammars for programming languages are complex; two grammar rules can generate an exponential number of source code structures. Programming languages have hundreds of grammar rules. In the context of compiler construction -- one language, one grammar, one compiler -- this complexity is barely manage- able. In the context of IDE construction, refactoring, and reverse engineering it is multiplied by the number of different languages, dialects, versions, embeddings and grammar use cases. The theory of grammars does not provide insight in this complexity. It fails to provide answers to common engineering questions such as: (a) How to efficiently construct grammars? (b) How to assess the quality of grammars? (c) When an erroneous structure is detected, how to relate this effect to its grammatical cause? These common engineering questions imply that grammars are software, thus requiring well-founded engineering principles and practices. The domain and theory of grammarware engineering [1] is un- derdeveloped. This research contributes to this field by developing the scientific framework and tools for understanding, creating, versioning, analyzing, testing, debugging, visualizing, and maintaining grammars.The positions are: Notes:
[1] P. Klint, R. Laemmel and C. Verhoef, Towards an engineering discipline for grammarware, Transaction on Software Engineering and Methodology, Vol. 14, No. 3, July 2005, 331-380.
Software dominates our modern civilization. However, as size, complexity, and lifetime of software in- crease, so does its cost. It is estimated that software maintenance exceeds 80% of the total development costs. Of this, nearly half is spent in program understanding. Two main classes of instruments support program understanding. First, program analysis techniques extract a wealth of information from source code, dynamic program execution, and the development pro- cess itself, such as models, metrics, and proofs of correctness. Secondly, software visualization methods present this information in interactive ways to support the comprehension process using techniques such as graph layouts, diagrams, dense pixel displays, treemaps, glyphs, and timelines. However, a fundamental gap is identifiable between the two: software analysis and visualization are not integrated in ways that effectively and efficiently support the sense-making, reasoning process, and hypothesis forming central to understanding. We argue that this gap is at the center of the limited adoption and success of software visualization methods and, arguably, of some more complex software analysis methods. For software visualization to make a true difference, it has to be centered on answering the questions of its stakeholders, rather than show the data emerging from program analyses. We cast software analysis and visualization in a new framework, inspired by the highly successful visual analytics field. Central to our approach is providing abstractions, methods and tools that enable the stakeholders to effectively and efficiently formulate their questions as directly and as easily as possible, and ways that translate these questions, abstracting away from the raw analysis data, into suitable combinations of analysis and visualization instruments.
Contact us directly for further information and to apply for these two PhD positions.
Fraude and fraudulent business practices are of all times. Legislators, regulators and financial authorities try to create legal frameworks and procedures for early detection and prevention, but they have failed consistently during the last 10-15 years. This proposal will create a unique cooperation between experts in Dutch auditing theory and software engineering researchers specialized in software analysis and domain-specific languages. The grand vision of this proposal is to create auditing services that can perform real-time monitoring of companies in order to fundamentally increase the reliability and transparency of financial systems and supporting IT systems. We start with the design of a meta-model for auditing and create the concepts and techniques to describe, analyze, and maintain specific company models and to automatically generate auditing services from them. These services include intake (establishing a company model based on the mining of available data and source code) and monitoring and checking (comparing actual data with the company's model). Key elements of our approach are the use of software analysis to extract facts from financial reports and source code of IT systems, to link the software with actions in the company's model, and to address global issues on maintenance and evolution of these models. The increased trust that is created by these advanced auditing services is in itself an enabler for software services in general.Contact us directly for further information and to apply for these two PhD positions.