CS 5150 1 CS 5150 Software Engineering Lecture 22 Reliability 2.

Slides:



Advertisements
Similar presentations
Testing Relational Database
Advertisements

Software Testing. Quality is Hard to Pin Down Concise, clear definition is elusive Not easily quantifiable Many things to many people You'll know it when.
Lecture 8: Testing, Verification and Validation
Verification and Validation
1 CS 501 Spring 2005 CS 501: Software Engineering Lecture 21 Reliability 3.
Software Engineering-II Sir zubair sajid. What’s the difference? Verification – Are you building the product right? – Software must conform to its specification.
CMSC 345, Version 11/07 SD Vick from S. Mitchell Software Testing.
CS 5150 Software Engineering
CS CS 5150 Software Engineering Lecture 21 Reliability 2.
©Ian Sommerville 2004Software Engineering, 7th edition. Chapter 23 Slide 1 Software testing.
1 CS 501 Spring 2007 CS 501: Software Engineering Lecture 21 Reliability 3.
1 CS 501 Spring 2005 CS 501: Software Engineering Lecture 19 Reliability 1.
CS CS 5150 Software Engineering Lecture 20 Reliability 1.
©Ian Sommerville 2004Software Engineering, 7th edition. Chapter 23 Slide 1 Software testing.
Illinois Institute of Technology
1 CS 501 Spring 2008 CS 501: Software Engineering Lecture 19 Reliability 1.
Objectives Understand the basic concepts and definitions relating to testing, like error, fault, failure, test case, test suite, test harness. Understand.
CS CS 5150 Software Engineering Lecture 21 Reliability 3.
Testing an individual module
CS 501: Software Engineering Fall 2000 Lecture 22 Dependable Systems II Validation and Verification.
CS CS 5150 Software Engineering Lecture 21 Reliability 1.
Outline Types of errors Component Testing Testing Strategy
1 CS 501 Spring 2008 CS 501: Software Engineering Lecture 21 Reliability 3.
Software Testing & Strategies
Issues on Software Testing for Safety-Critical Real-Time Automation Systems Shahdat Hossain Troy Mockenhaupt.
Verification and Validation CIS 376 Bruce R. Maxim UM-Dearborn.
Chapter 24 - Quality Management Lecture 1 1Chapter 24 Quality management.
CSCI 5801: Software Engineering
Software Testing Verification and validation planning Software inspections Software Inspection vs. Testing Automated static analysis Cleanroom software.
Verification and Validation Yonsei University 2 nd Semester, 2014 Sanghyun Park.
INFO 637Lecture #81 Software Engineering Process II Integration and System Testing INFO 637 Glenn Booker.
Objectives Understand the basic concepts and definitions relating to testing, like error, fault, failure, test case, test suite, test harness. Explore.
CS 501: Software Engineering Fall 1999 Lecture 16 Verification and Validation.
Software Testing.
CS 360 Lecture 3.  The software process is a structured set of activities required to develop a software system.  Fundamental Assumption:  Good software.
1 Software testing. 2 Testing Objectives Testing is a process of executing a program with the intent of finding an error. A good test case is in that.
Chapter 11: Software Prototyping Omar Meqdadi SE 273 Lecture 11 Department of Computer Science and Software Engineering University of Wisconsin-Platteville.
Testing Basics of Testing Presented by: Vijay.C.G – Glister Tech.
1 CS 501 Spring 2002 CS 501: Software Engineering Lecture 23 Reliability III.
CS CS 5150 Software Engineering Lecture 20 Reliability 2.
Software Testing Yonsei University 2 nd Semester, 2014 Woo-Cheol Kim.
©Ian Sommerville 2004Software Engineering, 7th edition. Chapter 22 Slide 1 Software Verification, Validation and Testing.
1 Introduction to Software Testing. Reading Assignment P. Ammann and J. Offutt “Introduction to Software Testing” ◦ Chapter 1 2.
1 CS 501 Spring 2002 CS 501: Software Engineering Lecture 22 Reliability II.
CS CS 5150 Software Engineering Lecture 20 Reliability 2.
Software Engineering1  Verification: The software should conform to its specification  Validation: The software should do what the user really requires.
CS 360 Lecture 16.  For a software system to be reliable:  Each stage of development must be done well, with incremental verification and testing. 
CS451 Lecture 10: Software Testing Yugi Lee STB #555 (816)
1 Software Testing Strategies: Approaches, Issues, Testing Tools.
 Software Testing Software Testing  Characteristics of Testable Software Characteristics of Testable Software  A Testing Life Cycle A Testing Life.
