2 ms·
> One might also ask how one encodes motivational statements into a more formal spec. Well, you can always add preambles or annotations that are not machine-re
by xg15 5y ago
> One might also ask how one encodes motivational statements into a more formal spec.
Well, you can always add preambles or annotations that are not machine-readable.
If you really want to stay machine-readable, you could try to work with logical proposition languages, such as PROLOG. Also, I think goal trees (or goal DAGs) could be interesting. Something along the lines of "Our top-level is to help the user maintain invariant A. To archieve this, we implement features B, C, D. Feature B requires technical change E in service X while features C and D must be developed jointly and will require changes F and G in services X and Y..."
Of course something like this always looks vastly simpler than it actually is. I think in many cases, you'll be hard-pressed to even formulate a top-level goal in ordinary language. (Apart from the real goal: Someone from the C-Suite wants this feature)
The question also remains: What do you want to do with that machine-readable representation. The best representation will be strongly dependent on your use-cases - and formal languages without clear use-cases have a risk of devolving into cargo-cults and empty rituals. (See the whole navel-gazing around REST and HATEOAS)
- pfdietz 5y agoThere are many things one might do with such a representation. One that I am particularly interested in is connecting it to a program that implements the specification. That is, link the functions, variables, types, etc. of the program to corresponding parts of the spec. One could use this to generate documentation, traceability matrices, to generate unit tests for parts of the program, and to support evolution of the program as the specification changes.