0% found this document useful (0 votes)
14 views

Unit-I Reference Material

Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
14 views

Unit-I Reference Material

Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 23

UNIT-I

Introduction to Software Engineering

1. Introduction to Software Engineering

Software Engineering is a systematic and disciplined approach to the development,


operation, and maintenance of software systems. It applies engineering principles to
software development, ensuring that high-quality software is delivered on time and within
budget.

Key Aspects:

● Definition: Software engineering involves the entire software development life


cycle (SDLC), from the initial feasibility study through requirements analysis,
design, implementation, testing, deployment, and maintenance.
● Goals: The primary goals of software engineering include:
○ Quality: Deliver software that meets specified requirements and user
expectations.
○ Efficiency: Optimize resources, including time, budget, and human capital.
○ Maintainability: Develop software that can be easily updated and modified
over time.
○ User Satisfaction: Ensure the final product effectively meets the needs of
its users.

2. A Generic View of Process

A software process is a structured set of activities that produce a software product. It


defines the way software is developed and can vary in complexity depending on the
project.

Key Components:

● Activities: These are specific tasks performed during software development, which
may include:
○ Requirements Gathering: Understanding user needs through interviews,
surveys, and observation.
○ Design: Planning the architecture and user interface of the software.
○ Implementation: Writing the actual code to create the software.

1
UNIT-I

○ Testing: Evaluating the software for defects and verifying it meets the
requirements.
○ Maintenance: Updating the software to fix issues or add new features.
● Roles: Various stakeholders participate in the software process, including:
○ Developers: Write and test the code.
○ Project Managers: Oversee the project, ensuring it stays on track.
○ Quality Assurance (QA) Testers: Validate that the software meets quality
standards.
● Outputs: The deliverables produced at each phase, including:
○ Documentation: Project plans, requirement specifications, design documents.
○ Source Code: The actual code written by developers.
○ Test Cases: Plans for how to validate the software’s functionality.

Example: In a project to develop a mobile banking application:

● Requirements: The team conducts interviews with users to gather features such as
balance checking, fund transfers, and transaction history.
● Design: Wireframes and prototypes are created to visualize the user interface.
● Implementation: Developers code the application using a mobile programming
language like Swift or Kotlin.
● Testing: The app undergoes various tests, including functionality tests,
performance tests, and security tests.
● Deployment: The app is published on app stores for users to download.
● Maintenance: User feedback is collected, and updates are made to improve the app.

3. Software Engineering Process Framework

A software engineering process framework provides a structured approach to software


development. It outlines the phases, activities, and roles involved in creating software,
ensuring that all aspects are systematically addressed.

Common Phases:

1. Requirements Gathering: This phase involves collecting and analyzing user needs
and documenting them. Techniques such as interviews, surveys, and user stories are
commonly used.

2
UNIT-I

2. Design: In this phase, the architecture of the software is created. This includes
high-level design (system architecture) and detailed design (specific components).
UML diagrams may be used to visualize the system’s structure.
3. Implementation: This phase involves writing the actual code for the software
according to the design specifications. Developers work in programming languages
relevant to the project, such as Python, Java, or JavaScript.
4. Testing: Once the software is implemented, it is tested to ensure it meets the
requirements. Different types of testing, such as unit testing (testing individual
components), integration testing (testing combined components), and system testing
(testing the entire system), are conducted.
5. Deployment: After testing is complete, the software is deployed to users. This can
involve setting up servers, installing software, and ensuring everything is configured
correctly.
6. Maintenance: Post-deployment, the software requires ongoing maintenance to fix
bugs, address user feedback, and implement new features as needed.

Example: Using the Waterfall model as a structured approach:

● Requirements Phase: The team documents all user requirements for the software,
ensuring clarity and completeness.
● Design Phase: They create a detailed architecture, outlining how different
components will interact.
● Implementation Phase: Developers write code for the application based on the
design specifications.
● Testing Phase: QA testers conduct various tests to identify and fix any defects.
● Deployment Phase: The final product is released to users.
● Maintenance Phase: User feedback is collected, and updates are made to improve
functionality.

4. The Nature of Software

Software possesses unique characteristics that differentiate it from physical products,


and understanding these characteristics is essential in software engineering.

3
UNIT-I

Key Characteristics:

● Intangibility: Software cannot be physically touched or seen, making it challenging


