====== 219343: Software Testing ====== ===== General Information ===== * **Instructor:** [[http://www.cpe.ku.ac.th/~jtf|Jittat Fakcharoenphol]] * **Section:** 450 (ske): F 9 -12 * **Textbooks:** * Main text * [[http://as.wiley.com/WileyCDA/WileyTitle/productCd-0470127902.html|Rex Black. Pragmatic Software Testing. 2007]] * [[http://www.testinglessons.com/|Cem Kaner, James Bach, and Bret Pettichord, Lessens Learned in Software Testing, Wiley, 2002]] * Supplementary: [[http://www.manning.com/koskela/|Lasse Koskela, Test Driven:Practical TDD and Acceptance TDD for Java Developers, Manning, 2007]] * Workload * Two group projects (one tiny (15%), one small (25%)) * Homework (10%) * One midterm (25%), one final examination (25%) ===== Announcement ===== * Please check out [[http://en.wikipedia.org/wiki/Portal:Software_Testing|Software Testing Portal at Wikipedia]]. * [[software_testing:homework1|Homework 1]] is up. * Midterm 1 is an open-book open-note exam, so you can bring any documents that you have. The topics covered are what we learn in class, so you can basically look at the list of topics from the class schedule below. But if you really want to know the list of topics, here they are: acceptance test, unit testing (designing test case), testing dependent units (mocks & stubs), risk analysis, test case design (equivalence partitioning, boundary values, pair-wise testing), and other general testing knowledge. ===== Homework ===== * [[software_testing:homework1|Homework 1]] due Friday 21th Nov. * [[software_testing:homework2|Homework 2]]. * Homework 3. Write test cases for project use cases. Details are on e-mail. ===== Schedule ===== If you want to know roughly what each topic means, click on the wikipedia link (i.e., [[wp>|]]) after the topic. * **Week 1.** Introduction. Acceptance test ([[wp>Acceptance_testing|]]) of user stories. | [[http://www.cpe.ku.ac.th/~jtf/219343/lect01_intro.pdf|slides]] * Homework: each group in Jim's Software Spec and Design class should send me the links to the requirements and specification of your project. * More information on user stories: [[http://www.mountaingoatsoftware.com/presentation/63-an-introduction-to-user-stories|intro]], [[http://www.mountaingoatsoftware.com/presentation/42-effective-user-stories-for-agile-requirements|effective user stories]] both by [[http://blog.mountaingoatsoftware.com/|Mike Cohn]]; Info at [[http://www.extremeprogramming.org/rules/functionaltests.html|xp website]]. * **Week 2.** Fundamental concepts of software testing. Unit testing ([[wp>Unit testing|]]). Test-driven development ([[wp>Test-driven_development|]]). Software specification review. | [[http://www.cpe.ku.ac.th/~jtf/219343/lect02.pdf|slides]] * Preparation: bring your laptop with some Java IDE installed (e.g., Eclipse or Netbeans); make sure that your IDE has junit integrated (it should). * Example code: [[software_testing:lect02_triangle|Triangle.java]] * **Week 3.** Software Disaster ([[http://www.cpe.ku.ac.th/~jtf/219343/03/software-disasters.pdf|slides]]). Good unit test ([[http://www.cpe.ku.ac.th/~jtf/219343/03/unit-testcases.pdf|slides]]). Testing dependent units (with [[http://code.google.com/p/mockito/|Mockito]]). Developing requirements and acceptance tests for project 1 ([[http://www.cpe.ku.ac.th/~jtf/219343/03/small-project-info.pdf|slides on project info]]). * Preparation: * Install [[http://maven.apache.org/download.html|Maven2]], install software needed to integrate Maven to your IDE: [[http://m2eclipse.codehaus.org/|m2eclipse]] (for Eclipse), [[http://mevenide.codehaus.org/|Mevenide]] (for netbeans also works with eclipse). * Install [[http://code.google.com/p/mockito/|mockito]], either manually or through Maven2. (added [[http://code.google.com/p/mockito/wiki/MavenUsers|this]] dependency to Maven pom.xml) * Codes: [[software_testing:lect03_topk|TopK.java]] * **Week 4.** Testing in software development process. Test levels and test types. ([[http://www.cpe.ku.ac.th/~jtf/219343/04/basic-concepts.pdf|slides]]) Testing principles. ([[http://www.cpe.ku.ac.th/~jtf/219343/04/principles.pdf|slides]]) Discussion on project 1. * Video on Agile Testing: [[http://video.google.com/videoplay?docid=-3054974855576235846|Agile Testing]] by Elisabeth Hendrickson * Videos on Pair Programming: [[http://www.youtube.com/watch?v=nqYqQUfPCp8|Real programmers use sign language]], [[http://www.youtube.com/watch?v=A6kdFdJp4jY|Introduction to Pair Programming]] * **Week 5.** Early feedback ([[http://www.cpe.ku.ac.th/~jtf/219343/05/early-feedback.pdf|slides]]), Risk-based testing ([[http://www.cpe.ku.ac.th/~jtf/219343/05/risk-based|slides]]), Discussion on design for testability. Pair programming practice. * Preparation for class: In this class, you'll practice writing unit tests (esp. using mocks) with your project. You'll do [[http://en.wikipedia.org/wiki/Pair_programming|pair programming]] with your teammate (see video from week 4). Therefore, you should look into the testing framework that suites your programming language and environment. * **Week 6.** Testing dependent units (cont.): mocks ([[wp>Mock object|]]) and stubs ([[wp>Method stub|]])). ([[http://www.cpe.ku.ac.th/~jtf/219343/06/dependent-units.pdf|slides]]) Code coverage ([[http://www.cpe.ku.ac.th/~jtf/219343/06/old-code-coverage.pdf|slides]]). Test design (1) ([[http://www.cpe.ku.ac.th/~jtf/219343/06/test-design-techniques-1.pdf|slides]]). * Codes: [[software_testing:lect06_coverage|EasyCoverage.java]] * **Week 7.** Dimensions of testing techniques ([[http://www.cpe.ku.ac.th/~jtf/219343/07/five-fold.pdf|slides]]). Test design (2) ([[http://www.cpe.ku.ac.th/~jtf/219343/07/test-design-technique-2.pdf|slides]]). Some practice of exploratory testing. * **Week 8.** Exploratory Testing/Rapid Testing (1) ([[http://www.satisfice.com/info_rst.shtml|Materials by James Bach]]). Discussion of project. * **Week 9.** Use case testing. Practice with project 2. * [[http://readyset.tigris.org/nonav/templates/frameset.html|ReadySET templates]] * **Week 10.** Discussion on testcase design homework. ([[http://www.cpe.ku.ac.th/~jtf/219343/10/testcase-discussion.pdf|slides]]) Test planning. ([[http://www.cpe.ku.ac.th/~jtf/219343/10/test-planning.pdf|slides]]) Performance testing (intro). ([[http://www.cpe.ku.ac.th/~jtf/219343/10/performance-testing.pdf|slides]]) * Test strategy: [[http://www.satisfice.com/presentations/strategy.pdf|slides by James Bach]] * Samples of test plans (in no particular order): [[http://www.sqatester.com/documentation/testplansmpl.htm|SQAtester.com]], [[http://it.toolbox.com/blogs/enterprise-solutions/testing-a-sample-test-plan-3283|Toolbox for IT]], [[http://members.tripod.com/~bazman/testplancontents.html|bazman]], [[http://www.softwaretestinghelp.com/test-plan-sample-softwaretesting-and-quality-assurance-templates/|software testing help]], [[http://www.qaquestions.com/test-plan-sample/|qaquestions]] * [[http://www.satisfice.com/tools/build-the-plan.pdf|Test Planning Guide by James Bach]] * Scripting language for web browsing: [[http://twill.idyll.org/|twill]] * **Week 11.** Test Execution. Defect management. Test automation. In-browser testing: [[http://seleniumhq.org/|Selenium]]. * Slides: [[http://mike.cpe.ku.ac.th/~uwe/219343/KU-Bangkok_SW-Test_12_2007.08_v1.0.pdf|Test execution]], [[http://mike.cpe.ku.ac.th/~uwe/219343/KU-Bangkok_SW-Test_13_2007.08_v2.0.pdf|Test automation]]. Both sets of slides are developed by Uwe Gühl. * **Week 12.** Non-functional testing. Case study. Retrospective. ===== Links ===== * Course websites from earlier years: [[http://mike.cpe.ku.ac.th/~uwe/219343/index.html|50]], [[http://www.cpe.ku.ac.th/~jtf/219343-49/|49]], [[http://www.cpe.ku.ac.th/~jtf/219343-48/|48]] * [[http://en.wikipedia.org/wiki/Portal:Software_Testing|Software Testing Portal at Wikipedia]]