BCS501 Module 1
BCS501 Module 1
AY 2024-25
BCS501 | SOFTWARE
ENGINEERING & PROJECT
MANAGEMENT
Module 1 (Chapter 1 & 2)
By
PROF. SHRUHTI V KULKARNI
Department of AIML, HKBKCE
Chapter-01
• It includes programs running on computers of any size and architecture, along with
associated content and descriptive information.
• Software engineers are individuals who build and support software, and almost
everyone in the modern world uses software either directly or indirectly.
• Software is built using an agile, adaptable process that aims for a high-quality result
meeting user needs.
process.
• From the user's viewpoint, the work product is the resulting information that
improves their world.
Software as a Product
Software as a Vehicle
Importance of Software
• Information Transformation
• Makes personal data more useful.
• Manages business information to enhance competitiveness.
• Provides access to global information networks like the Internet.
• Enables the acquisition of information in various forms.
Evolution of Software
Impact
• Economic Dominance
• A major factor in industrialized economies.
• Teams of specialists focus on different technology aspects of complex applications.
• Persistent Questions
• Why does software development take so long?
• Why are development costs high?
• Why can't all errors be found before release?
• Why is maintaining software so time-consuming?
• Addressing Concerns
• The challenges in software development have led to the adoption of software
engineering practices to improve efficiency, quality, and manageability of software
projects.
Defining Software
Characteristics of Software
• Hardware failure rate follows a "bathtub curve" with high initial failure rates, a low steady
state, and rising failure rates over time.
• Software failure rate ideally flattens after initial defects are fixed but can spike due to
changes introducing new errors.
• Software maintenance is more complex due to the lack of spare parts and the need to address
design errors.
Economic Impact
Persistent Challenges
1. System Software
2. Application Software
3. Engineering/Scientific Software
4. Embedded Software
• Controls features and functions for end users and the system itself.
• Examples: key pad control for a microwave oven, digital functions in automobiles
like fuel control and braking systems.
5. Product-Line Software
Legacy Software
Definition
Characteristics
Challenges
• Costly to maintain.
• Risky to evolve.
• In the early 1990s, websites were simple hypertext files with text and limited graphics.
• The development of tools like XML and Java enabled more sophisticated Web-based
systems and applications, referred to as WebApps.
• WebApps provide both stand-alone functionality and integration with corporate databases
and business applications.
WebApps have unique characteristics that differentiate them from other software
categories:
Network Intensiveness
Concurrency
Unpredictable Load
• User retention depends on fast access, server-side processing, and client-side display.
• Slow performance can lead users to switch to other WebApps.
Availability
Data Driven
Content Sensitive
• Quality and aesthetics of content are crucial for the overall quality of a WebApp.
Continuous Evolution
Immediacy
Security
Aesthetics
• The look and feel of a WebApp play a significant role in its appeal.
• Especially important for marketing or selling products and ideas.
Software Engineering
Increasing Complexity
• Software failures can cause anything from minor inconveniences to catastrophic failures.
• Ensuring high software quality is vital.
• The perceived value of software increases its user base and longevity.
• As software usage grows, demands for adaptation and enhancement also increase.
• Software should be maintainable to accommodate these demands.
• Software engineering is the use of sound engineering principles to develop software that is
reliable and efficient on real machines.
IEEE's Definition
1. Quality Focus
2. Process Layer
3. Methods Layer
4. Tools Layer
• Tools provide automated or semi-automated support for the process and methods.
• Integrated tools create a computer-aided software engineering (CASE) system,
facilitating the support of software development.
A software process is a collection of activities, actions, and tasks aimed at creating a work product.
Here's a breakdown of its components:
1. Activities: Broad objectives applied across different domains, project sizes, and
complexities. Example: Communication with stakeholders.
2. Actions: Sets of tasks producing major work products. Example: Architectural design.
3. Tasks: Focused on small, well-defined objectives with tangible outcomes. Example:
Conducting a unit test.
Process Framework
Umbrella Activities
• Umbrella activities help manage and control progress, quality, change, and risk
throughout the project. They include:
1. Software Project Tracking and Control: Allows the team to assess progress against the
plan and take necessary actions to maintain the schedule.
2. Risk Management: Assesses risks that may affect the project outcome or product quality.
3. Software Quality Assurance: Defines and conducts activities to ensure software quality.
4. Technical Reviews: Evaluates work products to uncover and remove errors.
5. Measurement: Defines and collects process, project, and product measures to assist in
delivering software that meets stakeholders' needs.
6. Software Configuration Management: Manages the effects of change throughout the
process.
7. Reusability Management: Defines criteria for work product reuse and establishes
mechanisms to achieve reusable components.
8. Work Product Preparation and Production: Encompasses activities required to create
work products like models, documents, logs, forms, and lists.
• The software engineering process should be agile and adaptable to various factors like the
problem, project, team, and organizational culture. Differences between processes adopted
for different projects may include:
A generic software process model was introduced, consisting of activities that form a framework
for software engineering practice. These include:
Framework Activities:
Umbrella Activities:
• Project Tracking and Control: Monitoring progress and adjusting tasks and schedules.
• Risk Management: Identifying and mitigating potential risks.
• Software Quality Assurance: Ensuring compliance with quality standards.
• Technical Reviews: Performing peer reviews to catch defects early.
• Measurement: Collecting and analyzing process and product metrics.
• Software Configuration Management: Controlling changes to software artifacts.
• Reusability Management: Promoting the use of reusable components.
George Polya's approach to problem-solving, outlined in "How to Solve It," forms the foundation
for software engineering practice, leading to a series of essential steps and questions: 1.
Questions:
Questions:
Questions:
• Does the solution conform to the plan (source code traceable to design)?
• Is each component part of the solution provably correct (reviews, correctness
proofs)?
4. Examine the Result for Accuracy (Testing and Quality Assurance)
Questions:
General Principles
David Hooker proposed seven principles that underpin effective software engineering practice
a. Design should aim for simplicity while maintaining elegance and functionality.
b. Simplicity facilitates understanding and maintenance of the system.
b. Consider the usability and understandability of the system for its audience.
a. Forethought and planning are essential to maximize the benefits of code and design
reuse.
a. Intense thought before action leads to better results and reduces errors.
b. Clear, complete thought results in systems with higher value and quality.
Management Myths:
• Myth 1: Having a book of standards and procedures is sufficient for software development.
• Reality: Often, existing standards are underutilized, outdated, and not adaptable to modern
practices.
• Myth 2: Adding more programmers can accelerate a project that's behind schedule.
• Reality: Adding people to a late project can actually delay it further due to the time needed
for integration and coordination.
• Myth 3: Outsourcing a software project means the organization can relax and let the
third party handle it.
• Reality: Without internal project management capabilities, outsourcing can lead to project
difficulties.
Customer Myths:
• Reality: Ambiguous objectives often lead to project failures; clear requirements are
essential.
Practitioner’s Myths:
• Myth 1: The majority of effort in software development is expended before the program
is delivered.
• Reality: A significant portion of effort occurs after the initial delivery, often exceeding
6080%.
• Myth 2: Software quality can only be assessed once the program is running.
• Reality: Technical reviews are effective quality assurance mechanisms from project
inception.
• Myth 4: Software engineering leads to excessive documentation and slows down projects.
• Reality: Software engineering focuses on creating quality products, which ultimately
speeds up delivery by reducing rework.
• Every software project originates from a business need, whether it's fixing a defect,
adapting a legacy system, extending existing features, or creating something entirely new.
• Initially, the business need is often expressed informally through conversations.
• The importance of software in meeting the business need may not be explicitly discussed
in these conversations.
• However, the success of the engineering effort ultimately depends on the success of the
software.
• The acceptance of the product in the market hinges on how well the embedded software
meets the customer's needs, which may not be fully articulated at the outset.
Chapter 2
Process Models
Definition of Process:
1. Communication
2. Planning
3. Modeling
4. Construction
5. Deployment
Process Flow:
• Describes organization of framework activities, actions, and tasks with respect to sequence
and time.
• Linear Process Flow: Executes each framework activity in sequence (Figure 2.2a).
• Iterative Process Flow: Repeats one or more activities before proceeding (Figure 2.2b).
• Evolutionary Process Flow: Activities executed in a circular manner, leading to a
more complete version of the software (Figure 2.2c).
• Parallel Process Flow: Executes one or more activities in parallel with others (Figure 2.2d).
Example:
• Requires understanding the problem nature, characteristics of the team, and stakeholders.
• Inception
• Elicitation
• Elaboration
• Negotiation
• Specification
• Validation
Purpose:
• Provide templates for describing problem solutions within the software process context.
• Help solve problems and construct processes that meet project needs.
• Task Pattern: Defines problems associated with a software engineering action or work
task (e.g., Requirements Gathering).
• Phase Pattern: Defines the sequence of framework activities within the process (e.g.,
Spiral Model, Prototyping).
• Pattern Name: Meaningful name describing the pattern within the software process
context.
• Forces: Environment and issues making the problem visible and affecting its solution.
• Type: Specifies the pattern type (stage, task, or phase).
• Initial Context: Conditions under which the pattern applies, including prior organizational
or team activities, entry state, and existing information.
• Known Uses and Examples: Specific instances where the pattern is applicable.
Usage:
• Defined as a natural state between order and chaos, balancing structure and surprise.
• Unstable and partially structured state, constantly attracted to chaos or absolute order.
• Absolute order implies no variability, while too much chaos hinders coordination and
coherence.
• Some structure allows organized change, while too much rigidity prevents it.
Philosophical Implications:
• Framework activities
• Software engineering actions
• Tasks
• Work products
• Quality assurance
• Change control mechanisms
Define a process flow (or work flow):
Application:
Overview:
• Best suited for well-understood requirements where work flows linearly from
communication to deployment.
Description:
V- Model:
Moves down the left side of the V to refine problem requirements and up the right side to
validate each model through testing.
No fundamental difference from the classic life cycle; provides visualization of verification
and validation actions.
Criticisms:
Non-sequential Nature: Real projects rarely follow the proposed sequential flow. Iterations
are accommodated indirectly, causing potential confusion during changes.
• Requirement Uncertainty: Difficult for customers to state all requirements explicitly at the
beginning. The model struggles with the natural uncertainty of initial project phases.
• Delayed Working Version: Customers must wait until late in the project to see a working
version. Undetected major errors can be disastrous.
• Blocking States: Linear nature can lead to blocking states where team members wait for
others to complete dependent tasks. Waiting time can exceed productive work time,
Suitable for situations where initial software requirements are well-defined, but the
development scope precludes a purely linear process.
Useful when there is a need to quickly provide limited software functionality and then
expand it in later releases.
Description:
Example:
Word-processing software:
First Increment: Basic file management, editing, and document production functions.
Second Increment: More sophisticated editing and document production capabilities.
Third Increment: Spelling and grammar checking.
Fourth Increment: Advanced page layout capability.
Each increment can incorporate the prototyping paradigm.
Process Flow:
Advantages:
Evolutionary process models are designed for scenarios where software requirements and market
demands are dynamic. These models are iterative and focus on gradually developing increasingly
complete versions of the software.
Characteristics:
• Iterative Development: The software evolves through repeated cycles, allowing for
incremental improvements based on feedback and changing requirements.
Prototyping:
Purpose: To clarify requirements and validate functionality when initial requirements are
unclear or when experimenting with new technologies.
Process:
Challenges:
Misinterpretation: Stakeholders may mistake the prototype for the final product, unaware
of its temporary nature and potential lack of quality.
• Using the spiral model, software is developed in a series of evolutionary releases. During
early iterations, the release might be a model or prototype.
• During later iterations, increasingly more complete versions of the engineered system are
produced.
• A spiral model is divided into a set of framework activities defined by the software
engineering team.
Dept. of AIML, HKBKCE Page 36
BCS501 | SOFTWARE ENGINEERING & PROJECT MANAGEMENT. AY 2024-25
• Each of the framework activities represent one segment of the spiral path illustrated in Figure
2.7
• As this evolutionary process begins, the software team performs activities that are implied by
a circuit around the spiral in a clockwise direction, beginning at the center.
• Anchor point milestones—a combination of work products and conditions that are attained
along the path of the spiral—are noted for each evolutionary pass.
• The spiral model can be adapted to apply throughout the life of the computer software.
• Therefore, the first circuit around the spiral might represent a “concept development project”
that starts at the core of the spiral and continues for multiple iterations until concept
development is complete.
• If the concept is to be developed into an actual product, the process proceeds outward on the
spiral and a “new product development project” commences.
• Later, a circuit around the spiral might be used to represent a “product enhancement
project.”
• In essence, the spiral, when characterized in this way, remains operative until the software is
retired.
• There are times when the process is dormant, but whenever a change is initiated, the process
starts at the appropriate entry point.
• The spiral model is a realistic approach to the development of large-scale systems and
software. Because software evolves as the process progresses, the developer and customer
better understand and react to risks at each evolutionary level.
• The spiral model uses prototyping as a risk reduction mechanism but, more important,
enables you to apply the prototyping approach at any stage in the evolution of the product.
• The spiral model demands a direct consideration of technical risks at all stages of the project
and, if properly applied, should reduce risks before they become problematic.
Concurrent Models
The concurrent development model, also known as concurrent engineering, is designed to handle
iterative and parallel aspects of software development. This model is suitable for complex projects
where various activities need to be performed concurrently and where dynamic changes in project
states are frequent.
Characteristics:
• Dynamic State Management: Activities transition between different states based on specific
events, allowing for flexible and adaptive development processes.
• Iterative Refinement: Iterative cycles are integrated, enabling continuous refinement and
evolution of the software.
Key Components:
• Activities and States: Software engineering activities (such as modeling) can be in various
states at any given time. Typical states include:
Initial Phase:
Transition Phase:
• Once initial requirements are gathered, the communication activity transitions to "awaiting
changes."
Dynamic Adjustments:
• If new requirements or changes are identified, the modeling activity might transition to
"awaiting changes" while communication might re-enter the "under development" state to
refine requirements.
• Construction and other activities can proceed in parallel, transitioning between states as
necessary.
Advantages:
• Flexibility: Allows for adaptive and flexible project management, accommodating changes
without significant disruption.
• Real-Time Progress Monitoring: Provides a real-time view of the project’s status, helping
in better tracking and management.
• Complexity: Managing concurrent activities can be complex and requires robust project
management practices.
Applicability:
• Complex Projects: Suitable for projects with complex requirements and high levels of
uncertainty.
• Large Teams: Beneficial for large teams where different sub-teams can work on different
activities simultaneously.
• Dynamic Environments: Ideal for environments where requirements and technologies are
rapidly evolving.
Specialized process models take on many characteristics of traditional process models but are
tailored for specific software engineering approaches. They are applied in situations requiring a
unique or narrowly defined methodology.
1. Component-Based Development
• Research and Evaluation: Identify and assess available components for the application
domain.
Challenges:
• Integration complexity.
• Dependency on third-party components.
• Potential issues with component compatibility and maintainability.
• The formal methods model employs rigorous mathematical notation to specify, develop,
and verify software systems.
• This approach aims for high reliability and defect-free software through formal
specification and mathematical analysis.
Key Characteristics:
Advantages:
• These concerns can include systemic properties like security, fault tolerance, and
transaction processing.
Key Concepts:
• Aspectual Requirements: Define the impact of crosscutting concerns across the software
architecture.
• Horizontal Slices: Aspects are horizontal slices through vertically decomposed software
components.
• Parallel Engineering: Aspects are engineered independently but have a direct impact on
software components.
Challenges:
Five Phases:
o Inception:
Define the project scope and key requirements.
Identify risks and perform feasibility studies.
o Elaboration:
Develop the system architecture.
Address significant risks and refine project scope.
o Construction:
Build and implement the system incrementally.
Focus on developing functional components.
o Transition:
Deliver the system to the users.
Conduct final testing, deployment, and training.
o Production:
Software is monitored, support for the operating environment
• The five UP phases do not occur in a sequence, but rather with staggered concurrency.
• A software engineering workflow is distributed across all UP phases and is analogous to a
task set.
• Visualized in figure 2.9
• Workflow identifies the tasks required to accomplish an important software engineering
action
• The work products that are produced as a consequence of successfully completing the
tasks.
• Not every task identified for a UP workflow is conducted for every software project.
• The team adapts the process (actions, tasks, subtasks, and work products) to meet its needs.
Use-Case Driven:
o Development starts by defining how end-users interact with the system (use cases).
o Use cases guide the development process, ensuring it aligns with user needs.
Architecture-Centric:
Disciplines (Workflows):
o Testing: Verify that the system meets requirements and functions as intended.
Tailorable Process:
o The process can be adapted based on the project’s complexity, size, and specific
needs.
o It's not a rigid methodology, allowing for flexibility in how it’s applied.
Artifacts:
o Documentation, models, code, and other deliverables produced during each phase.
o These artifacts provide a traceable record of development.
In software engineering, process models guide how individuals and teams plan, execute,
Phases of PSP:
o PSP2: Adds design and code review to reduce defects early in the process.
Benefits of PSP:
Individual Scrum:
o Adapted from the Scrum methodology, where individuals follow a similar cycle of
sprints, daily standups (personal), and retrospectives to improve efficiency.
o Focuses on prioritization, frequent delivery of work, and personal reflection at the
end of each sprint.
o Launch Phase: The team defines goals, roles, and plans for the project.
o Development Phase: The team follows the plan, tracking progress, issues, and
defects.
o Postmortem Phase: The team reflects on the project’s outcomes and learns for
future work.
Benefits of TSP:
o Agile models focus on iterative development, where teams work in short cycles
(sprints) with continuous feedback.
o Scrum: In Scrum, teams work in sprints, hold daily standups, and review
progress regularly through sprint reviews and retrospectives.
o Extreme Programming (XP): Emphasizes frequent releases in short
development cycles, high customer involvement, and practices like pair
programming and test-driven development (TDD).
o Kanban for Teams:
o Teams use a Kanban board to manage work, visualize flow, and
continuously improve by identifying bottlenecks and optimizing flow.
o Focuses on limiting work in progress (WIP) to ensure efficient team
operations.
• Personal Models:
o Help individuals refine their skills, manage time, and reduce defects in their
work.
• Team Models:
o Help teams work more efficiently, communicate better, and deliver
high quality software.
Both personal and team process models contribute to the overall success of software
projects by improving individual and collective productivity and ensuring high-quality
outcomes.
Differences between Personal and Team Software Process
PSP TSP
PSP is a project management process that TSP is a project management process that
defines how to manage a project in a face-to- defines how to manage a project in a virtual
face environment. environment.
PSP is more formal and structured than TSP. TSP is less formal and structured than PSP.
PSP is based on the waterfall model. TSP is based on the agile model.
PSP is more suited for large projects. TSP is more suited for small projects.
PSP projects are typically completed in one TSP projects are typically completed in
phase. multiple phases.
PSP programs are written in English, and TSP programs are written in assembly
they are easy to understand. language, and they are difficult to
understand.
PSP is an interpreted language, and it does TSP is a compiled language, and it needs to
not need to be compiled be compiled before it can be run.
PSP is a free language and it can be TSP is a commercial language, and it is not
downloaded from the internet. available for free.
PSP is an open-source language, and it is TSP is a closed-source language, and it is not
available to everyone. available to everyone.
PSP is a linear process model that is TSP, on the other hand, is an iterative and
completed in a sequential manner. incremental process model that allows for
feedback and changes at each stage of the
process.