0% found this document useful (0 votes)
10 views33 pages

Module 1

sepm notes

Uploaded by

Akul Natekar
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
10 views33 pages

Module 1

sepm notes

Uploaded by

Akul Natekar
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 33

MODULE 1

1.1 The Nature of Software


Software serves two main purposes:
1. As a product: Software is what powers devices like mobile phones, computers, and
networks. It processes information—whether that’s as simple as turning raw data
into useful insights or as complex as creating multimedia presentations by combining
2. data from multiple sources.
3. As a tool to deliver products: Software makes other tasks possible, like running the
computer itself (via operating systems), connecting to the internet (via networks),
and developing more software (using programming tools).
1.1.1 Defining Software
What is software?
Software is a set of instructions (programs) that make computers perform tasks. It also
includes data structures for handling information and documents (manuals or guides) that
explain how the programs work.
1. Software is engineered, not manufactured
 Engineered, not built on an assembly line: Software is designed and developed, not
mass-produced like physical products. Once the program is created, it can be
duplicated easily without extra effort.
 Costs focus on design and development: Most of the expense in creating software is
spent on the engineering process, not on making copies.
 Managing software projects is different: Since there’s no physical manufacturing,
traditional project management methods (used for physical goods) don’t fully apply
to software.
2. Software doesn’t "wear out," but it can deteriorate
 No physical damage: Unlike hardware (which can fail due to wear and tear, like dust
or heat), software doesn’t degrade with time. A program written years ago can still
work perfectly today if it isn’t changed.
 What causes problems:
o Early on, bugs (errors) may cause the program to fail. Once these are fixed,
the software works smoothly.
o However, over time, as changes and updates are made, new bugs might be
introduced. This is why software "deteriorates" even though it doesn’t
physically wear out.
 No spare parts: Unlike hardware, where broken components can be replaced,
software issues often stem from design flaws. Fixing these flaws can be complex and
time-consuming.

3. Most software is custom-built, but reuse is increasing


 Hardware components are standard: Engineers in other fields (like mechanical or
electrical) use pre-made parts, such as screws or circuits, to save time and focus on
new designs.
 Software is catching up: While reusable software components are becoming
common, most programs are still custom-built.
 Examples of reusable components:
o Libraries of pre-made code are used to create things like buttons, menus, or
windows in applications.
o These reusable parts save time and help developers focus on the unique
features of the software they’re building.
1.1.2 Software Application Domains
Categories of Software

1. System Software

o This type of software helps other programs work.

o Examples: Operating systems, file managers, and device drivers.

o It handles complex tasks like interacting with hardware, managing resources,


and working with multiple users or programs at the same time.

2. Application Software

o These are programs built to solve specific business problems or support


operations.

o Examples: Software for managing sales, real-time manufacturing processes,


or decision-making tools.

3. Engineering/Scientific Software

o Focuses on solving scientific or technical problems using calculations and


simulations.

o Examples: Space studies, designing car parts, and automating factories.

o These applications are now moving beyond simple calculations to include


real-time features.

4. Embedded Software

o This is software built into physical devices to control their functions.

o Examples: Microwave controls, car systems like fuel management and


braking.

5. Product-Line Software

o Made for multiple customers with similar needs.


o Examples: Word processors, spreadsheets, video games, or database
management systems.

6. Web Applications (WebApps)

o Software that runs online, ranging from simple websites to complex systems
connected to databases.

o Examples: E-commerce sites, multimedia apps, and business tools integrated


with online systems.

7. Artificial Intelligence (AI) Software

o Software that mimics human intelligence to solve difficult problems.

o Examples: Robots, voice recognition, image detection, and game-playing


algorithms.

Emerging Challenges

1. Open-World Computing

o With the rise of wireless technology, devices like smartphones and


computers need to work together seamlessly.

o Engineers must create software that enables smooth communication across


huge networks.

2. Netsourcing

o The internet is becoming more than just a place for information; it’s now a
platform for running programs.

o Engineers must design both simple and complex online tools for users
globally.

3. Open Source

o Open-source software allows anyone to see and improve the code.

