Objec&ves. Tes&ng 11/8/16. by Frederick P. Brooks, Jr., 1986

Similar documents
Review: SoBware Development

Objec&ves. Review. JUnit Coverage Collabora&on

Coverage tools Eclipse Debugger Object-oriented Design Principles. Oct 26, 2016 Sprenkle - CSCI209 1

Objec&ves. Review. So-ware Quality Metrics Sta&c Analysis Tools Refactoring for Extensibility

Designing a Social Network Prep for Lab 10. March 26, 2018 Sprenkle - CSCI Why classes and objects? How do we create new data types?

New features in Oracle 11g for PL/SQL code tuning.

Objec&ves. Usability Project Discussion. May 9, 2016 Sprenkle - CSCI335 1

Text UI. Data Store Ø Example of a backend to a real Could add a different user interface. Good judgment comes from experience

Lab 11: Pair Programming. Review: Pair Programming Roles

CSCI 325: Distributed Systems. Objec?ves. Professor Sprenkle. Course overview Overview of distributed systems Introduc?on to reading research papers

There s a Cloud in My Enterprise

1-1. Copyright 2015 Pearson Education, Inc.

The 10- Year Framework of Programmes on Sustainable Consump=on & Produc=on. * An Intergovernmental mandate * Introduction

Minimum Spanning Tree Union-Find Data Structure. Feb 28, 2018 CSCI211 - Sprenkle. Comcast wants to lay cable in a neighborhood. Neighborhood Layout

Lecture 8: Verification and Validation

IDENTIFYING FAULT-PRONE MODULES IN SOFTWARE FOR DIAGNOSIS AND TREATMENT USING EEPORTERS CLASSIFICATION TREE

Gary Hart, PhD. Partners

OUR PANELISTS. Linda Morrison L&D Academy Administrator Travelex. Be+y Mills L&D Manager Centra Health. Ma+ Hart L&OD Resource Officer Metropolitan

Decentralised solutions for renewable energies and water in developing countries

