I'd like to talk about how much sense it might make to apply concepts of social network analysis (SNA) to software engineering. Among other things, social network analysis considers the relative importance different people have on the flow of information between them. If we replace people with software classes, and consider inter-class method calls as flow of information, will SNA algorithms produce new and interesting SW engineering results?

Some of the questions I've been pondering include:
  1. What should the nodes and links represent to get the highest payoff? For example, nodes could be classes, methods, etc. and links could represent inheritance, function calls, compile time dependencies, ...
  2. Do social network techniques give us something useful beyond what we get from "traditional" OO metrics like coupling, fan in, fan out, ...
  3. If we calculate groups based on various networking criteria, does it tell us anything useful? (Does it pass the "so what" test?)

For a brief overview of SNA, see http://www.orgnet.com/sna.html or the Wikipedia article - http://en.wikipedia.org/wiki/Social_networks. For more, check out some of the papers in my SNA and SW Engineering bibliography.

-- kcassell - 05 Jan 2009