diff -r 8bda15db8a3d -r 7155027c2be4 ssm-en.xhtml
--- a/ssm-en.xhtml Wed Aug 31 11:45:16 2016 +0200
+++ b/ssm-en.xhtml Wed Nov 28 17:13:23 2018 +0100
@@ -26,6 +26,7 @@
Documented
- At least basic documentation must be released under a free license (GNU FDL is recommended).
+ - Every advertised feature must be properly documented. Undocumented features can not be considered as features from the user/customer point-of-view.
- There might be also other documentation/books released under any license and price.
- But average software engineer must be able to build and operate the software with just the free (basic) documentation.
- There must be a free documentation with description of building and running the software on a fresh operating system installation including description of all dependencies.
@@ -42,7 +43,7 @@
- If there is a need of some marketing or cool versioning/codenames like Ultrasonic Umbrella or 2016, they should be used in addition to semantic versioning, not instead of it.
- Once publicly released, the package must not be changed anymore – if a change (even a small fix) is needed, new version number must be assigned.
-
- APIs, file formats and protocols might be semanticly versioned independently from the implementation;
+ APIs, file formats and protocols might (and usually should) be semanticly versioned independently from the implementation;
in such case, there should be a table documenting which API/format/protocol version matches which implementation version.
@@ -53,13 +54,13 @@
Don't broke things – rather postpone the release date than deliver a faulty product.
Don't remove features unless they are really obsolete, unused or unrepairably broken.
Incompatible changes must be planned and announced in advance.
- upgrade scripts + upgrade documentation
+ Upgrade scripts and upgrade documentation must be provided.
Compatible with others
- use open standards (protocols, formats) if they exist
- - define own open standards if needed
+
- define and publish own open standards if needed
- also standards must be semantically versioned
- should be written in machine readable format (WSDL, WADL, ASN.1, XSD, Diameter dictionary etc.) or at least formal language (Backus–Naur Form, EBNF etc.)
@@ -82,11 +83,11 @@
- able to be extended
- by configuration (RegExp, SQL, XSLT, XPath etc.)
- - by scripting (Guile, Bash, ECMA Script etc.)
+ - by scripting (Guile, Bash, Python, Lua, ECMA Script etc.)
- and/or third-party plugins/modules
- it should be easy to create a third-party module and plug it in an existing system
- - dependencies needed to write an extension (i.e. header files, API classes/interfaces) should be as small as possible (do not require large codebase to write a mere plug-in)
+ - dependencies needed to write an extension (i.e. header files, API classes/interfaces) should be as small as possible (do not require large codebase to write a mere plug-in); the required dependency should contain just interfaces (method/function signatures) and data structures but no implementation (executable code)
@@ -99,6 +100,7 @@
- there should be automated build-time complex tests for the package – feed the program with sample input and verify expected output
- there should be also automated runtime/postinstall tests – in order to verify that software was installed properly, all required dependencies are met and basic function is guaranteed – the program should report problem during its start (as a warning if it is not fatal), instead of unexpected failures during operation
- unit tests are recommended for code parts that are internally complex (algorithms, important business logic) and have simple interfaces
+ - each external interface should contain procedure/function that does nothing important or heavy, is idempotent and returns simple response which proves that the interface (connection) is working (e.g. echo, print version, status or current time); if authentication and authorization mechanisms are present, there should be one procedure/function callable anonymously and one that requires authorization
Safe code and sustainability
@@ -106,8 +108,9 @@
- correctness, safety and readability is prefered to performance
- use strong data typing, declare preconditions and possible exceptions
- data structures must be known and well documented – don't use undocumented map keys or properties
- - code, comments and analysis should be written in the same natural language
+ - code, comments and specification should be written in the same natural language
- there should be a dictionary of used terms, so whole team and also users and customers will speak same language
+ - fail fast – errors in the code should be reported during build time or at least on first execution – don't silently continue if given error would lead to failure later in another part of the code – bad weak coupling leads to difficult debugging
Small code footprint