A Network Management Tool: Exploring Requirements Analysis
CS-80--Senior Seminar
Fall '01

Ned Bingham

December 10, 2001

Good Software Engineering surrounds us daily1. As we work, play, travel and communicate we are using, at some level, someone else's software. For a select few of us, this software is not just someone else's software; Its ours. As Software Developers, some of us have the luxury of knowing what goes on behind the scenes while writing a program. We know how to fine tune the various parts of the process, allowing for the time taken by one or more steps to be dramatically shortened or even completely eliminated. It is this knowledge that allows us to produce good software efficiently. In many cases, it is our planning during the development stages of our code that produce the ``flawless'' programs that exist today and upon which we all rely. To the lay-person, these steps may appear three-fold [4, p15]:
  1. Analysis
  2. Design
  3. Implementation
Actually, when many people think of programming, they think just of the 3rd step, and it never crosses their minds to think that you actually have to think about what you are going to do. But to our ``trained eyes'' we know that there is actually much more going on. However, we also know that there is no real concrete method for going through the development process. As a matter of fact, some of us may not even develop one project the same way as we develop the next. However, there are most definitely several steps that we all take when developing a piece of code (whether or not we do them consciously). These steps would most likely be characterized as such [4, p16]:
  1. Requirements Determination
  2. Requirements Specification
  3. Architectural Design
  4. Detailed Design
  5. Implementation
  6. Testing/Debugging
  7. Integration
  8. Maintenance
Now, this is most likely not a complete list of all of the stages to the Software Development process. Many authors feel that there are other steps2 which deserve their own stages[4, p16], but for our purposes this list will be more than enough. As a matter of practice, and to simplify things a little, I will start off by reducing this list down to three basic steps:
  1. Requirements Analysis
  2. Program Design
  3. Implementation
Conceptually, I am combining Requirements Determination and Specification together as Requirements Analysis, then Architectural Design and Detailed Design together as Program Design, and then the rest gets jumbled together in my Implementation step3.

For the majority of my project I have been (and will continue to) focus on the Requirements Analysis stage of the development. My reason for this is I feel that it is one of the, if not the, most crucial steps which determines whether or not a project will fail or succeed. For example, if the designers/builders of a bridge started building it not knowing that there were going to be heavy 18 wheeler trucks going across, but instead planned for the load of pedestrians, what would happen when the trucks started crossing? Or even more plausible, what if they found out half way through construction? What type of costs would be associated with correcting the oversight? In both cases the oversight would have caused major costs and failures. This analogy can be placed directly upon software construction. If you are tasked with building a program for which you were given no specifications, if you failed to do proper research into what the program/utility was supposed to do, you'd be in huge amounts of trouble fairly quickly. As McConnell [5, p26] points out that the longer it takes you to find a problem that exists in your design, the more it will cost you to fix it when you do find it. This is why without a good and exhaustive Requirements Analysis to find the problems in your design, your project is going to fail or not live up to what it is supposed to. Bugs in the implementation, due to programmer error4, can always be changed. What becomes more and more inefficient to change are bugs/problems that may be in the underlying design which may cause the entire project to be scratched and redone.

So right about now, you might be asking yourself ``OK, So what's actually involved in proper Requirements Analysis?'' Well, there are many different steps which are involved in the process of Requirements Analysis. Many authors have produced check-lists [5, p33] which can be used to by the programmer to determine if he/she has gone through all of the ``necessary steps.'' The main problem with check-lists is not that they are not all that helpful, but rather they tend to get in the way and defeat their purpose. The way that people tend to use check-lists is to look at the first thing on the list, do it, check it off, and then go on to the next. This hinders creativity and adaptation. Because of this, there is no fixed method for going about Requirements Analysis. The best way that one can describe how to do Requirements Analysis is to explain what it is.

Requirements Analysis
is asking yourself questions about your project. What are the requirements of the program? What features do the consumers/administrators want in the problem? What is a ``Requirement?'' Well a requirement could be simply stated as ``a statement of a system service or constraint.''[4, p16] What is it that the user wants the program to do, or not to do? This is the stage where you first get into determining the features that you will be including into the program. This is also where you find out where you need to restrict the functionality. Whether that be via user identification, or sheer omission from the program. This is not really the point where you refine the list and therefore you will be creating more of a ``wish list'' from the users. You also should use this time to find out if your user-base too believes that there is a problem that needs solving. If your users don't feel they have a problem, then your solution (the program) will have no effect and thereby be useless. After you have done that, you need to elaborate more on how the various parts of the program/project interact. Defining the inter-relationships between the various requirements and the user(s) is one of the more important parts [4, p17]. This is the first part of Requirements Analysis that can be modeled in modeling languages such as the Unified Markup Language (UML). The modeling of the project in UML (See Figure 1) contains a good part of the design of the program, since it determines how the various features interact and how the users interact with the program. This allows you, as the programmer, to track, via an object oriented model, the path of data and the actions taken based upon a given data-set. When it is not possible to take an object-oriented approach, it is possible to take more of a structured approach which is much more function-centric vs. data-centric [4, p24-25].

Figure 1: Examples of UML: An use-case and activity diagram
\begin{figure}\pstexsized{3in}{3in}{images/use-case-diagram}
\pstexsized{3in}{2.5in}{images/user-auth-activity-diagram}
\end{figure}