to evaluate its quality and functionality. Instead, it is assessed through testing and
user feedback.
● Complexity: Software systems can be incredibly complex, often involving thousands
or millions of lines of code. Managing this complexity requires effective design,
coding, and testing practices.
● Changeability: Software can be modified relatively easily, which is a significant
advantage. However, frequent changes can introduce new bugs, necessitating
careful management and thorough testing.
● No Wear and Tear: Software does not physically degrade over time. However, it
can become outdated due to changes in technology or user requirements,
necessitating regular updates and maintenance.
● Reusability: Software components can often be reused across different projects,
saving time and effort. Designing software with reusability in mind involves creating
modular components that can be easily integrated into different systems.

Example: An example of complexity can be seen in a healthcare management system, which


must handle patient records, appointments, billing, and various regulations. This complexity
requires well-defined architecture and a robust testing strategy to ensure all components
work together seamlessly.

5. Software Myths

Software myths are misconceptions about software development that can lead to
mismanagement, unrealistic expectations, and project failures. Recognizing and debunking
these myths is essential for effective software engineering.

Common Myths:

1. "If we write the code, it will work."


○ Reality: Writing code does not guarantee it will function as intended. Bugs
and errors can occur, and thorough testing is essential to validate
functionality.
2. "Requirements will remain stable throughout development."

4
UNIT-I

○ Reality: User needs and market conditions often change during development.
Software processes must be flexible to accommodate these changes without
derailing the project.
3. "Adding more people to a project will speed it up."
○ Reality: Known as Brooks' Law, adding more personnel to a delayed project
can complicate communication and coordination, often leading to further
delays.
4. "Software is easy to change, so requirements can be added or changed at any
time."
○ Reality: While software can be changed, late changes often complicate the
development process and can introduce errors, making change management
and impact analysis crucial.

Example: A team might assume that simply coding a new feature guarantees functionality.
However, without proper testing, unforeseen bugs can arise, underscoring the importance
of a thorough testing phase.

Process Models in Software Engineering

1. Process Models

Process models in software engineering define the structure, activities, and tasks involved
in developing software. They provide a framework to manage and control software
development processes.

1.1 A Generic Process Model

A generic process model outlines the fundamental phases that are common to all software
development projects, regardless of their size or complexity. It serves as a foundation for
more specific models.

Key Phases:

1. Requirements: Identify and document what the software must do. This includes
understanding user needs, business requirements, and system constraints.
2. Design: Create the architecture and detailed design of the software. This involves
defining system components, their interactions, and how they will meet the
requirements.

5
UNIT-I

3. Implementation: Write the actual code for the software based on the design
specifications. This phase includes coding and unit testing individual components.
4. Testing: Verify that the software meets requirements and is free of defects. This
phase includes various testing levels, such as unit testing, integration testing, and
system testing.
5. Deployment: Release the software to users. This involves installation, configuration,
and user training.
6. Maintenance: Ongoing support for the software after deployment, including bug
fixes, updates, and enhancements.

Example: In a project to develop an online booking system:

● Requirements Phase: Gather user stories detailing the booking process.


● Design Phase: Create architectural diagrams showing how the user interface will
interact with the backend database.
● Implementation Phase: Code the booking logic and user interface.
● Testing Phase: Test for errors in booking transactions.
● Deployment Phase: Launch the system for public access.
● Maintenance Phase: Address user feedback and add new features.

1.2 Prescriptive Process Models

Prescriptive process models are structured methodologies that define specific phases,
activities, and tasks to follow during software development. They are often characterized
by a set sequence of activities and deliverables.

1. Waterfall Model

● Description: A linear sequential model where each phase must be completed before
the next begins. It follows a strict order: Requirements, Design, Implementation,
Testing, Deployment, and Maintenance.
● Characteristics:
○ Easy to manage due to its sequential nature.
○ Best suited for projects with well-defined requirements.
● Limitations:
○ Inflexible to changes; late-stage changes can be costly.

6
UNIT-I

2. V-Model (Verification and Validation)

● Description: An extension of the Waterfall model that emphasizes verification and


validation. Each development stage has a corresponding testing phase.
● Characteristics:
○ Focuses on testing early in the development process.
○ Ensures that requirements are met at each phase.
● Limitations:
○ Still rigid and may not accommodate changes well.

7
UNIT-I

3. Incremental Model

● Description: Involves developing software in small, incremental parts or releases.


Each increment adds functionality to the previous one.
● Characteristics:
○ Allows for user feedback after each increment.
○ Reduces risks by validating parts of the system as they are developed.
● Limitations:
○ Potential integration challenges with each increment.

4. Spiral Model

● Description: Combines iterative development with systematic risk analysis. Each


iteration (spiral) involves planning, risk analysis, engineering, and evaluation.

8
UNIT-I

