Replies: 6 comments 5 replies
|
I asked the question to Gemini Pro, and here is what he proposed: (Continuing my example of fetchers)
|
|
I was facing a similiar issue when creating my own requirements tracing suite flashtrace, here is how I am handling it there. My approach is that instead of relying on artifact types alone, one could optionally specify the explicit needs for a requirement instead of a generative need of some artifact type. That means you can write As this would be scaling bad, you could use grouping, meaning the name of a specification item can be written as This is similar to your approach 3 above, but instead of bloating the artifact set, essentially polluting it and making it less identifiable, it scales on the name by using groups. But it admittedly makes the
|
|
I was thinking of introducting a notion of "entities" (maybe not the best name). So alongside the requirements, one would also link them to an "entity type". And then in the code you introduce new entities I guess semantically it's the same as the 3rd approach proposed by Gemini, but the notion of entities just removes the code duplication |
|
Cross-cutting concerns are always a headache in requirement engineering. As soon as an "all" appears in a requirement, you know you are in for a maintenance issue. @MentorFilou's approach to require full ids instead of just the artifact type is one that is typical. It's safe from a linking perspective. The main issue is that it breaks the abstraction. Suddenly the abstract item learns details (IDs) of the concrete ones. And, if the document with the requirements has a different author than the code, two roles start modifying the specs. That's why OFT only declares needed artifact types. Also, keeping bidirectional links aligned by hand is hard. I admit though that the one-item coverage is enough has it's own issues. |
|
I am thinking about a feature like this to avoid coupling: `dsn~fetchers-handle-404~1`
**All** fetchers handle a HTTP 404 safely.
Needs: impl, utest
Match tags: fetcherIn the code: // [oft.tags: fetcher]
class LogFetcher
{
// ...
// [impl -> dns~fetchers-handle-404~1]
private void handleClientErrors(final int errorCode)
{
// ...
}
}
You would still need to annotate the class with the |
|
How about this: `dsn~fetchers-handle-404~1`
**All** fetchers handle a HTTP 404 safely.
Needs: impl, utest
Match tags: `.*-fetcher.*`In the code: // [oft.tags: log-fetcher]
class LogFetcher
{
// ...
// [impl -> dns~fetchers-handle-404~1]
private void handleClientErrors(final int errorCode)
{
// ...
}
}The regex would match all. But the message can contain the list of concrete matches. |
Uh oh!
There was an error while loading. Please reload this page.
Dislaimer: I don't have a solid background in requirement tracing.
The typical use case of OFT is to write 1 requirement and link 1 place of code that implements this requirement.
However, I often see that people create requirements like:
All fetchers should handle 404 errors and return empty results, which is a universal statement. However, it cannot be handled really, because if someone links at least one fetcher A, then the requirement will be considered as covered, even though, fetchers B/C/D might not implement it.So, my questions are:
All reactions