International Journal of Computer Applications (0975 8887) Volume 42No.8, March 2012 16 Testing Object-Oriented Software Systems: A Survey of Steps and Challenges Clarence J M Tauro Christ University Bangalore, India N Ganesan Director (MCA) RICM, Bangalore Anupam Ghosh Christ University Bangalore, India Nirupam Ghosh Christ University Bangalore, India ABSTRACT Object-Oriented programming is a combination of different levels consists of abstraction, class level cluster level and system level. In this article, we are going to discuss about the different testing aspects for object oriented programs. Idea is to test different testing aspects of Object-oriented Software Systems. The challenge is to cover testing with minimum effort to get maximum output. Keywords Object-oriented software system, Unit-testing, Model based testing, integration testing, system testing, test automation. 1. INRODUCTION Previously computer program was nothing but just a list of commands called functions where all data getting stored in one single location which creates problem in testing the program properly. Object-oriented testing and traditional testing are similar in few aspects. Like we use unit testing, we perform integration testing to make sure all subsystems work correctly, we perform system testing to make sure software meets the specified requirements. Object-oriented programming language has features like inheritance, polymorphism which is completely new and brought technical challenges for tester while testing. This paper will tell how to test encapsulation, polymorphism testing along with Unit-testing, Model based testing, integration testing. 2. NEED OF TESTING Testing is a merry-go-round process which includes a good amount of time along with cost, for all. But the reality is quite opposite, without testing it is not possible to deliver projects successfully, as during software development, developers make many mistakes throughout the different phase of development and testing helps in correcting those mistakes. In other way, testing encompasses all phases of development-in every phase; the work products of that phase are tested. So in every phase of development there is testing activity. For example, in the requirement engineering stage, the SRS (System Requirement Specification ) document is written and tested to check whether it captures all the user requirements or not. The same is applicable for object oriented testing as object-oriented programming increases software reusability, extensibility, interoperability, and reliability and at the same time it is necessary to realize these benefits by uncovering as many programming errors as possible. 3. WHAT TESTING IS AND ISN’T Testing comprises the efforts to find defects. Testing does not include efforts associated with tracking down bugs and fixing them. In other words, testing does not include the debugging or repair of bugs. Testing is a procedure of finding faults, defects in the software. While debugging is to rectify the faults, defects find during testing in the software. 4. PROBLEM AND CHALLENGES The object-oriented paradigm has set of testing and maintenance problems. The inheritance, aggregation and association relationships among the object classes make an OO program difficult to test. The encapsulation and information hiding features result in chains of member function invocations that often involve objects of more than one class. The problems for software testing are: 1. It is difficult to understand the code and prepare the test cases. 2. It is not cost-effective to construct test stubs for member functions since most of them consist of one to two statements. Rather, one would just use them provided that they have been tested. 3. It is necessary to determine and limit the required regression tests when a function or a class is changed. 4. It requires a fresh look into the traditional coverage criteria and to extend them to include not just coverage of individual functions, but also invocation sequence, object stated and state sequences, and data definition and use path across functions and objects.[18] 5. OO TESTING The fundamental unit of object-oriented program is class testing. The code for a class can be tested effectively by review or by executing test cases. [1] For each class, decision is taken whether to test it independently as a unit or in some way as a component of a larger part of the system. Initially we want to make sure that the requirements set forth in the specification are meeting exactly by the code for a class. The amount of attention given to testing a class to make sure that it does nothing more than what it is specified for depends on the risk associated with the class supplying extra behaviors. Any incomplete coverage of code after a wide range of test cases have been run against the class could be an indicator