Final Project Proposal
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 effeciently. 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 as 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. We 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. Integration
  7. Maintenance
Now, I'm most definitely not saying that this is the one and only solution to the development process (I myself combine many of the related steps above). This listing is solely to demonstrate on of the many ways in which you could break up the development process for a program/project. For my purposes I have broken up the design process into 3 basic steps:
  1. Requirements Analysis
  2. Program Design
  3. Implementation
Also 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. Code problems can always be changed, but the underlying design can't always be changed.

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 helpful, but rather they tend to get in the way and defeat their purpose. Through my reading and research, I have determined some of the more important steps or phases of Requirements Analysis:

It is these steps upon which I am focusing on for this project.

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 due to 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.

My goal is 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. This may or may not include premade solutions for part or all of the package, which will be determined during the research and Requirements Analysis stages.

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 ...


Final Project Proposal
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-proposal

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


Footnotes

... daily1
and so does bad Software Engeneering for that matter


Ned Bingham 2001-12-10