What is Software
Engineering?
CSCI 3323
Dr. Becnel
In a Nutshell
“All problems in computer science can be solved by another level of
indirection.”
David Wheeler
Software Engineering
Definition
Engineering: The use of mathematics and scientific principles to design machines and
structures used for solving problems
• Applied mathematics and science
• Focus on practical problems
Software (1) instructions (computer programs) that when executed provide desired
features, function, and performance; (2) data structures that enable the programs to
adequately manipulate information and (3) documentation that describes the operation
and use of the programs
• Software is an abstract concept and is developed or engineered
• It is not manufactured
• Software itself does not “wear out”
• Though it can show signs of deterioration
• More and more software is becoming more component based, but a majority is still custom built
Software Engineering
Overview
What is Software Engineering?
• The complete process of specifying, designing,
developing, analyzing, and maintaining a software
system.
Why is it important?
• Decomposes a complex engineering problem.
• Organizes processes and effort.
• Improves software reliability.
• Improves developer productivity
Things we do in S.E.
• Developing in an IDE and software
ecosystem
• Debugging and maintaining a software
system
• Deploying and running a software system.
• Empirically evaluating a software system
• Writing Design Docs
• …and much more
Common Task
More than just writing code
The complete process of specifying, designing, developing, analyzing,
deploying, and maintaining a software system.
Common Software Engineering tasks include:
• Requirements engineering
• Specification writing and documentation
• Software architecture and design
• Programming Just one out of many important tasks!
• Software testing and debugging
• Maintenance and refactoring
Why is Software Engineering
Important?
Software Engineering
• a concerted effort should be made to understand the problem before a software
solution is developed
• design becomes a pivotal activity
• software should exhibit high quality
• software should be maintainable
Core Principles (“Big Three”)
Specification: Software engineers specify everything
• requirements, design, code, test plans, development life cycles
• What makes a good specification?
Translation
• The work of software engineering is one of translation, from one
specification to another; from one level of abstraction to another; from
one set of structures to another (e.g. problem/design decomposition)
Iteration
• The work of software engineering is done iteratively; step by step until
we are “done”
Software Process Framework
Communication
Planning
Modeling
Analysis of requirements
Design
Construction
Code generation
Testing
Deployment
Understand the Problem
Who has a stake in the solution to the problem?
That is, who are the stakeholders?
What are the unknowns?
What data, functions, and features are required to properly solve the problem?
Can the problem be compartmentalized?
Is it possible to represent smaller problems that may be easier to understand?
Can the problem be represented graphically?
Can an analysis model be created?
Plan Solution
Have you seen similar problems before?
Are there patterns that are recognizable in a potential solution?
Is there existing software that implements the data, functions, and features
that are required?
Has a similar problem been solved?
If so, are elements of the solution reusable?
Can subproblems be defined?
If so, are solutions readily apparent for the subproblems?
Can you represent a solution in a manner that leads to effective
implementation?
Can a design model be created?
Carry Out the Plan
Does the solution conform to the plan?
Is source code traceable to the design model?
Is each component part of the solution
provably, correct?
Has the design and code been reviewed, or
better, have correctness proofs been applied to
algorithm?
Examine the Result
Is it possible to test each component part of the
solution?
Has a reasonable testing strategy been implemented?
Does the solution produce results that conform to the
data, functions, and features that are required?
Has the software been validated against all stakeholder
requirements?
Confirmation Bias
This is the tendency to search for, interpret
and recall information in a way that
supports what we already believe.
General Principles
The Reason It All Exists…Why does the software exists?
to provide value to users
this is the guiding principle for decision making
KISS
All design should be as simple as possible, but no simpler
Maintain the Vision
A clear vision is essential to the success of a software project
What You Produce, Others Will Consume
Always specify, design, document, and implement knowing someone
else will have to understand what you are doing
Role of Software Engineering
in Practice
You are
here!
By end of course you
will be on the outer
loop!