DCA6101-Unit 11-Software Development, Design and Testing
DCA6101-Unit 11-Software Development, Design and Testing
11.1 Introduction
Computer software has become a driving force. It is the engine that drives
business decision making. It serves as the basis for modern scientific
investigation and engineering problem solving. It is a key factor that
differentiates modern products and services. It is embedded in systems of
all kinds: transportation, medical, telecommunications, military, industrial
processes, entertainment, office products etc. Software is virtually
inescapable in the modern world. And as we move into the twenty-first
century, it will become the driver for new advances in everything from
elementary education to genetic engineering.
Computer software is the product that software engineers design and build.
It encompasses programs that execute within a computer of any size and
architecture, documents that encompass hard-copy and virtual forms and
data that combine numbers and text but also include representations of
pictorial, video and audio information.
Software is a set of application programs that are built by software
engineers and are used by virtually everyone in the industrialized world
either directly or indirectly. Software is important because it affects nearly
every aspect of our lives and has become pervasive in our commerce, our
culture and our everyday activities.
Software is generally built like you build any other successful product, by
applying a process that leads to a high quality result that meets the needs of
the people who will use the product. We apply a software engineering
approach to develop this product.
From the point of view of a software engineer, the work product is the
programs, documents and data that are computer software. But from the
user’s point of view, the work product is the resultant information that
somehow makes the user’s world better.
Objectives:
explain software development methodology and process
explain the analysis and design of software
describe various steps involved in software testing
list software paradigms
discuss on various programming methods
list some software applications
11.4 Coding
Once the design is complete, most of the major decisions about the system
have been made. The goal of the coding phase is to translate the design of
the system into code in a given programming language. For a given design,
the aim of this phase is to implement the design in the best possible
manner. The coding phase affects both testing and maintenance profoundly.
A well written code reduces the testing and maintenance effort. Since the
testing and maintenance cost of software are much higher than the coding
cost, the goal of coding should be to reduce the testing and maintenance
effort. Hence, during coding the focus should be on developing programs
that are easy to write. Simplicity and clarity should be strived for, during the
coding phase.
A strategy for software testing may also be viewed in the context of the
spiral shown in figure 5.4. Unit testing begins at the vortex of the spiral and
concentrates on each unit (i.e., component) of the software as implemented
in source code. Testing progresses outwards along the spiral to integration
testing, where the focus is on design and the construction of the software
architecture. Taking another turn outward on the spiral, we encounter
validation testing, where requirements established as part of software
requirements analysis are validated against the software that has been
constructed. Finally, we arrive at system testing, where the software and
other system elements are tested as a whole. To test computer software, we
spiral out along stream-lines that broaden the scope of testing with each
turn.
Considering the process from a procedural point of view, testing within the
context of software engineering is actually a series of four steps that are
implemented sequentially. The steps are shown in Figure 11.4. Initially, tests
focus on each component individually, ensuring that it functions properly as
a unit. Hence, the name is unit testing. Unit testing makes heavy use of
white-box testing techniques, exercising specific paths in a module's control
structure to ensure complete coverage and maximum error detection. Next,
components must be assembled or integrated to form the complete software
package. Integration testing addresses the issues associated with the dual
problems of verification and program construction. Black-box test case
design techniques are the most prevalent during integration, although a
limited amount of white-box testing may be used to ensure coverage of
major control paths. After the software has been integrated (constructed), a
set of high-order tests are conducted. Validation criteria (established during
requirements analysis) must be tested. Validation testing provides final
assurance that software meets all functional, behavioral, and performance
requirements. Black-box testing techniques are used exclusively during
validation.
Self Assessment Questions
10. _________ begins at the vortex of the spiral and concentrates on each
unit (i.e., component) of the software as implemented in source code.
11. _____________ addresses the issues associated with the dual
problems of verification and program construction.
12. ___________ provides final assurance that software meets all
functional, behavioral, and performance requirements.
After a module has been tested individually, it is then integrated with other
modules into the overall program structure.
Program flow follows a simple hierarchical model that employs looping
constructs such as "for," "repeat," and "while." Use of the "Go To" statement
is discouraged.
Structured programming was first suggested by Corrado Bohm and
Guiseppe Jacopini. The two mathematicians demonstrated that any
computer program can be written with just three structures: decisions,
sequences, and loops. Edsger Dijkstra's subsequent article, Go to
Statement Considered Harmful was instrumental in the trend towards
structured programming. The most common methodology employed was
developed by Dijkstra. In this model (which is often considered to be
synonymous with structured programming, although other models exist) the
developer separates programs into subsections that each has only one point
of access and one point of exit.
Virtually any language can use structured programming techniques to avoid
common pitfalls of unstructured languages. Unstructured programming must
rely upon the discipline of the developer to avoid structural problems, and as
a consequence may result in poorly organized programs. Most modern
procedural languages include features that encourage structured
programming. Object-oriented programming can be thought of as a type of
structured programming, uses structured programming techniques for
program flow, and adds more structure for data to the model.
11.7.2 Object-oriented programming (OOP)
It is a programming language model organized around "objects" rather than
"actions" and data rather than logic. Historically, a program has been viewed
as a logical procedure that takes input data, processes it, and produces
output data.
The programming challenge was seen as how to write the logic, not how to
define the data. Object-oriented programming takes the view that what we
really care about are the objects we want to manipulate rather than the logic
required to manipulate them. Examples of objects range from human beings
(described by name, address, and so forth) to buildings and floors (whose
used in many Web applications. Curl, Smalltalk, Delphi and Eiffel are also
examples of object-oriented programming languages.
OOPSLA is the annual conference for Object-Oriented Programming
Systems, Languages and Applications.
Self Assessment Questions
13. Name few Structured Programming Languages?
14. What is the first step in object oriented Programming?
15. In Logic programming paradigms we express computation exclusively
in terms of _________________
11.9 Summary
In this unit you learnt about the various concepts of Communication.
Let’s recap the important points covered in the unit:
Software is a logical rather than a physical system element.
Software Development Methodology is a series of processes that, if
followed, can lead to the development of an application.
‘A software system is a set of mechanisms for performing certain action
on certain data’.
A software design is a model system that has many participating entities
and relationships.
This design is used in a number of different ways. It acts as a basis for
detailed implementation; it serves as a communication medium between
the designers of sub-systems; it provides information to system
maintainers about the original intentions of the system designers, and so
on.
Testing presents an interesting anomaly for the software engineer.
During earlier software engineering activities, the engineer attempts to
build software from an abstract concept to a tangible product.
The engineer creates a series of test cases that are intended to
'demolish' the software that has been built. In fact, Testing is the one
step in the software process that could be viewed (psychologically, at
least) as destructive rather than constructive.
11.11 Answers
Self Assessment Questions
1. Sub Process
2. Correctness
3. Correspondence
4. Software Development Methodology
5. Programs
6. Data-flow Model
7. Entity-relation model
8. Relationships
9. object-oriented systems