  Design of large software systems requires rigorous application of software
engineering methods covering all phases of the software process. Debugging
during the early design phases is extremely important, because late bug-fixes
are expensive.
  In this paper, we describe an approach which facilitates debugging of UML
requirements and designs. The Unified Modeling Language (UML) is a set of
notations for object-orient design of a software system. We have developed an
algorithm which translates requirement specifications in the form of annotated
sequence diagrams into structured statecharts. This algorithm detects conflicts
between sequence diagrams and inconsistencies in the domain knowledge. After
synthesizing statecharts from sequence diagrams, these statecharts usually are
subject to manual modification and refinement. By using the ``backward''
direction of our synthesis algorithm, we are able to map modifications made to
the statechart back into the requirements (sequence diagrams) and check for
conflicts there. Fed back to the user conflicts detected by our algorithm are
the basis for deductive-based debugging of requirements and domain theory in
very early development stages. Our approach allows to generate explanations on
why there is a conflict and which parts of the specifications are affected.
