Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Non-functional requirements format #1223

Closed
bmaclach opened this issue Apr 24, 2019 · 9 comments
Closed

Non-functional requirements format #1223

bmaclach opened this issue Apr 24, 2019 · 9 comments
Assignees

Comments

@bmaclach
Copy link
Collaborator

In Drasil, non-functional requirements are listed out in a single sentence, like so:

image

In the manual version of SSP, I changed this to a more formal list with more description:

image

Is the current Drasil behaviour enough, or is the more descriptive list preferred? The way Drasil renders non-functional requirements is common between all of the examples, so if we change it the change will need to be propagated to the rest of the examples, not just SSP.

@smiths
Copy link
Collaborator

smiths commented Apr 24, 2019

@bmaclach, I definitely like the idea of breaking down the nonfunctional requirements into separate requirements. It was never the long-term intention to just use one sentence to summarize the NFRs. We did that because the NFRs were not initially a priority, and we had enough to do with the FRs.

I like the idea of adding separate NFRs, but I don't really like your specific examples, since they aren't abstract. You say how to achieve usability, not what it means to be usable. The challenge is that stating NFRs in the right way is far from easy. That is why we keep "punting" it to the future.

In the long run, I would like to see the NFRs expanded into considerably more information. We might want to explore the Volere templates notion of "fit criterion." For instance, for usability, the requirement could be an experiment, or survey that measures usability. Alternatively, it could be a count of the number of interactions (mouse clicks, keys pressed, etc) to get a given task done. I'm sure with some HCI research some other metrics could be devised.

There starts to be overlap with the verification and validation plan, which is another document that Drasil knows nothing about.

My thinking is that it would be nice to do something now with NFRs, but it still isn't time to really delve into how best to state them and measure them. That would be a bigger task than we currently have time to tackle. How much work would it be to add NFRs along the lines of what you described? That is, to have separate NFRs, with each one having its own text? That would give us a starting point for the future when we decide to really think deeply about the content of the NFRs.

@bmaclach
Copy link
Collaborator Author

@smiths I don't know exactly what to do to set up a more formal list of NFRs, but I have a general idea, and there are plenty of other examples of lists (like the functional requirement list) that I can use as a reference. So I would be surprised if setting up the infrastructure for this took more than a few hours. Seems reasonable to add this to my to-do list.

@Mornix
Copy link
Collaborator

Mornix commented Apr 24, 2019

Implementation wise, this should be similar to #1215. I believe all the infrastructure is there. All that should be needed (or it may already exist!) is a nonFuncReqDom (or similar) for ConceptInstance.

@bmaclach bmaclach removed the question label Apr 24, 2019
@bmaclach bmaclach assigned bmaclach and unassigned smiths Apr 24, 2019
@bmaclach
Copy link
Collaborator Author

Thanks @Mornix. Reassigning this to myself to implement.

@smiths
Copy link
Collaborator

smiths commented Apr 24, 2019

Sounds like a good plan to implement NFRs the same as the FRs. How best to state the NFRs can be a task that is investigated outside of Drasil.

@bmaclach
Copy link
Collaborator Author

Set-up for the new format for NFR's was merged with #1225. Created new issue #1229 for updating each example, so this issue can be closed.

@samm82
Copy link
Collaborator

samm82 commented May 6, 2019

@bmaclach Did you define an intro sentence for the nonfunc reqs somewhere in docLang (like the one for the func reqs)?

@bmaclach
Copy link
Collaborator Author

bmaclach commented May 6, 2019

The intro paragraph (it's actually multiple sentences, my bad for saying "sentence" before) is built from 2 Sentences which are passed to the NonFReqsSub' constructor. Specifically, these functions put them together:

nonFuncReq' :: [Sentence] -> [Contents] -> Sentence -> Sentence -> Contents
nonFuncReq' noPriority priority_ reason_ explanation_ = mkParagraph $ reason_ `sC` (listO' explanation_ noPriority priority_)

listO' :: Sentence -> [Sentence] -> [Contents] -> Sentence
listO' explanation_ [] [] = S "so there are no" +:+ (plural priority) +:+ explanation_
listO' explanation_ [] priority_ = S "so all" +:+ (plural nonfunctionalRequirement) +:+ S "are given equal" +:+ phrase priority +:+ explanation_ +:+ S "The" +:+. listT' priority_
listO' explanation_ [s] priority_ = S "so" +:+ s +:+ S "is not a" +:+. phrase priority +:+ explanation_ +:+ S "Rather than" +:+ s `sC` S "the" +:+. listT' priority_
listO' explanation_ s priority_ = S "so" +:+ foldlList Comma List s +:+ S "are not" +:+. (plural priority) +:+ explanation_ +:+ S "Rather, the" +:+. listT' priority_

listT' :: [Contents] -> Sentence
listT' [] = (phrase program) +:+ S "does not possess a" +:+ (phrase priority) +:+ (phrase nonfunctionalRequirement)
listT' [_] = (phrase nonfunctionalRequirement) +:+ (phrase priority) +:+ S "is:"
listT' _ = (phrase nonfunctionalRequirement) +:+ (plural priority) +:+ S "are:"

@samm82
Copy link
Collaborator

samm82 commented May 6, 2019

Great! Works like a charm (once I figured out how it was working 😂)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants