1. A method for creating a UML (Unified Modeling Language) protocol state machine for at least one of an object-oriented programming class and an interface of a software, the method comprising: instrumenting the software and processing the instrumented software to generate a call log for the software; using the call log, (i) creating a call graph for the at least one of an object-oriented programming class and an interface of the software, and (ii) identifying a plurality of variable values of the class or interface, the call graph comprising an identification of call patterns for a plurality of functions of the class or interface; and generating a probable UML protocol state machine for the class or interface based on the identified call patterns, the generated probable UML protocol state machine reflecting protocol and describing external behaviors of the class or interface with regard to other classes or interfaces in the software, wherein the generated probable UML protocol state machine for the class or interface of the software as generated by the created call graph indicates any combination of: pre-conditions for function calls of the functions in the plurality of functions of the class or interface, post-conditions for function calls of the functions in the plurality of functions of the class or interface, and references associated with said functions, such that the UML protocol state machine sufficiently provides details of the class or interface to enhance the development of the software.