1 Welcome to CS 362 Applied Software Engineering What happens after (and during) design? Testing, debugging, maintaining programs Lessons for software.

Slides:



Advertisements
Similar presentations
Lesson 1:Introduction to Programming (Python/Java)
Advertisements

Chapter 5 Errors Bjarne Stroustrup
Test process essentials Riitta Viitamäki,
Welcome to the seminar course
CSE 331 SOFTWARE DESIGN & IMPLEMENTATION DEBUGGING Autumn 2011 Bug-Date: Sept 9, 1947.
(Quickly) Testing the Tester via Path Coverage Alex Groce Oregon State University (formerly NASA/JPL Laboratory for Reliable Software)
Debugging Introduction to Computing Science and Programming I.
This set of slides is provided by the author of the textbook1 Introductory Topics l Computer Programming l Programming Life-Cycle Phases l Creating an.
CS 206 Introduction to Computer Science II 09 / 03 / 2008 Instructor: Michael Eckmann.
Statistical Methods in Computer Science Why? Ido Dagan.
1 Lecture-I CSIT-120 Spring 2001 Introducing the Course Syllabus Introduction to Computers Introduction to Computer Science Information, Algorithms and.
Chapter 3.1 Teams and Processes. 2 Programming Teams In the 1980s programmers developed the whole game (and did the art and sounds too!) Now programmers.
Portability CPSC 315 – Programming Studio Spring 2008 Material from The Practice of Programming, by Pike and Kernighan.
Software Testing. “Software and Cathedrals are much the same: First we build them, then we pray!!!” -Sam Redwine, Jr.
Introduction to a Programming Environment
Applied Software Project Management 1 Introduction Dr. Mengxia Zhu Computer Science Department Southern Illinois University Carbondale.
CS 104 Introduction to Computer Science and Graphics Problems Software and Programming Language (2) Programming Languages 09/26/2008 Yang Song (Prepared.
SM3121 Software Technology Mark Green School of Creative Media.
Testing Test Plans and Regression Testing. Programs need testing! Writing a program involves more than knowing the syntax and semantics of a language.
Programming. Software is made by programmers Computers need all kinds of software, from operating systems to applications People learn how to tell the.
Introduction To C++ Programming 1.0 Basic C++ Program Structure 2.0 Program Control 3.0 Array And Structures 4.0 Function 5.0 Pointer 6.0 Secure Programming.
Activity 1 - WBs 5 mins Go online and spend a moment trying to find out the difference between: HIGH LEVEL programming languages and LOW LEVEL programming.
1 Welcome to CS 362 Applied Software Engineering Dr. Alex Groce (KEC 3067) Testing, debugging, running programs Design for testability Implementation (actual.
Language Evaluation Criteria
P51UST: Unix and Software Tools Unix and Software Tools (P51UST) Compilers, Interpreters and Debuggers Ruibin Bai (Room AB326) Division of Computer Science.
CSE 486/586 CSE 486/586 Distributed Systems PA Best Practices Steve Ko Computer Sciences and Engineering University at Buffalo.
Introduction to VB.NET Tonga Institute of Higher Education.
TESTING.
A Computer Science Tapestry 1 Recursion (Tapestry 10.1, 10.3) l Recursion is an indispensable technique in a programming language ä Allows many complex.
Overview of Computing. Computer Science What is computer science? The systematic study of computing systems and computation. Contains theories for understanding.
A Research Question How to get a research question Do you want to know the answer Does it have to be new? Difficulties What makes a good research question.
Human-Computer Interaction Introduction © Brian Whitworth.
Revision Techniques that work Tried and tested tips to make learning easier and more fun.
CS 350 – Software Design The Object Paradigm – Chapter 1 If you were tasked to write code to access a description of shapes that were stored in a database.
Computer Programming I An Introduction to the art and science of programming with C++
Program Development Life Cycle (PDLC)
Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why. Programmers combine theory and practice:
CSE 219 Computer Science III Program Design Principles.
Testing. 2 Overview Testing and debugging are important activities in software development. Techniques and tools are introduced. Material borrowed here.
Problem of the Day  Why are manhole covers round?
Chapter 22 Developer testing Peter J. Lane. Testing can be difficult for developers to follow  Testing’s goal runs counter to the goals of the other.
Designing Complex Software Systems: Introduction CS 6961 – Lecture 0 Nathan Dykman.
Multi-media Information Systems Introduction Brian Whitworth © 2001.
CS 3500 L Performance l Code Complete 2 – Chapters 25/26 and Chapter 7 of K&P l Compare today to 44 years ago – The Burroughs B1700 – circa 1974.
Introduction to Python Lesson 1 First Program. Learning Outcomes In this lesson the student will: 1.Learn some important facts about PC’s 2.Learn how.
Debugging Computer Networks Sep. 26, 2007 Seunghwan Hong.
Software Engineering 2004 Jyrki Nummenmaa 1 BACKGROUND There is no way to generally test programs exhaustively (that is, going through all execution.
Nic Shulver, Welcome to Principles of Software Engineering Tutor: Nic Shulver Web site and Blackboard presence 100% coursework,
Software Quality Assurance and Testing Fazal Rehman Shamil.
Computer Science Reaching Wider Summer School 2012.
The single most important skill for a computer programmer is problem solving Problem solving means the ability to formulate problems, think creatively.
Getting ready. Why C? Design Features – Efficiency (C programs tend to be compact and to run quickly.) – Portability (C programs written on one system.
Introduction to Computer Programming Concepts M. Uyguroğlu R. Uyguroğlu.
Software Design and Development Development Methodoligies Computing Science.
Software Development Languages and Environments. Computer Languages Just as there are many human languages, there are many computer programming languages.
Lecture 1b- Introduction
14 Compilers, Interpreters and Debuggers
Types for Programs and Proofs
1. Welcome to Software Construction
Machine code Recall that all a computer recognises is binary code.
CPSC 315 – Programming Studio Spring 2012
A451 Theory – 7 Programming 7A, B - Algorithms.
TRANSLATORS AND IDEs Key Revision Points.
Pseudo-ops, Debugging, etc.
Compiler Construction
Software Testing and Maintenance Modifying Code
Portability CPSC 315 – Programming Studio
CSSSPEC6 SOFTWARE DEVELOPMENT WITH QUALITY ASSURANCE
Programming.
Embedded System Development Lecture 12 4/4/2007
Presentation transcript:

1 Welcome to CS 362 Applied Software Engineering What happens after (and during) design? Testing, debugging, maintaining programs Lessons for software testing Methods for testing Tips, tricks, and techniques How to review code How to debug Throughout: tools and automation Source control, testing, debugging tools

2 Overview This class is going to spend a lot of time on the fact that things go wrong The design is probably somewhat wrong The implementation is almost certainly wrong Building software by “trying really hard” and assuming the end result is perfect will not work There are lots of ways to avoid bugs There are lots of ways to find bugs There are lots of ways to fix bugs There are lots of bugs

3 Overview Some books (not textbooks) that are worth reading to understand applied software engineering This class will aim to distill the most important points from a number of books into takeaway lessons But the books are still worth reading if you really want to understand things

4 The Royal Road to Software Engineering Capability Build, test, and debug real software! This is the most important thing Read books by people who have done just that, and written down what they have learned If you think that’s too old fashioned, read the books on your tablet, ok? “he who learns to play the harp learns to play by playing it” - Aristotle, Metaphysics, Book IX

5 Civil Engineering Design Paradigms: Case Histories of Error and Judgment in Engineering - Henry Petroski “It has long been practically a truism among practicing engineers and designers that we learn much more from failures than from successes.”

6 Civil Engineering Galileo’s “bug report” Storing columns during construction: A procedure “run” by the builders A “patch” to the code

7 We’re Engineers – Really! What makes software engineering like other engineering disciplines? Design is difficult and important Implementation is difficult and important Building complex artifacts that must work Use of mathematical principles, scientific understanding (e.g., materials science, physics / complexity theory, programming language knowledge) Contributes to the material and cultural capital of humanity

8 Engineering and Humanity The Existential Pleasures of Engineering - Samuel C. Florman All engineers as engaged in one of the most profound and extraordinary quests of human existence

9 We’re A New Kind of Engineers What makes software engineering different (in a bad way)? We have over 2,500 years less experience Computer science is simply less mature than civil or mechanical engineering Many more moving parts! Discrete behavior vs. continuous Calculus and differential equations will not carry us very far Many more radically different designs

10 We’re A New Kind of Engineers What makes software engineering different (in a good way)? Patching code is much easier than patching a bridge or a space shuttle We know a lot about how to put computers to work to help us do our jobs We have much more ability to test Therefore testing will be the most important and most central topic of this class

11 You are given a library, container.o and the following.h file signatures: int put (int n, container* c); /* returns 1 and adds to c if n not in c, otherwise returns 0 */ int get (int n, container* c); /* returns 1 if n is in c, 0 otherwise */ int remove (int n, container* c); /* returns 1 if n was in c; after return n is not in c! */ container* newContainer(); /* returns a new container if memory avail */ You don’t have source code, and the file isn’t compiled with debugging information. Attached is a note: “We would like to use this (it’s really fast) in our new system, but it needs to work well – a bug in this could be catastrophic. Can you give me a plan/approach for thorough testing? I don’t want to share our test generation code with the company that wrote this, and they won’t share source, but you can give them test cases. The programmer behind this at Container Code Design, LLC, is pretty busy, so we’d like to make sure to get good turnaround from debugging. Can I get a short white paper on this by this afternoon’s 2:35 project meeting? I know it’s short notice, and you’re not really a test engineer, but we need something. Think-piece