HANDS ACROSS BORDERS. An International Workshop on. Alterna(ve Mechanisms to Establish and Govern Transboundary Conserva(on Ini(a(ves

LPGPU. Low- Power Parallel Compu1ng on GPUs. Ben Juurlink. Technische Universität Berlin. EPoPPEA workshop

Philips Lifeline. Ø Chenyang Lu 1

Estonian National Electoral Committee. E-Voting System. General Overview

Lecture Series - MSG 141 Technical Architecture and Standards C2- Simula:on Interoperability (C2SIM)

Servilla: Service Provisioning in Wireless Sensor Networks. Chenyang Lu

Cross- Campus Enrollment System Project Update. December, 2015

Immigra6on Basics. Stephanie Paver, Senior A)orney. 1. Department of Homeland Security (DHS)

DevOps Course Content

Google App Engine 8/10/17. CS Cloud Compu5ng Systems--Summer II 2017

Bridging the Gap Between Legacy & Standards. d-wise. Bill Qubeck, Life Sciences Director

LMLIP Community Event 2013 Information Session

IBM Cognos Open Mic Cognos Analytics 11 Part nd June, IBM Corporation

Post contractual non-competition clauses

Hoboken Public Schools. PLTW Introduction to Computer Science Curriculum

ISO/IEC20000 Overview and Cer2fica2on Approach

Review of Lab 9. Review Lab 9. Social Network Classes/Driver Data. Lab 10 Design

Support Vector Machines

Posi%oning services reforms & nego%a%ons for development [Intercon%nental Hotel, Nairobi, November, 2011]

11/15/13. Objectives. Review. Our Screen Saver Dependencies. Our Screen Saver Dependencies. Project Deliverables Timeline TEAM FINAL PROJECT

Best Prac*ces & Training Guide for Professional Development and Networking - June 2011-

Call for Proposals for IFTA s 2019 World Family Therapy Congress. March 28-30, 2019

Adaptive QoS Control for Real-Time Systems

Cover page design by Udara Jayawardhane. The cover image is for visual effect only and does not imply the expression of any opinion whatsoever on the

Using CAS Cross-Functional Frameworks to Facilitate a Collaborative FYE Approach

CS 5523: Operating Systems

Processes. Criteria for Comparing Scheduling Algorithms

Chapter 11. Weighted Voting Systems. For All Practical Purposes: Effective Teaching

Election 2000: A Case Study in Human Factors and Design

Online Ballots. Configuration and User Guide INTRODUCTION. Let Earnings Edge Assist You with Your Online Ballot CONTENTS

Checklist. Industry Requirements for E-Bonding Solutions. Based on Surety Association of Canada Vendor Guidelines

About The Beta Participant Agreement

Does Decentralization Lessen or Worsen Poverty? Evidence from

Admission of TCN- Introduction. Constança Urbano de Sousa ULB, Brussels, 2 and 3 February 2013

Chapter 8: Recursion

WSFA Fall Congress Legislave Packet 2018

Essential Patterns of Mature Agile Leadership

Product Description

A Call for a Migra7on Consensus

General Framework of Electronic Voting and Implementation thereof at National Elections in Estonia

IMPROVEMENT OF THE SAFETY OF THE WORK IN NRIC

LS C2 to Simula0on Interoperability (C2SIM) - Lessons learned Near Future: plans for opera0onaliza0on

UTAH LEGISLATIVE BILL WATCH

Coali&on Ba*le Management Language (C- BML) and C2SIM History and Development

TAFTW (Take Aways for the Week) APT Quiz and Markov Overview. Comparing objects and tradeoffs. From Comparable to TreeMap/Sort

Congressional Forecast. Brian Clifton, Michael Milazzo. The problem we are addressing is how the American public is not properly informed about

Thinking Like a Computer Scien4st About Ancient Roman Graffi4

My Health Online 2017 Website Update Online Appointments User Guide

Overview of the Design Process. Avoid Bad Design, Use UCD Evidence-based Design Hypothesis testing!

Private Sponsorship in Refugee Resettlement. February 2017

Dynamic Games Lesson 4: Economic Aplica4ons. Universidad Carlos III

MSL. Mul'-Robot Manipula'on without Communica'on. Zijian Wang and Mac Schwager

NetTest A European Solution from Austria for measuring Broadband Quality SERENTSCHY.COM ADVISORY SERVICES GMBH

Data Distribution Agreement of BME Market Data

OPEN SOURCE CRYPTOCURRENCY

Records Reten+on Basics for ESDs Texas State Associa+on of Fire and Emergency Districts (SAFE-D) Annual Conference Galveston, TX February 24, 2018

This manual represents a print version of the Online Filing Help.

Access to informa.on: Lessons from Fukushima Nuclear Accident

Mojdeh Nikdel Patty George

Final Review. Chenyang Lu. CSE 467S Embedded Compu5ng Systems

Transla'ng public health research for policymakers and advocates

Quant 101 Learn2Quant HK, 14 September Vinesh Jha CEO, ExtractAlpha

PRESENTED BY: HOSTED BY: APPELLATE MOOT COURT COMPETITION 2011 COMPETITION RULES

Plan For the Week. Solve problems by programming in Python. Compsci 101 Way-of-life. Vocabulary and Concepts

Overview. Ø Neural Networks are considered black-box models Ø They are complex and do not provide much insight into variable relationships

Arthur M. Keller, Ph.D. David Mertz, Ph.D.

Trusted Logic Voting Systems with OASIS EML 4.0 (Election Markup Language)

Ocean Observatories Ini/a/ve Facili/es Board The Ocean Observatories Ini/a/ve Facility Board (OOIFB) provides independent input and guidance

Colloquium organized by the Council of State of the Netherlands and ACA-Europe. An exploration of Technology and the Law. The Hague 14 May 2018

Electronic Voting For Ghana, the Way Forward. (A Case Study in Ghana)

Analyzing proofs Introduction to problem solving. Wiki: Everyone log in okay? Decide on either using a blog or wiki-style journal?

A Practical Guide to Trade Policy Analysis

OPEN SOURCE CRYPTOCURRENCY E-PUB

CSE 520S Real-Time Systems

2014 Second Chance Act Planning and Implementa4on (P&I) Guide

Voting Corruption, or is it? A White Paper by:

Police Department. Mission: reduce crime and maintain safe neighborhoods in the City of Orlando

National IDs in a developing country context with a focus on Africa

Child Check In Quick Start Guide. v 9.5. Local: (706) Atlanta: (404) Toll Free: (866)

WHISTLEBLOWER POLICY AND PROTECTION

HOW TO RUN AN ONLINE ELECTION

Transcription:

Objec&ves Tes&ng Oct 12, 2016 Sprenkle - CSCI209 1 No Silver Bullet: Essence and Accidents of SoHware Engineering Of all the monsters that fill the nightmares of our folklore, none terrify more than werewolves, because they transform unexpectedly from the familiar into horrors. For these, one seeks bullets of silver that can magically lay them to rest. by Frederick P. Brooks, Jr., 1986 The familiar sohware project, at least as seen by the nontechnical manager, has something of this character; it is usually innocent and straighsorward, but is capable of becoming a monster of missed schedules, blown budgets, and flawed products. So we hear desperate cries for a silver bullet--something to make sohware costs drop as rapidly as computer hardware costs do. But, as we look to the horizon of a decade hence, we see no silver bullet. There is no single development, in either technology or in management technique, that by itself promises even one order-of-magnitude improvement in produc&vity, in reliability, in simplicity. In this ar&cle, I shall try to show why, by examining both the nature of the sohware problem and the proper&es of the bullets proposed. Oct 10, 2016 Sprenkle - CSCI209 2 1

Who is Fred Brooks? UNC Professor Turing Award winner The most important single decision I ever made was to change the IBM 360 series from a 6-bit byte to an 8-bit byte, thereby enabling the use of lowercase le_ers. That change propagated everywhere. Oct 10, 2016 Sprenkle - CSCI209 3 Tradi&onal SoHware Engineering Process: Waterfall Model Requirements Design Implementa&on Validate at each step Goal: A stage is 100% complete before moving to next step Integra&on Acceptance Release/ Maintenance Oct 10, 2016 Sprenkle - CSCI209 4 2

Feedback in Waterfall Model Requirements Design Implementa&on Problems may be revealed in later stages What happens if problems aren t revealed until Acceptance? Integra&on Acceptance Release/ Maintenance Oct 10, 2016 Sprenkle - CSCI209 5 Itera&ve Design Design Get feedback from users/ clients Evaluate Implement Oct 10, 2016 Sprenkle - CSCI209 6 3

Spiral Model Idea: smaller prototypes to test/fix/throw away Ø Finding problems early costs less In general Ø Break func&onality into smaller pieces Ø Implement most depended-on or highestpriority features first Evaluate Design Prototypes Implement [Boehm 86] Radial dimension: cost Oct 10, 2016 Sprenkle - CSCI209 7 Prototypes Purpose/Dimensions Ø Func&onality Ø Interac&on Ø Implementa&on Fidelity: Ø Low: omits details Ø High: closer to finished project Ø Mul&-dimensional Breadth: % of features covered Ø Only enough features for certain tasks Depth: degree of func&onality Ø Limited choices, canned responses, no error handling From Nielsen, Usability Engineering Oct 10, 2016 Sprenkle - CSCI209 8 4

Low Fidelity Prototypes Media: Paper Examples: storyboard, sketches, flipbook, flow diagram Oct 10, 2016 Sprenkle - CSCI209 9 High Fidelity Prototypes Media: Flash, HTML (non-interac&ve), PowerPoint, Video Examples: Mockups, Wizard of Oz Virtual Peer for Autistic Children http://www.articulab.justinecassell.com/projects/samautism/index.html Oct 10, 2016 Sprenkle - CSCI209 10 5

How to Implement an Effec&ve Solu&on Understand the problem (interact with people) Understand external constraints (interact with people) Design an effec&ve solu&on to the problem While designing the solu&on, design some tests to verify that the problem is solved (and remains solved) Code the effec&ve solu&on to the problem Teach other team members about your solu&on to the problem (interact with people) Oct 10, 2016 Sprenkle - CSCI209 11 Spiral Model Steps Design a {method, class, package} Implement the {method, class, package} Test the {method, class, package} Fix the {method, class, package} Deploy the {method, class, package} Get feedback Ø Probably will require modifica&ons to design Ø May even need to rollback a previous version Repeat Oct 10, 2016 Sprenkle - CSCI209 12 6

Agile Development Framework: Scrum The Scrum framework in 30 seconds Ø Product owner creates priori&zed wish list, a product backlog Ø Team works in a sprint, usually 2-4 weeks During planning, team picks a subset of wish list, a sprint backlog, and decides how to implement those pieces Daily Scrum: team meets daily to assess its progress Ø ScrumMaster keeps the team focused on its goal At end of sprint, work should be poten&ally shippable: Ø ready to hand to a customer, put on a store shelf, or show to a stakeholder The sprint ends with a sprint review and retrospec&ve Ø Repeat sprint https://www.scrumalliance.org/why-scrum Oct 10, 2016 Sprenkle - CSCI209 13 SOFTWARE TESTING PROCESS Oct 12, 2016 Sprenkle - CSCI209 14 7

A Bad Role Model Oct 12, 2016 Sprenkle - CSCI209 http://imgur.com/hbsbn15 MicrosoH Tes&ng Beyond their internal tes&ng Ø 5 million people beta tested Ø 60+ years of performance tes&ng Ø 1 Billion+ Office 2007 sessions S&ll, users found correctness, stability, robustness, and security bugs Oct 12, 2016 Sprenkle - CSCI209 16 8

Type 1 Bugs: Compile-Time Syntax errors Ø Missing semicolon, parentheses Compiler no&fies of error Cheap, easy to fix Oct 12, 2016 Sprenkle - CSCI209 17 Type 2 Bugs: Run-Time Usually logic errors Expensive to locate, fix Oct 12, 2016 Sprenkle - CSCI209 18 9

Aside: Objec&ons to Bug Terminology Bug Ø Sounds like it s just an annoyance Can simply swat away Ø Minimizes poten&al problems Ø Hides programmer s responsibility Alterna&ve terms Ø Defect Ø Fault Oct 12, 2016 Sprenkle - CSCI209 19 SoHware Tes&ng Process Input Program Output Test Case Program Under Test Expected Output? Test Suite: set of test cases pass or fail Oct 12, 2016 Sprenkle - CSCI209 20 10

SoHware Tes&ng Process Input Program Output Tester plays devil s advocate Ø Hopes to reveal problems in the program using good test cases Ø Be_er tester finds than a customer! How is testing different from debugging? Oct 12, 2016 Sprenkle - CSCI209 21 How Would You Test a Calculator Program? Input Calculator Program Output Operands, operators, expected output adds, subtracts, multiplies, divides Numerical Answer What test cases: input and expected output? Oct 12, 2016 Sprenkle - CSCI209 22 11

Example Test Cases for Calculator Program Basic Func&onality Ø Addi&on Ø Subtrac&on Ø Mul&plica&on Ø Division Ø Order of opera&ons Invalid Input Ø Le_ers, not-opera&on characters (&,$, ) Tricky Cases Ø Divide by 0 Ø Nega&ve Numbers Ø Long sequences of operands, operators Ø VERY large, VERY small numbers Oct 12, 2016 Sprenkle - CSCI209 23 Types of Tes&ng (Non-Exhaus&ve) Black-box tes&ng Non-func&onal tes&ng White-box tes&ng Acceptance tes&ng Ideas or definitions of any of these? Oct 12, 2016 Sprenkle - CSCI209 24 12

Types of Tes&ng (Non-Exhaus&ve) Black-box tes&ng Ø Test func2onality (e.g., the calculator) Ø No knowledge of the code Ø Examples of tes&ng: boundary values White-box tes&ng Ø Have access to code Ø Goal: execute all code Non-func&onal tes&ng Ø Performance tes&ng Ø Usability tes&ng (HCI) Ø Security tes&ng Ø Interna&onaliza&on, localiza&on Acceptance tes&ng Ø Customer tests to decide if accepts product Oct 12, 2016 Sprenkle - CSCI209 25 Levels of Tes&ng Unit Ø Tests minimal sohware component, in isola&on Ø For us, Class-level tes&ng Ø Web: Web pages (H_p Request) Integra&on Ø Tests interfaces & interac&on of classes System Ø Tests that completely integrated system meets requirements System Integra&on Ø Test system works with other systems, e.g., thirdparty systems Cost increases Oct 12, 2016 Sprenkle - CSCI209 26 13

UNIT TESTING Oct 12, 2016 Sprenkle - CSCI209 27 Why Unit Test? Verify code works as intended in isola&on Find defects early in development Ø Easier to test small pieces Ø Less cost than at later stages Oct 12, 2016 Sprenkle - CSCI209 28 14

Why Unit Test? Verify code works as intended in isola&on Find defects early in development Ø Easier to test small pieces Ø Less cost than at later stages As applica&on evolves, new code is more likely to break exis&ng code Ø Suite of (small) test cases to run aher code changes Ø Also called regression tes&ng Oct 12, 2016 Sprenkle - CSCI209 29 Some Approaches to Tes&ng Methods Typical case Ø Test typical values of input/parameters Boundary condi&ons Ø Test at boundaries of input/parameters Ø Many faults live in corners Parameter valida&on Ø Verify that parameter and object bounds are documented and checked Ø Example: pre-condi&on that parameter isn t null All black-box testing approaches Oct 12, 2016 Sprenkle - CSCI209 30 15

Another Use of Unit Tes&ng: Test-Driven Development A development style, evolved from Extreme Programming Idea: write tests first without code bias The Process: 1. Write tests that code/new func&onality should pass Like a specifica&on for the code (pre/post condi&ons) All tests will ini&ally fail 2. Write the code and verify that it passes test cases Know you re done coding when you pass all tests What assumption does this make? How do you know you re done in traditional development? Oct 12, 2016 Sprenkle - CSCI209 31 SoHware Tes&ng Issues How should you test? How ohen? Ø Code may change frequently Ø Code may depend on others code Ø A lot of code to validate How do you know that an output is correct? Ø Complex output Ø Human judgment? What caused a code failure? Need a systematic, automated, repeatable approach Oct 12, 2016 Sprenkle - CSCI209 32 16

Characteris&cs of Good Unit Tes&ng AutomaEc Thorough Repeatable Independent Why are these characteristics of good (unit) testing? Oct 12, 2016 Sprenkle - CSCI209 33 Characteris&cs of Good Unit Tes&ng AutomaEc Ø Since unit tes&ng is done frequently, don t want humans slowing the process down Ø Automate execu&ng test cases and evalua&ng results Ø Input: in test itself or from a file Thorough Ø Covers all code/func&onality/cases Repeatable Ø Reproduce results (correct, failures) Independent Ø Test cases are independent from each other Ø Easier to trace fault to code Oct 12, 2016 Sprenkle - CSCI209 34 17

JUNIT Oct 12, 2016 Sprenkle - CSCI209 35 JUnit Framework A framework for unit tes&ng Java programs Ø Supported by Eclipse and other IDEs Ø Developed by Erich Gamma and Kent Beck Func&onality Ø Write tests Validate output, automa&cally Ø Automate execu&on of test suites Ø Display pass/fail results of test execu&on Stack trace where fails Ø Organize tests, separate from code But, you sell need to come up with the tests! Erich Gamma Kent Beck Oct 12, 2016 Sprenkle - CSCI209 36 18

Aside: Framework A framework is a basic conceptual structure used to solve or address complex issues. This very broad definition has allowed the term to be used as a buzzword, especially in a software context. Oct 12, 2016 Sprenkle - CSCI209 37 Tes&ng with JUnit Typical organiza&on: Ø Set of tes&ng classes tests CDTest DVDTest MediaItemTest Ø Tes&ng classes packaged together in a tests package Separate package from code tes&ng A test class typically Ø Focuses on a specific class Ø Contains methods, each of which represents another test of the class Oct 12, 2016 Sprenkle - CSCI209 38 19

Structure of a JUnit Test 1. Set up the test case (op&onal) Ø Example: Crea&ng objects 2. Exercise the code under test 3. Verify the correctness of the results 4. Teardown (op&onal) Ø Example: reclaim created objects Oct 12, 2016 Sprenkle - CSCI209 39 Annota&ons Tes&ng in JUnit 4: uses annotaeons Provide data about a program that is not part of program itself Have no direct effect on opera&on of the code Example uses: Ø @Override: method declara&on is intended to override a method declara&on in parent class If method does not override parent class method, compiler generates error message Ø Informa&on for the compiler to suppress warnings (@SupressWarnings) Oct 12, 2016 Sprenkle - CSCI209 40 20

Tests are Methods Mark your tes&ng method with @Test Ø From org.junit.test public class CalculatorTest { } @Test public void addtest() { } Class for testing the Calculator class A method to test the add functionality Conven&on: Method name describes what you re tes&ng Oct 12, 2016 Sprenkle - CSCI209 41 Assert Methods Variety of assert methods available If fail, throw an excep&on Otherwise, test keeps execu&ng All static void Example: assertequals(object expected, Object actual) @Test public void addtest() { assertequals(4, calculator.add(3, 1)); } Oct 12, 2016 Sprenkle - CSCI209 42 21

Assert Methods To use asserts, need sta2c import: import static org.junit.assert.*; Ø static allows us to not have to use classname More examples Ø asserttrue(boolean condition) Ø assertsame(object expected, Object actual) Refer to same object Ø assertequals(double expected, double actual, double delta) Oct 12, 2016 Sprenkle - CSCI209 43 Example Uses of Assert Methods @Test public void testemptycollection() { Collection collection = new ArrayList(); asserttrue(collection.isempty()); } assertequals(double expected, double actual, double delta) @Test public void testpi() { final double ERROR_TOLERANCE =.01; assertequals(math.pi, 3.14, ERROR_TOLERANCE); } Will fail if ERROR_TOLERANCE =.001 Oct 12, 2016 Sprenkle - CSCI209 44 22

Set Up/Tear Down May want methods to set up objects for every test in the class Ø Called fixtures Ø If have mul&ple, no guarantees for order executed @Before public void preparetestdata() {... } @Before public void setupmocks() {... } @After public void cleanuptestdata() {... } Executed before each test method Oct 12, 2016 Sprenkle - CSCI209 45 Example Set Up Method private CD testcd; @Before public void setup() { testcd = new CD("CD title", 100, 1997, "CD Artist", 11); } @Before Executed before each test method Can use testcd in test methods Oct 12, 2016 Sprenkle - CSCI209 46 23

Expec&ng an Excep&on Handling Error Cases Ø Some&mes an excep&on is the expected result Add an expected attribute: @Test(expected=IndexOutOfBoundsException.class) public void testindexoutofboundsexception() { ArrayList emptylist = new ArrayList(); Object o = emptylist.get(0); } Test case passes iff exception thrown Oct 12, 2016 Sprenkle - CSCI209 47 Set Up/Tear Down For Class May want methods to set up objects for set of tests Ø Executed once before any test in class executes @BeforeClass public static void setupdatabaseconnection() {... } @AfterClass public static void teardowndatabaseconnection() {... } Oct 12, 2016 Sprenkle - CSCI209 48 24

JUNIT IN ECLIPSE Oct 12, 2016 Sprenkle - CSCI209 49 Using JUnit in Eclipse Eclipse can help make our job easier Ø Automa&cally execute tests (i.e., methods) Ø We can focus on coming up with tests Oct 12, 2016 Sprenkle - CSCI209 50 25

Using JUnit in Eclipse In Eclipse, go to your MediaItem project Create a new JUnit Test Case (under Java) Ø Use JUnit 4 Add junit to build path Ø Put in package media.tests Ø Name: DVDTest Ø Choose to test DVD class Select setup and teardown Select methods to test Run the class as a JUnit Test Case Oct 12, 2016 Sprenkle - CSCI209 51 Example Test method that gets the length of the DVD Ø Revise: Add code to setup method that creates a DVD Notes Ø Replaying all the test cases: right click on package Ø FastView vs Detached Ø Hint: CTL-Spacebar to get auto-complete op&ons Oct 12, 2016 Sprenkle - CSCI209 52 26

Unit Tes&ng & JUnit Summary Unit Tes&ng: tes&ng smallest component of your code Ø For us: class and its methods JUnit provides framework to write test cases and run test cases automa&cally Ø Easy to run again aher code changes JUnit Resources available from Course Page s Resource Link, under Java Ø API Ø Tutorials Oct 12, 2016 Sprenkle - CSCI209 53 Project 1: Tes&ng Prac&ce Given: a Car class that only has enough code to compile Your job: Create a good set of test cases that thoroughly/effec2vely test Car class Ø Find faults in my faulty version of Car class Ø Start: look at code, think about how to test, set up JUnit tests Ø Wri_en analysis of process Oct 12, 2016 Sprenkle - CSCI209 54 27

Project 1: Tes&ng Prac&ce 1 st : Email me and your teammate with the name of your team Ø I will create a repository that the pair can work on together Oct 12, 2016 Sprenkle - CSCI209 55 Looking Ahead More Tes&ng! Extra credit assignment Oct 12, 2016 Sprenkle - CSCI209 56 28