Every morning, some software developer wakes up with a great new idea for a software application, utility, or tool. Those who go off and start writing code without first considering the requirements for their program are likely doomed to failure. Invest up front in developing your software requirements and you will be starting down the path to successful software development. A software development organization without any requirements management process in place will not repeatedly achieve development success. Here are some tips as to why and how you should develop and manage software requirements for any project, regardless of size .
For starters, if you can't define the requirements for your software system, you will never be able to measure the success of your development effort. If you were to write a calculator program, would it be successful if it could add two numbers and produce the correct result? What about subtraction, multiplication, and division? Does the calculator need to handle floating point numbers or just integers? How many digits of precision are needed in results? What should the calculator's behavior be if a divide by zero is encountered ? Should the results be displayed in a textual or graphical format? How long does the result have to be saved after it is displayed? The list goes on. Even in this trivial example, requirements are extremely important to determining the success of the project.
It is very difficult to write good software requirements. Without good requirements precisely stating what a software program is suppose to accomplish, it is very difficult to judge the application's success, much less complete the project in the first place. One of the main reasons it is so hard to write good software requirements has to do with the nature of human language. English, and for that matter all spoken languages, are very imprecise and leave much to be inferred by the listener or reader. Computers, by their digital nature, are very precise and not easily programmed to infer missing requirements. Therein lies a dichotomy . Think of a requirement statement as simple as "the program shall add the two numbers and display the results." You could raise all the same questions posed in the calculator example in the last paragraph. Even if these questions were answered , more requirements would probably be uncovered during development of the application.
If your software development team is asking questions like those in the previous calculator example, it probably is a good sign. There is no surer failure of a software development project than to have incomplete requirements. Of course the next steps after asking questions and developing requirements are to document them, organize them, and track them. Modern CASE tools (see Chapter 15) include requirements development and tracking functions that help you do this.
Many development projects actually start with a good set of functionality requirements, such as input this, perform this processing, output that. What is often left out are performance and other environmental requirements as summarized in Table 1-1. How quickly does the program have to complete the required processing? How much RAM or disk space can it use? Does the software have to support internationalization for worldwide use? What is the minimal display size required? Environment related requirements are becoming increasingly important, especially with the advent of cross-platform development environments such as Java. Java truly provides a write-once run anywhere environment ranging from smartcards to workstations to mainframes. A Java applet that looks great on a workstation's 21" color monitor, however, may look much different on the 4" screen of a monochrome personal digital assistant (PDA). Finally, don't forget budget and schedule requirements.In gathering these requirements, the reasons for the second commandment should become very clear to you.
|Processing Speed||CPU speed|
|Memory Capacity||Cache size, RAM size|
|Network Capacity||Network interface card speed, switch and router bandwidth|
|Persistent Storage||On-line disk capacity; tape backup capacity|
|Internationalization Support||Will the application be deployed in different countries or in different languages?|
|Minimum Display||Monitor size and resolution; number of colors supported|
|Financial||Budget and schedule|
|Environmental||Power requirements, air conditioning, special temperature or humidity requirements|