o The challenge for engineers is to write clear, understandable code and keep
track of changes to ensure users and developers know what’s new.
1.1.3 Legacy Software
What is Legacy Software?
 Legacy software refers to old computer programs developed decades ago but still in
use today.
 These systems have been continuously updated to meet changes in business needs
and new technology.
Importance of Legacy Software
 Legacy systems often support key business operations, making them critical for the
organization.
 Even though they are old, they are sometimes considered "indispensable" because
they still fulfil important business functions.
Problems with Legacy Software
 Poor quality is common in legacy systems. Problems include:
o Hard-to-modify designs.
o Complicated, outdated code.
o Lack of proper documentation or test records.
o Poor management of changes over time.
What Can Be Done About Legacy Software?
 If the legacy system works well and meets user needs, it doesn’t need to be fixed.
 However, changes might become necessary over time due to:
o Adapting to new technologies or computing environments.
o Adding new features to meet evolving business needs.
o Making the system work with modern databases or other systems.
o Updating the system’s design to work in networked environments.

1.2 The Unique Nature of WebApps


Key Features of WebApps:

1. Network-Based: WebApps exist on a network (e.g., the Internet) and are accessible
to a wide range of users. This can be a global audience or a limited internal network
(Intranet).
2. Concurrency: Many users can access a WebApp at the same time, and their usage
patterns can vary significantly.

3. Unpredictable Load: The number of users can fluctuate greatly. For example, there
might be 100 users on one day and 10,000 the next.

4. Performance: WebApps need to respond quickly, or users might leave. If loading or


processing takes too long, people tend to look for alternatives.

5. Availability: Users often expect WebApps to be accessible 24/7, even though it's
unrealistic to guarantee this.

6. Data-Driven: WebApps often pull information from external databases, displaying


content like text, images, audio, and video. Examples include e-commerce sites or
financial applications.

7. Content Sensitive: The quality and appearance of the content play a big role in how
well a WebApp is received.

8. Continuous Evolution: Unlike traditional software that updates at regular intervals,


WebApps are constantly updated—sometimes minute-by-minute, especially when it
comes to content.

9. Immediacy: WebApps are often developed and launched quickly, sometimes within
days or weeks.

10. Security: Since WebApps are network-based and open to many users, security is
crucial. Developers must protect sensitive information and ensure safe data
transmission.

11. Aesthetics: The look and feel of a WebApp are essential, especially for those that
market or sell products. Visual design can be as important as technical features.

1.3 Software Engineering


What is Software Engineering?

1. Fritz Bauer’s Definition: Software engineering is about using sound engineering


principles to build reliable, efficient, and economical software.
2. IEEE Definition: It adds more detail, describing software engineering as a systematic,
disciplined, and measurable approach to building, operating, and maintaining
software.

The Structure of Software Engineering:

1. Layered Technology: Software engineering is built like a layer cake:

o Quality Focus: The foundation is a commitment to quality. Practices like Total


Quality Management and Six Sigma aim to continuously improve software
processes.

o Process Layer: The next layer is the software engineering process, which is
the framework guiding the development. It helps manage and control the
project, ensuring tasks are completed on time and software is built efficiently.

o Methods Layer: This layer provides technical steps to build software, like how
to communicate with stakeholders, analyze requirements, design software,
write code, and test it.

o Tools Layer: Tools provide support by automating parts of the development


process. When these tools work together, it’s called Computer-Aided
Software Engineering (CASE), which makes development faster and more
reliable.

1.4 The Software Process


A process in software engineering is a collection of activities, actions, and tasks performed to
create a software product.
 Activity: A broad goal, like communicating with stakeholders, that applies to all
projects, regardless of size or complexity.

 Action: A set of tasks that lead to a major outcome, like designing the architecture of
the software.

 Task: A small, specific goal, like testing a piece of code, with a clear result.

A process framework outlines basic activities needed for all software projects and includes
umbrella activities that apply throughout the process.

A generic process framework for software engineering encompasses five activities:

1.Communication

 Purpose: Understand what the customer wants and gather all requirements.

 How: Teams collaborate with customers and other stakeholders to identify goals,
features, and functionality for the software.

