9 research outputs found

    Improving program comprehension tools for domain specific languages

    Get PDF
    Dissertação de Mestrado em InformáticaSince the dawn of times, curiosity and necessity to improve the quality of their life, led humans to find means to understand everything surrounding them, aiming at improving it. Whereas the creating abilities of some was growing, the capacity to comprehend of others follow their steps. Disassembling physical objects to comprehend the connections between the pieces in order to understand how they work together is a common human behavior. With the computers arrival, humans felt the necessity of applying the same techniques (disassemble to comprehend) to their programs. Traditionally, these programs are written resorting to general-purpose programming languages. Hence, techniques and artifacts, used to aid on program comprehension, were built to facilitate the work of software programmers on maintaining and improving programs that were developed by others. Generally, these generic languages deal with concepts at a level that the human brain can hardly understand. So understanding programs written in this languages is an hard task, because the distance between the concepts at the program level and the concepts at the problem level is too big. Thus, as in politics, justice, medicine, etc. groups of words are regularly used facilitating the comprehension between people, also in programming, languages that address a specific domain were created. These programming languages raise the abstraction of the program domain, shortening the gap to the concepts of the problem domain. Tools and techniques for program comprehension commonly address the program domain and they took little advantage of the problem domain. In this master’s thesis, the hypothesis that it is easier to comprehend a program when the underlying problem and program domains are known and a bridge between them is established, is assumed. Then, a program comprehension technique for domain specific languages, is conceived, proposed and discussed. The main objective is to take advantage from the large knowledge about the problem domain inherent to the domain specific language, and to improve traditional program comprehension tools that only dealt, until then, with the program domain. This will create connections between both program and problem domains. The final result will show, visually, what happens internally at the program domain level, synchronized with what happens externally, at problem level.Desde o início dos tempos a curiosidade e a necessidade de melhorar a qualidade de vida impeliram o humano a arranjar meios para compreender o que o rodeia com o objectivo de melhorar. À medida que a habilidade de uns foi aumentando, a capacidade de compreensão de outros seguiu-lhe os passos. Desmontar algo físico de modo a compreender as ligações entre as peças e assim perceber como funcionam num todo, é um acto bastante normal dos humanos. Com o advento dos computadores e os programas para ele codificados, o homem sentiu a necessidade de aplicar as mesmas técnicas (desmontar para compreender) ao código desses programas. Tradicionalmente, a codificação de tais programas é feita usando linguagens genéricas de programação. Desde logo técnicas e artefactos que ajudam na compreensão desses programas (nessas linguagens) foram produzidas para auxiliar o trabalho de engenheiros de software que necessitam de manter ou alterar programas previamente construídos por outros. De um modo geral estas linguagens mais genéricas lidam com conceitos a um nível bastante abaixo daquele que o cérebro humano, facilmente, consegue captar. Previsivelmente, compreender programas neste tipo de linguagens é uma tarefa complexa pois a distância entre os conceitos ao nível do programa e os conceitos ao nível do problema (que o programa aborda) é bastante grande. Deste modo, tal como no dia-a-dia foram surgindo nichos como a política, a justiça, a informática, etc. onde grupos de palavras são usadas com maior regularidade para facilitar a compreensão entre as pessoas, também na programação foram surgindo linguagens que focam em domínios específicos, aumentando a abstracção em relação ao nível do programa, aproximando este do nível dos conceitos subjacentes ao problema. Ferramentas e técnicas de compreensão de programas abordam, geralmente, o domínio do programa, tirando pouco partido do domínio do problema. Na presente tese assume-se a hipótese de que será mais fácil compreender um programa quando os domínios do problema e do programa são conhecidos, e entre eles é estabelecida uma ponte de ligação; e parte-se em busca de uma técnica de compreensão de programas para linguagens de domínio específico, baseada em técnicas já conhecidas para linguagens de carácter geral. O objectivo prende-se com aproveitar o conhecimento sobre o domínio do problema e melhorar as ferramentas de compreensão de programas existentes para as linguagens genéricas, de forma a estabelecer ligações entre domínio do programa e domínio do problema. O resultado será mostrar, visualmente, o que acontece internamente ao nível do programa, sincronizadamente com o que acontece externamente ao nível do problema

    Formal verification of an OCCAM-to-FPGA compiler and its generated logic circuits

    Get PDF
    EThOS - Electronic Theses Online ServiceGBUnited Kingdo

    Conversational code-switching among Japanese-English bilinguals who have Japanese background

    Get PDF
    The aim of this study is to investigate the code-switching of native speakers of Japanese in an English-speaking context. The languages involved in code-switching therefore are English and Japanese. This is an instance of communication in the participants\u27 first language, in a setting where the speakers\u27 second language is dominant. The research focused on a sample of twelve Japanese people. These participants were born in Japan, and their parents\u27 native language is Japanese. Even though the length of time each has spent in residence in an English-speaking country varies, the minimum is two years. Further, all have previously studied English, for at least six years, during the high school period in Japan, and are regular users of English. These participants were separated into six pairs of two age groups. The first was 20-30 years, the second was 40-60 years. Their informal conversation was recorded and transcribed for analysis. Moreover, a sociolinguistic interview was carried out in order to uncover the participants\u27 intentions or strategies, (based primarily on their own interpretations), with regard to code-switching. Despite a large number of loan words in the Japanese language (most deriving from English), and the prestigious status which the English language holds, Japanese people within Japanese society, tend to hold a negative attitude towards code-switching in conversational circumstances. In this study, however, code-switching was found to be a significant choice in the speakers\u27 linguistic repertoire (in the English-speaking context) for informal interactions with their friends. Although there was some degree of constraints on the speakers\u27 linguistic choices, primarily attributable to a particular topic and attitudes towards code-switching, the speakers demonstrated their ability to make a linguistic choice according to their intentions/strategies. Moreover, this study attempted to expose the linguistic features of English/Japanese code-switching. The type of code-switching which was most frequently used amongst the participants was intrasentential code-switching (which occurs within the same sentence). Specifically, singly occurring intrasentential code-switching was the most common amongst the speakers. It was found that the Japanese language played a dominant role in producing this type of code-switching. On the other hand, well-formed English phrases were also produced in intrasentential code-switching when there is a semantic/ pragmatic mismatch between the two languages

    Designing Trustworthy Autonomous Systems

    Get PDF
    The design of autonomous systems is challenging and ensuring their trustworthiness can have different meanings, such as i) ensuring consistency and completeness of the requirements by a correct elicitation and formalization process; ii) ensuring that requirements are correctly mapped to system implementations so that any system behaviors never violate its requirements; iii) maximizing the reuse of available components and subsystems in order to cope with the design complexity; and iv) ensuring correct coordination of the system with its environment.Several techniques have been proposed over the years to cope with specific problems. However, a holistic design framework that, leveraging on existing tools and methodologies, practically helps the analysis and design of autonomous systems is still missing. This thesis explores the problem of building trustworthy autonomous systems from different angles. We have analyzed how current approaches of formal verification can provide assurances: 1) to the requirement corpora itself by formalizing requirements with assume/guarantee contracts to detect incompleteness and conflicts; 2) to the reward function used to then train the system so that the requirements do not get misinterpreted; 3) to the execution of the system by run-time monitoring and enforcing certain invariants; 4) to the coordination of the system with other external entities in a system of system scenario and 5) to system behaviors by automatically synthesize a policy which is correct

    Theories for Session-based Governance for Large-scale Distributed Systems

    Get PDF
    PhDLarge-scale distributed systems and distributed computing are the pillars of IT infrastructure and society nowadays. Robust theoretical principles for designing, building, managing and understanding the interactive behaviours of such systems need to be explored. A promising approach for establishing such principles is to view the session as the key unit for design, execution and verification. Governance is a general term for verifying whether activities meet the specified requirements and for enforcing safe behaviours among processes. This thesis, based on the asynchronous -calculus and the theory of session types, provides a monitoring framework and a theory for validating specifications, verifying mutual behaviours during runtime, and taking actions when noncompliant behaviours are detected. We explore properties and principles for governing large-scale distributed systems, in which autonomous and heterogeneous system components interact with each other in the network to accomplish application goals. This thesis, incorporating lessons from my participation in a substantial practical project, the Ocean Observatories Initiative (OOI), proposes an asynchronous monitoring framework and the process calculus for dynamically governing the asynchronous interactions among distributed multiple applications. We prove that this monitoring model guarantees the satisfaction of global assertions, and state and prove theorems of local and global safety, transparency, and session fidelity. We also study and introduce the semantic mechanisms for runtime session-based governance and the principles of validation of stateful specifications through capturing the runtime asynchronous interactions.EPSRC grants EP/G015481/1; Queen Mary University of Londo

    Algebraically modelling object-orientated programs.

    Get PDF
    We explore the process of building algebraic models of the behaviour of Java classes. A fundamental building block of object-oriented programs is the class that can typically contain multiple fields, constructors, and methods. In Java a programmer can control access to the various methods, fields and constructors of a class. We will be formally specifying and documenting a class' public behaviour algebraically. In practice even a simple Java class can have complex behaviour. A full algebraic specification (FAS) of a class can be complicated and hard to understand for someone who wishes to quickly ascertain the behaviour of a class. This complexity is largely as a result of machinery needed to define class behaviours that are implicit, that is behaviour that is considered part of Java's general language behaviour and defines the general structure of classes, methods, fields and constructors. However, it is unreasonable to expect a programmer to write such full specifications. Therefore we introduce the concept of an Algebraic Class Specification (ACS) that provides a much reduced version of the FAS of a class. The ACS is therefore more readable and is aimed at showing what we consider to be key information in the specification of a class that cannot be programmatically inferred from the language definition. Using the ACS we present a methodology for generating an FAS thus reducing the complexity of specification for the user. We will show that the ACS provides a reader with a clear formal understanding of a class' behaviour using a minimum of information. The ACS is designed to be human readable yet still machine readable. We will show that in order to aid users in creating specifications of classes we have mimicked the Java syntax closely in the specification syntax. We will, in addition, present a methodology for embedding the formal semantic description for a Java class within javadoc comments thus allowing Java API documentation to contain both a formal specification of the behaviour of a class and its components and an informal general textual description. These techniques have been developed by the analysis of case studies. We will demonstrate all of these techniques applied to a wide and varied range of both invented and existing examples of Java classes

    The London–Lund corpus of spoken English : Description and research

    Get PDF
    corecore