Software Development Process (Series)
By Shirish Ranjit
(This is a series of articles on software development process where each article focuses on a one topic of the development process. In this opening article, we will focus on requirement gathering process.)
A computer has two major parts: hardware and software. Hardware is composed of processors, disk, memory, circuits and other mechanical parts. These hardware parts together with software make a computer. Software sends instructions to processors which in turn process instructions and control other hardware functions. In essence, hardware is purely mechanical processor or processors, is a processing unit as our brain, and software is a set of instructions sent to the processor or processors to process the information and take appropriate actions. In this series of article, we focus on Software and its development process.
Software is the integral part of a device. Software operates a device, large or small, including a computer. Software controls and instructs the entire hardware component. Software can be embedded into hardware. Since software is such an important part of the digital world, it is important that for Software creation we have to follow a methodology as in any kind of physical construction.
There are well developed methodologies for software development; those are taught in schools as a Software Engineering topic. There are many methodologies such as waterfall, iterative, agile and so on in developing software.
In the first series of this article, I will focus on software development phases. Software development can be divided in five major phases. Those are requirements gathering, architect/design, develop/implement testing/quality assurance, and usage/support phases. Many text books do not consider usage/support phase. However, in the real world, software usage/support is a very critical part of the business as any business depends on the usage/support of computers to perform functions efficiently.
The first phase in software development is to gather the business functions and needs of those who will use the software. This phase is often called requirements gathering. ‘Business Analysts’ (BAs) gather requirements for software. They precisely describe business functions, and how users interact with the software.
BAs research business functions and describe them in details. BAs interview users for their need and their usage functions. BAs capture those in details and create cases on how the software is being used. These cases represent each function and usage patterns. This output is often called a specification document.
Once BAs complete the specification document, software architects and designers review the document for architecture and designing the software as specified in the specification document. More often software designers get involved in the requirement gathering phase so that they will have more time to analyze the specifications.
Published in www.kathmandumetro.com issue 04.
Software Development Process (Series) – Part 2
Shirish Ranjit
Requirement gathering phase is the most critical part of the software development. In course of the requirement gathering, Business Analysts define and specify the business functions and the sequence of tasks that needs to happen in the software. They also define how data flows in the software; and also define how users perform their work. Once, we have these specifications for the software, we are ready to for the second phase: architecture and design.
In the architecture and design phase, Software Architects/Designers use the specification as a guideline for designing the system. First, they analyze the specification to design the software. Then they create a blue print for the software. They start with creating very high level diagrams with descriptions on how the whole software will perform and how the software will be installed and provided to users.
Then Software designers create software components following the specification. They create detailed designs for each component. We can compare the Software designers’ work to building architects’ creation of blue print of a house. For example, a building architect creates bedrooms, bathrooms, kitchens and so on. Similarly, software designers create different software components that perform different functions as software components. Some components are stacked in such a way that one component is dependent on others. Some components are independents of others.
An experienced-software designer analyzes the specification then identifies and designs necessary components. This is the contribution of a software designer. In other words, just like building architects, software designers define and shape software. Any short comings in design will show up in the final product. Therefore, it is crucial that we design the software well before we start building it. Well designed software will perform well and meet the users’ requirements. Well performing software improves the productivity of the users and therefore increases the output of the company.
Once the design is complete, the next phase is the development of the software. Software developers take the design documents as a guideline for developing the software.
Published in www.kathmandumetro.com issue 01 2007.
Software Development Process – III
BY Shirish Ranjit
Designers provide a guiding principle to software developers who write algorithms (code) in a given programming language to create the software product. During the design phase, designers make key technical decisions such as what programming language to use, how software is going to be composed, how users are going to interact with the software product and so on. Designers with these key decisions hand over technical documents to software developers.
During the implementation phase, the software developers write algorithms and validate that the algorithms meet the requirement of the functions. A team of software developers follow the technical documents in creating the software product. The software developers write algorithms for functions described in specification documents. Writing software is an art just like writing a story. A good developer (programmer) writes algorithms as if s/he is writing a story. The developer is actually telling a story that is described in the specification in a human-readable language. However, the software developer is writing the same story in a language that a machine can read. An excellent software developer writes algorithms in such a way that not only machine but we can also read those algorithms with ease and enjoyment.
The implementation can be complex if the software product that we are building interacts with many different other software. This type of interaction is also known as systems integration. A software product is often called a system. When there are many systems that need to communicate with each other to complete a task, we, software designers and developers, have a challenge to make two independent systems communicate with each other.
If we think about how individual humans communicate, we have a language to express and communicate our thoughts and feelings. The medium is a human language. If two people do not have a common language that they know, then they cannot communicate except with hand signals. Similarly, when systems interact with each other, they also require a common language (this is not programming language). The designers and developers develop a common language for systems to communication. The designers and developers of those systems agree on a set of information and a set of instructions that each system communicate to other. They use this binding contract to communicate among the systems.
Once implementation is complete, a team of people will validate that the software product does in fact work as per the specification.
Published in www.kathmandumetro.com issue 02 2007.
Software Development Process (Series) – Part IV
Shirish Ranjit
We have discussed specification gathering, designing, and building (implementing) software in previous series. At this stage, our software developers have written algorithms for functions that are described in the specification following the direction in design documents. The next phase is Quality Assurance (Software Testing) phase which we discuss in this series.
Once we have developed the software, a team of Software Testers tests the software to make sure that the software meets the requirements detailed in the specification document. The goal of quality assurance is to ensure that the software runs as expected. Testers accomplish their goal of software quality control by using various test methods, for example, white box testing, black box testing, and integration testing. Software testers validate and confirm that the software behaves as described in the functional definition in the specifications.
Same as any other products, we need to control/assure quality of our software product. There is a difference in quality assurance between software and other products such as food, machinery. For products such as food, we sample the product to test the quality. But for software product, we test the software once and then only replicate it to send it to customers.
Once customers use the software product, we need to provide technical support to them. The technical support involves educating customers and trouble shooting issues.
Published in www.kathmandumetro.com issue 03 2007.
Software Development Process – V
BY Shirish Ranjit
In Quality Assurance phase, we basically test drive the software to ensure that the software does what described in specification. Once Quality Assurance team approves the software, the software is ready for distribution to the customers.
We need to train and educate our customers on using the software. As any other products, we need to provide our customers educational materials to learn to use the software. We need to develop materials of training and education as well as have a team of people who can assist in training, education, and provide support to the customers.
We call the team of people who support our software is Software Support group. The primary function of the Support group is to train and educate themselves on the software usage; and then train, educate, and support the customers. The group can provide support through training classes, on the phone, or even through Internet. Instructors teach training classes that provide customers hands on training. So customers get training on using the software as they require at their work.
On the phone support, the group usually support customer on a short and specific issue or question. These issues can be as simple as how to use the software to generate a report to a business critical issue. The business critical tasks are usually those that must occur within a time frame in the same day and has financial risk if it were not completed. The support team definitely takes business critical issues as their highest priorities such that they put their resources and effort to resolve the issues quickly.
The Support group also provides support through Internet to the customers. Instead of making a call, a customer may send an email or instant message to support group. A member of support group answers the email or replies the instant message to the customers.
The Support group’s work is vital for the software company or the software division of the company as they are interacting with customers. A software company can differentiate with other companies with a quick and gracious response. As we know all businesses are built on personal relationship, it is vital that the group build a great reputation with clients. A happy customer creates dedicated followers. To be a successful company, we must have dedicated followers.
Published in www.kathmandumetro.com issue 04 2007.
Software Development Methodologies:
Shirish Ranjit
Managing software development is a challenging task. We can manage building house by visually inspecting the progress that builders make at point in time; however, software is an invisible pieces of work; thus, we have difficulty in managing the building of software. In software development projects, we have to trust builders on their progress reports. It is especially difficult to manage a software project when software is in its infancy and quality assurance team cannot test the software’s functionality. In developing software, there is higher risk of failure due to software developers (builders) reporting incorrect status.
There has been a lot of development in software development methodologies to mitigate risk of failures by formalizing phases in software writing process such that we can track and monitor progress of the software development.
Software development methodologies provide a mechanism to systematically develop software under budget and in time. Two major software development methodologies are Waterfall and Iterative process. There are also other methodologies such as Agile, Rapid Application Development, Model Driven Development, and Extreme Programming. We discuss Waterfall process in this series.
Waterfall processes is best-known and oldest process where developers follow software development phases in order: gather requirements/specification, architect and design a solution, develop/implement code, test and assure quality, deploy/distribute, and maintain. We proceed to next phase only after we complete the current phase. Just as builders don’t revise the foundation of a house after the framing has been erected, we do not go back and review the requirements once the phase is complete.
There is a misconception that the Waterfall process has no provision for correcting errors as we do not revisit the phase again. This misconception is held especially in requirement gathering. In fact, we use revision process to capture and correct any error during each phases of software development process.
We use Waterfall approach in high risk projects. The methodology is widely used in defense related projects which are large and risky. Department of Defense (DOD) use DOD-STD-2167A standard (waterfall process) for DOD funded projects. In large projects, Waterfall is appropriate methodology as progress in phase happens only when the current phase is complete. This provides stability in transition from one phase to the other.