3. Software Engineering
What is Software Engineering?
Software engineering is the field of computer science that focuses on designing, developing, testing, and
maintaining software systems in a structured, efficient, and reliable way. It applies engineering principles to
software creation, aiming to produce high-quality software that meets user needs, is maintainable, and
performs well.
Key Aspects of Software Engineering
Requirements Analysis – Understanding what the users and stakeholders need from the software.
Design – Planning the architecture and components of the software before building it.
Implementation (Coding) – Writing the actual code using programming languages.
Testing – Checking for bugs, errors, and ensuring the software behaves as expected.
Deployment – Releasing the software to users.
5. Software Process
• Requirement Gathering & Analysis
Understand what the client needs.
• System Design
Plan how the software will work (architecture, components, database, etc.).
• Implementation (Coding)
Developers write code based on the design.
• Testing
Validate and verify the software to find bugs and ensure it meets requirements.
Types: Unit testing, integration testing, system testing, user acceptance testing (UAT).
• Deployment
Make the software available to users (production release).
Could be released all at once or incrementally.
• Maintenance
Fix bugs, update software, add features as user needs change.
This is often the longest phase in a software product’s life.
7. Importance of Waterfall Model:
Clarity and Simplicity: The linear form of the Waterfall Model offers a simple and unambiguous
foundation for project development.
Clearly Defined Phases: The Waterfall Model phases each have unique inputs and outputs,
guaranteeing a planned development with obvious checkpoints.
Documentation: A focus on thorough documentation helps with software comprehension, maintenance,
and future growth.
Stability in Requirements: Suitable for projects when the requirements are clear and stable, reducing
modifications as the project progresses.
Resource Optimization: It encourages effective task-focused work without continuously changing
contexts by allocating resources according to project phases.
Relevance for Small Projects: Economical for modest projects with simple specifications and minimal
complexity.
Example of Waterfall Model
Here we can take a Real world example of the Waterfall Model.
8. Agile Model
What is Agile Model?
The Agile Model was primarily designed to help a project adapt quickly to change requests. So, the main aim of the
Agile model is to facilitate quick project completion. To accomplish this task, it's important that agility is required.
Agility is achieved by fitting the process to the project and removing activities that may not be essential for a specific
project.
Also, anything that is a waste of time and effort is avoided. The Agile Model refers to a group of development
processes. These processes share some basic characteristics but do have certain subtle differences among themselves.
Steps in Agile Model
1. Requirement Gathering
2. Design the Requirements
3. Construction / Iteration
4. Testing / Quality Assurance
5. Deployment
6. Feedback
10. Agile Principles
Customer satisfaction through early and continuous delivery of valuable software.
Welcome changing requirements, even late in development.
Deliver working software frequently, from a couple of weeks to a couple of months.
Business people and developers must work together daily throughout the project.
Build projects around motivated individuals. Give them the environment and support
they need, and trust them to get the job done.
Face-to-face conversation is the most effective way of conveying information.
Working software is the primary measure of progress.
Agile processes promote sustainable development – teams should be able to maintain
a constant pace indefinitely.
Continuous attention to technical excellence and good design enhances agility.
Simplicity—the art of maximizing the amount of work not done—is essential.
The best architectures, requirements, and designs emerge from self-organizing teams.
Regularly reflect on how to become more effective, then adjust behavior accordingly
11. ADVANTAGES OF AGILE MODEL
Fast delivery
Flexibility
Collaboration
Empowered teams
Continuous improvement
12. Extreme Programming(XP)
• An agile development methodology XP is a lightweight methodology for small to medium-sized
teams developing software in the face of vague or rapidly changing requirements
• Deliver software to the customer in short (2 week) iterations
• Eliminate defects early, thus reducing costs
• Extreme Programming uses an object-oriented approach as its preferred development paradigm and
encompasses a set of rules and practices that occur within the context of four framework activities:
planning, design, coding, and testing
14. Extreme Programming Pratices
Small Releases :
Small in terms of functionality
releases happen more frequently
Advantages
Frequent feedback
Tracking
Disadvantages
Not easy for all projects
Not needed for all projects
Simple Design:
Keep it simple
Do as little as needed, nothing more
Advantages
Easier to understand what is going on
Refactoring and collective ownership is made possible
Helps keeps programmers on track
Disadvantages
Simple is not always best
15. Testing :
Unit testing
All automated
Advantages
Unit testing promote testing completeness
Test-first gives developers a goal
Automation gives a suite of regression test
Disadvantages
Automated unit testing isn’t for everything
Reliance on unit testing isn’t a good idea
Refactoring :
Changing how the system does something but not what is done
Improves the quality of the system in some way
Advantages
Prompts developers to proactively improve the product as a whole
Increases developer knowledge of the system
Disadvantages
Not everyone is capable of refactoring
Refactoring may not always be appropriate
16. Pair Programming:
Two Developers, One monitor, One Keyboard
One “drives” and the other thinks
Switch roles as needed
Advantages
Two heads are better than one
Focus
Disadvantages
Many tasks really don’t require two programmers
A hard sell to the customers
Collective Ownership :
The idea that all developers own all of the code
Enables refactoring
Advantages
Helps mitigate the loss of a team member leaving
Promotes developers to take responsibility for the system as awhole rather then parts of the system
Disadvantages
Loss of accountability
Limitation to how much of a large system that an individual canpractically “own”
17. Continuous Integration:
New features and changes are worked into the system immediately
Code is not worked on without being integrated for more than a day
Advantages
Reduces to lengthy process
Enables the Small Releases practice
Disadvantages
The one day limit is not always practical
Reduces the importance of a well-thought-out architecture
On-Site Customer :
Acts to “steer” the project
Gives quick and continuous feedback to the development team
Advantages
Can give quick and knowledgeable answers to real development questions
Makes sure that what is developed is what is needed
Functionality is prioritized correctly
Disadvantages
Difficult to get an On-Site Customer
The On-Site customer that is given may not be fully knowledgeable about what the company