views:

522

answers:

8

An initial draft of requirements specification has been completed and now it is time to take stock of requirements, review the specification. Part of this process is to make sure that there are no sizeable gaps in the specification. Needless to say that the gaps lead to highly inaccurate estimates, inevitable scope creep later in the project and ultimately to a death march.

What are the good, efficient techniques for pinpointing missing and implicit requirements?

  • This question is about practical techiniques, not general advice, principles or guidelines.
  • Missing requirements is anything crucial for completeness of the product or service but not thought of or forgotten about,
  • Implicit requirements are something that users or customers naturally assume is going to be a standard part of the software without having to be explicitly asked for.

I am happy to re-visit accepted answer, as long as someone submits better, more comprehensive solution.

+7  A: 

Continued, frequent, frank, and two-way communication with the customer strikes me as the main 'technique' as far as I'm concerned.

Galwegian
A: 

I agree with Galwegian. The technique described is far more efficient than the "wait for customer to yell at us" approach.

cciotti
+2  A: 

Here's how you find the missing requirements.

  1. Break the requirements down into tiny little increments. Really small. Something that can be built in two weeks or less. You'll find a lot of gaps.

  2. Prioritize those into what would be best to have first, what's next down to what doesn't really matter very much. You'll find that some of the gap-fillers didn't matter. You'll also find that some of the original "requirements" are merely desirable.

  3. Debate the differences of opinion as to what's most important to the end users and why. Two users will have three opinions. You'll find that some users have no clue, and none of their "requirements" are required. You'll find that some people have no spine, and things they aren't brave enough to say out loud are "required".

  4. Get a consensus on the top two or three only. Don't argue out every nuance. It isn't possible to envision software. It isn't possible for anyone to envision what software will be like and how they will use it. Most people's "requirements" are descriptions of how the struggle to work around the inadequate business processes they're stuck with today.

  5. Build the highest-priority, most important part first. Give it to users.

  6. GOTO 1 and repeat the process.

"Wait," you say, "What about the overall budget?" What about it? You can never know the overall budget. Do the following.

Look at each increment defined in step 1. Provide a price-per-increment. In priority order. That way someone can pick as much or as little as they want. There's no large, scary "Big Budgetary Estimate With A Lot Of Zeroes". It's all negotiable.

S.Lott
+4  A: 

It depends.

It depends on whether you're being paid to deliver what you said you'd deliver or to deliver high quality software to the client.

If the former, simply eliminate ambiguity from the specifications and then build what you agreed to. Try to stay away from anything not measurable (like "fast", "cool", "snappy", etc...).

If the latter, what Galwegian said + time or simply cut everything not absolutely drop-dead critical and build that as quickly as you can. Production has a remarkable way of illuminating what you missed in Analysis.

James
+1  A: 

How about building a prototype?

Si Keep
+2  A: 

I have been using a modeling methodology called Behavior Engineering (bE) that uses the original specification text to create the resulting model when you have the model it is easier to identify missing or incomplete sections of the requirements.

I have used the methodolgy on about six projects so far ranging from less than a houndred requirements to over 1300 requirements. If you want to know more I would suggest going to www.behaviorengineering.org there some really good papers regarding the methodology.

The company I work for has created a tool to perform the modeling. The work rate to actually create the model is about 5 requirements for a novice and an expert about 13 requirements an hour. The cool thing about the methodolgy is you don't need to know really anything about the domain the specification is written for. Using just the user text such as nouns and verbs the modeller will find gaps in the model in a very short period of time.

I hope this helps

Michael Larsen

This is a really interesting approach. Thanks you a lot!
kizzx2
+1  A: 

evaluate the lifecycle of the elements of the model with respect to a generic/overall model such as

acquisition --> stewardship --> disposal
  • do you know where every entity comes from and how you're going to get it into your system?
  • do you know where every entity, once acquired, will reside, and for how long?
  • do you know what to do with each entity when it is no longer needed?

