Software Engineering
Software Engineering
Q.1 Explain the concept of software project life cycle with a suitable example.
ANS
We can classify software development projects into various types based on their business
functional domain. In case a software company is interested in specialising in only one
product or service, it will need to understand that particular function or domain thoroughly.
Mere technical knowledge in how to develop the software by writing lines of codes may not
be sufficient.
As mentioned earlier, a software process can be defined as the step-by-step manner in which
software is developed. Each organisation tailors this into its own set of processes to develop
software development process. The use of software development processes within the project
life cycles ensures that developers follow a systematic approach in developing the software
and also incorporate the company guidelines to complete their project schedules. In todays
world, software companies are looking for better processes to enhance their quality and
predictability of software development along with maintenance of costs.
For example, Kolkata-based UshaComm that has gained expertise in telecommunicationsbilling solutions that are used all across the world. For such companies, it is a prudent
approach when they consider breaking down the project into a broad series of phases that
would enable them to manage the project efficiently. The phases could be requirements in
Engineering, analysis, design, coding, testing, implementation and maintenance.
Q.2 Describe the different software estimation techniques and models used for
estimating a software project.
ANS
After discussing about the estimation models, let us now discuss some techniques used for
estimating time and cost of a project. We use estimation techniques to solve problems in a
project. The common problems that a software project can face are the problems related to
cost and effort. Therefore, it becomes very necessary to incorporate the cost and the effort
estimation techniques. We can use the decomposition technique for project estimation. In the
decomposition technique, we divide a complicated problem in a project into several smaller
and manageable units. Appropriate estimation techniques are used on the basis of the scope of
the software to be built. In the previous unit, we have already discussed about the sizeoriented and function-oriented metrics. These metrics speak about the line of code and the
function-point in a software project. So, let us now have a better understanding about the way
in which the Line of code and the Function point estimations are done. The LOC and the FP
are the two decomposition techniques used for estimating the effort in a software project, as
given in the table.
Line of code
It is a decomposition
Function point
It is a decomposition technique
that uses the baseline metrics collected from the
previous projects.
It uses only the macroscopic
details in a program.
It is determined indirectly by estimating
the number of inputs, outputs, data files and
external interfaces.
We can define reliability as the capability of being depended on; and software reliability
as the reliability/dependability of a particular software product. When we speak about the
quality of a software product/system, software reliability comes into picture.
We can categorise software reliability metrics into certain distinct types as Shown below
1. Product metrics Product metrics involve instinctive method of measuring the size
of the software, on the basis of the lines of code (LOC), or more practically
thousand lines of code (KLOC).
2. Function point metrics We can use the function point for the measurement of the
functionality of a recommended software development system based on functions
such as count of inputs, outputs, master files, inquires and interfaces.
3. Complexity metrics We can use complexity metrics for determining the complexity
of a software programs control structure. We can simplify the complexity of the
software program code by graphical representation.
4. Test coverage metrics We can use test coverage metrics for estimating the fault and
reliability of a software program.
5. Project management metrics We know that good management can provide better
quality products.
6. Process metrics We can use process metrics for estimating, monitoring and
improving the reliability and quality of a software product.
7. Fault and failure metrics Fault and failure metrics are used for measuring the
number of faults found in the software system during the testing phase.
Software reliability models
We know that a particular model can work well on certain software, while it may not work at
all on another. Typically, a software model contains mathematical functions, assumptions and
factors. The mathematical functions contain exponential and logarithmic functions of higher
order. These modelling techniques are based on accumulating the failure data and analysing
them statistically by observance. Let us understand these techniques by differentiating the
two modelling techniques, as given in Table 7.1.
Table 7.1: Prediction Modelling and Estimation Modelling
Prediction model
Estimation model
Design Fundamentals
The fundamental concepts of software design provide guidelines to get the design right.
1. Abstraction In abstraction, the issues related to the design are described using the
levels of details/language.
2. Data abstraction The representation of the data objects is called data abstraction.
3. Procedural abstraction The representation of instructions or procedures is called
procedural abstraction.
4. Refinement - In refinement, we polish the design using top-down strategy called as
stepwise refinement
5. Modularity In modularity, we divide the software into separate components called
modules.
6. Software architecture Software architecture describes the hierarchical structure of
procedural components and the structure of data.
7. Control hierarchy We can refer to it as Program structure. In the control
hierarchy, we organise the elements, which implies that we describe a hierarchy of
control, the metrics depth, width, and so on, and provide visibility and connectivity.
8. Data structure In data structure, we illustrate the links between individual data
elements using logical representations.
9. Software procedure It specifies processing details of each element.
10. Information hiding In information hiding, the elements should be categorised by
design decisions.
Principles of design
First Principle: The reason of its presence.
One reason for a software system to be present is to give value to its users. We should keep
this in mind while making all judgements.
Second Principle: KISS Keep it simple, Stupid!
Software design is not a random process. In any design, we should consider many factors. All
the designs should be simple but not simpler. This helps to have a system that can be easily
understood and maintained.
A clear vision of the software is necessary to gain success in any software project. If the
vision towards the software is not clear then the project ends up with low quality.
Fourth Principle: What is produced will be consumed/used by others.
According to this principle, a product developed is used, maintained and documented by the
users/clients, to understand the system. A product should be developed such that the user
should understand the specifications, design and implementation.
Fifth Principle: Be open to the future.
As per this principle, the system has more value if it has extensive lifetime. In the present
generation computing environments, the specifications of hardware and software change
rapidly and become outdated very fast.
Sixth Principle: Plan in advance for reuse.
According to this principle, time and effort can be saved by reusing the developed software.
Seventh Principle: Think.
As per this principle, placing clear, complete thought before action produces better results.
We can state an incremental approach to develop a program as top-down integration. In topdown integration, we first recognise the control hierarchy. This helps us to identify and
categorise the modules. The modules that are subordinate to the main control module are
integrated to the bigger structure. Depth-first or breadth-first approach is used for integrating.
Bottom-up integration
The bottom-up integration test commences at the atomic module level. The lowest levels in
the program structure are atomic modules. In this approach, stubs are not needed as modules
are integrated from bottom-up, and processing needed for modules which are subordinate to a
given level is always present. Let us have a look at the steps followed in bottom-up
integration:
1. Combine low-level modules forming clusters which execute particular software subfunction. Clusters are also called builds.
2. Write control program to co-ordinate test case input and output.
3. Test the build.
Regression testing
We conduct regression test to recognise the errors and ensure that new errors have not crept
into the units being tested. The number of regression tests can increase as integration testing
continues. Hence, regression test set should be designed to include tests that handle one or
more errors in every major program functions. Regression testing is done whenever an
implementation is modified within a program. It is conducted by rerunning available tests
against the altered code to verify the effects after modifications and new tests are written
wherever required
Smoke testing
Smoke testing is basically related to the concept of project control, where variations of the
actual project outputs are compared with required outputs.
Time, cost and performance are the factors used in project control. Smoke testing should be
done on high testing frequency basis whereby the
errors will show up on time. The mid-level integration of different modules
reduces the risk of inappropriateness at later levels.
Comments on integration testing
procedures are adhered to and are followed all the way throughout the software
development life cycle. Quality assurance approval points are incorporated in the software
development and control processes, whereas an SQA evaluation of the product may be
done in connection to the applicable standards. The two key principles that characterise
SQA are the following:
1. Fit for purpose, that is, the product should be suitable for the intended purpose.