doorstop-dev / doorstop

Requirements management using version control.
https://doorstop.readthedocs.io
Other
466 stars 128 forks source link

Safety critical systems adaptations #561

Open neerdoc opened 2 years ago

neerdoc commented 2 years ago

I believe that doorstop should be improved to allow the use in safety-critical domains. The discussions have been ongoing for some time, and I do believe that there is somewhat of a consensus that it should be possible, after all, it does intend to replace one of the major players in the safety-critical requirements domain!

This issue tries to gather all of the discussions around this:

If the decision is made to improve doorstop to the point of it actually being possible to use as-is in a safety-critical project, a number of changes should be done. Anyone with experience in the area should feel free to add to the list:

alexkm commented 2 years ago

I think this should also link to #471

Multiple parents - requirements and/or texts can have multiple parents, so this should be allowed.

I would certainly find this useful, particularly coupled with "link attributes" later on in your list.

History - an easy way to extract the complete history of a single requirement. / Diff publish - Publish a difference report between two git-hashes

Should this not be achieved using your version control system rather than doorstop itself? The doorstop items are all individually tracked files.

make sure that everything that should be tracked for changes is included in the hash calculation, even custom attributes

This can be done already in the .doorstop.yml for a document. You can set custom attributes to be included in the hash:

attributes: 
  reviewed:
    - rationale
    - type
  defaults:
    type: requirement
    rationale:
    notes:
  publish:
    - rationale
    - notes

Rules to check that different attributes are within limits.

This can be done already with a validation script using Validation Hooks.

git hash on publish command

Doorstop currently supports more than just git. It would be a shame to limit this to git only. Perhaps a hook to add a calculated field or environment variable to published doc instead? Could then call a script to grab changeset id, or any other relevant detail.

Add rationale to all normative items.

I think this should be optional, and can be achieved already with custom attributes in .doorstop.yml and enforced with a validation script.

ckolumbus commented 2 years ago

Hi everyone interested in "multiple parents": i've implemented a suggestion that mimics the behavior that we use within the healthcare environment #569 .

Could you please review the proposal and let me know whether this would solve this for you scenarios as well?

jmvillalba commented 1 year ago

@neerdoc Great post. I'm reading it slowly. Really interesting.

@ckolumbus I'm going to check your multiple parents solution.

I think that this post is the future of doorstop. @jacebrowning have the requirement that the implementation don't break the validation and publishing implementation.

If @jacebrowning let us know if the @ckolumbus implementation concept it's fine for him it will be a great support in order to concentrate efforts.

Best regards

ckolumbus commented 1 year ago

@jmvillalba if you have suggestions please let me know. I'm happy to identify the best possible solution together 👍🏽

RoggeHaj commented 1 year ago

@neerdoc

History - an easy way to extract the complete history of a single requirement. This would solve many traceability requirements, e.g., DO-178.

What part of DO-178 requires the complete history for a requirement? I was under the impression that you only need to be able to provide the versions relevant for specific reviews.

neerdoc commented 1 year ago

@RoggeHaj

What part of DO-178 requires the complete history for a requirement? I was under the impression that you only need to be able to provide the versions relevant for specific reviews.

I was perhaps a bit sweeping in my statement. You are correct in that pure traceability between requirements, design, implementation, tests and binary is only required in a specific review. But if you take in the larger picture with change control with baselines and traceability therein, it is clear (at least to me) that perserving the history of a requirement is one of the easier ways to achieve this.

As an example, if you have done a CDR for a software and then find a change that needs to be implemented due to whatever reason, then if you have a complete history of the changes and can prove that, the new CDR must only handle the change and all items it affects. If you do not have the difference, the new CDR must handle everthing.

Another example is requirement gliding. Especially for large organizations with software that are around for many years, it will be crucial to be able to trace changes backwards in time to when a requirement was changed, by whom, from what and why.

A third example would be to prove life-cycle data points for a software.

So, to summarize: In my head I tend to handle traceability, change management and life cycle data as one as they are easily controlled in the same manner; as an example, by the complete history of all items.