Alex Jacobson Presents An Introduction To Software Engineering

Embed Size (px)

DESCRIPTION

What is Software Engineering? This guy discovered an O(lg n) sorting algorithm This guy is trying to make someone rich with that algorithm

Citation preview

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 SEIs 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 systems 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 Referenceses-pub-rev2.pdffst2001.pdftechnology/2014/08/how-microsoft-dragged- its-development-practices-into-the-21st- century/014-Lectures/Notes/Lecture2-PA-chapter01- notes.pdf https://www.cs.colorado.edu/~kena/classes/5 828/s08/_Media/02-introse.pdf