Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

MTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary Study

1,059 views

Published on

My presentation at MTD2014/ICSME2014 entitled "Are The Methods In Your DAOs in the Right Place? A Preliminary Study"

Published in: Technology

MTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary Study

  1. 1. Are the Methods in Your DAOs in the Right Place? A Preliminary Study Maurício Aniche Gustavo Oliva Marco Aurélio Gerosa
  2. 2. What are DAOs ?
  3. 3. public class InvoiceDAO { @Inject private EntityManager em; public List<Invoice> getAll() { String sql = "select … from Invoice where ..."; return em.createQuery(sql).getResultList(); } public void save(Invoice inv) { em.save(inv); } }
  4. 4. They can get complicated! SELECT p.name as project, c.id as commitId, a.name as artifactName, a.path as artifactPath FROM Projects p JOIN Commits c ON c.project_id = p.id JOIN Artifacts a on a.commit_id = c.id WHERE p.repository = ’Apache’;
  5. 5. They can get complicated! SELECT p.name as project, c.id as commitId, a.name as artifactName, a.path as artifactPath FROM Projects p JOIN Commits c ON c.project_id = p.id JOIN Artifacts a on a.commit_id = c.id WHERE p.repository = ’Apache’; Belongs to ProjectDAO?
  6. 6. … and more complicated! SELECT p.name as project, c.id as commitId, a.name as artifactName, a.path as artifactPath FROM Commits c JOIN or CommitDAO? Projects p ON c.project_id = p.id JOIN Artifacts a on a.commit_id = c.id WHERE p.repository = ’Apache’;
  7. 7. … and more complicated! SELECT p.name as project, c.id as commitId, a.name as artifactName, a.path as artifactPath FROM Commits c JOIN ArtifactDAO! Projects p ON c.project_id = p.id JOIN Artifacts a on a.commit_id = c.id WHERE p.repository = ’Apache’;
  8. 8. Where to put this query?
  9. 9. finding the right place is very problematic! duplicated code modularity violation = bugs spend time searching
  10. 10. RQ: How can one automatically identify methods that may have been placed in the ? wrong or in ambiguous DAOs
  11. 11. Research Design Heuristic Implement a Tool Select Projects Qualitative Analysis
  12. 12. the heuristic basically looks to the method signature! public class InvoiceDAO { public Invoice findById(int id) { … } public ShoppingCart find(User u) { … }) public List<Invoice> getAll() { … } public void save(Invoice inv) { ...} }
  13. 13. the projects were... Project # of classes # of commits # of DAOs # of methods Gnarus 924 10451 39 233 Caelumweb 1321 12077 81 590 Codesheriff 56 339 10 70 java web MVC VRaptor Hibernate unit tested
  14. 14. and the heuristic found out... Project # of DAO methods # of right methods # of wrong methods % of wrong methods Caelumweb 590 511 79 13.38% Codesheriff 70 57 13 18.57% Gnarus 233 200 33 14.16%
  15. 15. the developers agreed! Project # of inspected methods # of agreement % of agreement Caelumweb 79 59 74.68% Codesheriff 13 8 61.53% Gnarus 33 16 48.48%
  16. 16. What have we learned? A quick and cheap approach to identify methods in wrong DAOs Filters 13% to 18% of all methods and it is correct 50% to 75% of the cases
  17. 17. Threats to Validity - Only three projects - Point of view of a single developer - We only validated the ones the heuristic has selected
  18. 18. What are the next steps? - Understand the cost of this TD - Improve the heuristic
  19. 19. Thank you! maurício aniche (aniche@ime.usp.br) gustavo oliva (goliva@ime.usp.br) marco gerosa (gerosa@ime.usp.br)

×