* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download STAR Software Technology Advanced Research - Indico
Java performance wikipedia , lookup
Comment (computer programming) wikipedia , lookup
Library (computing) wikipedia , lookup
Program optimization wikipedia , lookup
Object-oriented programming wikipedia , lookup
Structured programming wikipedia , lookup
Software quality wikipedia , lookup
One-pass compiler wikipedia , lookup
Software bug wikipedia , lookup
STAR Software Technology Advanced Research Paolo Tonella [email protected] ITC-irst Centro per la Ricerca Scientifica e Tecnologica The STAR project The project aims at the development and field validation of novel approaches for the comprehension of the software, supporting the process of its understanding, testing, and evolution. Web site: http://star.itc.it/ Team: 6 full-time researchers Started in 1999 (prosecution of project PURE: 1994-99) More than 25 conference publications and 14 journal papers since 1999. Competences Reverse Engineering (code analysis and restructuring; coding standards) Web applications (analysis and testing; accessibility; multilingual sites) Testing (test automation, object oriented testing) Applications CERN (Alice, ATLAS, LHCb) – reverse engineering and coding conventions. WebFAQ (Web: Flexible Access and Quality) – quality support for Web applications. C++ code analysis Requires the ability to parse any compilable C++ program (templates, namespaces, etc.). May have several different uses (verification of coding conventions, reverse engineering, restructuring, structural testing). Should handle preprocessor and macro directives, and should separate user from library code. C++ code analysis: Language model C++ code analysis: Tool architecture Coding conventions Improve code readability (comments, names). Support group development, by introducing a shared programming standard. Increase maintainability, making the code easier to understand for new programmers. Reduce the likelihood of inserting bugs, by disciplining the use of programming constructs. Coding conventions: Example of implementation check () { modules = CPPParser.getModules(); foreach (m in modules) { classes = m.getClasses(); foreach (c in classes) { name = c.getName(); if (! name.startsWith("Ali")) printViolationMessage(); } } } Coding conventions: Alice, ATLAS, LHCb Java as a reference language Java was designed with the goal of supporting a clean programming style. Troublesome features of languages such as C++ have been excluded (global variables, pointer manipulation, goto statements, etc.). However, Java may be not an option for several reasons (performances, libraries, legacy code, etc.). Cjj: a subset of C++ compliant with Java P. Tonella and A. Potrich, "Cjj: a subset of C++ compliant with Java", Science of Computer Programming, Vol 42/2-3, pp. 229-271, January 2002. Cjj: constraint verification tool Reverse engineering The code is the most reliable source of information about the structure and behavior of a program. Alternative information sources are often missing at all or unreliable. Reverse engineering aims at abstracting the information in the code to a level that is easier to use during program understanding and modification (e.g., UML diagrams). The problem in reverse engineering is identifying meaningful information and disregarding irrelevant, implementative details. Moreover, static approaches consider every execution path as possible, while dynamic approaches produce partial results. Reverse engineering of UML diagrams: Class diagram with containers Reverse engineering of UML diagrams: Object diagram Reverse engineering of UML diagrams: Interaction diagrams Other activities Static and dynamic model extraction for Web applications Structural and statistical testing of Web applications Alignment of multilingual Web sites (MLHTML – Multi Lingual HTML) Web site accessibility Automatic program transformation (currently applied to HTML) Concept analysis for code restructuring Program slicing (Web application slicing; decomposition slicing) Empirical study of the open source software development process (GRASS case study) Future directions Aspect Oriented Programming Object Oriented testing (test case generation; state based testing; structural testing)