Difference between pages "User:Mathieu/monobook.js" and "User:Nicolas/Collections/ADVANCE D3.4 General Platform Maintenance"

From Event-B
< User:Mathieu(Difference between pages)
Jump to navigationJump to search
imported>Mathieu
m
 
imported>Nicolas
 
Line 1: Line 1:
/* <pre><nowiki> */
+
This part describes the general maintenance performed on the Rodin toolset within the last year of the ADVANCE project. As the maintenance is a task that concerns the whole toolset, and to ease the reading of this part of the deliverable, the maintenance section has been decomposed in a list of subsections corresponding to scopes of the toolset. All these subsections maintain the template previously defined in the introduction.
  
// [[User:Lupin/popups.js]] - please include this line
+
== Core Rodin platform ==
document.write('<script type="text/javascript" src="'
 
            + 'http://wiki.event-b.org/index.php?title=User:Mathieu/popups.js'
 
            + '&action=raw&ctype=text/javascript&dontcountme=s"></script>');
 
  
 +
=== Overview ===
 +
During the last period of the ADVANCE project, the following versions of the Rodin platform have been released:
 +
* 3.0.0 (2014-03-20)
 +
* 3.0.1 (2014-06-11)
 +
* 3.1.0 (2014-11-??)
  
// This will add an [edit top] link at the top of all pages except preview pages
+
The main part of the work was targeting improvements of
// by User:Pile0nades
+
* stability of the platform,
 +
* prover capabilities,
 +
* theory support
  
function editTopLink() {
+
Other running tasks consisted in answering questions on mailing lists, and processing bug tickets and feature requests.
  // if this is preview page or generated page, stop
 
  if(document.getElementById("wikiPreview") || window.location.href.indexOf("w/index.php?title=Special:") != -1) return;
 
  
  // get the page title
+
=== Motivations / Decisions ===
  var pageTitle = document.title.split(" - ")[0].replace(" ", "_");
 
  
  // create div and set innerHTML to link
+
The core API has been improved. In particular, the interface with the theory plug-in has been enriched so as to keep trace of language changes over time, thus enforcing model and proof consistency.
  var divContainer = document.createElement("div");
 
  divContainer.innerHTML = '<div class="editsection" style="float:right;margin-left:5px;margin-top:3px;">[<a href="/w/index.php?title='+pageTitle+'&action=edit&section=0" title="'+document.title.split(" - ")[0]+'">edit top</a>]</div>';
 
  
  // insert divContainer into the DOM before the h1
+
New proof rules have been implemented (SIMP_EMPTY_PARTITION and SIMP_SINGLE_PARTITION).
  document.getElementById("content").insertBefore(divContainer, document.getElementsByTagName("h1")[0]);
+
The proving experience has been enhanced with HMI that provide quick access to user-defined tactics.
  
}
+
The Rodin Editor stability has been improved, by fixing bugs pointed out by the users.
  
addLoadEvent(editTopLink);
+
The underlying Eclipse Platform has been upgraded to the most recent version (Eclipse 4.4.1 as of Rodin 3.1). This was asked by plug-in developers who wanted to take advantage of the newest Eclipse features. While also bringing fixes to some Eclipse bugs, it prepares for future developments based on the latest technologies.
  
 +
For the same reasons, the code has been ported to Java7, while remaining compatible with 1.6 JRE.
  
var suiviManagerAllPages = new Array();
+
The source code is now distributed in a more developer-friendly format, so it's easier for plug-in implementers to extend Rodin as a target platform.
                                       
 
function SuiviManagerRegexp(regexp)
 
{
 
        var match = new RegExp(regexp);
 
  
        for (var i=0;i<suiviManagerAllPages.length;i++) {
+
=== Available Documentation ===
                var pageName = suiviManagerAllPages[i].childNodes[0].getAttribute("value");
+
The release notes, that appear and are maintained on the wiki, and that accompany each release, give useful information about the changes introduced by each. Moreover, two web trackers list and detail the known bugs and open feature requests:
                if (match.test(pageName)) {
+
* a sourceforge bug tracker,<ref>http://sourceforge.net/p/rodin-b-sharp/bugs/</ref>
                        suiviManagerAllPages[i].childNodes[0].checked=true;
+
* a sourceforge feature requests tracker.<ref>http://sourceforge.net/p/rodin-b-sharp/feature-requests/</ref>
                }
 
        }
 
}
 
               
 
function SuiviManagerLiensRouges()
 
{
 
  
        for (var i=0;i<suiviManagerAllPages.length;i++) {
+
{{TODO}}
                var pageClass = suiviManagerAllPages[i].childNodes[1].getAttribute("class");
 
                if (pageClass && pageClass=="new") {
 
                        suiviManagerAllPages[i].childNodes[0].checked=true;
 
                }
 
        }
 
}
 
  
function SuiviManagerDeselect()
+
=== Conclusion ===
{
 
        for (var i=0;i<suiviManagerAllPages.length;i++) {
 
                suiviManagerAllPages[i].childNodes[0].checked=false;
 
        }
 
}
 
  
 +
{{TODO}}
  
function SuiviManager() {
+
== UML-B Improvements ==
        if (document.URL.indexOf("http://wiki.event-b.org/Special:Watchlist/edit")!=0) return;
 
       
 
        var a=0;
 
        var b=0;                       
 
        var interfaceMsg = new Array();
 
        var regexpList = new Array();
 
       
 
        //////////////////////////////////////////////////
 
        // Expressions régulières et liens de l'interface
 
        //
 
        // besoin d'aide pour les regexp ?
 
        // http://www.commentcamarche.net/javascript/jsregexp.php3
 
        //////////////////////////////////////////////////
 
  
        interfaceMsg[a++]      = "<b>Tout cocher</b>";
+
=== Overview ===
        regexpList[b++]        = "^.*";
+
{{TODO}}
       
 
        interfaceMsg[a++]      = "Utilisateurs";
 
        regexpList[b++]        = "^Utilisateur:";
 
       
 
           
 
        interfaceMsg[a++]      = "Images";
 
        regexpList[b++]        = "^Image:";
 
       
 
        interfaceMsg[a++]      = "Modèles";
 
        regexpList[b++]        = "^Modèle:";
 
       
 
        interfaceMsg[a++]      = "Aide";
 
        regexpList[b++]        = "^Aide:";
 
       
 
        interfaceMsg[a++]      = "Catégories";
 
        regexpList[b++]        = "^Catégorie:";     
 
       
 
 
 
  
        //////////////////////////////////////////////////
+
=== Motivations / Decisions ===
        var topTag = document.getElementById("contentSub")
+
{{TODO}}
       
 
        // récupère toutes les pages
 
        var watchlist = document.getElementsByTagName("ul");
 
  
        for (u=0;u<watchlist.length;u++) {
+
=== Available Documentation ===
                        var entries = watchlist[u].getElementsByTagName("li");
+
{{TODO}}
                        for (i=0;i<entries.length;i++) {
 
                                suiviManagerAllPages.push(entries[i]);
 
                        }
 
        }
 
       
 
        // prépare la mini-interface
 
        var str = "<div style=\"background-color:#8ecfe4;font-size:1px;height:8px;border:1px solid #AAAAAA;-moz-border-radius-topright:0.5em;-moz-border-radius-topleft:0.5em;\"></div>"
 
        + "<div style=\"border:1px solid #6ac1de;border-top:0px solid white;padding:5px 5px 0 5px;margin-bottom:3ex;\"><p>"
 
        + "<div style=\"float: left; text-align: left; white-space: nowrap;\"></div>"
 
       
 
        for (var cpt = 0; cpt < interfaceMsg.length; cpt ++) {
 
                str += "<a href=\"javascript:SuiviManagerRegexp('" + regexpList[cpt] + "')\">"
 
                                                + interfaceMsg[cpt]
 
                                                + " ·</a> "
 
                }
 
       
 
                str += "<a href=\"javascript:SuiviManagerLiensRouges()\">"
 
                        + "Retirer les liens rouges"
 
                        + " ·</a> "
 
                       
 
                str += "<a href=\"javascript:SuiviManagerDeselect()\">"
 
                        + "<b>Enlever toutes les coches</b>"
 
                        + " ·</a> "
 
                               
 
        topTag.innerHTML =      topTag.innerHTML + "<br clear=all />" + str + "<p></div>"
 
               
 
}
 
  
addLoadEvent(SuiviManager);
+
=== Conclusion ===
 +
{{TODO}}
  
 +
== ProR/Rodin Integration Plugin ==
  
/*
+
=== Overview ===
* Auto Refresh
 
*/
 
  
function refresh()
+
ProR is a tool for working with requirements in natural language. It is part of the Eclipse Requirements Modeling Framework (RMF).<ref>http://www.eclipse.org/rmf/</ref> The goal of the ProR/Rodin integration plugin is to bring two complimentary fields of research, requirements engineering and formal modelling, closer together. The ProR/Rodin integration plugin supports the user by maintaining a traceability between natural language requirements and Event-B models.
{
 
    window.location.href = unescape(window.location);
 
}
 
  
function refresh1min()
+
A requirements Meta-Model for the WP-1 and WP-2 industrial case studies has been developed during the last period of the ADVANCE project.
{
+
Beside this, general improvements, such as usability improvements have been made on the ProR/Rodin integration plugin during the last period of the ADVANCE project.
    // the timeout value should be the same as in the "refresh" meta-tag
 
    setTimeout( "refresh()", 60000 );
 
}
 
  
function refresh5min()
+
=== Motivations / Decisions ===
{
 
    // the timeout value should be the same as in the "refresh" meta-tag
 
    setTimeout( "refresh()", 300000 );
 
}
 
  
if (location.href.indexOf('Special:Recentchanges') != -1) {
+
The ProR/Rodin integration plugin provides a default Meta-Model for requirements documents. However, this Meta-Model does not support all specific needs and characteristics of the industrial case studies.  
  addLoadEvent(refresh5min);
+
As a consequence, we decided to create a new requirements Meta-Model that supports the specific needs of both industrial case studies.
}
 
  
if (location.href.indexOf('Special:Watchlist') != -1) {
+
=== Available Documentation ===
  addLoadEvent(refresh5min);
 
}
 
  
/* </nowiki></pre> */
+
* ''A Method and Tool for Tracing Requirements into Specifications''.<ref name="req1ref">http://www.stups.uni-duesseldorf.de/mediawiki/images/e/ec/Pub-HalJasLad2013.pdf</ref> Accepted for Science of Computer Programming.
 +
* ''Requirements Traceability between Textual Requirements and Formal Models Using ProR''<ref>http://www.stups.uni-duesseldorf.de/w/Special:Publication/LadenbergerJastram_iFMABZ2012</ref>. The paper has been accepted for iFM'2012 & ABZ'2012.
 +
 
 +
* A Tutorial for the Rodin/ProR integration<ref>http://wiki.event-b.org/index.php/ProR</ref> can be found on the Event-B wiki.
 +
* The User Guide<ref>http://wiki.eclipse.org/RMF/User_Guide</ref> contains additional tutorials for ProR.
 +
 
 +
=== Conclusion ===
 +
 
 +
The customized Meta-Models facilitated the requirements maintenance process of both industrial case studies. Moreover, the new Meta-Model is expandable so that new features can be easily added later in the project.
 +
 
 +
== Camille ==
 +
 
 +
=== Overview ===
 +
The Camille plug-in provides a textual editor for Rodin. This editor provides the same look and feel as a typical Eclipse text editor, including features most text editors provide, such as copy, paste, syntax highlighting and code completion.
 +
 
 +
During the last period of the ADVANCE project, three new versions of Camille have been released:
 +
* 3.0.0 - Initial release for version 3 of the Core Rodin platform. This release has been based on Camille 2.1.4.
 +
* 3.0.1 - Port of the changes done in Camille 2.2.0 to version 3. This includes theorems in guards as well as other bugfixes. See D3.3 for details.
 +
* 3.0.2 - Camille's structure parser has been moved to ProB's parser library. A fully automatic build process featuring continuous integration has been set up. This is the first release build by it.
 +
 
 +
One of the main goals of the last period was the support of Rodin's extensibility in Camille.
 +
 
 +
=== Motivations / Decisions ===
 +
'''Move to Git / GitHub'''
 +
 
 +
The source files for Camille have been moved from the old Rodin SVN repository to their own repository at GitHub.
 +
The old source files have been marked deprecated.
 +
Furthermore, the move to GitHub allows us to use GitHub's infrastructure for bug tracking and feature requests.
 +
We moved old feature requests from the wiki pages to the bug / feature tracking systems at GitHub.
 +
 
 +
'''Build Process'''
 +
 
 +
Before version 3.0.2 was released, the Camille build was mostly done by hand.
 +
