Hi Kimbo
Thanks for the feedback - much appreciated! I was hoping that someone would say that these concepts were flexible!
I would like a less complicated life but sadly this seems to be the result when a bunch of simple ideas collide. I am trying to address the following simple-ish company needs:
- The need to have a documented agreement I can hand to a client (at technical project manager level) that states "this is what we are going to do in this project".
- The ability to test/verify that the contents of the above document have been fulfilled and that the software meets requirements.
- The ability to arbitrarily (at any point in the future) test/verify that the software product STILL meets all requirements that have accumulated over many projects/years.
(1) is satisfied by using an SRS, (2) can be achieved using tests based on requirements listed in the SRS.
I think it is really (3) that causes the complexity. For example, in 3 years time (and many unrelated modifications later) I want to test that the requirements laid down in todays project are STILL met. Therefore any system requirements must be constructed in such a way that they are still coherent (both in content and numbering) in 3 years time, outside the context of this project. Matters are further complicated by projects that change requirements introduced by previous projects. These need to be managed so that there is only one "correct" view of all the requirements for the latest version of the product.
I've been running with the system I suggested yesterday and it seems to be working nicely:
I have a project SRS that lists the features of the existing product to be added or modified. Each feature has a "Description" section that lays out in plain english (more or less taken from user requirements) how the product is to be modified in project-context language. E.g. "The system currently does XYZ but we are going to change it slightly so it does WXYZ".
Then, in a sub-section I am listing "Amended Existing Requirements". This section states any conflicting system-level requirements that already exist in the requirements database using their existing numbers e.g. "FR140: The system shall do XYZ". The modification to the requirement is shown and is in ABSOLUTE terms (not project context) e.g. "FR140: The system shall do XYZ WXYZ".
A further sub-section lists any new system requirements, again in absolute terms (no use of the word "change"). The numbering system is coherent with the requirements database and not related to the project or SRS.
With the above process, I end up with a verifiable SRS document where both new and amended system requirements will end up in the main requirement database ready for regression testing in the later life of the product.
I think you are absolutely right to suggest we lean away from formally-stated requirements and more towards diagrams. It would seem you can express requirements in many ways in an SRS e.g. use cases, use case diagrams, flow diagrams. All nicely verifiable too! I am going to use Sparx Enterprise Architect as the repository for all product requirements. This way I can easily introduce use case diagrams etc and manage them in the SRS in exactly the same way as formal requirements detailed above: "Description of feature, Amended Existing Use-cases, New Use Cases".
Hopefully this should give the best of both worlds!
Ross