-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
375 lines (366 loc) · 20.4 KB
/
index.html
File metadata and controls
375 lines (366 loc) · 20.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<title>reqT - Requirements Engineering Tool</title>
<style>
/* Default styles provided by pandoc.
** See https://pandoc.org/MANUAL.html#variables-for-html for config info.
*/
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
/* CSS for syntax highlighting */
html { -webkit-text-size-adjust: 100%; }
pre > code.sourceCode { white-space: pre; position: relative; }
pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
pre > code.sourceCode > span:empty { height: 1.2em; }
.sourceCode { overflow: visible; }
code.sourceCode > span { color: inherit; text-decoration: inherit; }
div.sourceCode { margin: 1em 0; }
pre.sourceCode { margin: 0; }
@media screen {
div.sourceCode { overflow: auto; }
}
@media print {
pre > code.sourceCode { white-space: pre-wrap; }
pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
}
pre.numberSource code
{ counter-reset: source-line 0; }
pre.numberSource code > span
{ position: relative; left: -4em; counter-increment: source-line; }
pre.numberSource code > span > a:first-child::before
{ content: counter(source-line);
position: relative; left: -1em; text-align: right; vertical-align: baseline;
border: none; display: inline-block;
-webkit-touch-callout: none; -webkit-user-select: none;
-khtml-user-select: none; -moz-user-select: none;
-ms-user-select: none; user-select: none;
padding: 0 4px; width: 4em;
color: #aaaaaa;
}
pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
div.sourceCode
{ }
@media screen {
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
}
code span.al { color: #ff0000; font-weight: bold; } /* Alert */
code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
code span.at { color: #7d9029; } /* Attribute */
code span.bn { color: #40a070; } /* BaseN */
code span.bu { color: #008000; } /* BuiltIn */
code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
code span.ch { color: #4070a0; } /* Char */
code span.cn { color: #880000; } /* Constant */
code span.co { color: #60a0b0; font-style: italic; } /* Comment */
code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
code span.do { color: #ba2121; font-style: italic; } /* Documentation */
code span.dt { color: #902000; } /* DataType */
code span.dv { color: #40a070; } /* DecVal */
code span.er { color: #ff0000; font-weight: bold; } /* Error */
code span.ex { } /* Extension */
code span.fl { color: #40a070; } /* Float */
code span.fu { color: #06287e; } /* Function */
code span.im { color: #008000; font-weight: bold; } /* Import */
code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
code span.kw { color: #007020; font-weight: bold; } /* Keyword */
code span.op { color: #666666; } /* Operator */
code span.ot { color: #007020; } /* Other */
code span.pp { color: #bc7a00; } /* Preprocessor */
code span.sc { color: #4070a0; } /* SpecialChar */
code span.ss { color: #bb6688; } /* SpecialString */
code span.st { color: #4070a0; } /* String */
code span.va { color: #19177c; } /* Variable */
code span.vs { color: #4070a0; } /* VerbatimString */
code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
</style>
<link rel="stylesheet" href="pandoc.css" />
<link rel="icon" type="image/jpg" href="favicon.jpg" />
</head>
<body>
<div id="header">
<img src="favicon.jpg" width="100" class="headimg">
</div>
<header id="title-block-header">
<h1 class="title">reqT - Requirements Engineering Tool</h1>
</header>
<nav id="TOC" role="doc-toc">
<ul>
<li><a href="#download" id="toc-download">Download</a></li>
<li><a href="#what-is-reqt" id="toc-what-is-reqt">What is reqT?</a></li>
<li><a href="#why-reqt" id="toc-why-reqt">Why reqT?</a></li>
<li><a href="#getting-started" id="toc-getting-started">Getting
started</a></li>
<li><a href="#using-the-reqt-desktop-app"
id="toc-using-the-reqt-desktop-app">Using the reqT desktop app</a></li>
<li><a href="#using-reqt-with-scala"
id="toc-using-reqt-with-scala">Using reqT with Scala</a></li>
<li><a href="#reqt-command-line-arguments"
id="toc-reqt-command-line-arguments">reqT command line
arguments</a></li>
<li><a href="#publications" id="toc-publications">Publications</a></li>
</ul>
</nav>
<h2 id="download">Download</h2>
<p>Latest version: <b> 4.6.3 </b> All versions: <a
href="https://github.com/reqT/reqT/releases">reqT</a> <a
href="https://github.com/reqT/reqT-lang/releases">reqT-lang</a></p>
<div id="downloadButtons">
<button type="button" class="button" onclick='window.location.href="https://github.com/reqT/reqT/releases/latest/download/reqT.jar"'>
<a href="https://github.com/reqT/reqT/releases/latest/download/reqT.jar"> Desktop App </a>
</button>
<button type="button" class="buttMaintainer of reqT: Prof. Björn Regnell. Used at Lund University in this course.on" onclick='window.location.href="https://github.com/reqT/reqT-lang/releases/latest/download/reqT-quickref-GENERATED.pdf"'>
<a href="https://github.com/reqT/reqT-lang/releases/latest/download/reqT-quickref-GENERATED.pdf"> Quickref </a>
</button>
<button type="button" class="button" onclick='window.location.href="https://github.com/reqT"'>
<a href="https://github.com/reqT"> Source Code </a>
</button>
<button type="button" class="button" onclick='window.location.href="https://github.com/reqT/reqT-lang/blob/main/docs/langSpec-GENERATED.md"'>
<a href="https://github.com/reqT/reqT-lang/blob/main/docs/langSpec-GENERATED.md"> Language Spec </a>
</button>
</div>
<p>
Latest <b>reqT.jar</b> from: <a href="https://tinyurl.com/yc4zsxy3">
tinyurl.com/get-reqT</a>
</p>
<pre>curl -L https://tinyurl.com/get-reqT -o reqT.jar</pre>
<h2 id="what-is-reqt">What is reqT?</h2>
<p><strong>reqT</strong> is a <em>flexible</em> and <em>scalable</em>
open source <strong>requirements engineering tool</strong> for software
developers and learners, available as a desktop application and a Scala
library.</p>
<p>With reqT you can specify requirements using a simple requirements
modelling language called <strong>reqT-lang</strong> with essential
requirements engineering concepts, giving structure to natural language
requirements, while enabling analysis, visualization and automation.</p>
<p>Visit the
<a href="https://github.com/reqT/reqT-lang/releases/latest/download/reqT-quickref-GENERATED.pdf"><strong>Quickref</strong></a>
to explore requirements engineering concepts in reqT-lang.</p>
<p>The reqT-lang syntax is a small subset of <a
href="https://en.wikipedia.org/wiki/Markdown">Markdown</a> using bullet
lists with indentation and special keywords, to express textual
requirements models by connecting <span
class="EntType"><em>entities</em></span> via <span
class="RelType"><em>relations</em></span> to <span
class="StrAttrType"><em>attributes</em></span>, as in this example:</p>
<pre><code>* <span class="EntType">Feature</span>: helloWorld <span class="RelType">has</span>
* <span class="StrAttrType">Spec</span>: Print a nice greeting.
* <span class="StrAttrType">Why</span>: First step to get started.
</code></pre>
<p><em>Maintainer of reqT:</em> <a
href="https://cs.lth.se/bjorn-regnell">Prof. Björn Regnell</a>. reqT is
used at Lund University in <a
href="https://lunduniversity.github.io/krav/">this course</a>.</p>
<h2 id="why-reqt">Why reqT?</h2>
<p>With reqT you can…</p>
<ol type="1">
<li>Model, analyse, visualize and prioritize requirements.</li>
<li>Manage requirements in issues and git using simple markdown
syntax.</li>
<li>Combine natural language with formal structure.</li>
<li>Flexibly mix abstraction levels and modelling approaches.</li>
<li>Integrate requirements and test specification.</li>
<li>Export, import and visualize requirements via open formats.</li>
<li>Manipulate models with expressive, safe and convenient Scala
programs.</li>
<li>Allocate requirements to releases with constraint solving.</li>
<li>Express prompts for spec-driven development with generative AI
.</li>
</ol>
<p>… using a simple markdown-based language in an open source tool and
library.</p>
<h2 id="getting-started">Getting started</h2>
<ul>
<li><p>Make sure you have <a
href="https://adoptium.net/temurin/releases/?package=jdk&version=21">Java
21 - LTS</a> and <a href="https://www.scala-lang.org/download/">Scala
3</a> installed for your specific system. Check this in terminal using:
</br><code>java -version</code></br><code>scala -version</code></br> (If
you use other versions you may get warnings, but things could work
anyway.)</p></li>
<li><p>Download <a
href="https://github.com/reqT/reqT/releases/latest/download/reqT.jar"><strong>reqT.jar</strong></a>
and double-click the downloaded file or run in terminal using:
<code>java -jar reqT.jar</code></p></li>
<li><p>Learn more about <a href="#using-the-reqt-desktop-app">using the
reqT desktop app</a> and <a href="#using-reqt-with-scala">using reqT
with Scala</a>.</p></li>
<li><p>Visit the reqT <a
href="https://github.com/reqT/reqT-lang/releases/latest/download/reqT-quickref-GENERATED.pdf"><strong>Quickref</strong></a>
to learn about the concepts in reqT-lang.</p></li>
<li><p>Do the <a href="quiz"><strong>reqT Quiz</strong></a> to check
your knowledge of requirements modelling concepts.</p></li>
<li><p>Do the <strong>reqT labs</strong> to learn about using reqT in
Requirements Engineering:</p>
<ul>
<li><a
href="https://github.com/reqT/reqT/blob/4.x/docs/lab1.md"><strong>Lab
1</strong>: Context, Features and Priorities</a></li>
<li><a
href="https://github.com/reqT/reqT/blob/4.x/docs/lab2.md"><strong>Lab
2</strong>: Quality Requirements and Release Planning</a></li>
<li>These labs are part of the <a
href="https://lunduniversity.github.io/krav/"><em>ETSN15 Requirements
Eng.</em></a> course at Lund Univ.</li>
</ul></li>
</ul>
<h2 id="using-the-reqt-desktop-app">Using the reqT desktop app</h2>
<ul>
<li><p>Download <a
href="https://github.com/reqT/reqT/releases/latest/download/reqT.jar">reqT.jar</a>
and start by double-click or open a terminal and navigate to the folder
with the downloaded file and type:
<code>java -jar reqT.jar</code></p></li>
<li><p>The main window of the reqT desktop app has menus and three panes
as shown in the image below:
<img src="img/screen1.png" alt="reqT Main Window" width="100%"/></p>
<ol type="1">
<li><p>The left pane is called the <strong>Tree</strong> where your reqT
model is shown as a hierarchy of (un)foldable and selectable nodes. The
model is updated by the <em>Tree</em> menu. If you want to edit a
selected Tree node then select <em>Tree -> Edit Selected Node in
Editor (Ctrl+E)</em>. The Tree is not updated until you explicitly issue
an update, for example using <em>Tree -> Replace Selected Node from
Editor (Ctrl+R)</em>.</p></li>
<li><p>The middle pane is a text <strong>Editor</strong> with reqT-lang
syntax highlighting and completion using <em>Ctrl+Space</em>. It can be
manipulated using the <em>Editor</em> menu. Editing of model fragments
is <em>independent</em> of the Tree pane. You can copy your edits into
the Tree <em>explicitly</em> by using the <em>Tree</em> menu or the
shortcuts shown in that menu.</p></li>
<li><p>The right pane contains the <strong>Log</strong> where help
messages are printed. You can use the <em>Log</em> menu to change line
wrapping, increase/decrease font size, and clear the log.</p></li>
</ol></li>
<li><p>You can use the <em>View</em> menu to toggle pane orientation,
fullscreen, window title, and increase/decrease the menu and tree font
size.</p></li>
<li><p>You can use the <em>Tools</em> menu to apply different
pre-defined tools to your model.</p></li>
<li><p>You can use the <em>Export</em> menu to save your model in
different formats, such as html and LaTex. If you have <a
href="https://graphviz.org/">GraphViz</a> installed on your path, you
can visualize your model as a nested or flat graph.</p></li>
<li><p>You can use the <em>Template</em> menu to enter example models
into the editor.</p></li>
<li><p>You can use the <em>Help</em> menu to print help messages in the
Log and see the current version of reqT using the <em>About</em> menu
item.</p></li>
</ul>
<h2 id="using-reqt-with-scala">Using reqT with Scala</h2>
<ul>
<li>Start reqT in the <a
href="https://docs.scala-lang.org/scala3/book/taste-repl.html">Scala
REPL</a> using: <code>java -jar reqT.jar repl</code> </br> You can
create a requirements Model in the scala repl like so:</li>
</ul>
<div class="sourceCode" id="cb1"><pre
class="sourceCode scala"><code class="sourceCode scala"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a>scala<span class="op">></span> <span class="kw">val</span> m <span class="op">=</span> <span class="st">"* Feature: helloWorld has Spec: print greeting"</span><span class="op">.</span>toModel</span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a><span class="kw">val</span> m<span class="op">:</span> reqt<span class="op">.</span>Model <span class="op">=</span> </span>
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a> <span class="fu">Model</span><span class="op">(</span><span class="fu">Rel</span><span class="op">(</span><span class="fu">Ent</span><span class="op">(</span>Feature<span class="op">,</span>helloWorld<span class="op">),</span>Has<span class="op">,</span></span>
<span id="cb1-4"><a href="#cb1-4" aria-hidden="true" tabindex="-1"></a> <span class="fu">Model</span><span class="op">(</span><span class="fu">StrAttr</span><span class="op">(</span>Spec<span class="op">,</span>print greeting<span class="op">))))</span></span>
<span id="cb1-5"><a href="#cb1-5" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-6"><a href="#cb1-6" aria-hidden="true" tabindex="-1"></a>scala<span class="op">></span> <span class="fu">println</span><span class="op">(</span>m<span class="op">.</span>show<span class="op">)</span></span>
<span id="cb1-7"><a href="#cb1-7" aria-hidden="true" tabindex="-1"></a><span class="fu">Model</span><span class="op">(</span></span>
<span id="cb1-8"><a href="#cb1-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">Feature</span><span class="op">(</span><span class="st">"helloWorld"</span><span class="op">)</span> has <span class="fu">Spec</span><span class="op">(</span><span class="st">"print greeting"</span><span class="op">),</span></span>
<span id="cb1-9"><a href="#cb1-9" aria-hidden="true" tabindex="-1"></a><span class="op">)</span></span></code></pre></div>
<ul>
<li>You can use reqT in Scala programs for automated requirements
analysis.
<ul>
<li>Download example: <a
href="https://github.com/reqT/reqT.github.io/blob/master/src/hello-reqt.scala"><code>hello-reqt.scala</code></a>
and run in terminal using: <br>
<code>scala run hello-reqt.scala</code></li>
</ul></li>
</ul>
<div class="sourceCode" id="cb2"><pre
class="sourceCode scala"><code class="sourceCode scala"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="co">//> using scala 3.6.4</span></span>
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a><span class="co">//> using dep "reqt:reqt:4.6.3,url=https://github.com/reqT/reqT/releases/download/v4.6.3/reqT-4.6.3.jar"</span></span>
<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb2-4"><a href="#cb2-4" aria-hidden="true" tabindex="-1"></a><span class="kw">import</span> reqt<span class="op">.*</span></span>
<span id="cb2-5"><a href="#cb2-5" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb2-6"><a href="#cb2-6" aria-hidden="true" tabindex="-1"></a><span class="kw">val</span> m <span class="op">=</span> <span class="fu">Model</span><span class="op">(</span></span>
<span id="cb2-7"><a href="#cb2-7" aria-hidden="true" tabindex="-1"></a> <span class="fu">Feature</span><span class="op">(</span><span class="st">"helloWorld"</span><span class="op">).</span><span class="fu">has</span><span class="op">(</span></span>
<span id="cb2-8"><a href="#cb2-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">Spec</span><span class="op">(</span><span class="st">"Print a nice greeting."</span><span class="op">),</span></span>
<span id="cb2-9"><a href="#cb2-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">Why</span><span class="op">(</span><span class="st">"First step to get started."</span><span class="op">),</span></span>
<span id="cb2-10"><a href="#cb2-10" aria-hidden="true" tabindex="-1"></a> <span class="op">)</span></span>
<span id="cb2-11"><a href="#cb2-11" aria-hidden="true" tabindex="-1"></a> <span class="op">)</span></span>
<span id="cb2-12"><a href="#cb2-12" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb2-13"><a href="#cb2-13" aria-hidden="true" tabindex="-1"></a>@main <span class="kw">def</span> hello <span class="op">=</span> </span>
<span id="cb2-14"><a href="#cb2-14" aria-hidden="true" tabindex="-1"></a> <span class="fu">println</span><span class="op">(</span>m<span class="op">.</span>toMarkdown<span class="op">)</span></span></code></pre></div>
<ul>
<li><p>Visit the <a
href="https://fileadmin.cs.lth.se/reqt-lang/api"><strong>reqT-lang
api</strong></a> and <a
href="https://github.com/reqT/reqT-lang/"><strong>source
code</strong></a></p></li>
<li><p>Visit the <a
href="https://fileadmin.cs.lth.se/reqt/api"><strong>reqT app
api</strong></a> and <a
href="https://github.com/reqT/reqT/"><strong>source
code</strong></a></p></li>
</ul>
<h2 id="reqt-command-line-arguments">reqT command line arguments</h2>
<ul>
<li>See the command line arguments available using the <code>help</code>
argument:</li>
</ul>
<pre><code>$ java -jar reqT.jar help
Welcome to reqT 4.6.3 https://reqT.github.io
Main program args:
<none> open a reqT window with empty model
edit f1 f2 for each file open a window with model from file
repl start the scala repl and do 'import reqt.*'
quiz start a quiz game in terminal
version print version, also -v --version
help print this message, also -h, --help
</code></pre>
<ul>
<li>Visit the reqT main program code: <a
href="https://github.com/reqT/reqT/blob/4.x/src/main/scala/Main.scala">Main.scala</a></li>
</ul>
<h2 id="publications">Publications</h2>
<ul>
<li><p><strong>What is essential? – a pilot survey on views about the
requirements metamodel of reqT</strong>, <em>Björn Regnell</em>, <a
href="pub/what-is-essential-REFSQ2016.pdf">download pdf</a> published at
<a href="http://refsq.org/2016">REFSQ2016</a>.</p></li>
<li><p><strong>Towards a Semi-Formal, Open and Scalable Requirements
Modeling Tool</strong>, <em>Björn Regnell</em>, <a
href="pub/reqT-REFSQ2013.pdf">download pdf</a> published at <a
href="http://refsq.org/2013">REFSQ2013</a>.</p></li>
<li><p><strong>A Scala Embedded DSL for Combinatorial Optimization in
Software Requirements Engineering</strong>, <em>Björn Regnell and
Krzysztof Kuchcinski</em>, <a href="pub/reqT-COSpeL2013.pdf">download
pdf</a> published at First Workshop on Domain Specific Languages in
Combinatorial Optimization (COSpeL’2013).</p></li>
<li><p><strong>A Scala DSL for Constraint-based Requirement Engineering
using JaCoP</strong>, <em>Björn Regnell</em>, <a
href="pub/reqT-sweconsnet2013.pdf">download pdf</a> presented at <a
href="https://www.lth.se/index.php?id=70383">SweConsNet Workshop
2013</a>.</p></li>
</ul>
<div id="footer">
<p>reqT Repositories: <a
href="https://github.com/reqT/">github.com/reqT</a> reqT Maintainer:
<a href="https://cs.lth.se/bjorn-regnell/">Prof. Björn Regnell</a></p>
</div>
</body>
</html>