2.Planning

 Purpose: Create a clear roadmap for the project.

 How: Develop a software project plan that includes:

o Tasks to be done.

o Risks that might arise.

o Resources (time, people, tools) required.

o Deliverables or outcomes.

o A timeline or schedule to guide the work.

3.Modeling

 Purpose: Visualize and understand the software before building it.

 How:

o Create diagrams or "sketches" to see how the system will work overall.
o Refine these models to focus on details like design and functionality.

o Models help to spot problems early and clarify how everything fits together.

4.Construction

 Purpose: Build the software and test it to ensure it works correctly.

 How:

o Write the code (manually or using automation tools).

o Test the software to find and fix any errors.

5.Deployment

 Purpose: Deliver the software to the customer for use and evaluation.

 How:

o Provide the finished software (or parts of it in stages).

o Get feedback from the customer for improvements.

Umbrella Activities (Happening throughout the project):

1. Project Tracking and Control: Keep track of the project's progress and make sure it's
on schedule.

2. Risk Management: Identify and manage potential problems that could affect the
project or its quality.

3. Quality Assurance: Ensure that the software meets quality standards.

4. Technical Reviews: Review the work regularly to find and fix mistakes early.

5. Measurement: Collect data about the project and software to help improve it.

6. Configuration Management: Manage any changes to the software as it's being


developed.

7. Reusability Management: Make sure parts of the software can be reused in future
projects.
8. Work Product Preparation: Create documents, models, and other important
materials for the project.

1.5 Software Engineering Practice


1.5.1 The Essence of Practice
The practice of software engineering is based on problem-solving. Steps for problem-solving
are highly relevant to software engineering.

1. Understand the Problem (communication and analysis)

o It's crucial to first understand the problem before jumping into a solution.
Answering these questions helps:

 Who are the stakeholders? (Who cares about this solution?)

 What are the unknowns? (What data or features are needed?)

 Can the problem be broken down into smaller, manageable parts?

 Can the problem be visualized or modelled?

2. Plan a Solution (modelling and design)

o Before writing any code, think through the solution. Consider these:

 Have you solved a similar problem before? Can you reuse any parts?

 Can the problem be divided into smaller sub-problems with clear


solutions?

 Can you create a design or model that shows how the solution will
work?

3. Carry Out the Plan (code generation)

o Now, you start coding, following the design you've created. As you
implement:

 Does your code follow the plan (design)?

 Is each part of your code correct? Has it been reviewed or tested?


4. Examine the Result (testing and quality assurance)

o After coding, you need to test thoroughly to ensure the solution works as
intended:

 Can you test each part of the solution?

 Does the software meet the requirements of the stakeholders?

1.5.2 General Principles


1. The Reason It All Exists:
o Software exists to provide value to users.
o Every decision should focus on whether it adds value; if it doesn't, avoid it.
2. KISS (Keep It Simple, Stupid!):
o Design should be as simple as possible but no simpler.
o Simple designs are easier to understand, maintain, and have fewer errors.
o Simplicity requires effort and thought, not shortcuts.
3. Maintain the Vision:
o A clear, unified vision is key to project success.
o Without a consistent vision, the project risks becoming disjointed.
o An empowered architect can ensure the project sticks to the vision.
4. What You Produce, Others Will Consume:
o Software is meant to be used and maintained by others.
o Write code, design, and documentation with the next person in mind.
o Clear, accessible work benefits both users and future developers.
5. Be Open to the Future:
o Design software to be adaptable to future changes.
o Avoid making the system overly complex for potential future needs.
o Aim for a balance between solving current problems and future-proofing.
6. Plan Ahead for Reuse:
o Reuse saves time and effort but requires planning.
o Object-oriented design can help with reuse, but it doesn’t happen
automatically.
o Plan for reuse early to reduce costs and add value to the system.
7. Think!:
o Clear, careful thought leads to better results.
o Thinking helps avoid mistakes and enables learning.
o Applying the other principles requires thoughtful decision-making.

1.6 Software Myths

Management Myths

1. Myth: A book of standards provides everything my team needs to know.

