Nec Se Unit-I Notes
Nec Se Unit-I Notes
Computers cannot do anything on its own. It is the user who instructs computer; what to do,
how to do and when to do. In order to perform any task, you have to give a set of instructions
in a particular sequence to the computer. These sets of instructions are called Programs.
Software refers to a set of programs that makes the hardware perform a particular set of
tasks in particular order.
What is software engineering?
Software engineering discusses systematic and cost-effective techniques for software
development. These techniques help develop software using an engineering approach.
The Evaluation of Software Engineering:
a) Initial Stage: Started as an art form where development relied on individual intuition
and ad-hoc practices.
b) Progression: Evolved into a craft with shared techniques and, later, a discipline
structured around theoretical and empirical principles.
c) Current State: Now considered an engineering discipline, akin to civil or mechanical
engineering, emphasizing structured and scientific approaches.
The process framework activities
A process framework establishes the foundation for a complete software engineering process
by identifying a small number of framework activities that are applicable to all software
projects, regardless of their size or complexity.
Communication – Communicate with stakeholders and customers to obtain objectives
of the system and requirements for the software.
Planning – Software project plan has details of resources needed, tasks and risk factors
likely to occur, schedule.
Modelling – Architectural models and design to better understand the problem and for
work towards the best solution.
Construction – Generation of code and testing of the system to rectify errors and
ensuring all specified requirements are met.
Deployment – Entire software product or partially completed product is delivered to the
customer for evaluation and feedback.
The above process framework can be developed different ways as
follows Linear process flow
Linear process flow executes each activity in sequence.
FIGURE 1.2: Relative changes of hardware and software costs over time
As can be seen in the figure 1.2, organisations are spending increasingly larger portions of
their budget on software as compared to that on hardware. Among all the symptoms of the
present software crisis, the trend of increasing software costs is probably the most vexing.
Q) SOFTWARE DEVELOPMENT PROJECTS
2.1 Programs versus Products
Toy Software:
o Developed by individuals (e.g., students or hobbyists) for personal use or
classroom assignments.
o Characteristics:
Small size and limited functionality.
Poor user interface, documentation, maintainability, efficiency, and
reliability.
Solely used and maintained by the developer.
Referred to as "programs" due to their simplicity and lack of supporting
documentation.
Professional Software:
o Designed for multiple users and includes proper documentation (user
manuals, design documents, test documents, etc.).
o Characteristics:
Developed by teams using systematic methodologies.
Good user interface and thorough testing.
Built with long-term maintainability and scalability in mind.
Includes a set of supporting documents alongside the code.
2.2 Types of Software Development Projects
Software projects are broadly classified into two categories:
1. Software Product Development Projects
o Focused on creating software products, either:
Generic Products: Target a broad spectrum of customers (e.g., Windows,
Oracle).
Domain-Specific Products: Tailored for specific industries or market
segments (e.g., banking or healthcare).
2. Software Services Projects
o Encompass customization, maintenance, outsourcing, testing, and consultancy.
o Characteristics:
Rapidly growing segment due to the availability of a large codebase for
reuse.
Heavy reliance on modifying or customizing existing software for specific
needs.
Project durations are typically shorter (a few months or weeks).
Software Development Life Cycle (SDLC) is a process used by the software industry to design,
develop and test high quality softwares. The SDLC aims to produce a high-quality software that
meets or exceeds customer expectations, reaches completion within times and cost estimates.
What is SDLC?
SDLC is a process followed for a software project, within a software organization. It consists of a
detailed plan describing how to develop, maintain, replace and alter or enhance specific
software. The life cycle defines a methodology for improving the quality of software and the
overall development process.
The following figure is a graphical representation of the various stages of a typical SDLC.
A typical Software Development Life Cycle consists of the following stages −
Requirement analysis is the most important and fundamental stage in SDLC. It is performed by
the senior members of the team with inputs from the customer, the sales department, market
surveys and domain experts in the industry. This information is then used to plan the basic
project approach and to conduct product feasibility study in the economical, operational and
technical areas.
Planning for the quality assurance requirements and identification of the risks associated with
the project is also done in the planning stage. The outcome of the technical feasibility study is to
define the various technical approaches that can be followed to implement the project
successfully with minimum risks.
SRS is the reference for product architects to come out with the best architecture for the product
to be developed. Based on the requirements specified in SRS, usually more than one design
approach for the product architecture is proposed and documented in a DDS - Design Document
Specification.
This DDS is reviewed by all the important stakeholders and based on various parameters as risk
assessment, product robustness, design modularity, budget and time constraints, the best
design approach is selected for the product.
A design approach clearly defines all the architectural modules of the product along with its
communication and data flow representation with the external and third party modules (if any).
The internal design of all the modules of the proposed architecture should be clearly defined
with the minutest of the details in DDS.
Stage 4: Building or Developing the Product
In this stage of SDLC the actual development starts and the product is built. The programming
code is generated as per DDS during this stage. If the design is performed in a detailed and
organized manner, code generation can be accomplished without much hassle.
Developers must follow the coding guidelines defined by their organization and programming
tools like compilers, interpreters, debuggers, etc. are used to generate the code. Different high
level programming languages such as C, C++, Pascal, Java and PHP are used for coding. The
programming language is chosen with respect to the type of software being developed.
This stage is usually a subset of all the stages as in the modern SDLC models, the testing
activities are mostly involved in all the stages of SDLC. However, this stage refers to the testing
only stage of the product where product defects are reported, tracked, fixed and retested, until
the product reaches the quality standards defined in the SRS.
Once the product is tested and ready to be deployed it is released formally in the appropriate
market. Sometimes product deployment happens in stages as per the business strategy of that
organization. The product may first be released in a limited segment and tested in the real
business environment (UAT- User acceptance testing).
Then based on the feedback, the product may be released as it is or with suggested
enhancements in the targeting market segment. After the product is released in the market, its
maintenance is done for the existing customer base.
Waterfall Model
The Waterfall Model was the first Process Model to be introduced. It is also referred to as
a linear-sequential life cycle model. It is very simple to understand and use. In a waterfall model,
each phase must be completed before the next phase can begin and there is no overlapping in
the phases.
The Waterfall model is the earliest SDLC approach that was used for software development.
The waterfall Model illustrates the software development process in a linear sequential flow. This
means that any phase in the development process begins only if the previous phase is complete.
In this waterfall model, the phases do not overlap.
Waterfall approach was first SDLC Model to be used widely in Software Engineering to ensure
success of the project. In "The Waterfall" approach, the whole process of software development
is divided into separate phases. In this Waterfall model, typically, the outcome of one phase acts
as the input for the next phase sequentially.
The following illustration is a representation of the different phases of the Waterfall Model.
The sequential phases in Waterfall model are −
Requirement Gathering and analysis − All possible requirements of the system to be developed
are captured in this phase and documented in a requirement specification document.
System Design − The requirement specifications from first phase are studied in this phase and
the system design is prepared. This system design helps in specifying hardware and system
requirements and helps in defining the overall system architecture.
Implementation − With inputs from the system design, the system is first developed in small
programs called units, which are integrated in the next phase. Each unit is developed and tested
for its functionality, which is referred to as Unit Testing.
Integration and Testing − All the units developed in the implementation phase are integrated
into a system after testing of each unit. Post integration the entire system is tested for any faults
and failures.
Deployment of system − Once the functional and non-functional testing is done; the product is
deployed in the customer environment or released into the market.
Maintenance − There are some issues which come up in the client environment. To fix those
issues, patches are released. Also to enhance the product some better versions are released.
Maintenance is done to deliver these changes in the customer environment.
All these phases are cascaded to each other in which progress is seen as flowing steadily
downwards (like a waterfall) through the phases. The next phase is started only after the defined
set of goals are achieved for previous phase and it is signed off, so the name "Waterfall Model".
In this model, phases do not overlap.
Every software developed is different and requires a suitable SDLC approach to be followed
based on the internal and external factors. Some situations where the use of Waterfall model is
most appropriate are −
The advantages of waterfall development are that it allows for departmentalization and control.
A schedule can be set with deadlines for each stage of development and a product can proceed
through the development process model phases one by one.
The disadvantage of waterfall development is that it does not allow much reflection or revision.
Once an application is in the testing stage, it is very difficult to go back and change something
that was not well-documented or thought upon in the concept stage.
RAD Model
The RAD (Rapid Application Development) model is based on prototyping and iterative
development with no specific planning involved. The process of writing the software itself
involves the planning required for developing the product.
In the RAD model, the functional modules are developed in parallel as prototypes and are
integrated to make the complete product for faster product delivery. Since there is no detailed
preplanning, it makes it easier to incorporate the changes within the development process.
RAD projects follow iterative and incremental model and have small teams comprising of
developers, domain experts, customer representatives and other IT resources working
progressively on their component or prototype.
The most important aspect for this model to be successful is to make sure that the prototypes
developed are reusable.
RAD model distributes the analysis, design, build and test phases into a series of short, iterative
development cycles.
Business Modelling
The business model for the product under development is designed in terms of flow of
information and the distribution of information between various business channels. A complete
business analysis is performed to find the vital information for business, how it can be obtained,
how and when is the information processed and what are the factors driving successful flow of
information.
Data Modelling
The information gathered in the Business Modelling phase is reviewed and analyzed to form sets
of data objects vital for the business. The attributes of all data sets is identified and defined. The
relation between these data objects are established and defined in detail in relevance to the
business model.
Process Modelling
The data object sets defined in the Data Modelling phase are converted to establish the business
information flow needed to achieve specific business objectives as per the business model. The
process model for any changes or enhancements to the data object sets is defined in this phase.
Process descriptions for adding, deleting, retrieving or modifying a data object are given.
Application Generation
The actual system is built and coding is done by using automation tools to convert process and
data models into actual prototypes.
The traditional SDLC follows a rigid process models with high emphasis on requirement analysis
and gathering before the coding starts. It puts pressure on the customer to sign off the
requirements before the project starts and the customer doesn’t get the feel of the product as
there is no working build available for a long time.
The customer may need some changes after he gets to see the software. However, the change
process is quite rigid and it may not be feasible to incorporate major changes in the product in
the traditional SDLC.
The RAD model focuses on iterative and incremental delivery of working models to the customer.
This results in rapid delivery to the customer and customer involvement during the complete
development cycle of product reducing the risk of non-conformance with the actual user
requirements.
RAD model can be applied successfully to the projects in which clear modularization is possible.
If the project cannot be broken into modules, RAD may fail.
The following pointers describe the typical scenarios where RAD can be used −
RAD should be used only when a system can be modularized to be delivered in an incremental
manner.
It should be used if there is a high availability of designers for Modelling.
It should be used only if the budget permits use of automated code generating tools.
RAD SDLC model should be chosen only if domain experts are available with relevant business
knowledge.
Should be used where the requirements change during the project and working prototypes are to
be presented to customer in small iterations of 2-3 months.
RAD model enables rapid delivery as it reduces the overall development time due to the
reusability of the components and parallel development. RAD works well only if high skilled
engineers are available and the customer is also committed to achieve the targeted prototype in
the given time frame. If there is commitment lacking on either side the model may fail.
Agile Model
Agile SDLC model is a combination of iterative and incremental process models with focus on
process adaptability and customer satisfaction by rapid delivery of working software product.
Agile Methods break the product into small incremental builds. These builds are provided in
iterations. Each iteration typically lasts from about one to three weeks. Every iteration involves
cross functional teams working simultaneously on various areas like −
Planning
Requirements Analysis
Design
Coding
Unit Testing and
Acceptance Testing.
At the end of the iteration, a working product is displayed to the customer and important
stakeholders.
What is Agile?
Agile model believes that every project needs to be handled differently and the existing methods
need to be tailored to best suit the project requirements. In Agile, the tasks are divided to time
boxes (small time frames) to deliver specific features for a release.
Iterative approach is taken and working software build is delivered after each iteration. Each
build is incremental in terms of features; the final build holds all the features required by the
customer.
The Agile thought process had started early in the software development and started becoming
popular with time due to its flexibility and adaptability.
The most popular Agile methods include Rational Unified Process (1994), Scrum (1995), Crystal
Clear, Extreme Programming (1996), Adaptive Software Development, Feature Driven
Development, and Dynamic Systems Development Method (DSDM) (1995). These are now
collectively referred to as Agile Methodologies, after the Agile Manifesto was published in 2001.
Agile is based on the adaptive software development methods, whereas the traditional SDLC
models like the waterfall model is based on a predictive approach. Predictive teams in the
traditional SDLC models usually work with detailed planning and have a complete forecast of the
exact tasks and features to be delivered in the next few months or during the product life cycle.
Predictive methods entirely depend on the requirement analysis and planning done in the
beginning of cycle. Any changes to be incorporated go through a strict change control
management and prioritization.
Agile uses an adaptive approach where there is no detailed planning and there is clarity on
future tasks only in respect of what features need to be developed. There is feature driven
development and the team adapts to the changing product requirements dynamically. The
product is tested very frequently, through the release iterations, minimizing the risk of any major
failures in future.
Customer Interaction is the backbone of this Agile methodology, and open communication with
minimum documentation are the typical features of Agile development environment. The agile
teams work in close collaboration with each other and are most often located in the same
geographical location.
Agile methods are being widely accepted in the software world recently. However, this method
may not always be suitable for all products. Here are some pros and cons of the Agile model.
Spiral Model
The spiral model combines the idea of iterative development with the systematic, controlled
aspects of the waterfall model. This Spiral model is a combination of iterative development
process model and sequential linear development model i.e. the waterfall model with a very high
emphasis on risk analysis. It allows incremental releases of the product or incremental
refinement through each iteration around the spiral.
The spiral model has four phases. A software project repeatedly passes through these phases in
iterations called Spirals.
Identification
This phase starts with gathering the business requirements in the baseline spiral. In the
subsequent spirals as the product matures, identification of system requirements, subsystem
requirements and unit requirements are all done in this phase.
This phase also includes understanding the system requirements by continuous communication
between the customer and the system analyst. At the end of the spiral, the product is deployed
in the identified market.
Design
The Design phase starts with the conceptual design in the baseline spiral and involves
architectural design, logical design of modules, physical product design and the final design in
the subsequent spirals.
Construct or Build
The Construct phase refers to production of the actual software product at every spiral. In the
baseline spiral, when the product is just thought of and the design is being developed a POC
(Proof of Concept) is developed in this phase to get customer feedback.
Then in the subsequent spirals with higher clarity on requirements and design details a working
model of the software called build is produced with a version number. These builds are sent to
the customer for feedback.
Risk Analysis includes identifying, estimating and monitoring the technical feasibility and
management risks, such as schedule slippage and cost overrun. After testing the build, at the
end of first iteration, the customer evaluates the software and provides feedback.
The following illustration is a representation of the Spiral Model, listing the activities in each
phase.
Based on the customer evaluation, the software development process enters the next iteration
and subsequently follows the linear approach to implement the feedback suggested by the
customer. The process of iterations along the spiral continues throughout the life of the software.
The Spiral Model is widely used in the software industry as it is in sync with the natural
development process of any product, i.e. learning with maturity which involves minimum risk for
the customer as well as the development firms.
The advantage of spiral lifecycle model is that it allows elements of the product to be added in,
when they become available or known. This assures that there is no conflict with previous
requirements and design.
This method is consistent with approaches that have multiple software builds and releases which
allows making an orderly transition to a maintenance activity. Another positive aspect of this
method is that the spiral model forces an early user involvement in the system development
effort.
On the other side, it takes a very strict management to complete such products and there is a
risk of running the spiral in an indefinite loop. So, the discipline of change and the extent of
taking change requests is very important to develop and deploy the product successfully.
The advantages of the Spiral SDLC Model are as follows −
2.3 V-Model
A popular development process model, V-model is a variant of the waterfall model. As is the
case with the waterfall model, this model gets its name from its visual appearance (see Figure
2.5).
In this model verification and validation activities are carried out throughout the development
life cycle, and therefore the chances bugs in the work products considerably reduce. This
model is therefore generally considered to be suitable for use in projects concerned with
development of safety-critical software that are required to have high reliability.
As shown in Figure 2.5, there are two main phases—development and validation phases. The
left half of the model comprises the development phases and the right half comprises the
validation phases.
1). In each development phase, along with the development of a work product, test case
design and the plan for testing the work product are carried out, whereas the actual testing is
carried out in the validation phase. This validation plan created during the development
phases is carried out in the corresponding validation phase which have been shown by dotted
arcs in Figure 2.5.
2). In the validation phase, testing is carried out in three steps—unit, integration, and system
testing. The purpose of these three different steps of testing during the validation phase is to
detect defects that arise in the corresponding phases of software development— requirements
analysis and specification, design, and coding respectively.
V-model versus waterfall model
V-model is an extension of the waterfall model, with testing activities spread throughout
the lifecycle.
During requirements specification, system test suite design occurs.
In waterfall model where testing activities are confined to the testing phase only, in the
V-model testing activities are spread over the entire life cycle. Design phase involves
designing integration test cases. Unit test cases are designed during coding.
Development and validation activities proceed hand in hand in
this model. Advantages of V-model
The important advantages of the V-model over the iterative waterfall model are as following:
In the V-model, much of the testing activities (test case design, test planning, etc.) are
carried out in parallel with the development activities. Therefore, before testing phase
starts significant part of the testing activities, including test case design and test
planning, is already complete. Therefore, this model usually leads to a shorter testing
phase and an overall faster product development as compared to the iterative model.
Since test cases are designed when the schedule pressure has not built up, the quality
of the test cases is usually better.
The test team is reasonably kept occupied throughout the development cycle in contrast
to the waterfall model where the testers are active only during the testing phase. This
leads to more efficient manpower utilisation.
In the V-model, the test team is associated with the project from the beginning.
Therefore, they build up a good understanding of the development artifacts, and this in
turn, helps them to carry out effective testing of the software. In contrast, in the
waterfall model often the test team comes on board late in the development cycle,
since no testing activities are carried out before the start of the implementation and
testing phase.
Disadvantages of V-model
Being a derivative of the classical waterfall model, this model inherits most of the weaknesses
of the waterfall model.
2 Marks Questions