Publications

Barbosa LS, Sun M, Aichernig B, Rodrigues N.  2006.  On the Semantics of Componentware: a Coalgebraic Perspective. Mathematical Frameworks for Component Software: Models for Analysis and Synthesis. :69–117. Abstract

In this chapter we present a coalgebraic semantics for components. Our semantics forms the basis for a family of operators for combining components. These operators together with their algebraic laws establish a calculus for software components. We present two applications of our semantics: a coalgebraic interpretation of UML diagrams and the design of a component repository.

Barbosa MB, Moss A, Page D, Rodrigues N, Silva P.  2011.  Type Checking Cryptography Implementations. Fundamentals of Software Engineering - 4th IPM International Conference, FSEN 2011, Revised Selected Papers. 7141:316-334. Abstractfsen11.pdf

Cryptographic software development is a challenging field: high performance must be achieved, while ensuring correctness and compliance with low-level security policies. CAO is a domain specific language designed to assist development of cryptographic software. An important feature of this language is the design of a novel type system introducing native types such as predefined sized vectors, matrices and bit strings, residue classes modulo an integer, finite fields and finite field extensions, allowing for extensive static validation of source code. We present the formalisation, validation and implementation of this type system.

Martins A, Barbosa LS, Rodrigues N.  2011.  Shacc: A Functional Prototyper for a Component Calculus. Proceedings of 4th International Conference on Algebra and Coalgebra in Computer Science - CALCO . 6859:413-419. Abstractoriginalcalcotools2011.pdf

Over the last decade component-based software development arose as a promising paradigm to deal with the ever increasing complexity in software design, evolution and reuse. Shacc is a prototyping tool for component-based systems in which components are modelled coinductively as generalized Mealy machines. The prototype is built as a Haskell library endowed with a graphical user interface developed in Swing.

Rodrigues N, Oliveira N, Barbosa LS.  2011.  The role of coordination analysis in software integration projects. On the Move to Meaningful Internet Systems: OTM 2011 Workshops. 7046:83–92.
Oliveira N, Rodrigues N, Henriques PR, Barbosa LS.  2010.  A Pattern Language for Architectural Analysis. 14th Brazilian Symposium in Programming Languages - SBLP. 2:167-180. Abstracteplop04arch.pdf

The process of creating the architecture of a software system results in a documentation, which is recognized as a key artifact for stakeholder communication, early analysis of the system, support for quality attributes and trouble -free maintenance. The problem of software architecture documentation remains to a large extent unsolved; however the past few years, significant advances have been made in the field from research academic and industrial centers. This paper introduces an approach for recording the results that have been achieved hitherto in the field of documenting software architectures, by formatting them in the shape of patterns. We aim at assembling knowledge and experience in the field from industry and academia, with respect to the few issues that the community has reached consensus. Furthermore, by codifying this knowledge and experience in the form of patterns, we hope for a wider dissemination of architectural documentation concepts and practices to them community and thus a further advance of the field.

Oliveira N, Rodrigues N, Henriques PR.  2010.  Domain Specific Language for Coordination Patterns. INForum'10 –- II Simpósio de Informática: 4th Compilers, Programming Languages, Related Technologies and Applications (CoRTA'2010). 8:125-136.
Rodrigues N, Vilaça JL.  2010.  Identifying clones in functional programs for refactoring. Communications in Computer and Information Science. 109identifying_clones_in_functional_programs_for_refactoring.pdf
Rodrigues N, Torrão L, Vilaça JL.  2010.  Energy for Life: A Step Towards an Energetically Sustainable World. Contributions to contemporary Computer Game Studies, Game Play Society. artigo.pdf
Rodrigues N, Barbosa LS.  2008.  CoordInspector: a tool for extracting coordination data from legacy code. 8th IEEE International Working Conference on Source Code Analysis and Manipulation - SCAM . :265-266. Abstractscam08-rb.pdf

More and more current software systems rely on non trivial coordination logic for combining autonomous services typically running on different platforms and often owned by different organizations. Often, however, coordination data is deeply entangled in the code and, therefore, difficult to isolate and analyse separately.
COORDINSPECTOR is a software tool which combines slicing and program analysis techniques to isolate all coordination elements from the source code of an existing application. Such a reverse engineering process provides a clear view of the actually invoked services as well as of the orchestration patterns which bind them together.
The tool analyses Common Intermediate Language (CIL) code, the native language of Microsoft .Net Framework. Therefore, the scope of application of COORDINSPECTOR is quite large: potentially any piece of code developed in any of the pro- gramming languages which compiles to the .Net Framework. The tool generates graphical representations of the coordination layer together and identifies the underlying business process orchestrations, rendering them as Orc specifications.

