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

Introduction to Software Engineering

Software engineering is essential in today's technology-driven world, where it underpins various sectors including healthcare, finance, and transportation. It involves a systematic approach to creating software that is reliable, maintainable, and efficient, addressing challenges such as job displacement and cybersecurity threats. The discipline combines creativity, problem-solving, and engineering principles to develop innovative solutions that enhance user experiences and meet evolving needs.

Uploaded by

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

Introduction to Software Engineering

Software engineering is essential in today's technology-driven world, where it underpins various sectors including healthcare, finance, and transportation. It involves a systematic approach to creating software that is reliable, maintainable, and efficient, addressing challenges such as job displacement and cybersecurity threats. The discipline combines creativity, problem-solving, and engineering principles to develop innovative solutions that enhance user experiences and meet evolving needs.

Uploaded by

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

Introduction to software engineering dr.

anoud

Just as air sustains life, software sustains the technology-driven world we live in
today!!

Technology-driven World

A technology-driven world refers to a society where technological advancements and


innovations play a dominant role in almost everything we do.

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)

Challenges and Concerns

Job displacement and changes in work


Cybersecurity threats and data breaches
Social isolation and decreased human interaction
Dependance on technology and potential losses of traditional skills

Software is Everywhere!!!

Software is like the air we breathe because it’s:

Everywhere: Present in almost every device and system we interact with.

Essential: Crucial for the functioning of modern life.

Invisible: Often unnoticed but incredibly powerful.

Universal: Used in all industries and sectors.

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:

1. In Your Pocket: Smartphones and Apps

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

Online learning platforms like Coursera make education accessible worldwide.


Classroom tools like Google Classroom help teachers organize lessons.
Example: During a pandemic, schools used software to teach students online.

8. In Science and Space Exploration

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.

10. In Daily Utilities

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 everywhere because software powers everything—from your


phone and home devices to businesses, healthcare, transportation, and even space
exploration. It’s the invisible force behind the tools and systems that make modern life
possible. Without software engineers, our world wouldn’t function the way it does today.
What is Software Engineering ?

What is Software Engineering?

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.

Imagine constructing a House!!!

Imagine building a house:

You plan what the house should look like (blueprint).


You design the layout of rooms, plumbing, and wiring.
You build it brick by brick, following the design.
Once built, you check (test) if everything works properly (doors, lights, etc.).
Over time, you maintain the house—fix leaks, repaint walls, or add new rooms.

Software Engineering is like building a house, but instead of bricks, you use code.

Introduction

Software engineering is the backbone of modern technology-driven solutions.

By combining creativity, problem-solving, and engineering principles, it enables the


development of software that powers everything from mobile apps to critical systems in
healthcare, finance, and space exploration.

Modern technology-driven solutions in software engineering refer to innovative


software systems, applications, and platforms that leverage the latest technologies to solve
real-world problems, improve efficiency, and enhance user experiences. These solutions are
often powered by cutting-edge advancements in computing, artificial intelligence, data
analytics, cloud computing, and other modern tools and techniques.

Examples of Innovative Software Systems

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.

Space Exploration: Spacecraft navigation, telemetry systems, and simulations depend on


highly reliable software.

Combining Creativity, Problem-Solving, and Engineering Principles

Software engineering is not just about coding—it’s a blend of:

Creativity: Designing user-friendly interfaces, innovative solutions, and unique


functionalities.
Example: Creating a virtual reality app for learning anatomy.

Problem-Solving: Addressing challenges like scalability, security, and usability.


Example: Optimizing a food delivery app to handle millions of orders during peak hours.

Engineering Principles: Applying structured methods to ensure software is reliable,


maintainable, and scalable.
Example: Using modular design to allow for easy updates and feature additions.

Why do we need Software Engineering?

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.

Software Engineering is NoT just about coding. It involves:

Teamwork: Engineers, designers,


and managers work together.

Problem-Solving: Finding creative solutions to real-world challenges.

Continuous Learning: Staying updated with new technologies.

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

Reasons (software crisis)

of the problems associated with how we developed software,

Continued…

And , the growing demand for more software than the industry could provide.

Software Crisis

The software crisis is characterized by many problems:


The lack of defined requirements and the constant changes to requirements that are known
Schedule and cost estimates are often grossly inaccurate
The productivity of software developers hasn’t kept pace with the demand for their
services, and,
The quality of software is sometimes less than adequate.

Software Crisis(definition)

… Is a term used for the difficulty of writing useful and efficient computer programs in
the required time.

Birth of Software Engineering

These problems led to the


software crisis which in turn led to the need for –and birth of- software engineering
itself.

Software engineering first emerged as a popular title of a 1968 NATO conference held in
Garmisch, Germany.

Complex software engineering needed a classic engineering approach.

WHAT IS SOFTWARE ENGINEERING?

Definition:

Software engineering is an engineering branch associated with development of software


product using well-defined scientific principles, methods and procedures.

The outcome of software engineering is an efficient and reliable software product.

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.

What is Software? (contd.)

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

There are two main types:


Generic Products
Stand-alone systems that are marketed and sold to any customer who wishes to buy
them.
Example: appointments systems for dentists

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

Why Software Engineering is important?

The economies of ALL developed nations are dependent on software.

Importance of Software Engineering

More and more individuals and society rely on advanced software systems.

More and more systems are software controlled

Transportation
Medical
Telecommunications
Military
Industrial
Entertainment

Continued…

Therefore, we need to be able to produce reliable and trustworthy systems economically


and quickly.

Cost Estimate in Software Engineering

Cost estimation in
software engineering
is typically concerned with the financial spend on the effort to develop and test the
software.

Software Costs

Software engineering is concerned with cost-effective software development.

Software Costs (contd.)

Software costs often dominate computer system costs.

In other words, the costs of software on a PC are often greater than the hardware cost.

Often, software costs more


to maintain than it does to
develop.

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.

The Nature of Software Maintenance

Software maintenance involves tasks that ensure the software remains functional, relevant,
and efficient after its initial release. It includes:

Bug Fixes: Addressing issues discovered post-deployment.


Enhancements: Adding new features based on user needs or market trends.

Adaptation: Updating the software to work with new hardware, operating systems, or
technologies.

Optimization: Improving performance or reducing resource usage.

Security Updates: Addressing vulnerabilities to keep the software secure.

Why Maintenance Costs Are Higher ?

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.

Essential attributes of good software

Maintainability
Dependability and security
Efficiency
Acceptability

Software Engineering (contd.)

IEEE defines software engineering as:

“ The application of a systematic, disciplined, quantifiable approach to the development,


operation and maintenance of software; that is, the application of engineering to software.”

Software Engineering (contd.)

Fritz Bauer, a German computer scientist, defines software engineering as:

“Software engineering is the establishment and use of sound engineering principles in


order to obtain economically software that is reliable and work efficiently on real
machines.”

Software Project Management

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?

Software Engineering Principles:

Rigor and Formality

Software development is a creative activity.

Rigor is a necessary complement to creativity in every engineering activity.

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.

Modularity is an important property of most engineering processes and products.

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

Anticipation of change is the process of creating software so it may be easily modified.

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…

If we can anticipate the changes of context in which a software component might be


embedded, we may then design the component in a way that such changes may be easier to
implement.

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.

If the problem at hand may be restated as an instance of a problem solved by a general


package, it may be convenient to adopt the package instead of implementing a specialized
solution.

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

Incrementality means that the desired application is produced as an outcome of an


evolutionary process.

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…

The principle of incremental development can be applied to situations where it is unclear


how the functionalities of a system match up to the needs and expectations of customers.
By developing an initial subset of the application for experimentation by customers,
valuable feedback on the usefulness of the application can be gathered.
Consequently, improvements based on the feedback are made to the application Through
an iterative process of continuously seeking improvements to the application the final
system can be produced.

Continued…

Incremental development is evolutionary. Each stage of the application development has


changes that are improvements to the previous increment. Changes must therefore be
anticipated in the design of the solutions.
Documentation and the management of documentation are crucial to the success of a
project. Without proper documentation, incremental development can be problematic, and
there can be only problems when trying to respond to the inevitable changes.

Principles Overview
Core Principles
Principles for Software Process
Principles for Software Practice

Principles for each Activity


Principles for Communication
Principles for Planning
Principles for Modeling
Requirement
Design
Principles for Construction
Coding
Testing
Principles for Deployment

Principles that Guide Process

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

Software quality product is defined in term of its fitness of purpose.

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

4. Build on effective team

5. Establish mechanisms for communication and coordination

6. Manage Change

Human Reaction to Change

Personal Change Management

Planning and Executing Change

7. Access Risk

Risk is a potential problem- it might happen, it might not!


Risk concerns future happenings.
We cannot eliminate the risk properly, but we can try to minimize it.

8. Create work products that provide value for others

Principles that Guide Practice

1. Divide and Conquer

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.

2. Understand the use of abstraction

At its core, an abstraction is a simplification of some complex element of a system used to


communicate meaning in a single phrase.

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.

3. Strive for consistency


A familiar context makes software easier to use. Stick with same notation.

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.

4. Focus the transfer of information

Pay special attention to the analysis, design, construction, and testing of interfaces which
make the transfer of information.

5. Build software that exhibits effective modularity

6. Look for patterns

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.

2. Prepare before you communicate

Spend the time to understand the problem before you meet with others.

3. Someone should facilitate the activity

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.

4. Face-to-face communication is the best

But it usually works better when some other representation of the relevant information is
present (like a drawing).

5. Take notes and document decisions

Someone participating in the communication should serve as a “recorder” and write down
all important points and decisions.

6. Strive for collaboration

Collaboration and consensus occur when the collective knowledge of members of the team
is combined to describe product.

Continued…

7. Stay focused

Stay focused, modularize your discussion.

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

(a) Once you agree to something, move on;


(b) If you can ’t agree to something, move on;
(c) If a feature or function is unclear and cannot be clarified at the moment, move on.

10. Negotiation is not a contest or a game.

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.

Planning Principles (contd.)

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

Software Evolution (contd.)

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.

Software Evolution (contd.)

Evolution starts from the requirement gathering process.

Software Evolution (contd.)

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.

Software Evolution (contd.)

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.

Software Paradigms (contd.)

Programming paradigm is a subset of Software design paradigm which is further a subset of


Software development paradigm.

Software Development Paradigm

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

Software Design Paradigm

This paradigm is a part of Software Development and includes –


Design
Maintenance
Programming

Programming Paradigm

This paradigm is related closely to programming aspect of software development.


This includes –
Coding
Testing
Integration

Need of Software Engineering

Need of Software Engineering


The need of software engineering arises because of higher rate of change in user
requirements and environment on which the software is working.

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.

Characteristics of a good Software

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

Well-engineered and crafted software is expected to have the following characteristics:

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 ?

You might also like