are the methods in your daos in the right place
play

Are the Methods in Your DAOs in the Right Place? A Preliminary - PowerPoint PPT Presentation

Are the Methods in Your DAOs in the Right Place? A Preliminary Study Maurcio Aniche Gustavo Oliva Marco Aurlio Gerosa What are DAOs ? public class InvoiceDAO { @Inject private EntityManager em; public List<Invoice> getAll() {


  1. Are the Methods in Your DAOs in the Right Place? A Preliminary Study Maurício Aniche Gustavo Oliva Marco Aurélio Gerosa

  2. What are DAOs ?

  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. 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. They can get complicated! SELECT p.name as project, c.id as commitId, a.name as artifactName, Belongs to a.path as artifactPath FROM ProjectDAO? Projects p JOIN Commits c ON c.project_id = p.id JOIN Artifacts a on a.commit_id = c.id WHERE p.repository = ’Apache’;

  6. … and more complicated! SELECT p.name as project, c.id as commitId, a.name as artifactName, a.path as artifactPath or CommitDAO? FROM Commits c JOIN Projects p ON c.project_id = p.id JOIN Artifacts a on a.commit_id = c.id WHERE p.repository = ’Apache’;

  7. … and more complicated! SELECT p.name as project, c.id as commitId, a.name as artifactName, a.path as artifactPath ArtifactDAO! FROM Commits c JOIN Projects p ON c.project_id = p.id JOIN Artifacts a on a.commit_id = c.id WHERE p.repository = ’Apache’;

  8. Where to put this query?

  9. finding the right place is very problematic! duplicated code modularity violation = bugs spend time searching

  10. RQ: wrong or in ambiguous DAOs ? How can one automatically identify methods that may have been placed in the

  11. Research Design Heuristic Implement a Tool Select Projects Qualitative Analysis

  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. 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 VRaptor unit tested web MVC Hibernate

  14. and the heuristic found out... Project # of DAO # of right # of wrong % of wrong methods methods methods methods Caelumweb 590 511 79 13.38% Codesheriff 70 57 13 18.57% Gnarus 233 200 33 14.16%

  15. the developers agreed! Project # of inspected # of % of methods agreement agreement Caelumweb 79 59 74.68% Codesheriff 13 8 61.53% Gnarus 33 16 48.48%

  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. Threats to Validity - Only three projects - Point of view of a single developer - We only validated the ones the heuristic has selected

  18. What are the next steps? - Understand the cost of this TD - Improve the heuristic

  19. Thank you! maurício aniche (aniche@ime.usp.br) gustavo oliva (goliva@ime.usp.br) marco gerosa (gerosa@ime.usp.br)

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend