<!-- 
	This document is provided as a template along with some guidance for creating
	your project proposal. This is just a template. Feel free to change it as
	you see fit (add sections, remove section). We feel, however, that the
	suggestions represented in this document represent the reasonable minimum
	amount of information to move forward.
	
	Please keep the formatting in this document simple. Please do not edit 
	this document in Microsoft Word as it adds huge piles of markup that make
	it difficult to restyle.
	
	More information is available here:
	
	http://wiki.eclipse.org/Development_Resources/HOWTO/Pre-Proposal_Phase
	
	Direct any questions about this template to emo@eclipse.org
 -->

<html>
<head>

<!-- 
	Include the title here. We will parse it out of here and include it on the
	rendered webpage. Do not duplicate the title within the text of your page.
 -->

<title>ReqCycle</title>
</head>

<!-- 
	We make use of the 'classic' HTML Definition List (dl) tag to specify
	committers. I know... you haven't seen this tag in a long while...
 -->

<style type="text/css">
dt {
	display: list-item;
	list-style-position: outside;
	list-style-image:
		url(/eclipse.org-common/themes/Phoenix/images/arrow.gif);
	margin-left: 16px;
}

dd {
	margin-left: 25px;
	margin-bottom: 5px;
}
</style>

<body>
	<p>
		ReqCycle project is a proposed open source project under the <a
			href="http://Polarsys.org/">PolarSys Top level Project</a>.
	</p>

	<!-- 
	The communication channel must be specified. Typically, this is the
	"Proposals" forum. In general, you don't need to change this.
 -->
	<p>
		This proposal is in the Project Proposal Phase (as defined in the
		Eclipse Development Process) and is written to declare its intent and
		scope. We solicit additional participation and input from the Eclipse
		community. Please send all feedback to the <a
			href="http://www.eclipse.org/forums/eclipse.proposals">Eclipse
			Proposals</a> Forum.
	</p>

	<h2>Background</h2>

	<!-- 
	Optionally provide the background that has lead you to creating this project.
 -->
	<p>Model-driven engineering is more and more used and industry has
		started to switch from traditional document-based approach to this new
		approach. There is a clear need for system engineers to be able to
		weave textual requirements and models all along the development cycle:
		formalize requirements, refine them with specification models, implement
		them with design models and verify them with testing models.</p>

	<p>So there is a growing request from industry to get an open
		source solution able to create textual requirements or gather
		requirements wherever they exist (documents, Database, model elements,
		annotations in code&hellip;) and to give ability to define links from
		those requirements to any development artefact including models, but
		also test cases, code&hellip;</p>
	<p>There exist open source solutions to manage requirements but 
		they generally provide limited flexibility in requirement 
		organization/classification. Industry needs tooling able to: 
		1) classify requirements and links through a customizable data 
		model to organize requirements and links according to scopes 
		(customer, system, subsystem A, SubSystem B, &hellip;);
		2) check coverage with traceability matrices and perform impact 
		analysis from customer needs to models. (and models to requirements); and
		3) check coverage with traceability matrices and perform impact analysis 
		from customer needs to models. (and models to requirements).</p>
	<p>There exist open source solutions that allow creating links
		between requirements and other objects but there the creation of links
		is generally too generic to provide required guidance and semantics.
		Industry seeks for tooling able to give semantics to the links created
		between requirements and development artefacts: for instance
		&quot;refine&quot;, &quot;satisfy&quot;, &quot;implement&quot;,
		verify&quot;, &hellip; and it must be possible to restrict links so
		that they apply only between some requirements (some scope for
		instance) and some artefacts (SysML blocks for instance).</p>
	<p>
		ReqCycle has been developed on the basis of <a
			href="http://www.topcased.org">TOPCASED</a> Requirement component in
		order to offer an Open Source solution addressing both requirement
		management (create data model, create/import/reference
		requirements&hellip;) and requirement traceability to any development
		artefact that can be clearly identified as a &quot;Reacheable
		object&quot; (through a Unified Resource Identifier) and with
		flexibility to conform to a custom process and associated data model.
	</p>

	<h2>Scope</h2>

	<!-- 
	All projects must have a well-defined scope. Describe, concisely, what
	is in-scope and (optionally) what is out-of-scope. An Eclipse project
	cannot have an open-ended scope.
 -->
	<p>ReqCycle can define data models to classify requirements in
		scopes (team organization) and in types (list of attributes) like
		&quot;functional requirements&quot;, &quot;safety requirements&quot;,
		and more.</p>
	<p>ReqCycle can create requirements, import/update or reference
		textual requirements existing in different data sources or formats
		such as ReqIF (.reqIf), OpenOffice Writer (.odt) , Microsoft
		Word&trade;(.docx), openOffice Calc (.ods) or Microsoft
		Excel&trade;(.xslx). It can also reference requirements contained in
		EMF models through usage of OCL rules to identify requirements.</p>
	<p>ReqCycle can display all imported/referenced/created
		requirements into treeview or tables and filter them with custom
		criteria on requirements attributes and values.</p>
	<p>ReqCycle can define traceability link types from requirement to
		a model element or code, provide associated semantics to the links and
		attributes (for instance &quot;lifecycle&quot; attribute to manage
		requirement validation or &quot;rationale&quot; attribute in case of
		&quot;satisfy&quot; semantics). The requirement can be restricted to a
		given scope or structure and the model element can be restricted to a
		specific metaclass/concept.</p>
	<p>ReqCycle can create traceability links between requirements and
		UML/SysML Papyrus models or Java&trade; code according to the
		traceability link types defined in preferences. ReqCycle provides
		extension points to create traceability to other models, code or other
		artefacts. ReqCycle can capture existing traceability links coming
		from different sources like SysML models or Java code.</p>
	<p>ReqCycle can display all traceability links (created or
		captured) into a treeview or a table and filter links with custom
		criteria.</p>
	<p>The framework can be extended to add new requirement import
		connectors, new traceability analysis engines, new artefacts to take
		into account as link targets.</p>

	<p>
		<img src='ReqCycleBigPicture.png' alt="" width="480"/>
	</p>
	<br />

	<h2>Description</h2>

	<!-- 
	Describe the project here. Be concise, but provide enough information that
	somebody who doesn't already know very much about your project idea or domain
	has at least a fighting chance of understanding its purpose.
 -->
	<p>ReqCycle addresses both requirement management (create data
		model, create/import/reference requirements&hellip;) and requirement
		traceability of development artefacts that can be clearly identified
		as &quot;Reacheable objects&quot; (through a Unified Resource Identifier) and
		with flexibility to conform to a custom process and associated data
		model.</p>
	<p>ReqCycle is generally used in two different steps: configuration
		and operations. Configuration is generally done by
		&quot;methods/quality&quot; team while operations are done by system
		engineers.</p>


	<table>
		<tr>
			<td><img src='1.png' alt=""/></td>
			<td>Configuration: Define data model for your project or your
				company with scopes and requirements types (list of attributes).</td>
		</tr>
		<tr>
			<td><img src='2.png' alt=""/></td>
			<td>Configuration: Define kinds of traceability links needed by
				the project or your company.</td>
		</tr>
		<tr>
			<td><img src='3.png' alt=""/></td>
			<td>Operations: Import/update/reference requirements and manage
				them according to the data model (scopes, requirements structure).</td>
		</tr>
		<tr>
			<td><img src='4.png' alt=""/></td>
			<td>Operations: Create links between requirements and
				development artefacts according to traceability link types defined
				in configuration.</td>
		</tr>
		<tr>
			<td><img src='5.png' alt=""/></td>
			<td>Operations: capture other traceability links according to
				registered traceability engines and aggregate those links with those
				created previously. Calculate traceability metrics. Export
				traceability data.</td>
		</tr>
	</table>

	<p>Example of SysML requirement traceability captured and
		visualized in a treeview.</p>
	<p>
		<img src="Traceability.png" alt="" width="480"/>
	</p>


	<p>
		ReqCycle is currently experimented in several contexts (avionics,
		railways, automotive) to support use cases from <a
			href="http://www.systematic-paris-region.org/fr/projets/agesys">AGeSys</a>
		French collaborative project.
	</p>

	<h2>Why PolarSys?</h2>

	<!-- 
	Answer these two questions:	What value does this project bring to the Eclipse
	community? What value do you expect to obtain from hosting your project at Eclipse?
	
	What value do you get by having your project at Eclipse over and above the value
	of hosting at Eclipse Labs?
 -->
	<p>ReqCycle is a transversal component based on top of
		Eclipse-based technologies (EMF, M2T, RMF, Papyrus) that can be used
		in any industrial domain where requirements are key artefacts.
		PolarSys has already identified the need of two components to manage
		requirements and their traceability on top of Eclipse technologies.
		ReqCycle seems to match those expectations and PolarSys is then the
		natural place to host this project.</p>


	<h2>Initial Contribution</h2>

	<!-- 
	Projects are expected to arrive at Eclipse with existing code.
	
	Describe the existing code that will be contributed to the project. Please provide
	a couple of paragraphs describing the code with modest detail, including important
	information like code ownership (who holds the copyright?), and some consideration
	of community that exists around the code. Include a listing of third-party libraries 
	and associated licenses.
 -->
	<p>
		AGeSys consortium is offering ReqCycle as initial code base. See <a
			href="https://github.com/aradouan/ReqCycle/">ReqCycle gitHub</a>.
	</p>

	<h2>Third party libraries</h2>

	<ul>

		<li><a href="https://code.google.com/p/guava-libraries">Google
				guava</a> (license: <a href="http://www.apache.org/licenses/LICENSE-2.0">
				http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
		<li><a href="https://github.com/tinkerpop/blueprints/wiki">BluePrint
				: </a> (license: BSD-like license, <a
			href="https://github.com/tinkerpop/blueprints/raw/master/LICENSE.txt">
				https://github.com/tinkerpop/blueprints/raw/master/LICENSE.txt</a>)</li>
		<li><a href="http://www.openrdf.org/">OpenRDF Sesame : </a>
			(license: <a
			href="https://bitbucket.org/openrdf/sesame/raw/b21436e56ae5a0c1434117ccc5c97c7151a5fe05/core/LICENSE.txt">
				https://bitbucket.org/openrdf/sesame/raw/b21436e56ae5a0c1434117ccc5c97c7151a5fe05/core/LICENSE.txt</a>)</li>

	</ul>

	<h2>Legal Issues</h2>

	<!-- 
	Please describe any potential legal issues in this section. Does somebody else
	own the trademark to the project name? Is there some issue that prevents you
	from licensing the project under the Eclipse Public License? Are parts of the 
	code available under some other license? Are there any LGPL/GPL bits that you
	absolutely require?
 -->
	All contributions will be distributed under the Eclipse Public License.

	<h2>Committers</h2>

	<!-- 
	List any initial committers that should be provisioned along with the
	new project. Include affiliation, but do not include email addresses at
	this point.
 -->
	<p>The following individuals are proposed as initial committers to
		the project:</p>


	<dl>
		<dt>Anass RADOUANI, Atos</dt>
		<dd>He is a committer on several TOPCASED components including
			TOPCASED-requirement where he has made significant contributions over
			the last years. He is the main developer of ReqCycle</dd>
		<dt>Mathieu VELTEN, Atos</dt>
		<dd>He is an Eclipse committer on MDT Papyrus and works on
			TOPCASED.</dd>

	</dl>

	<p>We welcome additional committers and contributions.</p>

	<p>The following individual is proposed as leader of the project:</p>

	<dl>
		<dt>Rapha&euml;l Faudou, Samares Engineering</dt>
		<dd>He has written the ReqCycle specifications in the frame of ReqCycle
			project.</dd>
	</dl>


	<!--
	Describe any initial contributions of code that will be brought to the 
	project. If there is no existing code, just remove this section.
-->

	<h2>Mentors</h2>

	<!--
	New Eclipse projects require a minimum of two mentors from the Architecture
	Council. You need to identify two mentors before the project is created. The
	proposal can be posted before this section is filled in (it's a little easier
	to find a mentor when the proposal itself is public).
-->

	<p>The following Architecture Council members will mentor this
		project:</p>

	<ul>
		<li>Benoit LANGLOIS (Thales Global Services)</li>
		<li>Wayne Beaton</li>
	</ul>

	<h2>Interested Parties</h2>


	<!--
	Provide a list of individuals, organisations, companies, and other Eclipse
	projects that are interested in this project. This list will provide some
	insight into who your project's community will ultimately include. Where
	possible, include affiliations. Do not include email addresses.
-->
	<p>The following individuals, organisations, companies and projects
		have expressed interest in this project:</p>

	<ul>
		<li><a href='http://www.airbus.com'>Airbus</a></li>
		<li><a href='http://www.ansys.com'>Ansys</a></li>
		<li><a href='https://www.thalesgroup.com/'>Thales</a></li>
		<li><a href='http://www.scilab-enterprises.com//'>Scilab
				Enterprises</a></li>

	</ul>

	<h2>Project Scheduling</h2>

	<!--
	Describe, in rough terms, what the basic scheduling of the project will
	be. You might, for example, include an indication of when an initial contribution
	should be expected, when your first build will be ready, etc. Exact
	dates are not required.
-->
	<p>
	</p><ul>
		<li>November 2013: code submission and IP review</li>
		<li>January 2014: first builds on the Eclipse infrastructure.</li>
	</ul>
	<p></p>

	<h2>Changes to this Document</h2>

	<!--
	List any changes that have occurred in the document here.
	You only need to document changes that have occurred after the document
	has been posted live for the community to view and comment.
-->

	<table>
		<tr>
			<th>Date</th>
			<th>Change</th>
		</tr>
		<tr>
			<td>04-November-2014</td>
			<td>Document created</td>
		</tr>

	</table>

</body>
</html>

