Unit 1
Unit 1
Unit - 1
Software Development and Process Models
Software itself is the set of instructions or programs that tell a computer what to do. It
is independent of hardware and makes computers programmable. There are three
basic types:
Programmers, or coders, write source code to program computers for specific tasks
like merging databases, processing online orders, routing communications,
conducting searches or displaying text and graphics. Programmers typically interpret
instructions from software developers and engineers and use programming languages
like C++ or Java to carry them out.
1
relying on software for market differentiation, but their software development must be
coordinated with the product’s mechanical and electrical development work.
Software developers have a less formal role than engineers and can be closely
involved with specific project areas — including writing code. At the same time, they
drive the overall software development lifecycle — including working across
functional teams to transform requirements into features, managing development
teams and processes, and conducting software testing and maintenance.
Building a model with a modeling tool that uses a modeling language like
SysML or UML to conduct early validation, prototyping and simulation of the
design.
2
Deploying the software for use and responding to and resolving user
problems.
Managing and measuring the project to maintain quality and delivery over
the application lifecycle, and to evaluate the development process with models
such as the Capability Maturity Model (CMM).
The steps of the software development process fit into application lifecycle
management (ALM). The IBM Engineering Management solution is a superset of
ALM that enables the management of parallel mechanical, electrical and software
development.
Testing
Deployment
Software development process steps can be grouped into the phases of the lifecycle,
but the importance of the lifecycle is that it recycles to enable continuous
improvement. For example, user issues that surface in the maintenance and support
phase can become requirements at the beginning of the next cycle.
3
In an object-oriented system, all data is represented as discrete objects with which
the user and other objects may interact. Each object contains data as well as
information about the executable file needed to interpret that data. An object-oriented
system allows the user to focus completely on tasks rather than tools.
Object-Oriented Development uses "objects" to model real world objects. A car or a
laptop can be considered as object.
While traditional programming views software as a collection of functions, an object
oriented system concentrates on the objects that combines data and functionality
together.
In Object-Oriented Development, we apply object orientation across every system
development activity such as requirement analysis, design, programming, testing, and
maintenance.
For instance, an object oriented analysis (OOA) will usually have the following steps:
• Identifying the system functionality
• Identifying the involved objects
• Recognizing the object classes
• Analysing the objects to fulfil the system functionality
4
programming language that supports direct implementation of objects, classes, and
inheritance.
Challenges
Every technology advancement is a blessing for the IT industry. But at the same time,
technology evolving at a phenomenal rate leads to an added pressure for software
development professionals to leverage these upcoming technology trends in software
product development to gain a cutting edge over competitors and stand out in the
market.
Software projects are generally conceptual and are aimed at designing and developing
software products that meet varied customer demands. To develop even the simplest
application or product, developers must clearly understand the underlying business
concept and bring in the required features to satisfy the growing customer demands.
Time limitations
Limited infrastructure/resources
5
teams must have a clear understanding of the problems that lie ahead of them and a
roadmap to overcome them.
Implementing software development best practices could help reduce these problems
to a large extent. Introducing a DevOps team to handle the testing-development crisis,
adopting Cloud for seamless network and infrastructure and constantly enhancing the
technical knowhow of your software development teams could help you fight some of
these major software development challenges and establish a good position in the
software market.
4. Many times software developers face problem during System and Application
integration leading to failure of software projects also.
8. Getting Defects or Errors in the product during its last stage creates an
unwanted challenge for the software developers.
10. When a new developer lacks proper Communication and Coordination with
the other developers of the same development team it creates a problem at
6
some point.
11. It feels like a common problem when one developer Works with another
developer’s code This situation creates a problem for the developer as it takes
lot time of the new developer to understand the code.
12. In last most of the software developers face this problem if they Don’t get
required support from Project Manger/Leader and sometimes it gets difficult
to handle the relation between colleagues and managers which in terms
decrease the productivity.
An Engineering Perspective
7
The Solution
Solution was to the problem was transforming unorganized coding effort into a
software engineering discipline. These engineering models helped companies to
streamline operations and deliver software meeting customer requirements.
The late 1970s saw the widespread uses of software engineering principles.
In the 1980s saw the automation of software engineering process and growth
of (CASE) Computer-Aided Software Engineering.
The 1990s have seen an increased emphasis on the ‘management’ aspects of
projects standard of quality and processes just like ISO 9001
Large software – In our real life, it is quite more comfortable to build a wall
than a house or building. In the same manner, as the size of the software
becomes large, software engineering helps you to build software.
Scalability- If the software development process were based on scientific and
engineering concepts, it is easier to re-create new software to scale an existing
one.
Adaptability: Whenever the software process was based on scientific and
engineering, it is easy to re-create new software with the help of software
engineering.
8
Cost- Hardware industry has shown its skills and huge manufacturing has
lower the cost of the computer and electronic hardware.
Dynamic Nature– Always growing and adapting nature of the software. It
depends on the environment in which the user works.
Quality Management: Offers better method of software development to
provide quality software products.
In safety-critical areas such as space, aviation, nuclear power plants, etc. the
cost of software failure can be massive because lives are at risk.
Increased market demands for fast turnaround time.
Dealing with the increased complexity of software need for new applications.
The diversity of software systems should be communicating with each other.
The characteristics of any software product include features which are displayed by
the product when it is installed and put in use.
They are not the services which are provided by the product. Instead, they have
related to the products dynamic behavior and the use made of the product.
However, the relative importance of these characteristics varies from one software
system to another.
9
Product
Description
Characteristics
The software should evolve to meet the changing demands of the
Maintainability
clients.
Dependability includes various characteristics. Dependable
Dependability software should never cause any physical or economic damage at
the time of system failure.
The software application should overuse system resources like
Efficiency
memory and processor cycle.
The software application should have specific UI and
Usability
documentation.
Optimizing the above attribute is very challenging. For example, offering a better UI
can reduce system efficiency.
Any software should be judged by what it offers and what are the methods which help
you to use it.
Operational
Transitional
Maintenance
Operational
This characteristic let us know about how well software works in the operations
which can be measured on:
Budget
Efficiency
Usability
Dependability
Correctness
Functionality
Safety
Security
Transitional
This is an essential aspect when the software is moved from one platform to another:
Interoperability
Reusability
10
Portability
Adaptability
Maintenance
This aspect talks about how well software has the capabilities to adapt itself in the
quickly changing environment:
Flexibility
Maintainability
Modularity
Scalability
Object Orientation
Object-oriented refers to a programming language, system or software methodology
that is built on the concepts of logical objects.
It works through the creation, utilization and manipulation of reusable objects to
perform a specific task, process or objective.
In the past, information systems used to be defined primarily by their functions: data
and functions were kept separate and associated using input and output relations.
11
Objects form a capsule, which combines the characteristics with behavior. Objects are
intended to enable programmers to map a real problem and its proposed software
solution on a one-to-one basis.
This documentation introduces a selection of terms that are used universally in object
orientation.
Objects
Objects are instances of classes. They contain data and provides services. The data
forms the attributes of the object. The services are known as methods (also known as
operations or functions). Typically, methods operate on private data (the attributes, or
state of the object), which is only visible to the methods of the object. Thus the
attributes of an object cannot be changed directly by the user, but only by the methods
of the object. This guarantees the internal consistency of the object.
Classes
Classes describe objects. From a technical point of view, objects are runtime instances
of a class. In theory, you can create any number of objects based on a single class. Each
instance (object) of a class has a unique identity and its own set of values for its
attributes.
Object References
In a program, you identify and address objects using unique object references. Object
references allow you to access the attributes and methods of an object.
Encapsulation
Objects restrict the visibility of their resources (attributes and methods) to other users.
Every object has an interface, which determines how other objects can interact with it.
The implementation of the object is encapsulated, that is, invisible outside the object
itself.
12
Inheritance
You can use an existing class to derive a new class. Derived classes inherit the data and
methods of the superclass. However, they can overwrite existing methods, and also add
new ones.
Polymorphism
13
Object-oriented tools
Object-oriented modeling
Software is developed for a variety of purposes. The three most common ones are:
1. To meet the specific needs of a specific client/business (the case with custom
software)
To solve a real-world problem
2. For personal use (e.g., a pharmacy owner may require inventory managing and
billing software.)
3. The demand for better quality management of the software development
process has enforced the discipline of software engineering, which focuses on
applying the systematic approach exemplified in the engineering paradigm to
the process of software development.
There are several methodologies available for software project management like Agile,
Waterfall, Scrum, Kanban, and a few others.
1. Backend Development
2. Frontend Development
14
What is PDLC (Product Development Lifecycle)
The product development life cycle (PDLC) is the complete process of creating and
bringing a new product into the market. It includes the following 5 steps:
1. Product Conceptualization
2. Product Architecture and Design
3. Product Construction or Development
4. Product Release
5. Product Realization and Future Upgrade
Example:
Most companies adopt these stages to bring a new product to the market. For example,
when PayPal came up with the in-context checkout product, they went through all
these stages to make sure of a successful launch of the product.
15
1. They did a thorough market research of why In-context is essential compared
to out of context
2. Defined the primary objective of the new product, which is the reduction in
drop-off rate
3. Did a thorough analysis of tech feasibility and shoppers adoption
4. Worked with the design teams to create a seamless in-context experience
5. For a project this big they created three delivery teams each running its scrum
managed by a central program
6. They released the product MVP in a limited market and kept monitoring the
metrics
7. The product was refined based on the feedback before launching it to a
broader market
1. Waterfall model
2. Agile model
16
Requirements: gather, analyze, document
Design: resulting in the software architecture
Code: the development, proving, and integration of software
Testing: the systematic discovery and debugging of defects
Operations: the installation, support, and maintenance of complete systems
Developers start with simplistic project design and then begin to work on small
modules. The work on these modules is carried out in weekly or monthly sprints, and
at the end of each sprint, project priorities are evaluated, and tests are executed. Thus,
the equivalent stages of the waterfall model are completed at every single sprint.
These sprints allow for exploring bugs, and customer feedback to be incorporated into
the design before the next sprint begins.
That said, the process must be well-managed and documentation enforced, as the
rapid pace of development can lend itself towards dis-organization. However, if done
correctly, it results in a fast, low-risk, and efficient workflow.
Most of the matured companies now use Agile methodology. Most of the customers
you speak with talk in terms of Agile processes unless they specifically mention that
they are not agile. Though no companies truly follow complete agile methods, they
might be using some hybrid model.
In this Model, you can start with some of the software specifications and develop the
first version of the software. After the first version if there is a need to change the
software, then a new version of the software is created with a new iteration. Every
release of the Iterative Model finishes in an exact and fixed period that is called
iteration.
The Iterative Model allows the accessing earlier phases, in which the variations made
respectively. The final output of the project renewed at the end of the Software
Development Life Cycle (SDLC) process.
17
The various phases of Iterative model are as follows:
1. Requirement gathering & analysis: In this phase, requirements are gathered from
customers and check by an analyst whether requirements will fulfil or not. Analyst
checks that need will achieve within budget or not. After all of this, the software team
skips to the next phase.
2. Design: In the design phase, team design the software by the different diagrams
like Data Flow diagram, activity diagram, class diagram, state transition diagram, etc.
4. Testing: After completing the coding phase, software testing starts using different
test methods. There are many test methods, but the most common are white box,
black box, and grey box test methods.
5. Deployment: After completing all the phases, software is deployed to its work
environment.
6. Review: In this phase, after the product deployment, review phase is performed to
check the behaviour and validity of the developed product. And if there are any error
found then the process starts again from the requirement gathering.
18
When to use the Iterative Model?
Process Models
Software Processes
The term software specifies to the set of computer programs, procedures and
associated documents (Flowcharts, manuals, etc.) that describe the program and how
they are to be used.
A software process is the set of activities and associated outcome that produce a
software product. Software engineers mostly carry out these activities. These are four
key process activities, which are common to all software processes. These activities
are:
19
process, software product, and the roles of people involved in software engineering.
Some examples of the types of software process models that may be produced are:
1. A workflow model: This shows the series of activities in the process along
with their inputs, outputs and dependencies. The activities in this model
perform human actions.
2. 2. A dataflow or activity model: This represents the process as a set of
activities, each of which carries out some data transformations. It shows how
the input to the process, such as a specification is converted to an output such
as a design. The activities here may be at a lower level than activities in a
workflow model. They may perform transformations carried out by people or
by computers.
3. 3. A role/action model: This means the roles of the people involved in the
software process and the activities for which they are responsible.
1. The waterfall approach: This takes the above activities and produces them as
separate process phases such as requirements specification, software design,
implementation, testing, and so on. After each stage is defined, it is "signed
off" and development goes onto the following stage.
2. Evolutionary development: This method interleaves the activities of
specification, development, and validation. An initial system is rapidly
developed from a very abstract specification.
3. Formal transformation: This method is based on producing a formal
mathematical system specification and transforming this specification, using
mathematical methods to a program. These transformations are 'correctness
preserving.' This means that you can be sure that the developed programs meet
its specification.
4. System assembly from reusable components: This method assumes the
parts of the system already exist. The system development process target on
integrating these parts rather than developing them from scratch.
Software Crisis
1. Size: Software is becoming more expensive and more complex with the
growing complexity and expectation out of software. For example, the code in
the consumer product is doubling every couple of years.
2. Quality: Many software products have poor quality, i.e., the software products
defects after putting into use due to ineffective testing technique. For example,
Software testing typically finds 25 errors per 1000 lines of code.
3. Cost: Software development is costly i.e. in terms of time taken to develop
and the money involved. For example, Development of the FAA's Advanced
Automation System cost over $700 per lines of code.
4. Delayed Delivery: Serious schedule overruns are common. Very often the
software takes longer than the estimated time to develop, which in turn leads
to cost shooting up. For example, one in four large-scale development projects
is never completed.
20
Program vs. Software
Software is more than programs. Any program is a subset of software, and it becomes
software only if documentation & operating procedures manuals are prepared.
21
3. Operating Procedures: Operating Procedures consist of instructions to set up and
use the software system and instructions on how react to the system failure. Example
of operating system procedures manuals is: installation guide, Beginner's guide,
reference guide, system administration guide, etc.
There are different software development life cycle models specify and design, which
are followed during the software development phase. These models are also called
"Software Development Process Models." Each process model follows a series of
phase unique to its type to ensure success in the step of software development.
22
Waterfall Model
The waterfall is a universally accepted SDLC model. In this method, the whole
process of software development is divided into various phases.
Linear ordering of activities has some significant consequences. First, to identify the
end of a phase and the beginning of the next, some certification techniques have to be
employed at the end of each step. Some verification and validation usually do this
mean that will ensure that the output of the stage is consistent with its input (which is
the output of the previous step), and that the output of the stage is consistent with the
overall requirements of the system.
RAD Model
Business Modeling
Data Modeling
Process Modeling
Application Generation
Testing and Turnover
Spiral Model
The spiral model is a risk-driven process model. This SDLC model helps the group
to adopt elements of one or more process models like a waterfall, incremental,
waterfall, etc. The spiral technique is a combination of rapid prototyping and
concurrency in design and development activities.
Each cycle in the spiral begins with the identification of objectives for that cycle, the
different alternatives that are possible for achieving the goals, and the constraints that
exist. This is the first quadrant of the cycle (upper-left quadrant).
The next step in the cycle is to evaluate these different alternatives based on the
objectives and constraints. The focus of evaluation in this step is based on the risk
perception for the project.
The next step is to develop strategies that solve uncertainties and risks. This step may
involve activities such as benchmarking, simulation, and prototyping.
23
V-Model
In this type of SDLC model testing and the development, the step is planned in
parallel. So, there are verification phases on the side and the validation phase on the
other side. V-Model joins by Coding phase.
Incremental Model
Agile Model
Any agile software phase is characterized in a manner that addresses several key
assumptions about the bulk of software projects:
Iterative Model
Big bang model is focusing on all types of resources in software development and
coding, with no or very little planning. The requirements are understood and
implemented when they come.
24
This model works best for small projects with smaller size development team which
are working together. It is also useful for academic software development projects. It
is an ideal model where requirements are either unknown or final release date is not
given.
Prototype Model
The prototyping model starts with the requirements gathering. The developer and the
user meet and define the purpose of the software, identify the needs, etc.
A 'quick design' is then created. This design focuses on those aspects of the software
that will be visible to the user. It then leads to the development of a prototype. The
customer then checks the prototype, and any modifications or changes that are needed
are made to the prototype.
Looping takes place in this step, and better versions of the prototype are created.
These are continuously shown to the user so that any new changes can be updated in
the prototype. This process continue until the customer is satisfied with the system.
Once a user is satisfied, the prototype is converted to the actual system with all
considerations for quality and security.
Unified Process
Unified process (UP) is an architecture centric, use case driven, iterative and
incremental development process. UP is also referred to as the unified software
development process.
25
The Unified Process is an attempt to draw on the best features and characteristics of
traditional software process models, but characterize them in a way that implements
many of the best principles of agile software development. The Unified Process
recognizes the importance of customer communication and streamlined methods for
describing the customer’s view of a system. It emphasizes the important role of
software architecture and “helps the architect focus on the right goals, such as
understandability, reliance to future changes, and reuse” . It suggests a process flow
that is iterative and incremental, providing the evolutionary feel that is essential in
modern software development.
Inception
Elaboration
Conception
Transition
Production
The elaboration phase encompasses the communication and modeling activities of the
generic process model. Elaboration refines and expands the preliminary use cases that
were developed as part of the inception phase and expands the architectural
representation to include five different views of the software the use case model, the
requirements model, the design model, the implementation model, and the
deployment model. Elaboration creates an “executable architectural baseline” that
represents a “first cut” executable system.
The construction phase of the UP is identical to the construction activity defined for
the generic software process. Using the architectural model as input, the construction
phase develops or acquires the software components that will make each use case
operational for end users. To accomplish this, requirements and design models that
were started during the elaboration phase are completed to reflect the final version of
the software increment. All necessary and required features and functions for the
software increment (the release) are then implemented in source code.
The transition phase of the UP encompasses the latter stages of the generic
construction activity and the first part of the generic deployment (delivery and
feedback) activity. Software is given to end users for beta testing and user feedback
reports both defects and necessary changes. At the conclusion of the transition phase,
the software increment becomes a usable software release.
The production phase of the UP coincides with the deployment activity of the generic
process. During this phase, the ongoing use of the software is monitored, support for
the operating environment (infrastructure) is provided, and defect reports and requests
26
for changes are submitted and evaluated. It is likely that at the same time the
construction, transition, and production phases are being conducted, work may have
already begun on the next software increment. This means that the five UP phases do
not occur in a sequence, but rather with staggered concurrency.
As the name indicates, Iterative and incremental development (IID) is a model that
is an incremental model that is developed in multiple cycles of iterations. Project is
started with a comparatively small task or component and increments are made in
each cycle of the iterations until desired product is reached. During this process,
developers have advantage of evaluating and testing components at each stage and
gaining information that would be useful at end stages as well. This knowledge is
used to also improve design of final product.
Iteration includes update and execution of cycles are to be basic, direct, and particular,
supporting overhaul at that stage or as an errand added to task control list. Degree of
configuration detail isn’t directed by iterative methodology.
Phases in IID :
As development is incremental and iterative, different functions are applied in
different phases. According to prerequisites of organization, at each phase,
functionalities are implemented. There are four phases in IID :
Inception –
In this phase reorganization of project scope, prerequisites, and risks at an
elevated level yet in enough detail that work can be assessed are done.
Elaboration –
In this phase, conveying a working structure that mitigates top dangers and
satisfies non-functional necessities is done.
Construction –
In this phase, functionalities are incremented gradually with codes for
functional requirements. Whole architecture is built in this phase.
Transition –
In this phase, project is transitioned into production and then deployment.
In this cyclic process, architects work one iteration early than testers, which creates a
flow in workspace. Each phase is one or more iterations long.
27
Advantages of IID :
Each delivery is an item increment, with goal that client will have a working
item within reach constantly.
You can create organized prerequisites first.
If the requirements are changed midway, new requirements can be augmented
without any issue.
Clients get significant functionality faster.
Client can give input to every item increment, accordingly maintaining a
strategic distance from differences toward finish of improvement.
Brings down introductory delivery cost.
Initial item delivery is quicker.
Disadvantages of IID :
Agile Processes
Each iteration is considered as a short time "frame" in the Agile process model, which
typically lasts from one to four weeks. The division of the entire project into smaller
parts helps to minimize the project risk and to reduce the overall project delivery time
requirements. Each iteration involves a team working through a full software
28
development life cycle including planning, requirements analysis, design, coding, and
testing before a working product is demonstrated to the client.
1. Requirements gathering
2. Design the requirements
3. Construction/ iteration
4. Testing/ Quality assurance
5. Deployment
6. Feedback
1. Requirements gathering: In this phase, you must define the requirements. You
should explain business opportunities and plan the time and effort needed to build the
project. Based on this information, you can evaluate technical and economic
feasibility.
2. Design the requirements: When you have identified the project, work with
stakeholders to define requirements. You can use the user flow diagram or the
high-level UML diagram to show the work of new features and show how it will
apply to your existing system.
3. Construction/ iteration: When the team defines the requirements, the work begins.
Designers and developers start working on their project, which aims to deploy a
29
working product. The product will undergo various stages of improvement, so it
includes simple, minimal functionality.
4. Testing: In this phase, the Quality Assurance team examines the product's
performance and looks for the bug.
5. Deployment: In this phase, the team issues a product for the user's work
environment.
6. Feedback: After releasing the product, the last step is feedback. In this, the team
receives feedback about the product and works through the feedback.
Scrum
Crystal
Dynamic Software Development Method(DSDM)
Feature Driven Development(FDD)
Lean Software Development
eXtreme Programming(XP)
Scrum
Scrum Master: The scrum can set up the master team, arrange the meeting
and remove obstacles for the process
Product owner: The product owner makes the product backlog, prioritizes the
delay and is responsible for the distribution of functionality on each repetition.
Scrum Team: The team manages its work and organizes the work to complete
the sprint or cycle.
eXtreme Programming(XP)
This type of methodology is used when customers are constantly changing demands
or requirements, or when they are not sure about the system's performance.
Crystal:
30
3. Wrap up: According to the user environment, this phase performs deployment,
post-deployment.
1. Time Boxing
2. MoSCoW Rules
3. Prototyping
1. Pre-project
2. Feasibility Study
3. Business Study
4. Functional Model Iteration
5. Design and build Iteration
6. Implementation
7. Post-project
This method focuses on "Designing and Building" features. In contrast to other smart
methods, FDD describes the small steps of the work that should be obtained
separately per function.
1. Eliminating Waste
2. Amplifying learning
3. Defer commitment (deciding as late as possible)
4. Early delivery
5. Empowering the team
6. Building Integrity
7. Optimize the whole
31
Advantage(Pros) of Agile Method:
1. Frequent Delivery
2. Face-to-Face Communication with clients.
3. Efficient design and fulfils the business requirement.
4. Anytime changes are acceptable.
5. It reduces total development time.
Since this was an Agile, the project was broken up into several iterations.
The iterations are all of the same time duration.
At the end of each iteration, a working product with a new feature has to be
delivered.
Instead of Spending 1.5 months on requirements gathering, They will decide
the core features that are required in the product and decide which of these
features can be developed in the first iteration.
Any remaining features that cannot be delivered in the first iteration will be
delivered in the next subsequent iteration, based on the priority
At the end of the first iterations, the team will deliver working software with
the core basic features.
32
Both the team have put their best efforts to get the product to a complete stage. But
then out of blue due to the rapidly changing environment, the company’s head come
up with an entirely new set of features and want to be implemented as quickly as
possible and wanted to push out a working model in 2 days. Team A was now in a fix,
they were still in their design phase and did not yet start coding and they had no
working model to display. And moreover, it was practically impossible for them to
implement new features since waterfall model there is not reverting back to the old
phase once you proceed to the next stage, which means they would have to start from
the square one again. That would incur their heavy cost and a lot of overtime. Team B
was ahead of Team A in a lot of aspects, all thanks to Agile Development. They also
had the working product with most of the core requirements since the first increment.
And it was a piece of cake for them to add the new requirements. All they had to do is
schedule these requirements for the next increment and then implement them.
33