Software Development Process CS 360 Lecture 3. Software Process The software process is a structured set of activities required to develop a software.
©Ian Sommerville 2004Software Engineering, 7th edition. Chapter 23 Slide 1 Software testing.
Testing Overview Software Reliability Techniques Testing Concepts CEN 4010 Class 24 – 11/17.
1 CS 501 Spring 2003 CS 501: Software Engineering Lecture 21 Reliability II.
CS 5150 Software Engineering Lecture 21 Reliability 2.
Software Design and Development Development Methodoligies Computing Science.
1 CS 501 Spring 2004 CS 501: Software Engineering Lecture 20 Reliability 2.
Methodologies and Algorithms
Software Testing.
Regression Testing with its types
Verification and Validation
Chapter 9, Testing.
IEEE Std 1074: Standard for Software Lifecycle
Verification & Validation
Software testing strategies 2
Introduction to Software Testing
Verification and Validation Unit Testing
CS 5150 Software Engineering
Test Case Test case Describes an input Description and an expected output Description. Test case ID Section 1: Before execution Section 2: After execution.
CS 501: Software Engineering
Presentation transcript:

CS CS 5150 Software Engineering Lecture 22 Reliability 2

CS Administration

CS Reliability: Adapting Small Teams to Large Projects Small teams and small projects have many advantages: Small group communication cuts need for intermediate documentation, yet reduces misunderstanding. Small projects are easier to test and make reliable. Small projects have shorter development cycles, so that mistakes in requirements are less likely and less expensive to fix. When one project is completed it is easier to plan for the next.

CS Reliability: Adapting Small Teams to Large Projects Many modern software methodologies aim to apply the advantages of small teams to large projects. Often called Rapid Application Development or Agile Software Development. Works well with interactive systems, such as web systems, where the overall structure is well established and there is a prototype or operational system.

CS Reliability: Adapting Small Teams to Large Projects Topics: Incremental development Pair design and pair programming Continuous testing Challenges: Requires strong overall leadership to ensure that the individual units fit within the overall system goals and architecture. Requires systematic integration testing.

CS Developing Large Systems: Incremental Development Concept Divide a large project into units of work, typically the work that can be done by a team of 5-10 people in four weeks. The team carries out the complete development cycle up to having a releasable product. If the work cannot be completed in the allowed time, reduce the scope, not the quality. Because the team is small, they can reply on face to face communication and need little intermediate documentation. Often combined with pair design and pair programming, and with continuous testing.

CS Reviews Carried out throughout the software development process. Validation & verification Requirements specification Design Program REVIEWS

CS Team work in Design and Coding Concept Colleagues review each other's work: can be applied to any stage of software development, but particularly valuable to review program design can be formal or informal Reviews are a fundamental part of good software development

CS Pair Design and Pair Programming Concept: achieve benefits of review by shared development Two people work together as a team: design and/or coding testing and system integration documentation and hand-over Benefits include: two people create better software with fewer mistakes cross training Many software houses report excellent productivity

CS Continuous Testing: a Small Example Example. A graphics package consisting of a pre-processor, a runtime package (set of classes), and several device drivers. Starting point. A prototype with a good overall structure, and most of the functionality, but badly coded and full of bugs. Approach On a daily cycle: Design and code one small part of the package (e.g., an interface, a class, a dummy stub, an algorithm within a class) Integrate into prototype. Create additional test cases if needed. Regression test.

CS Developing Large Systems: Continuous Testing Create a first iteration that has the structure of the final system and some basic functionality. Create an initial set of test cases. Check-in changes to the system on a daily basis, rebuild system daily. Run full regression test daily, identify and deal with any new faults. Add new test cases continually.

CS Static and Dynamic Verification Static verification: Techniques of verification that do not include execution of the software. May be manual or use computer tools. Dynamic verification: Testing the software with trial data. Debugging to remove errors.

CS Static Analysis Tools Program analyzers scan the source of a program for possible faults and anomalies (e.g., Lint for C programs, Eclipse). Control flow: loops with multiple exit or entry points Data use: Undeclared or uninitialized variables, unused variables, multiple assignments, array bounds Interface faults: Parameter mismatches, non-use of functions results, uncalled procedures Storage management: Unassigned pointers, pointer arithmetic Good programming practice eliminates all warnings from source code

