Page 273 - DCAP305_PRINCIPLES_OF_SOFTWARE_ENGINEERING
P. 273

Unit 13: Testing



            13.5 White Box Testing                                                                Notes

            Contrary to black box testing, software is viewed as a white box, or glass box in white box
            testing, as the structure and flow of the software under test are noticeable to the tester. Testing
            plans are made according to the details of the software implementation, such as programming
            language, logic, and styles. Test cases are derived from the program structure. White box testing
            is also called glass box testing, logic driven testing or design based testing. There are many
            techniques available in white box testing, because the problem of intractability is eased by specific
            knowledge and attention on the structure of the software under test. The intention of exhausting
            some aspect of the software is still strong in white box testing, and some degree of exhaustion
            can be achieved, such as executing each line of code at least once (statement coverage), traverse
            every branch statements (branch coverage), or cover all the possible combinations of true and
            false condition predicates (Multiple condition coverage).
            Control  flow  testing,  loop  testing,  and  data  flow  testing;  all  maps  the  corresponding  flow
            structure of the software into a directed graph. Test cases are carefully selected based on the
            criterion  that  all  the  nodes  or  paths  are  covered  or  traversed  at  least  once.  By  doing  so  we
            may discover unnecessary “dead” code that is of no use, or never get executed at all, which
            cannot be discovered by functional testing. In mutation testing, the original program code is
            perturbed and many mutated programs are created, each contains one fault. Each faulty version
            of the program is called a mutant. Test data are selected based on the effectiveness of failing
            the mutants. The more mutants a test case can kill, the better the test case is considered. The
            problem with mutation testing is that it is too computationally expensive to use. The boundary
            between black box approach and white box approach is not clear cut. Many testing strategies
            mentioned above, may not be safely classified into black box testing or white box testing. It
            is  also  true  for  transaction  flow  testing,  syntax  testing,  finite  state  testing,  and  many  other
            testing  strategies not discussed in this text. One reason is that  all the above techniques will
            need some knowledge of the specification of the software under test. Another reason is that
            the idea of specification itself is broad it may contain any requirement including the structure,
            programming language, and programming style as part of the specification content. We may
            be reluctant to consider random testing as a testing technique. The test case selection is simple
            and straightforward, they are randomly chosen. Study in indicates that random testing is more
            cost effective for many programs. Some very subtle errors can be discovered with low cost.
            And it is also not inferior in coverage than other carefully designed testing techniques. One
            can also obtain reliability estimate using random testing results based on operational profiles.
            Effectively combining random testing with other testing techniques may yield more powerful
            and cost effective testing strategies.
            13.5.1 Basis Path Testing

            Each independent path in the code is taken for testing:
            Data Flow Testing (DFT)

            In this approach we track the specific variables through each possible calculation, thus defining
            the set of intermediate paths through the code. DFT tends to reflect dependencies but it is mainly
            through sequences of data manipulation. In short each data variable is tracked and its use is
            verified. This approach tends to uncover bugs like variables used but not initialize, or declared
            but not used, and so on.
            Path Testing
            Path testing is where all possible paths through the code are defined and covered. Its a time
            consuming task.




                                             LOVELY PROFESSIONAL UNIVERSITY                                   267
   268   269   270   271   272   273   274   275   276   277   278