Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Modeling the Ownership of Source Code Topics

Modeling the Ownership of Source Code Topics

Appearing in the 20th IEEE International Conference
on Program Comprehension (http://icpc12.sosy-lab.org/)

Modeling the Ownership of Source Code Topics
Christopher S. Corley, Elizabeth A. Kammer, and Nicholas A. Kraft
(University of Alabama, USA)

Abstract
Exploring linguistic topics in source code is a program comprehension activity that shows promise in helping a developer to become familiar with an unfamiliar software system. Examining ownership in source code can reveal complementary information, such as who to contact with questions regarding a source code entity, but the relationship between linguistic topics and ownership is an unexplored area. In this paper we combine software repository mining and topic modeling to measure the ownership of linguistic topics in source code. We conduct an exploratory study of the relationship between linguistic topics and ownership in source code using 10 open source Java systems. We find that classes that belong to the same linguistic topic tend to have similar ownership characteristics, which suggests that conceptually related classes often share the same owner(s). We also find that similar topics tend to share the same ownership characteristics, which suggests that the same developers own related topics.

Christopher Corley

June 13, 2012
Tweet

More Decks by Christopher Corley

Other Decks in Research

Transcript

  1. C.S. Corley, E. A. Kammer, and N. A. Kraft Department

    of Computer Science, The University of Alabama ICPC’12 Modeling the Ownership of Source Code Topics
  2. top· ic /ˈtɒpɪk/ noun A matter dealt with in a

    text, discourse, or conversation; a subject
  3. class Foo: < 4, 32, 9, 0, 0 > class

    Bar: < 0, 2, 0, 0, 0 > class Yak: < 1, 0, 0, 2, 2 >
  4. class Foo: < 4, 32, 9, 0, 0 > class

    Bar: < 0, 2, 0, 0, 0 > class Yak: < 1, 0, 0, 2, 2 > topic FooBarYak: < 5, 34, 9, 2, 2 >
  5. Document Document Document Document Document Document Document Document Document Document

    Document Document Document Document Document Document Document Document Documents Subtopics Supertopics System topic
  6. ! ! ! ! ! ! ! ! ! !

    ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! 0.0 0.5 1.0
  7. ! ! ! ! ! ! ! 0.0 0.5 1.0

    Ant ArgoUML CAROL GWT iText JabRef jEdit JHotDraw Subversive Vuze
  8. Document Document Document Document Document Document Document Document Document Document

    Document Document Document Document Document Document Document Document Documents Subtopics Supertopics System topic
  9. Thanks! C.S. Corley, E. A. Kammer, and N. A. Kraft

    Department of Computer Science, The University of Alabama Images used: http://flic.kr/y/my4BeJ Modeling the Ownership of Source Code Topics History miner: http://github.com/software-eng-ua-edu/ohm
  10. address port network inet tcp socket udp proxy admin nat

    host protocol bind local socks addresses server interface exception http
  11. class Foo: < 4, 32, 9, 0, 0 > class

    Bar: < 0, 2, 0, 0, 0 > class Yak: < 1, 0, 0, 2, 2 > topic FooBarYak: < 5, 34, 9, 2, 2 >
  12. class Foo: < 4, 32, 9, 0, 0 > class

    Bar: < 0, 2, 0, 0, 0 > class Yak: < 1, 0, 0, 2, 2 > topic FooBarYak: < 5, 34, 9, 2, 2 >
  13. class Foo: < 4, 32, 9, 0, 0 > class

    Bar: < 0, 2, 0, 0, 0 > class Yak: < 1, 0, 0, 2, 2 > topic FooBarYak: < 5, 34, 9, 2, 2 > 0.956
  14. class Foo: < 4, 32, 9, 0, 0 > class

    Bar: < 0, 2, 0, 0, 0 > class Yak: < 1, 0, 0, 2, 2 > topic FooBarYak: < 5, 34, 9, 2, 2 > 0.956
  15. class Foo: < 4, 32, 9, 0, 0 > class

    Bar: < 0, 2, 0, 0, 0 > class Yak: < 1, 0, 0, 2, 2 > topic FooBarYak: < 5, 34, 9, 2, 2 > 0.956
  16. class Foo: < 4, 32, 9, 0, 0 > class

    Bar: < 0, 2, 0, 0, 0 > class Yak: < 1, 0, 0, 2, 2 > topic FooBarYak: < 5, 34, 9, 2, 2 > 0.956 0.04
  17. class Foo: < 4, 32, 9, 0, 0 > class

    Bar: < 0, 2, 0, 0, 0 > class Yak: < 1, 0, 0, 2, 2 > topic FooBarYak: < 5, 34, 9, 2, 2 > 0.956 0.04
  18. class Foo: < 4, 32, 9, 0, 0 > class

    Bar: < 0, 2, 0, 0, 0 > class Yak: < 1, 0, 0, 2, 2 > topic FooBarYak: < 5, 34, 9, 2, 2 > 0.956 0.04
  19. class Foo: < 4, 32, 9, 0, 0 > class

    Bar: < 0, 2, 0, 0, 0 > class Yak: < 1, 0, 0, 2, 2 > topic FooBarYak: < 5, 34, 9, 2, 2 > 0.956 0.0 0.04
  20. class Foo: < 4, 32, 9, 0, 0 > class

    Bar: < 0, 2, 0, 0, 0 > class Yak: < 1, 0, 0, 2, 2 > topic FooBarYak: < 5, 34, 9, 2, 2 > 0.956 0.0 0.04
  21. class Foo: < 4, 32, 9, 0, 0 > class

    Bar: < 0, 2, 0, 0, 0 > class Yak: < 1, 0, 0, 2, 2 > topic FooBarYak: < 5, 34, 9, 2, 2 > 0.956 0.0 0.04 0.332
  22. package edu.ua.eng.software.ohm; /* This is our Brick class. It will

    represent bricks * we can use to build things with. Bricks are cool. */ class Brick { private int width; private int height; public Brick(int width, int height){ // Set this brick's dimensions this.width = width; this.height = height; } public String toString(){ return "Brick is " + width + " wide and " + height + " tall!"; } }
  23. package edu.ua.eng.software.ohm; /* This is our Brick class. It will

    represent bricks * we can use to build things with. Bricks are cool. */ class Brick { private int width; private int height; public Brick(int width, int height){ // Set this brick's dimensions this.width = width; this.height = height; } public String toString(){ return "Brick is " + width + " wide and " + height + " tall!"; } }
  24. package edu.ua.eng.software.ohm; /* This is our Brick class. It will

    represent bricks * we can use to build things with. Bricks are cool. */ class Brick { private int width; private int height; public Brick(int width, int height){ // Set this brick's dimensions this.width = width; this.height = height; } public String toString(){ return "Brick is " + width + " wide and " + height + " tall!"; } }
  25. package edu.ua.eng.software.ohm; /* This is our Brick class. It will

    represent bricks * we can use to build things with. Bricks are cool. */ class Brick { private int width; private int height; public Brick(int width, int height){ // Set this brick s dimensions this width = width; this.height = height; } public String to String(){ return "Brick is " + width + " wide and " + height + " tall!"; } }
  26. package edu.ua.eng.software.ohm; /* this is our brick class. it will

    represent bricks * we can use to build things with. bricks are cool. */ class brick{ private int width; private int height; public brick(int width, int height){ // set this brick s dimensions this width = width; this height = height; } public String to string(){ return "brick is " + width + " wide and " + height + " tall!"; } }
  27. package edu.ua.eng.software.ohm; /* this is our brick class. it will

    represent bricks * we can use to build things with. bricks are cool. */ class brick{ private int width; private int height; public brick(int width, int height){ // set this brick s dimensions this width = width; this height = height; } public String to string(){ return "brick is " + width + " wide and " + height + " tall!"; } }
  28. ! ! ! ! ! ! ! ! ! !

    ! 0.0 0.5 1.0
  29. ! ! ! ! ! ! ! ! ! !

    ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! 0.0 0.5 1.0
  30. ! ! ! ! ! ! ! ! ! !

    ! ! ! 0.0 0.5 1.0
  31. ! ! ! ! ! ! ! ! ! !

    ! 0.0 0.5 1.0
  32. ! ! ! ! ! ! ! ! ! !

    ! 0.0 0.5 1.0