CS Static Analysis Tools (continued) Static analysis tools Cross-reference table: Shows every use of a variable, procedure, object, etc. Information flow analysis: Identifies input variables on which an output depends. Path analysis: Identifies all possible paths through the program.

CS Static Analysis Tools in Programming Toolkits

CS Static Analysis Tools in Programming Toolkits

CS Static Verification: Program Inspections Formal program reviews whose objective is to detect faults Code may be read or reviewed line by line. 150 to 250 lines of code in 2 hour meeting. Use checklist of common errors. Requires team commitment, e.g., trained leaders So effective that it is claimed that it can replace unit testing

CS Inspection Checklist: Common Errors Data faults: Initialization, constants, array bounds, character strings Control faults: Conditions, loop termination, compound statements, case statements Input/output faults: All inputs used; all outputs assigned a value Interface faults: Parameter numbers, types, and order; structures and shared memory Storage management faults: Modification of links, allocation and de-allocation of memory Exceptions: Possible errors, error handlers

CS Dynamic Testing: Test Design Testing can never prove that a system is correct. It can only show that either (a) a system is correct in a special case, or (b) that it has a fault. The objective of testing is to find faults or demonstrate that program is correct in specific instances. Testing is never comprehensive. Testing is expensive.

CS Testing Strategies Bottom-up testing. Each unit is tested with its own test environment. Top-down testing. Large components are tested with dummy stubs. user interfaces work-flow client and management demonstrations Stress testing. Tests the system at and beyond its limits. real-time systems transaction processing Most systems require a combination of all three strategies.

CS Methods of Testing Closed box testing Testing is carried out by people who do not know the internals of what they are testing. Example. IBM educational demonstration that was not foolproof Open box testing Testing is carried out by people who know the internals of what they are testing. Example. Tick marks on the graphing package

CS Stages of Testing Testing is most effective if divided into stages Unit testing unit test System testing integration test function test performance test installation test User interface testing Acceptance testing

CS Testing: Unit Testing Tests on small sections of a system, e.g., a single class Emphasis is on accuracy of actual code against specification Test data is chosen by developer(s) based on their understanding of specification and knowledge of the unit Can be at various levels of granularity Open box or closed box: by the developer(s) of the unit or by special testers If unit testing is not thorough, system testing becomes almost impossible. If your are working on a project that is behind schedule, do not rush the unit testing.

CS Testing: System and Sub-System Testing Tests on components or complete system, combining units that have already been thoroughly tested Emphasis on integration and interfaces Trial data that is typical of the actual data, and/or stresses the boundaries of the system, e.g., failures, restart Carried out systematically, adding components until the entire system is assembled Open or closed box: by development team or by special testers System testing is finished fastest if each component is completely debugged before assembling the next

CS Test Cases Test cases are specific tests that are chosen because they are likely to find specific faults. Test cases are chosen to balance expense against chance of finding serious faults. Cases chosen by the development team are effective in testing known vulnerable areas. Cases chosen by experienced outsiders and clients will be effective in finding gaps left by the developers. Cases chosen by inexperienced users will find other faults.

CS Regression Testing Regression Testing is one of the key techniques of Software Engineering When software is modified regression testing is to provide confidence that modifications behave as intended and do not adversely affect the behavior of unmodified code. Basic technique is to repeat entire testing process after every change, however small.

CS Regression Testing: Program Testing 1.Collect a suite of test cases, each with its expected behavior. 2.Create scripts to run all test cases and compare with expected behavior. (Scripts may be automatic or have human interaction.) 3.When a change is made to the system, however small (e.g., a bug is fixed), add a new test case that illustrates the change (e.g., a test case that revealed the bug). 4.Before releasing the changed code, rerun the entire test suite.

CS Documentation of Testing Testing should be documented for thoroughness, visibility and for maintenance (a) Test plan (b)Test specification and evaluation (c)Test suite and description (d) Test analysis report

CS Fixing Bugs Isolate the bug Intermittent --> repeatable Complex example --> simple example Understand the bug Root cause Dependencies Structural interactions Fix the bug Design changes Documentation changes Code changes

CS Moving the Bugs Around Fixing bugs is an error-prone process! When you fix a bug, fix its environment Bug fixes need static and dynamic testing Repeat all tests that have the slightest relevance (regression testing) Bugs have a habit of returning! When a bug is fixed, add the failure case to the test suite for the future.