summaryrefslogtreecommitdiff
path: root/index.mdwn
blob: ec0d05a4eccc116a77794715618816f203f2e9b7 (plain)
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
[[!meta title="Subplot"]]

[[Download]] —
[[Documentation|docs]] ([[FAQ]]) —
[[Contact]] —
[[License]] —
[[Blog]]

[[!img subplot.svg class=float_right
   alt="Subplot alpha logo"]]


## When all stakeholders really need to understand acceptance criteria

Capture and communicate acceptance criteria for software and systems,
and how they are verified, in a way that's understood by all project
stakeholders, including end-users.

Subplot is a set of tools for specifying, documenting, and
implementing automated acceptance tests for systems and software.
Subplot tools help produce a human-readable document of acceptance
criteria and a program that automatically tests a system against those
criteria.

Subplot is currently in its ALPHA stage.


## Latest from the project

<div class="newslist">
[[!inline pages="page(blog/*)" 
  limit=5 template=titlepage archive=yes trail=no feeds=no]]
</div>


## Participate

Subplot is a community project: it is developed by some people who
want to do it. You could help!

* [[Governance]] model
* [[Code of conduct|conduct]]
* [[Architecture]]
* [[Definition of success|success]]
* [[Contributing]] to the project
* [[Contact]] the project

Please note that this project is released with a [[Contributor Code of
Conduct|conduct]]. By participating in this project you agree
to abide by its terms.


## Examples

The [documentation][] site has examples that are from the Subplot
source repository and typeset and tested by CI, so they're always up
to date. This means the examples always work.

[documentation]: https://doc.subplot.tech/

Below is a pretty minimal example.

~~~~~{.markdown .numberLines}
---
title: "**echo**(1) acceptance tests"
template: python
bindings: echo.yaml
functions: echo.py
...

Introduction
=============================================================================

**echo**(1) is a Unix command line tool, which writes its command line
arguments to the standard output. This is a simple acceptance test
suite for the `/bin/echo` implementation.

No arguments
=============================================================================

```scenario
when user runs echo without arguments
then exit code is 0
then standard output contains a newline
then standard error is empty
```

Hello, world
=============================================================================

```scenario
when user runs echo with arguments hello, world
then exit code is 0
then standard output contains "hello, world"
then standard error is empty
```
~~~~~

See actual, working, tested examples:

* The Unix echo command
  ([html](https://doc.subplot.tech/echo.html),
  [source](https://gitlab.com/subplot/subplot/-/blob/main/examples/echo/echo.md)).

* A hypothetical JSON store with access control and a web API
  ([html](https://doc.subplot.tech/muck.html),
  [source](https://gitlab.com/subplot/subplot/-/blob/main/examples/muck/muck.md)).

* Subplot's own acceptance criteria, a non-trivial example
  ([html](https://doc.subplot.tech/subplot.html),
  [source](https://gitlab.com/subplot/subplot/-/blob/main/subplot.md)).

# Architecture


```dot
digraph "architecture" {
md [label="foo.md \n (document, Markdown)"];
md [shape=box];

bindings [label="foo.yaml \n (bindings, YAML)"];
bindings [shape=box];

impl [label="foo.py \n (step implemenations, Python)"]
impl [shape=box];

subplot [label="Subplot"];
subplot [shape=ellipse];

pdf [label="foo.pdf \n PDF (generated)"]
pdf [shape=note];

html [label="foo.html \n HTML (generated)"]
html [shape=note];

testprog [label="test.py \n test program\n(generated)"]
testprog [shape=note];

report [label="Test report \n (stdout of test.py)"]
report [shape=note];

md -> subplot;
bindings -> subplot;
impl -> subplot;
subplot -> pdf;
subplot -> html;
subplot -> testprog;
testprog -> report;
}
```


# A bonus kitten

Because you scrolled all the way down.

[[!img kitten.jpg class=float_right
   alt="Kitten being adorable. By Ckahler on English Wikipedia"]]