This turned out to be slowing down development during the last period of the ADVANCE project.
 +
Starting with release 3.0.2 we completely revamped the build process.
 +
Camille is now build automatically on each commit using a Jenkins continuous integration server <ref>http://www.jenkins-ci.org</ref>.
 +
This facilitates the build as well as the release process for Camille.
 +
Furthermore, it should ease collaborative development.
 +
 
 +
'''Move Structure Parser to ProB's Parser Library'''
 +
 
 +
Camille's internal parser for the structure of Event-B machines and contexts has been split off of Camille and moved to ProB's general parsers library.
 +
This effectively renders the parser and external dependency for Camille and further decouples core, ui and parsers.
 +
Externalising the parser is the first step to making Camille more modular in oder to be able to replace the parser by the upcoming block parser.
 +
In addition, externalising the parser makes it available for other projects as well.
 +
 
 +
=== Available Documentation ===
 +
 
 +
* ''Architectures for an Extensible Text Editor for Rodin''.<ref name="Architectures_for_an_Extensible_Text_Editor_for_Rodin">http://www.stups.uni-duesseldorf.de/mediawiki/images/0/0a/Pub-Weigelt2012.pdf</ref> Bachelor thesis analysing the problem and discussing possible solutions.
 +
* An earlier version of the thesis has been published as a technical report<ref>http://www.stups.uni-duesseldorf.de/w/Special:Publication/Weigelt2012></ref> that has been discussed on the Roding Developers Mailing List and the ADVANCE Progress Meeting in May 2012 in Paris.
 +
* ''Camille GitHub Repository and Bugtracker'': https://github.com/hhu-stups/camille
 +
* ''Camille Wiki'': http://wiki.event-b.org/index.php/Camille_Editor
 +
 
 +
=== Conclusion ===
 +
Sadly, Camille still has the drawback of not supporting extensibility. It only supports the core Event-B language and plug-in-specific additions are simply ignored. Consequently, users have to switch back to Rodin's native Editor to edit plug-in-specific modelling extensions. The changes and improvements to the development process performed in the last period should finally allow for a new and completely overhauled version of Camille to be implemented.
 +
 
 +
== References ==
 +
<references/>

Revision as of 14:41, 3 November 2014

This part describes the general maintenance performed on the Rodin toolset within the last year of the ADVANCE project. As the maintenance is a task that concerns the whole toolset, and to ease the reading of this part of the deliverable, the maintenance section has been decomposed in a list of subsections corresponding to scopes of the toolset. All these subsections maintain the template previously defined in the introduction.

Core Rodin platform

Overview

During the last period of the ADVANCE project, the following versions of the Rodin platform have been released:

  • 3.0.0 (2014-03-20)
  • 3.0.1 (2014-06-11)
  • 3.1.0 (2014-11-??)

The main part of the work was targeting improvements of

  • stability of the platform,
  • prover capabilities,
  • theory support

Other running tasks consisted in answering questions on mailing lists, and processing bug tickets and feature requests.

Motivations / Decisions

The core API has been improved. In particular, the interface with the theory plug-in has been enriched so as to keep trace of language changes over time, thus enforcing model and proof consistency.

New proof rules have been implemented (SIMP_EMPTY_PARTITION and SIMP_SINGLE_PARTITION). The proving experience has been enhanced with HMI that provide quick access to user-defined tactics.

The Rodin Editor stability has been improved, by fixing bugs pointed out by the users.

The underlying Eclipse Platform has been upgraded to the most recent version (Eclipse 4.4.1 as of Rodin 3.1). This was asked by plug-in developers who wanted to take advantage of the newest Eclipse features. While also bringing fixes to some Eclipse bugs, it prepares for future developments based on the latest technologies.

For the same reasons, the code has been ported to Java7, while remaining compatible with 1.6 JRE.

The source code is now distributed in a more developer-friendly format, so it's easier for plug-in implementers to extend Rodin as a target platform.

Available Documentation

The release notes, that appear and are maintained on the wiki, and that accompany each release, give useful information about the changes introduced by each. Moreover, two web trackers list and detail the known bugs and open feature requests:

  • a sourceforge bug tracker,[1]
  • a sourceforge feature requests tracker.[2]

TODO

Conclusion

TODO

UML-B Improvements

Overview

TODO

Motivations / Decisions

TODO

