Review: A General classification of test types applied in any context would be Dirty and Clean tests. -Dirty test (also negative test): A test whose primary purpose is falsification; that is, tests designed to break the software. -Clean test (also positive test): A test whose primary purpose is validation; that is, tests designed to demonstrate the software's correct working. A test strategy or technique is a systematic method used to select and/or generate tests which will be included in a test suite. In general there is two main approaches or strategies: -Behavioral Testing: where strategies are based on requirements. this is the same as black-box testing. Functional testing is also under this.(e.g: execute all the dirty tests implied by the requirements. -Structural Testing: where strategies are derived from the structure of the tested object.(e.g: execute every statement at least once) same as white-box and glass-box. -Hybrid test strategies combine both strategies. each strategy is useful in cases. The book also identifies several bug types: Unit/Component bugs. Integration bugs and system bugs. Such bugs are discovered more efficiently using a technique versus another, or even depending on the hybrid being used. Back box techniques to generate test cases using Graphs (e.g: Transaction flow, finite state , data flow, timing model) these models are based on the behavior and not on code,they are used to prove that exact nodes exist and that the links between them are also exactly as expected. They are entirely based on the requirements and so they are black-box. This is similar in a sense to building models of the system to generate tests rather than code. (they could be used to test transformations too) Domain testing: is only useful when requirements are explicitly specifying boundary and/or numeric conditions and constraints on some part of the system. by carefully exploring the domain with which the SUT should interact, several effective test cases could be generated. Syntax testing: mostly useful in command driven applications(MS-DOS). (protocols) , this technique is not useful for modern compilers, since it repeats the work. It could however be applied when having SQL for instance. Finite state testing (in menu based applications ). Test Automation is important, as Manual Test has limitations (e.g: human errors, manual execution lead to in repeatable results if not done correctly). it also imposes limitations on number of tests which can be executed. which make it impossible to use for stress testing. or even to try out a scenario for reliability testing. Classification of testing tools: Coverage Tools based on structural coverage. The book mentions references to tools guides, and divide coverage tools into three categories: 1. Control-flow coverage tools typically modify the source code of the system and add statements which will be executed to observe which segments of the code were executed. this approach imposes some potential testing limitations with regards to using different environments than the production environment for example. 2. Profilers: they help in measuring object code coverage over the whole system ( which can't be done with a unit test except for on a very small level). they provides different coverage modes (deterministic and statistical) 3. Data flow and other coverage tools: measuring all uses, all definitions, all paths. and for example the call-tree cover which is highly important for integration testing. Test Execution Automation : Should have priority since any test design automation which generates a large number of tests will be useless without execution automation. the main ways to solve this (The most popular form of test driver is the capture/playback tool): 1. Writing code to test code might not be the best way. Since it introduces the dilemma of testing the test code, and testing the testing of the test code, and so on .. 2. Testing drivers: ( has references ), appropriate structural tools can be part of the package. drivers proceed in three different stages: a. Setup Phase: for Loading initial prerequisites and other hardware or software elements. it also initializes instrumentation and coverage tools. b. Execution Phase: performs re-initialization as necessary for each test. evaluates assertions and captures output. it resets instrumentation for every test. c. Postmortem Phase: performs proper test verification through a criteria. Reports failures by exceptions. Compares actual to predicted outcomes, using smart comparison methods (e.g. allows you to specify what should and shouldn't be included in the comparison and with what tolerance). Passes execution data to coverage tool. Confirms path. Checks for residues and by-products. Passes control to debug package on test failure." 3.Capture/Playback : a fundamental tool in achieving transition from manual to automation. could be used in both test design and execution automation. Test Design Automation: |