Introduction to Software Engineering
Introduction to Software Engineering
anoud
Just as air sustains life, software sustains the technology-driven world we live in
today!!
Technology-driven World
Key Features:
Digital Everything ( from money to communication to entertainment)
Connected World (everyone and everything is connected through internet)
Automation (increased use of machines and AI performing tasks efficiently, reducing human
labor)
Data-Driven (Decisions are made based on data and information, rather than just intuition)
Software is Everywhere!!!
Software engineering is present in almost every aspect of our lives because it powers the
tools, systems, and technologies we use daily.
Here’s how it touches every corner of our world:
Every app on your phone, like WhatsApp, Instagram, or YouTube, is built by software
engineers.
Operating systems like Android make your phone work, thanks to software.
Example: When you use Google Maps for directions, software engineering helps calculate
the best route.
2. At Home
Smart home devices like smart lights, and security cameras run on software.
Streaming platforms like Netflix and Spotify bring entertainment directly to your living
room.
Example: Your smart thermostat adjusts the temperature automatically, using software
engineers’ algorithms.
3. At Work
Businesses rely on software for email, virtual meetings, and managing data.
Specialized tools help companies run operations, manage projects, and analyze data.
Example: Software like Microsoft Teams or Zoom makes remote work and collaboration
possible.
4. Healthcare
Hospitals use software to store patient records, schedule appointments, and analyze test
results.
Advanced systems like MRI machines and robotic surgeries are powered by software.
Example: Telemedicine apps let you consult with a doctor from your home.
5. In Transportation
Ride-sharing apps like Uber connect drivers and riders through software.
Airplanes use software for navigation and flight control.
Public transport systems rely on software to manage schedules and routes.
Example: Self-driving cars are entirely controlled by software that analyzes the
environment in real-time.
6. In Entertainment
Video games, movies and music rely on Software for creation, distribution, and enjoyment.
Virtual Reality (VR) and Augmented Reality (AR) bring new level of interactivity.
Example: Software powers the special effects in blockbuster movies like “AVATAR”.
7. In Education
Space agencies like NASA use software to control spacecraft and rovers.
Scientists rely on simulations and data analysis software to make discoveries.
Example: The Mars rover Perseverance sends data back to Earth using software systems.
9. In Finance
Online banking apps, stock trading platforms, and payment gateways like PayPal depend on
software.
Software keeps transactions secure and helps banks manage millions of accounts.
Example: When you pay with a credit card, software ensures the transaction is processed
quickly and securely.
Your electricity, water, and internet services are managed by systems built with software.
Smart grids optimize electricity distribution using software.
Example: Your electricity provider uses software to ensure the power supply matches
demand.
In Summary:
Software Engineering is the process of creating software using engineering principles. It's
not just about coding—it involves planning, designing, building, testing, and maintaining
software.
Software Engineering is like building a house, but instead of bricks, you use code.
Introduction
AI-Powered Chatbots:
Automate customer service and provide instant responses, improving user satisfaction and
reducing costs.
Smart Home Systems:
IoT-powered software that integrates and controls home devices (e.g., lights, thermostats)
for convenience and energy savings.
HealthTech Solutions:
AI systems that analyze medical data to provide diagnostics or predict diseases earlier than
traditional methods.
Autonomous Vehicle Systems:
Software enabling self-driving cars by using AI, computer vision, and sensor fusion.
Collaborative Platforms:
Tools like Slack or Microsoft Teams that innovate how teams communicate and collaborate
in real-time.
From simple apps to complex systems, every tech-driven innovation relies on the
structured approach of software engineering.
Examples:
Healthcare: Medical imaging systems, electronic health records, and telemedicine platforms
rely on well-engineered software for accuracy and efficiency.
Finance: Secure banking apps, stock trading platforms, and fraud detection systems are all
powered by robust software solutions.
Imagine writing a program for a calculator versus creating software for a self-driving car:
For simple programs, you can just code and run it.
For complex systems (like a self-driving car), you need a structured approach to ensure it’s
reliable, efficient, and safe.
Software Engineering helps manage complexity, reduce errors, and produce high-quality
software.
Background
The first electronic digital computer was the ENIAC – Electronic Numerical Integrator and
Calculator ,which was built for the US army in 1946.
High order computer programming languages started to come into being in the late 1950’s.
Digital computers were less than a quarter of a century old and already we were facing a
“software crisis”.
Background (contd.)
The crisis came about not only because the software being produced did not function
properly, but because
Continued…
And , the growing demand for more software than the industry could provide.
Software Crisis
Software Crisis(definition)
… Is a term used for the difficulty of writing useful and efficient computer programs in
the required time.
Software engineering first emerged as a popular title of a 1968 NATO conference held in
Garmisch, Germany.
Definition:
What is Software?
Software is a collection of instructions and data that tell a computer how to work.
The product that software professionals build and then support over the long term.
Software encompasses:
Instructions
Data structures
Documentation
Data structure-
organization and management of data
Way of arranging data on a computer so that it can be accessed and updated efficiently.
Software Products
Customized Products
Software that is commissioned by a specific customer to meet their own needs
Example: traffic monitoring systems
Software
System software
Application Software
Engineering/ scientific software
Embedded software
Web Apps
AI
More and more individuals and society rely on advanced software systems.
Transportation
Medical
Telecommunications
Military
Industrial
Entertainment
Continued…
Cost estimation in
software engineering
is typically concerned with the financial spend on the effort to develop and test the
software.
Software Costs
In other words, the costs of software on a PC are often greater than the hardware cost.
Continued…
This can also include requirements review, maintenance, training, managing and buying
extra equipment, servers and software. Many methods have been developed for estimating
software costs for a given project.
Software maintenance involves tasks that ensure the software remains functional, relevant,
and efficient after its initial release. It includes:
Adaptation: Updating the software to work with new hardware, operating systems, or
technologies.
a) Duration of Maintenance
Development is a one-time process (typically lasting months or a few years), while
maintenance can span the entire lifecycle of the software, often 5-15 years or more.
Example: A payroll system might take 1 year to develop but require 10 years of
maintenance, during which numerous updates and fixes are applied.
b) Complexity of Changes
Changing existing software is more challenging than creating it from scratch.
Developers must understand the existing code, which can be complex, poorly documented,
or written by someone else.
Changes can introduce new bugs, requiring additional testing and fixes.
c) Evolving User and Business Needs
Businesses evolve, and software must adapt to support new goals, regulations, and
technologies.
Example: A retail app might need to integrate new payment methods, update its
user interface, or support additional languages.
Maintainability
Dependability and security
Efficiency
Acceptability
Software project management has wider scope than software engineering process as it
involves communication, pre and post delivery support etc.
Software Practice is a broad array of principles, concepts, methods and tools that you must
consider as software is planned and developed.
Software Process provides everyone with a road map for getting to a successful destination.
Practice provides you with the details you will need to drive along the road. Where the
bridges, the roadblocks, and the forks are located?
It is only through a rigorous approach that we can produce more reliable products, control
their costs, and increase our confidence in their reliability.
Various degrees of rigor can be achieved. The highest degree is what we call formality. In
every engineering field, the development process proceeds as a sequence of well-defined,
precisely stated steps. The amount of rigor and formality depends on the task at hand.
Example:
Using road vehicles as an example, a Mercedes Benz with its center of gravity designed in
the correct place (making Mercedes known for its precision handling), requires much more
rigor than a go cart hacked together from a lawn mower engine and some lumber.
Modularity
A complex system may be divided into separate and distinct pieces called modules.
Continued…
For example, in the automobile industry, the construction of cars proceeds by assembling
parts that are designed and built separately. Furthermore, parts are often reused from
model to model, perhaps after minor changes.
Abstraction
Abstraction is a process in which we identify the important aspects of a problem and ignore
its unimportant details.
For example: A useful abstraction for the owner of a car is the owner’s manual which
describes the various features and operations of the car. For the person maintaining the
car, a useful abstraction is the maintenance manual. Other abstractions include activities
conducted in the factory needed to design and build the car.
Anticipation of Change
After software is released, based on feedback from the user, the application must evolve as
new requirements are discovered or old requirements are updated.
Continued…
For example, cars can be ordered with additional options. Power windows and air
conditioning can be added to the car by the dealer.
Car manufacturers have anticipated
these kinds of changes and have
made the cars easily modifiable.
Generality
The principle of generality may be stated as follows: Every time you are asked to solve a
problem, try to focus on the discovery of a more general problem that may be hidden
behind the problem at hand.
The success of such tools as spreadsheets, databases, and word processors is that they are
general enough to cover the practical needs of most people when they wish to handle their
personnel business with a computer.
Generality
Continued…
In the early days of automobile technology, it was possible to customize cars according to
the specific requirements of the customer.
Nowadays, it is not possible to ask for a personal car design, unless one is ready to pay an
enormous amount of money.
Continued…
Before starting off on a new software development project, a software engineer should
always consider what might be the underlying, hidden general problem that requires the
solution.
The general problem may not be as complex as the original problem and there may also be a
ready-made solution that is capable of satisfying the requirements.
Incrementality
One way of applying the incrementality principle consists of identifying useful subsets of a
software application that may be developed and delivered to customers in order to get early
feedback.
We progressively add functions to the application being developed, starting from a kernel
of functions that would still make the system useful, although incomplete.
For example, with a newly designed car, the first increment may be a running car with no
body (just the frame) which can undergo evaluation on a test track. The first increment can
be undergoing testing while the second increment, the car body, is being developed and
aerodynamically tested.
Continued…
It is not always possible in a software development project to know all the functional
requirements in the beginning. With only partial requirements available, systems are often
built on a piecemeal basis, incrementally adding on to the whole as more information is
available.
Continued…
Continued…
Principles Overview
Core Principles
Principles for Software Process
Principles for Software Practice
Principle 1:
Be agile
Principle 2:
Focus on quality at every step
Principle 3:
Be ready to adapt
Principle 4:
Build on effective team
Principle 5:
Establish mechanisms for communication and coordination
Principle 6:
Manage Change
Principle 7:
Assess Risk
Principle 8:
Create work products that provide value for others
1. Be Agile
2. Focus on Quality
That is, a quality product does precisely what the users want it to do.
For software products, the fitness of use is generally explained in terms of satisfaction of the
requirements laid down in the SRS document.
3. Be ready to adapt
6. Manage Change
7. Access Risk
A divide and conquer algorithm is a strategy of solving a large problem by breaking the
problem into smaller sub-problems, solving the sub-problems, and combining them to get
the desired output.
Through the process of abstraction, a programmer hides all but the relevant data about an
object in order to reduce complexity and increase efficiency.
In the same way that abstraction sometimes works in art, the object that remains is a
representation of the original, with unwanted detail omitted.
Consistency of:
Workflow / Processes
Functionality
Appearance
Terminology
Strive for consistency using familiar icons, color menus, hierarchies, calls for interaction and
user flow for conversations similar to consistency.
Continued…
Users should not have to wonder whether different words, situations, or actions mean the
same thing. Do not confuse your user — keep words and actions consistent. Use “The
Principle of Least Surprise”.
In other words, use all elements across your application consistently. For example, a certain
style of the button should always do the same thing, or navigation should function logically,
going deeper in a hierarchy.
Pay special attention to the analysis, design, construction, and testing of interfaces which
make the transfer of information.
The goal of patterns within the software community is to create a body of literature to help
software developers resolve recurring problems encountered throughout all of software
development.
7. Different Perspective
Continued…
“When possible, represent the problem and its solution from a number of different
perspectives”. This will eliminate possible errors.
Principle 8: Remember that someone will maintain the software
Communication Principles
1. Listen
Try to focus on the speaker’s words, rather than formulating your response to those words.
Spend the time to understand the problem before you meet with others.
Every communication meeting should have a leader (a facilitator) to keep the conversation
moving in a productive direction; (2) to mediate any conflict that does occur, and (3) to
ensure that other principles are followed.
But it usually works better when some other representation of the relevant information is
present (like a drawing).
Someone participating in the communication should serve as a “recorder” and write down
all important points and decisions.
Collaboration and consensus occur when the collective knowledge of members of the team
is combined to describe product.
Continued…
7. Stay focused
The more people involved in any communication, the more likely that discussion will
bounce from one topic to the next (facilitator’s role).
8. dRAW
If something is unclear, draw a picture.
9. Move On
It works best when both parties win. But still will need compromise from both parties.
Planning Principles
Principle #1. Understand the scope of the project. It’ s impossible to use a roadmap if you
don’t know where you ’re going. Scope provides the software team with a destination.
Principle #2. Involve the customer in the planning activity. The customer defines priorities
and establishes project constraints.
Principle #3. Recognize that planning is iterative. A project plan is never engraved in stone.
As work begins, it is very likely that things will change.
Principle #4. Estimate based on what you know. The intent of estimation is to provide an
indication of effort, cost, and task duration, based on the team’s current understanding of
the work to be done.
Principle #5. Consider risk as you define the plan. If you have identified risks that have high
impact and high probability, contingency planning is necessary.
Principle #6. Be realistic. People don’t work 100 percent of every day. They can make
mistakes.
Principle #7. Adjust granularity as you define the plan. Granularity refers to the level of
detail that is introduced as a project plan is developed. High and low.
Principle #8. Define how you intend to ensure quality. The plan should identify how the
software team intends to ensure quality (technical review schedule, pair programming, etc.)
Planning Principles (contd.)
Principle #9. Describe how you intend to accommodate change. Even the best planning can
be obviated by uncontrolled change. Have plans for customer requests.
Principle #10. Track the plan frequently and make adjustments as required. Software
projects fall behind schedule one day at a time. Therefore, look at the plan daily.
Software Evolution
The process of developing a software product using software engineering principles and
methods is referred to as ”software evolution”.
This includes the initial development of software and its maintenance and updates, till
desired software product is developed, which satisfies the expected requirements.
After which developers create a prototype of the intended software and show it to the users
to get their feedback at the early stage of software product development.
The users suggest changes, on which several consecutive updates and maintenance keep on
changing too.
This process changes to the original software, till the desired software is accomplished.
Even after the user has desired software in hand, the advancing technology and the
changing requirements force the software product to change accordingly.
Re-creating software from scratch and to go one-on-one with requirement is not feasible.
The only feasible and economical solution is to update the existing software so that it
matches the latest requirements.
Software Paradigms
Software paradigms refer to the methods and steps, which are taken while designing the
software.
This Paradigm is known as software engineering paradigms where all the engineering
concepts pertaining to the development of software are applied.
It includes various researches and requirement gathering which helps the software product
to build.
It consists of –
Requirement gathering
Software design
Programming
Programming Paradigm
1. Large software
It is easier to build a wall than to a house or building, likewise, as the size of software
become large engineering has to step to give it a scientific process.
2. Scalability
If the software process were not based on scientific and engineering concepts, it would be
easier to re-create new software than to scale an existing one.
3.Cost
As hardware industry has shown its skills and huge manufacturing has lower down he
price of computer and electronic hardware. But the cost of software remains high if proper
process is not adapted.
4. Dynamic Nature
The always growing and adapting nature of software hugely depends upon the
environment in which user works. If the nature of software is always changing, new
enhancements need to be done in the existing one. This is where software engineering plays
a good role.
5.Quality Management
Better process of software development provides better and quality software product.
A software product can be judged by what it offers and how well it can be used. This
software must satisfy on the following grounds:
Operational
Transitional
Maintenance
Operational
Operational : This tells us how well software works in operations. It can be measured on:
Budget
Usability
Efficiency
Correctness
Functionality
Dependability
Security
Safety
Transitional
Transitional: This aspect is important when the software is moved from one platform to
another:
Portability
Interoperability
Reusability
Adaptability
Maintenance
Maintenance: This aspect briefs about how well a software has the capabilities to maintain
itself in the ever-changing environment:
Modularity
Maintainability
Flexibility
Scalability
Any Questions ?