Alex Jacobson Presents An Introduction To Software Engineering
What is Software Engineering? Let's distinguish it from Computer Science: Computer Science: the study of how to solve complex problems Software Engineering: the branch of computer science that creates practical and cost-effective solutions to computing and information processing problems, preferentially by applying scientific knowledge.
What is Software Engineering? This guy discovered an O(lg n) sorting algorithm This guy is trying to make someone rich with that algorithm
What is Software Engineering? But beyond the obvious distinctions, people who are software engineers: Design complex systems Test these systems Spill gallons of tears every day
Software Today In the past, software was confined to proprietors Fewer updates Longer time spent on specific stages of development Embodied by Waterfall methodology
Software Today Today, software is updated more rapidly, and there's more collaboration from users and developers Agile Methodology reflects this
Software Today
So How Does It Happen? It all starts when someone with lots of money/capital has a problem they need you to solve. How do you go about solving this problem?
Solving Problems Development boils down to analysis and synthesis Analysis: “decompose a large problem into smaller, understandable pieces” Requires the use of abstraction Synthesis: “build (compose) a software from smaller building blocks”
Solving Problems Analysis
Solving Problems Synthesis
Who's All Involved In This? The Customer The Developer The User
Who's All Involved In This?
Systems Approach How exactly do Software Engineers “synthesize” their solutions? One way is to use the Systems Approach
Systems Approach Activities and Objects An activity is an event initiated by a trigger An object is an element involved in an activity Relationships and System Boundaries A relationship defines the interaction among entities and activities System boundaries determine the origin of input and destinations of the output
Systems Approach
It is possible for systems to rest within other systems These systems interact with one another This is called a layered system
How Do We Know We're Doing It Right? The goal of software engineering is to produces high quality software. What does that even mean? We can consider “quality” in a few different contexts: Quality of the product Quality of the process Quality of the product in the business environment
How Do We Know We're Doing It Right? The Quality of the Product Users will be interested in how well the product functions, and how often it has problems Developers care about the internal characteristics, such as how efficiently it works, and what kind of errors it generates There are models out there, such as McCall's quality model, that helps us wrap our head around these issues
How Do We Know We're Doing It Right?
The Quality of the Process A good quality engineering process is usually modeled in some way What steps are needed and in what order? Where in the process is effective for finding a particular kind of fault? How can you shape the process to find faults earlier? How can you shape the process to build fault tolerance into a system?
How Do We Know We're Doing It Right? The Quality of the Process Examples of Software Process Models SEI’s Capability Maturity Model (CMM) ISO 9000 Software Process Improvement and Capability dEtermination (SPICE)
How Do We Know We're Doing It Right?
ISO 9000
What Happens When We Make Mistakes? Errors can happen, either on the part of the user or on the part of the developer A fault: occurs when a human makes a mistake, called an error, in performing some software activities A failure: is a departure from the system’s required behavior
What Happens When We Make Mistakes? This can be very serious depending on the context Safety-Critical System: “A system in which any failure or design error has the potential to lead to loss of life.” Examples: Flight-Control Systems, Certain Medical Technology. Therac-25: A computer-run radiation machine that killed and injured several cancer patients due to failures
So In Summary Software Engineering involves tackling problems more economically than computer scientists Software Engineering involves collaboration from non-engineers (users and customers) Good SE will be based on models like CMM and ISO Proper SE can be the difference between life and death in certain situations
References es-pub-rev2.pdf fst2001.pdf technology/2014/08/how-microsoft-dragged- its-development-practices-into-the-21st- century/ Lectures/Notes/Lecture2-PA-chapter01- notes.pdf 828/s08/_Media/02-introse.pdf