Designing the software architecture is an essential part of the development of distributed systems. Software architecture is commonly defined as the set of structures, consisting of elements, their relations, and properties of both, that are needed to reason about the system. Architects specify these structures using multiple models, grouped into various architectural views based on the specific facet of the system they address. In the context of distributed systems the typical views are module, component-and-connector and allocation.Yet, designing an architecture is not enough. It needs to be documented to be useful to developers. Documenting software architectures is a broad topic. In this dissertation we focus on architecture description languages (ADLs). Architects employ ADLs to describe architectural models in an accurate manner.The problem statement of this dissertation is threefold. First, while the related work offers a wide field of ADLs that target analysis, verification, construction, and communication, most of these ADLs operate within the context of a single view. To the best of our knowledge, there is no ADL that targets the three views associated with distributed systems. Second, designing the software architecture of a distributed system is a highly iterative process. Architects address requirements and postponed decisions as part of a stepwise design process. Using state-of-the-art ADLs, this process results in monolithic models that have been contributed to by multiple architects in terms of multiple views at different times. Third, a lack of tool support decreases the usefulness of an ADL. Every ADL needs editing tools to assist in the creation of descriptions, and analysis or code generation tools to increase their usefulness once they have been defined.As a first contribution, we present MViewADL, an ADL designed for distributed systems, that integrates the views of module, component-and-connector and allocation. The ADL supports the description of components and connectors, the specification of their runtime instances, and the allocation of instances onto distributed hosts. The second contribution is called ReVew. It is a concept and technique for the modularization of the contributions of architects to the architecture description of a distributed system. The concept introduces the generic idea of stepwise refinement of architecture description. The technique implements the concept in a generic way, to allow its use in various ADLs. The third contribution is tool support for the production of MViewADL and ReVew descriptions, and subsequent code generation to multiple middleware platforms.The validation of our work is twofold. The first part is an experience-based validation where we apply MViewADL and our tool support in a industry-grade case study on e-Media. The second part is a modularity and variability study where we show that ReVew is better able to contain the ripple effects of architectural changes, and demands less architect effort in realising eight variability scenarios, when compared to existing techniques for description modularization and reuse.