159,048 research outputs found

    Can we avoid high coupling?

    Get PDF
    It is considered good software design practice to organize source code into modules and to favour within-module connections (cohesion) over between-module connections (coupling), leading to the oft-repeated maxim "low coupling/high cohesion". Prior research into network theory and its application to software systems has found evidence that many important properties in real software systems exhibit approximately scale-free structure, including coupling; researchers have claimed that such scale-free structures are ubiquitous. This implies that high coupling must be unavoidable, statistically speaking, apparently contradicting standard ideas about software structure. We present a model that leads to the simple predictions that approximately scale-free structures ought to arise both for between-module connectivity and overall connectivity, and not as the result of poor design or optimization shortcuts. These predictions are borne out by our large-scale empirical study. Hence we conclude that high coupling is not avoidable--and that this is in fact quite reasonable

    Testing Foundations of Biological Scaling Theory Using Automated Measurements of Vascular Networks

    Full text link
    Scientists have long sought to understand how vascular networks supply blood and oxygen to cells throughout the body. Recent work focuses on principles that constrain how vessel size changes through branching generations from the aorta to capillaries and uses scaling exponents to quantify these changes. Prominent scaling theories predict that combinations of these exponents explain how metabolic, growth, and other biological rates vary with body size. Nevertheless, direct measurements of individual vessel segments have been limited because existing techniques for measuring vasculature are invasive, time consuming, and technically difficult. We developed software that extracts the length, radius, and connectivity of in vivo vessels from contrast-enhanced 3D Magnetic Resonance Angiography. Using data from 20 human subjects, we calculated scaling exponents by four methods--two derived from local properties of branching junctions and two from whole-network properties. Although these methods are often used interchangeably in the literature, we do not find general agreement between these methods, particularly for vessel lengths. Measurements for length of vessels also diverge from theoretical values, but those for radius show stronger agreement. Our results demonstrate that vascular network models cannot ignore certain complexities of real vascular systems and indicate the need to discover new principles regarding vessel lengths

    Logarithmic growth dynamics in software networks

    Full text link
    In a recent paper, Krapivsky and Redner (Phys. Rev. E, 71 (2005) 036118) proposed a new growing network model with new nodes being attached to a randomly selected node, as well to all ancestors of the target node. The model leads to a sparse graph with an average degree growing logarithmically with the system size. Here we present compeling evidence for software networks being the result of a similar class of growing dynamics. The predicted pattern of network growth, as well as the stationary in- and out-degree distributions are consistent with the model. Our results confirm the view of large-scale software topology being generated through duplication-rewiring mechanisms. Implications of these findings are outlined.Comment: 7 pages, 3 figures, published in Europhysics Letters (2005

    Community structure of complex software systems: Analysis and applications

    Full text link
    Due to notable discoveries in the fast evolving field of complex networks, recent research in software engineering has also focused on representing software systems with networks. Previous work has observed that these networks follow scale-free degree distributions and reveal small-world phenomena, while we here explore another property commonly found in different complex networks, i.e. community structure. We adopt class dependency networks, where nodes represent software classes and edges represent dependencies among them, and show that these networks reveal a significant community structure, characterized by similar properties as observed in other complex networks. However, although intuitive and anticipated by different phenomena, identified communities do not exactly correspond to software packages. We empirically confirm our observations on several networks constructed from Java and various third party libraries, and propose different applications of community detection to software engineering
    • 

    corecore