Rodrigues N, Barbosa LS.  2008.  On the Discovery of Business Processes Orchestration Patterns. IEEE Congress on Services - SERVICES . :391-398. Abstractrb08a.pdf

COORDINSPECTOR is a Software Tool aiming at extracting the coordination layer of a software system. Such a reverse engineering process provides a clear view of the actually invoked services as well as the logic behind such invocations. The analysis process is based on program slicing techniques and the generation of, system dependence graphs and coordination dependence graphs. The tool analyzes common intermediate language (CIL), the native language of the Microsoft .Net Framework, thus making suitable for processing systems developed in any .Net Framework compilable language. COORDINSPECTOR generates graphical representations of the coordination layer together with business process orchestrations specified in WSBPEL 2.0.

Rodrigues N, Barbosa LS.  2008.  Extracting and verifying coordination models from source code. Proceedings of FLOSS-FM/OpenCert Joint International Workshop at OOS'08. :64-78. Abstractrb08b.pdf

Current software development relies increasingly on non-trivial coordination logic for combining autonomous services often running on different platforms. As a rule, however, intypical non-trivial software systems, such a coordination layer is strongly weaved within the application at source code level. Therefore, its precise identification becomes a major methodological (and technical) problem which cannot be overestimated along any program understanding or refactoring process. Open access to source code, as granted in OSS certification, provides an opportunity for the development of methods and technologies to extract, from source code, the relevant coordination information. This paper is a step in this direction, combining a number of program analysis techniques to automatically recover coordination information from legacy code. Such information is then expressed as a model in Orc, a general purpose orc hestration language.

Rodrigues N, Barbosa LS.  2005.  Slicing Functional Programs by Calculation. Beyond Program Slicing. 05451 Abstractoriginalprogramslicingcalc16443.pdf

Program slicing is a well known family of techniques used to identify code fragments which depend on or are depended upon specific program entities. They are particularly useful in the areas of reverse engineering, program understanding, testing and software maintenance. Most slicing methods, usually targeting either the imperative or the object oriented paradigms, are based on some sort of graph structure representing program dependencies. Slicing techniques amount, therefore, to (sophisticated) graph transversal algorithms. This paper proposes a completely different approach to the slicing problem for functional programs. Instead of extracting program information to build an underlying dependencies’ structure, we resort to standard program calculation strategies, based on the so-called Bird-Meertens formalism. The slicing criterion is specified either as a projection or a hiding function which, once composed with the original program, leads to the identification of the intended slice. Going through a number of examples, the paper suggests this approach may be an interesting, even if not completely general alternative to slicing functional programs.

Barbosa LS, Rodrigues N.  2005.  Prototyping Concurrent Systems in C Omega. IVNET - First International Conference of Innovative Views of NET Technologies. Abstractrb05-pcscw_p.pdf

Software architecture is currently recognized as one of the most critical design steps in Software Engineering. The specification of the overall system structure, on the one hand, and of the interactions patterns between its components, on the other, became a major concern for the working developer. Although a number of formalisms to express behaviour and supply the indispensable calculational power to reason about designs, are available, the task of deriving architectural designs on top of popular component platforms has remained largely informal. This paper introduces a systematic approach to derive, from behavioural specifications written in Cw, the corresponding architectural skeletons in the Microsoft .NET framework in the form of executable code.

Rodrigues N, Barbosa LS.  2004.  Prototyping Behavioural Specifications in the Net Framework. Proceedings of 7th Brazilian Symposium on Formal Methods - SBMF. :108–118. Abstractrb04actas.pdf

Over the last decade, software architecture emerged as a critical design step in Software Engineering. This encompassed a shift from traditional programming towards the deployment and assembly of independent components. The specification of the overall system structure, on the one hand, and of the interactions patterns between its components, on the other, became a major concern for the working developer. Although a number of formalisms to express behaviour and supply the indispensable calculational power to reason about designs, are available, the task of deriving architectural designs on top of popular component platforms has remained largely informal. This paper introduces a systematic approach to derive, from behavioural specifications written in Ccs, the corresponding architectural skeletons in the Microsoft. Net framework in the form of executable C code. Such prototyping process is automated by means of a specific tool developed in Haskell.

Rodrigues N, Barbosa LS.  2003.  On the Specification of a Component Repository. 1st International Workshop on Formal Approaches to Component Software - FACS. :47–62. Abstractrb03.pdf

The lack of a commonly accepted de nition of a software component, the proliferation of competing `standards' and component frameworks, is here to stay, raising the fundamental question in component based development of how to cope in practice with heterogeneity. This paper reports on the design of a Component Repository aimed to give at least a partial answer to the above question. The repository was fully speci ed in Vdm and a working prototype is currently being used in an industrial environment.