● Characteristics:
○ Focus on risk management and adaptability.
○ Ideal for large, complex projects.
● Limitations:
○ Can be complex to manage and requires expertise in risk analysis.

5. Rational Unified Process (RUP)

● Description: An iterative software development process framework that provides


guidelines and best practices for software development.
● Characteristics:
○ Focuses on four phases: Inception, Elaboration, Construction, and Transition.
○ Use-case driven, architecture-centric, and iterative.
● Limitations:
○ Can be overly complex and may require significant customization.

6. Capability Maturity Model (CMM)

● Description: A framework that provides organizations with essential elements of


effective processes, aiming for continuous improvement.
● Characteristics:
○ Defines five maturity levels (Initial, Managed, Defined, Quantitatively
Managed, Optimizing).
○ Focuses on process improvement and organizational capability.
● Limitations:
○ Implementation can be resource-intensive and time-consuming.

9
UNIT-I

1.3 Specialized Process Models

Specialized process models take on many of the characteristics of one or more of the
traditional models However, these models tend to be applied when a specialized or
narrowly defined software engineering approach is chosen.

There are 3 types of specialized process models:

1. Component Based Development

2. Formal Methods Model

3. Aspect Oriented Software development

1. Component Based Development :

The component-based development model leads to software reuse, and reusability provides
software engineers with a number of measurable benefits. A software engineering team
can achieve a reduction in development cycle time as well as a reduction in project cost if
component reuse becomes part of your culture.

The component-based development model incorporates the following steps:

● Available component-based products are researched and evaluated for the


application domain in question.
● Component integration issues are considered.
● A software architecture is designed to accommodate the components.
● Components are integrated into the architecture.

10
UNIT-I

● Comprehensive testing is conducted to ensure proper functionality

2. Formal Methods Model :

● The formal methods model encompasses a set of activities that leads to formal
mathematical specification of computer software.
● Formal methods enable to specify, develop, and verify a computer-based system by
applying a rigorous, mathematical notation.
● A variation on this approach, called cleanroom software engineering is currently
applied by some software development organizations.
● There are some of the disadvantages too:

• The development of formal models is currently quite time consuming and


expensive.

• Because few software developers have the necessary background to apply formal
methods, extensive training is required.

• It is difficult to use the models as a communication mechanism for technically


unsophisticated customers

3. Aspect-Oriented Software Development (AOSD)

Aspect-Oriented Software Development (AOSD) is a way of organizing your code to


handle cross-cutting concerns more easily. These are parts of your program that are
spread across different sections but don’t fit neatly into a single part of your code.

What are Cross-Cutting Concerns?

In software development, you often have functions that apply to multiple parts of your
program, like:

● Logging: Keeping track of what the program is doing.


● Security: Making sure only authorized people can access certain parts of the
software.
● Error Handling: Catching and managing problems that happen during the execution
of the software.

11
UNIT-I

Normally, these concerns are scattered throughout your code, making it harder to manage
and maintain. AOSD helps by separating these concerns into their own sections called
aspects.

Main Ideas in AOSD

1. Aspect

An aspect is a part of the code that deals with a cross-cutting concern. For example,
instead of writing logging code in many different places, you can create an aspect that
handles all the logging in one place.

2. Join Points

A join point is a specific place in your program where an aspect can be applied. This could
be when a method is called, an object is created, or an error occurs.

3. Pointcuts

A pointcut defines which join points should trigger an aspect. For example, you can set a
pointcut to trigger logging before any method in a class is executed.

4. Advice

Advice is the actual action that happens when a join point is reached. It could be:

● Before Advice: Runs before the method or action.


● After Advice: Runs after the method or action.
● Around Advice: Can run before and after, controlling whether the action should
continue or not.

5. Weaving

Weaving is the process of combining aspects with the main code. This can happen:

● At compile-time (when the program is compiled).


● At load-time (when the program is loaded into memory).
● At run-time (while the program is running).

12
UNIT-I

1.4 The Unified Process

The Unified Process (UP) is an iterative and incremental software development framework
that emphasizes architecture and risk management. It is characterized by the following
phases:

1. Inception: Define the project scope, identify stakeholders, and develop an initial
business case.
2. Elaboration: Refine requirements, create a detailed architecture, and address
risks.
3. Construction: Develop the software, focusing on coding and testing.
4. Transition: Prepare for deployment, including user training and system rollout.

Key Features:

● Emphasizes use-case driven development.


● Incorporates iterative cycles for continuous improvement.
● Focuses on risk assessment and management throughout the process.

1.5 Personal and Team Process Models

Personal and team process models focus on improving individual and team performance in
software development.

Personal Process Model (PSP):