It is this step upon which I am focusing on for this project. Before tackling a large project there are some issues of Planning that must be considered prior to getting too far down the road [4, p21] (even before starting the Requirements Analysis stage). Determining the actual problem that is trying to be solved is a major step. Take, again for example, the bridge building analogy that I gave above. If you don't know precisely what it is you are going to be doing, then you could end up doing completely the wrong thing. One needs to make sure that they know what it is exactly that the program/project is supposed to accomplish so that you can create the correct program. After you know what your problem is, examining the project to determine if it is possible to complete is the next logical step [4, p21]. Can the program/project be completed by you? Some projects end up dying due to the sheer fact that it is not possible to complete them. Making sure that the goal is well defined and making sure that it is actually obtainable is another key point. This involves both responsible scheduling and planning at the beginning to make sure that you have the time to accomplish the goal.

So, what am I doing for this aforementioned project? Here at Earlham College, there is a fairly extensive Ethernet Local Area Network (LAN). This network supports the computer infrastructure that is used by Faculty, Staff and Students for education, college business and entertainment. Spanning all of the campus buildings, it provides full time Internet connections to any machine connected to the network. Presently, in order to obtain access to the network, you must register your computer with Earlham Computing Services (ECS). This registration involves the configuration of both the Dynamic Host Configuration Protocol (DHCP) Server & Domain Name Server (DNS) along with some management of the network ports around campus. Currently this process is managed and executed by one or two individuals. This means that for every computer that arrives on campus that needs Internet/network access, these individuals must personally manipulate the configurations of the respective services. During the ``crunch-times'' of the year, this means dedicating almost one full day (if not more) to doing this re-configuration. Initially, when the number of computers on campus requiring network access was few, this method was acceptable due to the low overhead. However, the increased number of networked computers on campus, along with the number of new computers arriving weekly, has made this current system extremely inefficient with respect to man-hours required to make changes/additions. When confronted with the opportunity to replace the current system with one that increases automation and has the potential for spreading the work-load across more than one or two people, the Network and Systems Managers here were enthusiastic and optimistic. So, my goal has been to create a Network Management tool which allows for configurable complex heterogeneous network configurations and allows more automated addition (and removal) of machines from the network.

The method by which I chose to proceed involves a series of meetings with the Network & System Administrators here at Earlham, interspersed with periods of ``reflection'' and thought which allow me and those involved to think about and discuss the requirements requested. The advantage and purpose of this ``reflection'' period is to allow for ideas to stew and simmer until they are exactly what is desired by the people involved. This then leads into structurally modeling the interactions between the various parts of my program and the users, eventually leading up to the creation of structural models of the actual program and most if not all of its working components. After I have this schematic built on paper, it is time to start with the implementation of the program into pseudo-code and then program code. Before this step, I will have not touched a single piece of code for this program. The intent is to model everything in a suitable modeling language. For this project, I will strive to use UML. My plan includes continuing to meet with the Network & System Administrators here so as to prevent any mis-understanding about the actual inner workings of the program. There isn't a fixed schedule for this stage since it tends to spread over a fairly large time period and therefore meetings will occur whenever they are needed. Once the code is written and running, we begin the debugging and testing stage. This is where we determine where the problems in the program are and work out any major bottle necks. Hopefully, assuming that the design is proper and has no problems, we will not find anything so large at this stage that it can't be fixed quickly. Finally, after having been tested (and satisfactorily passed), the tool will be ready for final integration into the current system. This is the methodology5 by which I am compleeting this project.

Sofar, I've made it to the Program Modeling stage of my methodology. I have been able to create all of the UML diagrams to depict all of the interactions and the actions taken by the actors in my system. The next step, as I say above, is to start producing actuall code to do what I've designed. Due to time constrainst and my mortal shell, I will not be able to start that part by the completion of this paper. My current plans are, however, to begin coding sometime next month (January 2002)

Bibliography

1
Christopher John Date.
An introduction to database systems.
Addison-Wesley, 7th edition, October 1999.

2
Dick Hamlet and Joe Maybee.
The Engineering of Software.
Addison-Wesley, Boston, 2001.
Technical Foundations for the Individual.

3
IEEE Computer Society, New York.
Guide for Developing System Requirements Specifications, 1998.

4
Leszek A. Maciaszek.
Requirements Analysis and System Design.
Addison-Wesley, Harlow, 2001.
Developing Informatoin Systems with UML.

5
Steve McConnell.
Code Complete.
Microsoft Press, Washington, 1993.
A Practical Handbook of Sofware Construction.

6
PostgreSQL, http://www.postgresql.org/idocs/.
PostgreSQL Interactive Documentation, 2001.

7
Larry Wall et al.
Programming Perl.
O'Reilly, 3rd edition, July 2000.

About this document ...


A Network Management Tool: Exploring Requirements Analysis
CS-80--Senior Seminar
Fall '01

This document was generated using the LaTeX2HTML translator Version 2K.1beta (1.47)

Copyright © 1993, 1994, 1995, 1996, Nikos Drakos, Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999, Ross Moore, Mathematics Department, Macquarie University, Sydney.

The command line arguments were:
latex2html project-paper

The translation was initiated by Ned Bingham on 2001-12-10


Footnotes

... daily1
and so does bad Software Engineering for that matter
... steps2
Such as planning & testing
... step3
This mostly just shows how I tend to program by not following any preset method for testing and maintenance. For me it is all part of the entire software creation process and never ends.
... error4
Yes, programmers aren't perfect
... methodology5
Method by which one acomplishes a task


Ned Bingham 2001-12-10