o Reality: While a book of standards may exist, it’s often not followed. The
standards may be outdated, unknown, incomplete, or not practical enough to
improve project delivery and quality.

2. Myth: Adding more programmers can help a project catch up if it's behind
schedule.

o Reality: Adding more people to a delayed project typically makes things


worse. New people need training, which slows down the existing team. You
can only add people effectively with proper planning.

3. Myth: Outsourcing the project means I can relax and let someone else handle it.

o Reality: If a company can’t manage software projects internally, outsourcing


won’t fix this. It’s crucial to understand how to manage outsourced projects
to avoid failure.

Customer Myths

1. Myth: A general statement of objectives is enough to start programming, and


details can be worked out later.

o Reality: Starting with vague objectives leads to failure. You need clear and
specific requirements developed through ongoing communication between
the customer and the developer.

2. Myth: Software requirements change easily because software is flexible.


o Reality: While software can accommodate changes, the cost of changes
increases significantly as the project progresses. Changing things early in the
process is much cheaper than making changes later when the design is set.

Practitioner Myths

1. Myth: Once the program works, the job is done.

o Reality: Writing the code is only part of the job. Most of the work (60-80%)
happens after the software is delivered, including maintenance, bug fixing,
and updates.

2. Myth: You can’t assess quality until the program is running.

o Reality: Quality can be assessed early through technical reviews, which are
better than testing for catching certain types of errors.

3. Myth: The only important result of a project is the working program.

o Reality: A working program is just one part of the overall project.


Documentation, models, and plans are also critical to ensure the software can
be supported and maintained.

4. Myth: Software engineering creates too much unnecessary documentation and


slows the project down.

o Reality: Software engineering focuses on creating quality products, not just


documentation. Better quality reduces the need for rework, which actually
speeds up project completion.

2.1 A Generic Process Model


In software development, a process is a structured way of organizing the work needed to
create software. It includes activities, actions, and tasks that follow a certain plan.

1. Software Process Framework: This is like a roadmap for how to build software. It
includes five main activities

2. Umbrella Activities: These are tasks that are done throughout the entire process,
Process Flow: This is how the main activities are arranged over time:

 Linear flow: Each activity happens one after the other (communication, then
planning, then modelling, etc.).

 Iterative flow: Some activities are repeated before moving to the next step (e.g.,
after modelling, you might need to go back to planning).

 Evolutionary flow: The software is built in small cycles, improving each time until the
final version is complete.

 Parallel flow: Different activities can happen at the same time (e.g., while one part of
the software is being modelled, another part might already be under construction).
2.1.1 Defining a Framework Activity
1. For a simple project:
If you're building a small piece of software for one person with clear and simple
requirements, you might not need a lot of formal steps. The communication activity
could be as basic as:

o A phone call with the stakeholder.

o Taking notes about their requirements.

o Writing a short summary of those requirements.

o Sending that summary back to them for approval.

2. For a complex project:


If the project has many stakeholders, each with different needs or conflicting
requirements, the communication activity becomes much more involved. You would
need to:

o Inception: Start by understanding the overall idea of the project.

o Elicitation: Gather detailed requirements from all stakeholders.

o Elaboration: Clarify and expand on those requirements to ensure everyone


understands.

o Negotiation: Resolve any conflicts between stakeholders’ needs.

o Specification: Write down the agreed-upon requirements in detail.

o Validation: Ensure all stakeholders agree and verify that the requirements
meet their needs.

2.1.2 Identifying a Task Set


1. Task Sets: A task set is a collection of activities and steps that need to be completed
to carry out a specific software engineering action. For instance, the task set for
elicitation might include:

o Preparing questions to ask stakeholders.

o Conducting interviews or surveys.

o Analysing the gathered information.

o Documenting the requirements.

2. Customization: It's important to choose a task set that fits the specific project and
team. This means:

o Project Needs: Different projects have different requirements. A simple


project may need fewer tasks, while a complex project may require a more
comprehensive task set.

o Team Characteristics: The skills and preferences of the team members can
influence which tasks are most effective. A team with strong communication
skills might prioritize face-to-face interviews, while a more introverted team
might prefer surveys or written communications.

2.1.3 Process Patterns


 Definition: A process pattern is a template that describes a specific problem
encountered during software engineering, identifies the context in which it occurs,
and suggests one or more proven solutions.

Key Components of a Process Pattern:

1. Pattern Name: A meaningful name that describes the pattern (e.g., "Technical
Reviews").

2. Forces: The circumstances that highlight the problem and influence the solution. This
includes the environment and issues that make the problem apparent.

3. Type: The category of the pattern, which can be:

o Stage Pattern: Related to a framework activity (like planning) that


encompasses multiple actions and tasks. For example, "Establishing
Communication" could include "Requirements Gathering."

o Task Pattern: Related to a specific software engineering action or task, like


"Requirements Gathering."

o Phase Pattern: Describes a sequence of framework activities in the overall


process (e.g., "Spiral Model" or "Prototyping").

Structure of a Process Pattern:

1. Initial Context: Describes the situation before the pattern is applied. It outlines what
has already happened and what information exists.

o Example: For a "Planning" pattern, the team must have established


communication and completed prior tasks.

2. Problem: Clearly states the specific issue that the pattern aims to solve.
3. Solution: Provides guidance on how to implement the pattern. It explains how the
current state will change once the pattern is applied.

4. Resulting Context: Details the conditions after the pattern is successfully


implemented. This includes what activities must have occurred and what information
has been created.

5. Related Patterns: Lists other patterns that are connected to this one, often
represented in a hierarchy. For instance, a "Communication" stage pattern might
include task patterns like "Requirements Gathering."

6. Known Uses and Examples: Provides real-life instances where the pattern is
applicable, demonstrating when and how to use it.

2.2 Process Assessment and Improvement


There are several established methods for assessing and improving software processes,
which can help identify the current state of a process and guide improvements. Here are
some key methods:

1. SCAMPI (Standard CMMI Assessment Method for Process Improvement):

o This is a five-step process assessment model.

o It includes five phases: initiating, diagnosing, establishing, acting, and


learning.

o It is based on the Capability Maturity Model Integration (CMMI) framework.

2. CBA IPI (CMM-Based Appraisal for Internal Process Improvement):

o This method assesses the maturity level of a software organization.

o It also uses the CMM framework to guide the assessment.

3. SPICE (Software Process Improvement and Capability determination):

o This is an international standard (ISO/IEC 15504) that defines requirements


for software process assessment.
o The goal is to help organizations evaluate how effective their software
processes are.

4. ISO 9001:2000 for Software:

o This is a general quality standard that any organization can use to improve the
overall quality of its products or services.

o It is applicable to software organizations aiming for higher quality in their


offerings.

2.3 Prescriptive Process Models


Prescriptive models, also called traditional models, provide a clear set of steps, tasks, and
activities to follow, along with mechanisms for controlling quality and managing changes.

2.3.1 The Waterfall Model


 When it works well: The Waterfall Model is useful when everything is well-defined
from the beginning, like when making updates to an existing system (e.g., changing
accounting software due to new regulations). It can also be used for new projects
where the requirements are very stable and unlikely to change.

 How it works: The Waterfall Model follows a step-by-step process, starting with:

1. Requirements: Collecting all the necessary details from the customer.

2. Planning: Deciding how to build the software.

3. Modelling: Designing the software's structure.

4. Construction: Writing the code.

5. Deployment: Delivering the final product to the customer.

6. Support: Fixing any issues or making updates after the product is in use.
 The V-model variation: A variation of the Waterfall Model is called the V-model. It
focuses more on quality by integrating testing and verification throughout the
process. The left side of the "V" represents the planning and design stages, while the
right side represents the testing that happens after coding. This ensures that each
step is tested as the project moves forward.

Limitations of the Waterfall Model:

1. Non-linear Progress: Projects often don't move smoothly through phases, making
adjustments difficult when changes arise.

2. Unclear Requirements: Customers may struggle to specify all their needs upfront,
but the model requires clarity from the beginning.
3. Delayed Product Visibility: Customers wait until the final stages to see a working
product, risking the discovery of major issues late in the process.

4. Team Delays: Team members may have to wait on others to complete tasks, leading
to inefficiencies.

5. Inflexibility to Changes: The rigid structure of the Waterfall Model makes it hard to
adapt to changing requirements in fast-paced environments.

Here are the advantages of the Waterfall Model:

1. Easy to understand: It follows a clear, step-by-step process, making it simple for


teams and customers.

2. Well-organized: Each phase has a clear goal, so it’s structured and easy to manage.

3. Great for small, stable projects: It works well when the project is simple and the
requirements are fixed from the start.

4. Clear documentation: Each phase creates documents that help track progress and
guide future maintenance.

5. Customer agreement early: Customers know what to expect since requirements are
set at the beginning.

2.3.2 Incremental Process Models


The Incremental Model is a software development approach used when the overall project
is too large or complex to complete in one go. It focuses on delivering the software in small,
manageable pieces (called increments) instead of waiting until the entire product is finished.

 When it’s used:

o This model is helpful when the basic requirements are clear but there might
be future changes or additions.

o It’s also useful when the customer needs to see some functionality early, and
the complete software can be delivered over time.

 How it works:
1. The project starts by developing a core product, which includes the most
important features.

2. The core product is delivered to the customer, who can use it or test it to give
feedback.

3. Based on this feedback, the next increment is planned, adding more features
or improving the product.

4. This process is repeated, with each increment adding more functionality until
the full software is complete.

 Example: Imagine developing a word processor using this model:

o The first increment might include basic functions like creating, saving, and
editing documents.

o The second increment could add more advanced editing tools.

o The third increment might include spelling and grammar checking.

o The final increment could add complex features like page layout.

Advantages:

1. Early product delivery: Customers receive a basic version early to start using and
providing feedback.

2. Flexibility: Changes and new features can be added in later increments.


3. Easier testing: Each increment allows for focused testing and debugging.

4. Customer feedback: Regular increments let customers test and suggest


improvements.

5. Resource management: Smaller teams can handle initial increments, with more
added later.

Disadvantages:

1. Incomplete system: Early versions may lack desired features.

2. Architecture issues: Poor initial design can complicate future increments.

3. Frequent changes: Regular updates can increase project complexity.

4. Overhead: Planning and testing for each increment can increase effort and costs.

5. Dependency: A weak core product can hinder future development.

2.3.3 Evolutionary Process Models


 Incremental Delivery: Evolutionary models produce more complete versions of the
software with each iteration.

 Adaptability: These models are designed to handle evolving requirements, allowing


for changes as the project moves forward.

 Iterative Process: The development process is repeated, gradually improving the


software with each cycle.

Prototyping

The prototyping model is useful when software requirements aren't fully clear at the
beginning. In many cases, a customer might have a general idea of what they want but can't
define the exact details. Similarly, the developer may be unsure of certain technical aspects,
such as the best algorithm or user interaction design.

Here's how the process works in simpler terms:

1. Initial Meeting: You meet with the stakeholders (like customers or users) to discuss
the overall goals of the software and any known requirements.
2. Quick Design: You create a basic design focused on visible parts of the software, such
as the user interface or output format.

3. Prototype Creation: A simple version of the software (the prototype) is built quickly
based on this design.

4. Feedback and Refinement: The prototype is shown to stakeholders, who test it and
give feedback. This feedback is used to improve and refine the prototype.

5. Iteration: This process repeats until the prototype meets the stakeholders'
expectations and helps clarify the actual software requirements.

Advantages of the Prototyping Model:

1. Better Understanding of Requirements: Prototyping allows users and developers to


clarify and refine software requirements, reducing misunderstandings.

2. Early Feedback: Users can interact with the prototype early on, providing feedback
that can be incorporated into the final product.

3. Improved User Involvement: Users are more engaged as they get to see how the
software is shaping up, making the development more user-focused.
4. Reduced Development Time and Costs: By identifying issues early, prototyping helps
avoid costly changes later in the project.

5. Flexibility in Design: The model allows for iterative improvements, which makes
adapting to changes in requirements easier.

Disadvantages of the Prototyping Model:

1. Risk of Incomplete Understanding: Stakeholders may mistake the prototype for the
final product, leading to unrealistic expectations.

2. Quality Issues: Quick development of the prototype can lead to poor quality code or
shortcuts that may affect the final product if not addressed.

3. Increased Costs: If not managed well, prototyping can increase costs as multiple
iterations may require additional resources and time.

4. Pressure to Use the Prototype: There may be pressure to convert the prototype into
the final product, even though it was not built with production-quality standards in
mind.

5. Over-Dependency: Teams may become reliant on the prototype, leading to a lack of


planning or documentation for the final system.

Spiral Model

The Spiral Model is a software development process that combines the iterative nature of
prototyping with the structured approach of the Waterfall Model. It was created by Barry
Boehm and is used to build software through repeated cycles, which allow the system to
grow while minimizing risk.

How it Works:

 Iterative Development: Software is developed in several phases, known as


evolutionary releases. Early versions may just be prototypes, while later ones
become fully functioning versions.
 Risk Management: Each cycle of the Spiral Model focuses on identifying and
addressing risks, such as unclear requirements or technical challenges. The goal is to
reduce risks with each cycle.

 Anchor Points: These are milestones that ensure all stakeholders (like developers and
customers) agree on the project’s direction and feasibility.

Framework Activities:

Each cycle of the spiral represents key activities:

1. Planning: Defining objectives, determining the work to be done.

2. Risk Analysis: Identifying potential risks and figuring out ways to mitigate them.

3. Engineering: Designing, coding, and testing the system or prototype.

4. Evaluation: Gathering feedback from the customer to refine the next iteration.

Unlike other models, the Spiral Model continues even after the software is delivered. For
example, a product can be improved with enhancements, and the process resumes when
changes are needed. The spiral cycles continue until the software is no longer needed.

Advantages:

1. Risk Management: Focuses on identifying and reducing risks at every stage,


preventing major problems later.
2. Flexibility: Adapts to changes in requirements or market needs, making it ideal for
complex projects.

3. Customer Feedback: Allows customers to review early versions and provide input,
ensuring the final product meets their needs.

4. Continuous Improvement: Each cycle improves and builds on the previous one,
resulting in a more refined product.

5. Prototyping: Helps clarify requirements and reduce uncertainty through the use of
prototypes.

Disadvantages:

1. Complexity: Can be overly complex, especially for smaller projects.

2. Cost and Time: More expensive and time-consuming due to repeated planning and
risk analysis.

3. Risk Expertise Required: Success relies on the team’s ability to effectively manage
risks.

4. Difficult to Manage Contracts: Clients may find the flexible timeline hard to control,
making contract-based work challenging.

5. Overemphasis on Risk: May add unnecessary work for projects with low risk.

2.3.4 Concurrent Models


 Definition: The concurrent development model, also known as concurrent
engineering, allows simultaneous execution of different software development
activities.

 Flexibility: Activities can happen at the same time instead of following a strict
sequence, making the process more adaptable.

 Concurrent Activities: Key activities, such as modelling, prototyping, analysis, and


design, can occur together.

 State Changes: Each activity can be in different states, such as:


o Under Development: Actively being worked on.

o Awaiting Changes: Waiting for updates or feedback.

o Done: Completed and finalized.

 Triggering Events: Changes in one activity can trigger transitions in others. For
example, if a requirement changes, an activity might move from "under
development" back to "awaiting changes."

 Team Collaboration: This model is suitable for complex projects involving multiple
engineering teams working together.

 Process Network: Rather than a linear flow, it defines a network of activities that
exist simultaneously, allowing for efficient project management.
2.4 Specialized Process Models
2.4.1 Component-Based Development
The Component-Based Development (CBD) model focuses on building software using pre-
made components, often called COTS (Commercial Off-The-Shelf) software. These
components provide specific functionalities with defined interfaces, making it easier to
integrate them into a new system. This model is similar to the spiral model, meaning it
evolves over time through multiple iterations.

1. Research Components: First, available components (software pieces) are researched


and evaluated to see if they fit the project.

2. Consider Integration: Check how these components will work together and fit into
the project.

3. Design Software Architecture: Create a structure or blueprint for the software that
accommodates these components.

4. Integrate Components: Add these components into the software architecture.

5. Test Thoroughly: Perform comprehensive tests to make sure everything works as


expected.

Key Advantages:

 Software Reuse: You don’t have to build everything from scratch; you can reuse pre-
made components, which can save time and money.

 Faster Development: Since you are reusing components, the project can be
completed faster.

 Cost Reduction: Reusing components can help cut down the overall project cost.

2.4.2 The Formal Methods Model


The Formal Methods Model is a way of developing software using strict mathematical
techniques to specify, develop, and verify the system. It focuses on using math to eliminate
issues like ambiguity, incompleteness, and inconsistency that may occur with other
software methods.
Key Points:

1. Mathematical Approach: Instead of using regular design techniques, this method


uses mathematical notation to ensure the software is correct and error-free.

2. Early Problem Detection: Since it uses math to verify the design, problems can be
spotted and fixed early in the process.

3. Cleanroom Engineering: A variation of this model, known as cleanroom software


engineering, aims for defect-free software, using the same formal methods.

Advantages:

 It reduces errors in critical systems, like aircraft software or medical devices, where
mistakes can have serious consequences.

 Provides a solid basis for checking software correctness through mathematical


proofs.

Disadvantages:

 Time-Consuming and Expensive: Developing formal models can take longer and cost
more.

 Requires Special Skills: Not many software developers have the expertise to use
formal methods, and they need special training.

 Hard to Communicate: Since it involves complex math, it's difficult to explain to


customers who are not technically knowledgeable.

2.4.3 Aspect-Oriented Software Development


Aspect-Oriented Software Development (AOSD) is a way of building software that focuses on
addressing crosscutting concerns.

Key Points:

1. Crosscutting Concerns: These are aspects like security, performance, or error


handling that impact different parts of a software system. Instead of handling these
concerns in each individual part (like traditional methods), AOSD handles them
separately as "aspects."
2. Aspect-Oriented Programming (AOP): This is the programming approach used to
separate these concerns from the main functionality of the software. It helps manage
system-wide concerns more efficiently by keeping them centralized, instead of
scattered throughout the code.

3. Components and Aspects:

o Software components handle specific tasks or features (e.g., user interface,


data storage).

o Aspects handle the concerns that affect multiple components (e.g., managing
security across different features).

4. Process: Although the process isn't fully defined yet, AOSD typically involves:

o Identifying important crosscutting concerns (e.g., security or logging).

o Creating separate aspects to handle those concerns.

o Integrating these aspects into the overall system.

5. Benefits: AOSD allows you to deal with broad concerns like security or error
management independently of the main software components, making the system
easier to maintain and modify.

2.5 The Unified Process


2.5.1 A Brief History
The Unified Process is a method for developing complex software. It focuses on:

1. Use Cases: These describe how users interact with the system, ensuring the software
meets user needs.

2. Architecture: Building a solid foundation so the software is understandable,


adaptable, and reusable.

3. Iterative Development: The software is developed in small steps, improving with


each cycle.
4. Customer Communication: Keeping close contact with users to make sure the
software fits their requirements.

It combines the best parts of traditional methods and agile principles to handle modern,
complex projects efficiently.

2.5.2 Phases of the Unified Process

1. Inception Phase:

o The team talks to customers to understand what the software should do.

o A basic plan is made, including rough ideas for the system's structure
(architecture).

o Initial use cases (how users will interact with the system) are written.

o Risks, schedules, and resources are identified.

2. Elaboration Phase:

o The team further defines and improves the use cases and architecture.

o Detailed plans and models are created for the system.

o Sometimes, a basic working version of the system is built to test if the


architecture works.

3. Construction Phase:

o The actual building of the software begins.

o Software components are developed or integrated based on the use cases.

o Testing is done to ensure each component works, and the system is put
together and tested as a whole.

4. Transition Phase:

o The software is tested by users (beta testing), and feedback is collected.

o Documentation like user manuals and troubleshooting guides is created.


o The software is prepared for release.

5. Production Phase:

o The software is deployed and monitored while in use.

o Any bugs or requests for changes are addressed, and support is provided.

You might also like