Analysis and Testing of Distributed Software Applications