● A structured approach for software engineers to improve their personal work


processes.
● Involves defining personal goals, planning tasks, and measuring performance.
● Helps individuals understand their strengths and weaknesses.

Team Process Model (TSP):

● A framework for team members to work together effectively.


● Involves defining team roles, setting goals, and measuring progress.
● Promotes collaboration and accountability among team members.

Example: A developer using PSP might keep a log of time spent on different tasks,
identifying areas for improvement. A team using TSP may establish clear roles for each
member, ensuring that tasks are distributed effectively.

13
UNIT-I

1.6 Process Technology

Process technology refers to tools and techniques that support software process
management. These can include:

● Modeling Tools: Help visualize software processes (e.g., UML diagrams).


● Project Management Tools: Assist in planning, tracking, and managing project tasks
(e.g., JIRA, Trello).
● Version Control Systems: Manage changes to code (e.g., Git, Subversion).
● Testing Tools: Automate testing processes (e.g., Selenium, JUnit).

1.7 Product and Process

The relationship between product and process is crucial in software engineering. The
product refers to the software being developed, while the process encompasses the
activities and methodologies used to create the product.

Key Considerations:

● The quality of the software product is often a direct result of the effectiveness of
the software process.
● Good process practices lead to improved product quality, maintainability, and user
satisfaction.

Example: A well-defined process model, such as Agile, can lead to the rapid development
of a high-quality mobile application, as it allows for continuous user feedback and iterative
improvements. Conversely, a poorly defined process can result in delays and subpar
software quality.

14
UNIT-I

Introduction to Agility and Agile Process

1. Introduction to Agility and Agile Process

Agility in software development refers to the ability to respond to change quickly and
efficiently. The Agile process is a methodology that emphasizes flexibility, collaboration,
customer feedback, and rapid delivery of functional software.

Phases of Agile Model:

1. Requirements gathering
2. Design the requirements
3. Construction/ iteration
4. Testing/ Quality assurance
5. Deployment
6. Feedback

1. Requirements gathering: In this phase, you must define the requirements. You should
explain business opportunities and plan the time and effort needed to build the project.
Based on this information, you can evaluate technical and economic feasibility.

15
UNIT-I

2. Design the requirements: When you have identified the project, work with
stakeholders to define requirements. You can use the user flow diagram or the high-level
UML diagram to show the work of new features and show how it will apply to your existing
system.

3. Construction/ iteration: When the team defines the requirements, the work begins.
Designers and developers start working on their project, which aims to deploy a working
product. The product will undergo various stages of improvement, so it includes simple,
minimal functionality.

4. Testing: In this phase, the Quality Assurance team examines the product's
performance and looks for the bug.

5. Deployment: In this phase, the team issues a product for the user's work environment.

6. Feedback: After releasing the product, the last step is feedback. In this, the team
receives feedback about the product and works through the feedback.

Key Characteristics of Agile Process:

● Iterative and Incremental: Software is developed in small, manageable increments,


allowing for frequent reassessment of requirements and progress.
● Customer Collaboration: Agile emphasizes active involvement from stakeholders
and end-users throughout the development process.
● Responding to Change: Agile teams welcome changing requirements, even late in
development, to provide the best value to the customer.
● Simplicity: Focuses on the essentials and avoids unnecessary work, ensuring that
the team is productive.

Benefits of Agile:

● Improved customer satisfaction through frequent delivery of functional software.


● Enhanced collaboration and communication among team members.
● Faster identification and resolution of issues or bugs.
● Greater adaptability to changing market conditions and user needs.

16
UNIT-I

2. Agility Principles
The Agile Manifesto outlines four foundational values and twelve guiding principles that
provide the framework for Agile development. Here are the key principles:

Agile Values:

1. Individuals and Interactions over Processes and Tools: Emphasizes the


importance of team collaboration and communication.
2. Working Software over Comprehensive Documentation: Prioritizes delivering
functional software over extensive documentation.
3. Customer Collaboration over Contract Negotiation: Focuses on working closely
with customers to understand their needs rather than strictly adhering to contract
terms.
4. Responding to Change over Following a Plan: Values flexibility and the ability to
adapt to changing circumstances.

Agile Principles:

1. Customer Satisfaction: Deliver valuable software early and continuously to satisfy


