159,048 research outputs found
Can we avoid high coupling?
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
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
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
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
- âŠ