Pro Yearly is on sale from $80 to $50! »

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.

02498ca4cb73f57dc33c2642cd70fef2?s=128

Christopher Corley

June 13, 2012
Tweet

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. Modeling the Ownership of Source Code Topics

  3. top· ic /ˈtɒpɪk/ noun A matter dealt with in a

    text, discourse, or conversation; a subject
  4. Modeling the Ownership of Source Code Topics

  5. Feature location Aspect mining Traceability links Topics

  6. Modeling the Ownership of Source Code Topics

  7. own· er· ship   /ˈoʊnərˌʃɪp/ noun The act, state, or right

    of possessing something
  8. None
  9. None
  10. None
  11. Modeling the Ownership of Source Code Topics

  12. Expertise Defect prediction Ownership

  13. Modeling the Ownership of Source Code Topics

  14. Feature location Aspect mining Traceability links Topics

  15. Expertise Defect prediction Ownership

  16. Expertise of Topics Defect prediction of Topics Ownership of Topics

  17. Do classes that belong to the same linguistic topic have

    similar ownership characteristics?
  18. Do similar linguistic topics have similar ownership characteristics?

  19. Modeling the Ownership of Source Code Topics

  20. Topic Modeling

  21. None
  22. System topic

  23. System topic Supertopics

  24. System topic Supertopics Subtopics

  25. System topic Supertopics Subtopics Document Document Document Document Document Document

    Documents
  26. Main development branch (trunk/) Revision: HEAD Document Extraction

  27. Document Extraction Comments, Identifiers, Literals Split, Normalize, Filter

  28. Modeling the Ownership of Source Code Topics

  29. Main development branch (trunk/) Revisions: 1 to HEAD Repository Mining

  30. None
  31. Ownership Profiles

  32. class Foo: < 4, 32, 9, 0, 0 > class

    Bar: < 0, 2, 0, 0, 0 > class Yak: < 1, 0, 0, 2, 2 >
  33. 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 >
  34. Case study

  35. 10 Java systems using Subversion

  36. Do classes that belong to the same linguistic topic have

    similar ownership characteristics?
  37. Document Document Document Document Document Document Document Document Document Document

    Document Document Document Document Document Document Document Document Documents Subtopics Supertopics System topic
  38. 0.0 0.5 1.0

  39. ! ! ! ! ! ! ! ! ! !

    ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! 0.0 0.5 1.0
  40. ! ! ! ! ! ! ! 0.0 0.5 1.0

    Ant ArgoUML CAROL GWT iText JabRef jEdit JHotDraw Subversive Vuze
  41. Do classes that belong to the same linguistic topic have

    similar ownership characteristics?
  42. Do classes that belong to the same linguistic topic have

    similar ownership characteristics?
  43. Do similar linguistic topics have similar ownership characteristics?

  44. Document Document Document Document Document Document Document Document Document Document

    Document Document Document Document Document Document Document Document Documents Subtopics Supertopics System topic
  45. Do similar linguistic topics have similar ownership characteristics?

  46. Do similar linguistic topics have similar ownership characteristics?

  47. Threats

  48. No commit classification

  49. Invalid Java files, PAM parameters

  50. Java systems on SVN

  51. Where to explore next?

  52. Classes within a topic have similar ownership Similar topics have

    similar ownership Conclusion
  53. 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
  54. address port network inet tcp socket udp proxy admin nat

    host protocol bind local socks addresses server interface exception http
  55. core.networkmanager.admin.NetworkAdminASN core.networkmanager.admin.NetworkAdminNATDevice core.networkmanager.admin.NetworkAdminNetworkInterface core.networkmanager.admin.NetworkAdminProtocol core.networkmanager.admin.NetworkAdminRoutesListener core.networkmanager.admin.impl.NetworkAdminProtocolTester core.proxy.socks.impl.AESocksProxyAddressImpl core.util.NetUtils net.natpmp.NatPMPDevice

  56. 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 >
  57. 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 >
  58. 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
  59. 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
  60. 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
  61. 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
  62. 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
  63. 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
  64. 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
  65. 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
  66. 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
  67. 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!"; } }
  68. 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!"; } }
  69. 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!"; } }
  70. 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!"; } }
  71. 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!"; } }
  72. 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!"; } }
  73. brick represent bricks use build things cool height width set

    dimensions wide tall
  74. ! ! ! ! ! ! ! ! ! !

    ! 0.0 0.5 1.0
  75. ! ! ! ! ! ! 0.0 0.5 1.0

  76. 0.0 0.5 1.0

  77. ! ! ! ! ! ! ! ! ! !

    ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! 0.0 0.5 1.0
  78. ! ! ! ! 0.0 0.5 1.0

  79. ! ! ! ! ! 0.0 0.5 1.0

  80. ! ! ! ! ! ! ! 0.0 0.5 1.0

  81. ! ! ! ! ! ! ! ! ! !

    ! ! ! 0.0 0.5 1.0
  82. ! ! ! ! ! ! ! ! ! !

    ! 0.0 0.5 1.0
  83. ! ! ! ! ! ! ! ! ! !

    ! 0.0 0.5 1.0