  Reverse engineering (RE) of user interfaces (UIs) plays an important role in
software evolution. However, the large diversity of UI technologies and the
need for UIs to be resizable make this challenging. We propose ReverseORC, a
novel RE approach able to discover diverse layout types and their dynamic
resizing behaviours independently of their implementation, and to specify them
by using OR constraints. Unlike previous RE approaches, ReverseORC infers
flexible layout constraint specifications by sampling UIs at different sizes
and analyzing the differences between them. It can create specifications that
replicate even some non-standard layout managers with complex dynamic layout
behaviours. We demonstrate that ReverseORC works across different platforms
with very different layout approaches, e.g., for GUIs as well as for the Web.
Furthermore, it can be used to detect and fix problems in legacy UIs, extend
UIs with enhanced layout behaviours, and support the creation of flexible UI
layouts.