customers.
2. Embrace Change: Welcome changing requirements, even late in development.
3. Frequent Delivery: Deliver working software frequently, ranging from weeks to a
few months.
4. Collaboration: Business stakeholders and developers must work together daily.
5. Motivated Individuals: Build projects around motivated individuals; provide them
with the environment and support they need.
6. Face-to-Face Conversation: The most efficient and effective method of conveying
information is through face-to-face conversation.
7. Working Software as the Primary Measure of Progress: The primary measure of
progress is working software.
8. Sustainable Development: Promote a constant pace of work that can be maintained
indefinitely.
9. Technical Excellence: Continuous attention to technical excellence and good design
enhances agility.
10. Simplicity: The art of maximizing the amount of work not done is essential.

17
UNIT-I

11. Self-Organizing Teams: The best architectures, requirements, and designs emerge
from self-organizing teams.
12. Regular Reflection: At regular intervals, the team reflects on how to become more
effective and adjusts accordingly.

3. Agile Process Models

3.1 Extreme Programming (XP)

Overview: Extreme Programming (XP) is an Agile software development methodology


focused on improving software quality and responsiveness to changing customer
requirements.

Key Practices:

● Pair Programming: Two developers work together at one workstation, enhancing


collaboration and code quality.
● Test-Driven Development (TDD): Write automated tests before writing the code
to ensure the software meets its requirements.
● Continuous Integration: Frequently integrate code changes into a shared
repository to detect problems early.
● Frequent Releases: Deliver small, functional releases every few weeks to gather
user feedback and adapt quickly.

Advantages:

● High-quality software through rigorous testing and continuous feedback.


● Strong collaboration between developers and customers.

Disadvantages:

● Requires significant discipline and commitment from the development team.


● May not suit all project types, especially larger, less flexible projects.

18
UNIT-I

Extreme Programming involves −

Writing unit tests before programming and keeping all of the tests running at all
times. The unit tests are automated and eliminates defects early, thus reducing the
costs.
Starting with a simple design just enough to code the features at hand and
redesigning when required.
Programming in pairs (called pair programming), with two programmers at one
screen, taking turns to use the keyboard. While one of them is at the keyboard, the
other constantly reviews and provides inputs.
Integrating and testing the whole system several times a day.
Putting a minimal working system into the production quickly and upgrading it
whenever required.
Keeping the customer involved all the time and obtaining constant feedback.

Iterating facilitates the accommodating changes as the software evolves with the
changing requirements.

19
UNIT-I

Why is it called “Extreme?”

Extreme Programming takes the effective principles and practices to extreme levels.

● Code reviews are effective as the code is reviewed all the time.
● Testing is effective as there is continuous regression and testing.
● Design is effective as everybody needs to do refactoring daily.
● Integration testing is important as integrate and test several times a day.
● Short iterations are effective as the planning game for release planning and
iteration planning.

20
UNIT-I

3.2 SCRUM

Overview: SCRUM is an Agile framework that divides work into small, manageable units
called sprints, typically lasting 2-4 weeks.

Key Components:

● Roles:
○ Product Owner: Represents stakeholders and prioritizes the product
backlog.
○ Scrum Master: Facilitates the SCRUM process and removes obstacles for
the team.
○ Development Team: A cross-functional group responsible for delivering
increments of the product.
● Artifacts:
○ Product Backlog: A prioritized list of features, enhancements, and bug
fixes.
○ Sprint Backlog: A list of tasks the team commits to completing during a
sprint.
○ Increment: The sum of all completed backlog items at the end of a sprint.
● Ceremonies/events:
○ Sprint Planning: The team plans the work for the upcoming sprint.
○ Daily Scrum: A brief meeting where team members share progress and
challenges.
○ Sprint Review: A meeting to demonstrate completed work to stakeholders.
○ Sprint Retrospective: A reflection on the sprint to identify improvements
for future iterations.

21
UNIT-I

Advantages:

● Improved team collaboration and communication.


● Flexibility to adapt to changing requirements.
● Regular feedback from stakeholders.

Disadvantages:

● Requires commitment and understanding of Agile principles from the entire team.
● Potential for scope creep if not managed effectively.

22
UNIT-I

3.3 Industrial Extreme Programming (IXP)

Overview: Industrial Extreme Programming is an adaptation of XP that is designed to scale


XP practices to larger, more complex projects often found in industrial environments.

Key Features:

● Incorporates additional practices to address the needs of larger teams and


projects, such as architecture-centric design and more formalized processes.
● Focuses on ensuring that the principles of XP are maintained while accommodating
organizational needs.

Advantages:

● Retains the core strengths of XP while allowing for scalability and flexibility in
larger environments.
● Addresses the challenges faced by larger teams in maintaining communication and
collaboration.

Disadvantages:

● Can become complex if too many formal processes are introduced.


● Requires a cultural shift within the organization to embrace Agile principles.

23

You might also like