for a more fine-grained analysis of the lifecycle of the entities in the spec, make a CRUDE matrix for the major entities in the requirements; this is a matrix with the operations/applications as the rows and the entities as the columns. In each cell, put a C if the application Creates the entity, R for Reads, U for Updates, D for Deletes, or E for "Edits"; 'E' encompasses C,R,U, and D (most 'master table maintenance' apps will be Es). Then check each column for C,R,U, and D (or E); if one is missing (except E), figure out if it is needed. The rows and columns of the matrix can be rearranged (manually or using affinity analysis) to form cohesive groups of entities and applications which generally correspond to subsystems; this may assist with physical system distribution later.

It is also useful to add a "User" entity column to the CRUDE matrix and specify for each application (or feature or functional area or whatever you want to call the processing/behavioral aspects of the requirements) whether it takes Input from the user, produces Output for the user, or Interacts with the user (I use I, O, and N for this, and always make the User the first column). This helps identify where user-interfaces for data-entry and reports will be required.

the goal is to check the completeness of the specification; the techniques above are useful to check to see if the life-cycle of the entities are 'closed' with respect to the entities and applications identified

Steven A. Lowe
What about attributes of entities and relationships between entities? Or does the term "entity" encomass everything? In either case, is this approach really practical?
Yarik
Q2: How to make sure that all the necessary entities are identified?
Yarik
Q3: I think there may be several different requirements behind any of the CRUD operations against/with an entity. If you have captured one of such requirements (and crossed the corresponding cell in the matrix), how does it help to make sure that all other requirements that may correspond to ths cell are captured, too?
Yarik
@[Yarik]: re: Q1 - a CRUDE matrix as described above is for all of the LOGICAL entities and applications of the system. Entities that are used together by an application MAY have a relationship, that is a good thing to consider. re: Q2 - there is no technique to ensure that you suddenly know what you don't know; ask questions around the edge cases until the model is closed. re: Q3 - i don't understand the question (and you may be reading more into the answer than is really there). This is a HIGH-LEVEL ANALYSIS tool, not a detailed design methodology.
Steven A. Lowe
+1  A: 

While reading tons of literature about software requirements, I found these two interesting books:

These two authors really stand out from the crowd because, in my humble opinion, they are making a really good attempt to turn development of requirements into a very systematic process - more like engineering than art or black magic. In particular, Michael Jackson's definition of what requirements really are - I think it is the cleanest and most precise that I've ever seen.

I wouldn't do a good service to these authors trying to describe their aproach in a short posting here. So I am not going to do that. But I will try to explain, why their approach seems to be extremely relevant to your question: it allows you to boil down most (not all, but most!) of you requirements development work to processing a bunch of check-lists* telling you what requirements you have to define to cover all important aspects of the entire customer's problem. In other words, this approach is supposed to minimize the risk of missing important requirements (including those that often remain implicit).

I know it may sound like magic, but it isn't. It still takes a substantial mental effort to come to those "magic" check-lists: you have to articulate the customer's problem first, then analyze it thoroughly, and finally dissect it into so-called "problem frames" (which come with those magic check-lists only when they closely match a few typical problem frames defined by authors). Like I said, this approach does not promise to make everything simple. But it definitely promises to make requirements development process as systematic as possible.

If requirements development in your current project is already quite far from the very beginning, it may not be feasible to try to apply the Problem Frames Approach at this point (although it greatly depends on how your current requirements are organized). Still, I highly recommend to read those two books - they contain a lot of wisdom that you may still be able to apply to the current project.

My last important notes about these books:

  • As far as I understand, Mr. Jackson is the original author of the idea of "problem frames". His book is quite academic and theoretical, but it is very, very readable and even entertaining.

  • Mr. Kovitz' book tries to demonstrate how Mr. Jackson ideas can be applied in real practice. It also contains tons of useful information on writing and organizing the actual requirements and requirements documents.

You can probably start from the Kovitz' book (and refer to Mr. Jackson's book only if you really need to dig deeper on the theoretical side). But I am sure that, at the end of the day, you should read both books, and you won't regret that. :-)

HTH...

Yarik