Software Engineering
T2418502
Lecturer: Mukesh Kumar
Govt. Polytechnic Gaya
E-mail: [Link]@[Link]
Unit 1 – Software Development Process
T2418502 - Software Engineering 1
Unit-1.0
Software Development Process
1.1 Type of software, need for software engineering, software
engineering as layered approach, its characteristics.
1.2 Software development frame work.
1.3 Software process framework, process models: perspective process
models, specialized process models.
1.4 Agile software development: agile process and its importance,
extreme programming, adaptive software development, scrum,
dynamics system development method (DSDM), crystal
1.5 Selection criteria for software process model.
Software Engineering
The term software engineering is composed of two words,
software and engineering.
Software is more than just a program code. A program is an
executable code, which serves some computational purpose.
Software is considered to be a collection of executable
programming code, associated libraries and documentations.
Software, when made for a specific requirement is called software
product.
Engineering on the other hand, is all about developing products,
using well-defined, scientific principles and methods.
Definitions of Software
Engineering
Software engineering can be defined as an engineering branch
associated with the development of software product using well-
defined scientific principles, methods and procedures. The
outcome of software engineering is an efficient and reliable
software product.
IEEE defines software engineering as: The application of a
systematic, disciplined, quantifiable approach to the development,
operation and maintenance of software.
1.1.1. Types of Software
System software - software that provides a platform to other
software such as Microsoft Windows, GNU/Linux, macOS.
Application software - programs designed for end users like
Notepad, Firefox, Media players.
Engineering/Scientific software - software built with techniques
and formulae specific to specific scientific or engineering field,
examples are MATLAB, AUTOCAD.
Legacy software system - software systems that were developed
decades ago which becomes costly and risky to maintain and
evolve.
1.1.1. Types of Software
Embedded software - programs that control machines or devices
such as Traffic light control mechanism, Motorcycle dashboard
display.
Product-line software - a group of products sharing common features
that are used to satisfy specific needs of a mission like MS Office
supporting home use, business use, enterprise use etc.
Web application software - programs that are run on web servers and
are accessed through a web browser, examples are Gmail, Facebook
etc.
Artificial Intelligence software - software that is capable of intelligent
behaviour, like in Robotics, Game Playing etc
1.1.2. Need for software
engineering
The need of software engineering arises because of higher rate of change in user requirements and
environment on which the software is working.
Large software - It is easier to build a wall than to a house or building, likewise, as the size of
software become large engineering has to step to give it a scientific process.
Scalability- If the software process were not based on scientific and engineering concepts, it
would be easier to re-create new software than to scale an existing one.
Cost- As hardware industry has shown its skills and huge manufacturing has lower down the price
of computer and electronic hardware. But the cost of software remains high if proper process is not
adapted.
Dynamic Nature- The always growing and adapting nature of software hugely depends upon the
environment in which the user works. If the nature of software is always changing, new
enhancements need to be done in the existing one. This is where software engineering plays a
good role.
Quality Management- Better process of software development provides better and quality
software product.
1.1.3. Software engineering as
layered approach
Software engineering, when viewed as a layered technology,
is structured into distinct levels, each with its own responsibilities
and functions, to create a robust and manageable software
system. This layered approach enables efficient development,
testing, and maintenance by breaking down the complexity of the
software into smaller, more manageable parts.
1.1.3. Software engineering as layered approach
•Process Layer: Core Layers in Software Engineering:
This foundational layer provides the overall structure and framework for software
development activities.
It defines the sequence of tasks, such as communication, planning, modeling,
construction, and deployment,
that are necessary for building the software.
•Method Layer:
This layer focuses on the "how-to" aspects of software development. It encompasses the
specific techniques,
methodologies, and best practices used within each process activity.
•Tools Layer:
This layer provides the automated or semi-automated support for the process and
methods.
Tools like IDEs, testing frameworks, and version control systems are crucial for
streamlining development and
ensuring quality.
•Quality Focus:
This layer emphasizes the importance of continuous process improvement, integrity
(including security),
1.1.3. Benefits of the Layered
•Improved Decision Making:
Approach:
Each layer provides a structured framework for decision-making, facilitating better
collaboration and problem-solving.
•Early Error Detection:
The layered approach allows for the identification and resolution of errors early in the
development process, reducing
the risk of costly rework later on.
•Easier Configuration and Maintenance:
By dividing the software into layers, it becomes easier to configure, update, and maintain
individual parts of the system
without affecting other components.
•Enhanced Flexibility and Portability:
The layered architecture allows for greater flexibility and portability of the software solution,
making it adaptable to
different environments and requirements. In essence, software engineering as a layered
technology provides a
systematic and organized way to build, manage, and maintain complex software systems,
ultimately leading to more efficient and reliable software products.
1.1.4. Characteristics of a Good
Software
A software product can be judged by what it offers and how well it
can be used. This software must satisfy on the following grounds:
Operational
Transitional
Maintenance
1.1.4. Characteristics of a Good
Software
Well-engineered and crafted software is expected to have the following
characteristics: Operational - This tells us how well software works in
operations. It can be measured on:
Budget
Usability
Efficiency
Correctness
Functionality
Dependability
Security
Safety
1.1.4. Characteristics of a Good
Software
Transitional - This aspect is important when the software is moved
from one platform to another:
Portability
Interoperability
Reusability
Adaptability
1.1.4. Characteristics of a Good
Software
Maintenance This aspect briefs about how well a software has the
capabilities to maintain itself in the everchanging environment:
Modularity
Maintainability
Flexibility
Scalability
In short, Software engineering is a branch of computer science,
which uses well-defined engineering concepts required to produce
efficient, durable, scalable, in-budget and on-time software products
1.2. Software development frame
work.
A software development framework is a pre-defined, structured
environment that provides a foundation for building and managing
software applications.
It offers tools, libraries, and guidelines that streamline the
development process, enabling developers to create applications
more efficiently and reliably.
Essentially, it's a template or blueprint that developers can
customize, rather than starting from scratch.
1.2. Key aspects of a software
development framework
•Foundation and Structure:
Frameworks provide a basic structure or template for building software, saving developers the effort
of
creating everything from the ground up.
•Reusable Components and Tools:
They often include pre-built components, libraries, and tools that can be reused across different
projects,
accelerating development.
•Best Practices and Guidelines:
Frameworks often incorporate established best practices and coding guidelines, promoting
consistency and maintainability.
•Abstraction and Simplification:
They handle low-level complexities, allowing developers to focus on project-specific features and
functionality.
•Customization:
Frameworks are designed to be customizable, allowing developers to tailor them to the specific
1.2. Benefits of using software
development
•Increased Development Speed: frameworks
Frameworks streamline the development process, reducing the time and effort required to
build and deploy
applications.
•Improved Code Quality:
By providing pre-built components and established guidelines, frameworks can help
minimize errors and improve
code quality.
•Enhanced Collaboration:
Frameworks can standardize the development process, making it easier for teams to
collaborate and share code.
•Reduced Costs:
Faster development cycles and improved code quality can lead to significant cost savings.
1.3.1. Software Process
Framework
A software process framework is a structured approach that
outlines the steps, tasks, and activities involved in developing
software.
It provides a foundation for software engineering by guiding the
development team through various phases and activities.
Frameworks help in planning, risk management, and quality
assurance by defining a chronological order of actions.
1.3.2. Key Components of a
Software
•Framework Activities:
Process Framework
These are the core activities that are part of the software development lifecycle, such
as communication,
planning, modeling, construction, and deployment.
•Umbrella Activities:
These are supporting activities that are performed throughout the software
development process, including
project tracking, risk management, and quality assurance.
•Task Sets:
Within each framework activity, there are specific tasks that need to be
completed. These tasks are defined by
the work products to be produced, quality assurance points, and project milestones.
1.3.3. Benefits of using a software
Frameworks provide aprocess
structured approachframework
•Improved Planning:
to planning, ensuring that all necessary steps
are considered and
accounted for.
•Enhanced Risk Management:
By identifying potential risks early on and implementing mitigation strategies, frameworks
help reduce the likelihood
of project failure.
•Increased Quality:
Frameworks incorporate quality assurance activities throughout the development process,
leading to a higher quality
product.
•Better Communication:
Frameworks promote clear communication and collaboration among team members,
ensuring everyone is on the
same page.
•Efficient Resource Allocation:
Frameworks help in allocating resources effectively, ensuring that the right resources are
1.3.4. Process Models
Software process models are frameworks that define how to
develop software, outlining stages, activities, and the order in
which they are performed.
They provide a structured approach to software development,
ensuring a systematic and efficient process.
These models help teams visualize, plan, and manage the
development process, from initial concept to final delivery and
maintenance
1.3.5. Types of Process Models
Perspective process models, also known as prescriptive or plan-driven
models, provide a structured and sequential approach to software
development, emphasizing defined phases and predictable workflows.
Examples - Waterfall Model, V Model, Incremental Model
Specialized process models, on the other hand, are tailored for specific
types of projects or technologies, often incorporating elements from
traditional models but with a focus on unique requirements.
Examples - Component-Based Development, Formal Methods,
Aspect-Oriented Software Development
1.4.1. Agile software development
Agile software development is a methodology that emphasizes
iterative development, collaboration, and adaptability. It focuses
on delivering working software in short cycles (sprints), with
continuous feedback and adjustments based on user needs.
This approach contrasts with traditional, plan-driven methods by
prioritizing flexibility and responsiveness to change.
Agile software development is an umbrella term for approaches
to developing software that reflect the values and principles
agreed upon by The Agile Alliance.
1.4.2. Agile Terminologies
Core Agile Concepts
Agile: A mindset and a set of values and principles for managing projects,
emphasizing flexibility, collaboration, and iterative development.
Agile Manifesto: A document outlining the core values and principles of
Agile development, focusing on individuals and interactions, working software,
customer collaboration, and responding to change.
Agile Methodologies: Frameworks and approaches for implementing Agile
principles, such as Scrum, Kanban, Extreme Programming (XP), and Lean.
User Story: A brief description of a software feature from the end-user's
perspective, often written in a format like "As a [user type], I want [goal] so
that [benefit]“.
1.4.2. Agile Terminologies
Core Agile Concepts
Product Backlog: A prioritized list of all desired features,
requirements, and tasks for a product, managed by the Product
Owner.
Sprint: A time-boxed iteration (usually 1-4 weeks) during which a
development team works on a subset of the product backlog.
Sprint Backlog: A subset of the product backlog selected for
completion within a specific sprint.
Acceptance Criteria: Specific conditions that must be met for a
user story or task to be considered complete.
1.4.3. Importance of Agile process
Core Agile Concepts
Faster Time to Market: By delivering working software in short
iterations, Agile can help get products to market more quickly.
Improved Quality: Continuous feedback and testing throughout
the development process can lead to higher quality software.
Increased Customer Satisfaction: Agile's focus on customer
needs and feedback can lead to greater customer satisfaction.
Reduced Risk: By breaking down development into smaller,
manageable chunks, Agile can help reduce the risk of project
failure.
Greater Flexibility: Agile's adaptability makes it easier to
respond to changing requirements and market conditions.
1.4.4. Extreme Programming
Extreme Programming (XP) is an agile software development
framework focused on producing high-quality software and
improving team well-being through iterative development,
continuous feedback, and strong engineering practices.
It emphasizes customer satisfaction, simplicity, and adaptability to
changing requirements
1.4.5. Core Values of XP
Communication: Encourages open and frequent communication between
team members and with the customer.
Simplicity: Promotes doing the simplest thing that will work, avoiding
unnecessary complexity.
Feedback: Emphasizes continuous feedback loops, both internally within the
team and externally from the customer.
Respect: Fosters mutual respect among team members and with the
customer.
Courage: Encourages team members to take risks, make changes, and
address difficult issues.
1.4.6. Key Practices in XP
Pair Programming: Two programmers work together on one computer,
fostering knowledge sharing and code quality.
Test-Driven Development (TDD): Writing tests before writing code, driving
development and ensuring functionality.
Continuous Integration: Integrating code changes frequently and
automatically, often multiple times a day.
Refactoring: Improving the internal structure of the code without changing its
external behavior.
Sustainable Pace: Avoiding burnout by working at a sustainable pace, taking
breaks, and maintaining a healthy work-life balance.
1.4.6. Key Practices in XP
Small Releases: Delivering working software in short iterations, allowing for
early feedback and adaptation.
Metaphor: Using a common story or metaphor to guide the development
process and provide a shared understanding.
Simple Design: Focusing on the simplest possible design to meet current
needs, deferring complexity to the future if necessary.
Collective Ownership: Any team member can modify any code, fostering a
sense of shared responsibility.
On-site Customer: Having a customer representative readily available for
questions and feedback.
1.4.7. Adaptive Software
Development (ASD)
Adaptive Software Development (ASD) is a software development
approach that emphasizes flexibility and responsiveness to
change.
It's characterized by iterative cycles, collaboration, and
continuous learning, allowing teams to adapt to evolving
requirements and deliver high-quality software.
1.4.8. Core Principles of ASD
Iterative and Incremental: ASD breaks down development into short
cycles, with each cycle building upon the previous one and incorporating
feedback.
Collaboration: Strong communication and teamwork between
developers, stakeholders, and clients are crucial.
Adaptability: The process is designed to be flexible and adjust to
changing requirements and feedback throughout the project lifecycle.
Continuous Learning: ASD encourages teams to learn from each
iteration and adapt their approach accordingly.
Mission Focus: ASD projects are focused on achieving a specific mission
or goal, ensuring that all efforts are aligned.
1.4.8. Key Characteristics of ASD
Rapid Prototyping: Quickly creating and testing prototypes to
gather feedback and refine the product.
Risk Management: Identifying and addressing potential risks
early in the development process.
Focus on Client Needs: Regularly incorporating client feedback
to ensure the software meets their requirements.
Self-Organization: Empowering teams to self-organize and make
decisions to enhance productivity and adaptability.
1.4.9. Benefits of ASD
Increased Flexibility: ASD allows for changes and adjustments
throughout the development process, making it ideal for projects with
evolving requirements.
Improved Collaboration: Open communication and teamwork lead to
better understanding and problem-solving.
Faster Time to Market: Iterative development and rapid prototyping can
lead to quicker delivery of working software.
Enhanced User Satisfaction: By focusing on client needs and
incorporating feedback, ASD can lead to more intuitive and user-friendly
software.
When is ASD suitable?
When is ASD suitable?
ASD is particularly well-suited for:
Complex software systems,
Projects with dynamic and evolving requirements,
Projects where innovation and experimentation are key, and
Projects where user feedback is crucial.
In essence, ASD is a dynamic and adaptable approach that embraces
change and collaboration to deliver successful software solutions
1.4.10. Scrum
Scrum is an agile framework for managing and completing work,
particularly in software development, using a set of defined roles,
events, artifacts, and rules.
It emphasizes collaboration, adaptability, and iterative progress
through short cycles called Sprints, typically lasting one to four
weeks.
Scrum is not a methodology with step-by-step instructions, but
rather a framework that provides structure and desired outcomes
while allowing teams to determine the best way to achieve the
goal.
1.4.10. Scrum
1.4.11. Key Aspects of Scrum
Agile Framework: Scrum is a specific approach within the broader Agile
methodology.
Iterative Development: Work is broken down into short, time-boxed
iterations called Sprint.
Roles: Scrum defines specific roles like the Scrum Master (facilitates the
process), Product Owner (defines product vision and priorities), and the
Development Team (who build the product).
Events: Scrum prescribes events like Sprint Planning, Daily Scrum, Sprint
Review, and Sprint Retrospective to facilitate collaboration and inspection.
1.4.11. Key Aspects of Scrum
Artifacts: Scrum uses artifacts like the Product Backlog (a list of desired
product features), the Sprint Backlog (work for the current Sprint), and the
Increment (potentially shippable product) to track progress.
Empiricism and Lean Thinking: Scrum embraces empiricism (knowledge
based on experience) and lean thinking (reducing waste and focusing on
essentials).
Adaptability: Scrum acknowledges that teams don't know everything at the
start and encourages continuous learning and adjustment.
Transparency: Scrum artifacts are designed to maximize transparency of key
information for everyone involved.
1.4.12. Dynamic System
Development Method (DSDM)
The Dynamic Systems Development Method (DSDM) is an agile
project delivery framework, originally developed as a software
development method, that emphasizes speed, collaboration, and
delivering business value quickly.
It was created to address limitations of Rapid Application
Development (RAD) by incorporating more discipline and
stakeholder engagement.
DSDM is iterative and incremental, focusing on continuous user
involvement and delivering solutions within tight time constraints.
•DSDM was initially developed to add discipline
to RAD1.4.13. Evolution of DSDM
and was heavily focused on software
development.
•Over time, DSDM has evolved into a more
generic project
management and solution delivery
framework.
•The latest version of DSDM recognizes the
need to work
alongside other project management
methodologies
Key Aspects of DSDM
Agile Framework: DSDM is an agile methodology, meaning it emphasizes
iterative development, collaboration, and flexibility to adapt to changing
requirements.
Focus on Business Value: DSDM prioritizes delivering solutions that
meet the needs of the business and provide tangible benefits.
Timeboxing: DSDM utilizes timeboxing techniques to set time limits for
tasks, ensuring projects stay on schedule.
Iterative and Incremental: DSDM projects are developed in short,
iterative cycles, with each cycle producing a usable increment of the
solution
Key Aspects of DSDM
Collaboration and Communication: DSDM emphasizes close
collaboration between developers, users, and other stakeholders
throughout the project lifecycle.
Prototyping: DSDM encourages early prototyping to validate
design choices and gather user feedback.
Eight Core Principles: DSDM is guided by eight core principles,
including focusing on the business need, delivering on time, and
never compromising quality.
Advantages of DSDM
Faster Delivery: DSDM's iterative approach and focus on delivering
value quickly can lead to faster project completion.
Improved Collaboration: DSDM's emphasis on collaboration and
communication can lead to better stakeholder engagement and
understanding.
Reduced Risk: The iterative nature of DSDM allows for early
identification and mitigation of potential risks.
Increased User Satisfaction: DSDM's focus on user involvement and
prototyping can lead to higher levels of user satisfaction.
1.5. Crystal
Crystal in software engineering refers to a family of agile
methodologies developed by Alistair Cockburn, focusing on
adapting development practices to the specific needs of a project
and team, rather than adhering to a one-size-fits-all approach.
These methodologies emphasize team interaction,
communication, and incremental development, tailoring the
approach based on team size, project criticality, and other factors.
For more details - [Link]
in-agile-development-an-in-depth-guide/
Types
When to Use the Crystal Agile
Method
1.6. Selection criteria for software
process model.
1. Project Requirements.
Requirements Stability:
How well-defined and stable are the project requirements? Models like Waterfall work well with stable
requirements, while iterative models like Spiral or Agile are better suited for projects with evolving or
unclear requirements.
Requirements Complexity:
Is the project simple or complex? Simple projects with well-defined requirements may benefit from simpler
models like Waterfall or V-model, while complex projects might require more flexible models like Agile or
Spiral.
Requirement Type:
Are the requirements functional (what the system should do) or non-functional (how the system should
perform)? Different models might be better suited for different types of requirements.
1.5. Selection criteria for software
process model
2. Project Characteristics
Project Size: Smaller projects can often be managed with simpler models, while larger,
more complex projects may need more structured and rigorous models.
Project Complexity: The complexity of the project, both in terms of technical aspects
and business processes, will influence the choice of model. Complex projects may require
more iterations and collaboration.
Cost of Delay: What are the consequences of delaying the project? If delays are costly, a
more iterative approach might be necessary to deliver working software early and often.
Schedule: Is there a strict deadline? Some models (like Waterfall) are less flexible with
schedule changes, while others (like Agile) are better suited for projects with changing
deadlines.
Budget: The available budget will influence the choice of model. Some models require
more upfront investment in planning and documentation, while others are more cost-
effective in the long run
1.5. Selection criteria for software
process model
3. Team and Customer Involvement
Team Experience: The experience and expertise of the development
team in using different models is a crucial factor. A team familiar with
Agile methodologies might be more effective with an Agile approach.
Customer Involvement: How much involvement does the customer
require throughout the development process? Iterative models with
frequent feedback loops (like Agile) require more customer
involvement than sequential models (like Waterfall).
Team Structure and Roles: The chosen model can influence the
structure of the development team and the roles of team members.
1.5. Selection criteria for software
process model
4. Risk Assessment: Identify potential risks associated with the
project (technical, schedule, budget, etc.) and choose a model that
allows for proactive risk management. Iterative models can help
identify and mitigate risks early in the development cycle.
1.5. Selection criteria for software
process model
5. Other Considerations
Tool Support: The availability of tools and technologies to
support the chosen model is important. Some models are more
easily supported by specific tools than others.
Organizational Culture: The organizational culture and its
acceptance of different development methodologies should be
considered. Some organizations are more comfortable with agile
approaches, while others prefer more structured methodologies