Available Documentation

TODO

Conclusion

TODO

ProR/Rodin Integration Plugin

Overview

ProR is a tool for working with requirements in natural language. It is part of the Eclipse Requirements Modeling Framework (RMF).[3] The goal of the ProR/Rodin integration plugin is to bring two complimentary fields of research, requirements engineering and formal modelling, closer together. The ProR/Rodin integration plugin supports the user by maintaining a traceability between natural language requirements and Event-B models.

A requirements Meta-Model for the WP-1 and WP-2 industrial case studies has been developed during the last period of the ADVANCE project. Beside this, general improvements, such as usability improvements have been made on the ProR/Rodin integration plugin during the last period of the ADVANCE project.

Motivations / Decisions

The ProR/Rodin integration plugin provides a default Meta-Model for requirements documents. However, this Meta-Model does not support all specific needs and characteristics of the industrial case studies. As a consequence, we decided to create a new requirements Meta-Model that supports the specific needs of both industrial case studies.

Available Documentation

  • A Method and Tool for Tracing Requirements into Specifications.[4] Accepted for Science of Computer Programming.
  • Requirements Traceability between Textual Requirements and Formal Models Using ProR[5]. The paper has been accepted for iFM'2012 & ABZ'2012.
  • A Tutorial for the Rodin/ProR integration[6] can be found on the Event-B wiki.
  • The User Guide[7] contains additional tutorials for ProR.

Conclusion

The customized Meta-Models facilitated the requirements maintenance process of both industrial case studies. Moreover, the new Meta-Model is expandable so that new features can be easily added later in the project.

Camille

Overview

The Camille plug-in provides a textual editor for Rodin. This editor provides the same look and feel as a typical Eclipse text editor, including features most text editors provide, such as copy, paste, syntax highlighting and code completion.

During the last period of the ADVANCE project, three new versions of Camille have been released:

  • 3.0.0 - Initial release for version 3 of the Core Rodin platform. This release has been based on Camille 2.1.4.
  • 3.0.1 - Port of the changes done in Camille 2.2.0 to version 3. This includes theorems in guards as well as other bugfixes. See D3.3 for details.
  • 3.0.2 - Camille's structure parser has been moved to ProB's parser library. A fully automatic build process featuring continuous integration has been set up. This is the first release build by it.

One of the main goals of the last period was the support of Rodin's extensibility in Camille.

Motivations / Decisions

Move to Git / GitHub

The source files for Camille have been moved from the old Rodin SVN repository to their own repository at GitHub. The old source files have been marked deprecated. Furthermore, the move to GitHub allows us to use GitHub's infrastructure for bug tracking and feature requests. We moved old feature requests from the wiki pages to the bug / feature tracking systems at GitHub.

Build Process

Before version 3.0.2 was released, the Camille build was mostly done by hand. This turned out to be slowing down development during the last period of the ADVANCE project. Starting with release 3.0.2 we completely revamped the build process. Camille is now build automatically on each commit using a Jenkins continuous integration server [8]. This facilitates the build as well as the release process for Camille. Furthermore, it should ease collaborative development.

Move Structure Parser to ProB's Parser Library

Camille's internal parser for the structure of Event-B machines and contexts has been split off of Camille and moved to ProB's general parsers library. This effectively renders the parser and external dependency for Camille and further decouples core, ui and parsers. Externalising the parser is the first step to making Camille more modular in oder to be able to replace the parser by the upcoming block parser. In addition, externalising the parser makes it available for other projects as well.

Available Documentation

  • Architectures for an Extensible Text Editor for Rodin.[9] Bachelor thesis analysing the problem and discussing possible solutions.
  • An earlier version of the thesis has been published as a technical report[10] that has been discussed on the Roding Developers Mailing List and the ADVANCE Progress Meeting in May 2012 in Paris.
  • Camille GitHub Repository and Bugtracker: https://github.com/hhu-stups/camille
  • Camille Wiki: http://wiki.event-b.org/index.php/Camille_Editor

Conclusion

Sadly, Camille still has the drawback of not supporting extensibility. It only supports the core Event-B language and plug-in-specific additions are simply ignored. Consequently, users have to switch back to Rodin's native Editor to edit plug-in-specific modelling extensions. The changes and improvements to the development process performed in the last period should finally allow for a new and completely overhauled version of Camille to be implemented.

References