Detecting and Reporting Object-Relational MappingProblems: An Industrial Report

D0270498e20bd573441f1f48f2e425cf?s=47 Gustavo Pinto
September 19, 2019

Detecting and Reporting Object-Relational MappingProblems: An Industrial Report

D0270498e20bd573441f1f48f2e425cf?s=128

Gustavo Pinto

September 19, 2019
Tweet

Transcript

  1. Detecting and Reporting Object-Relational Mapping Problems: An Industrial Report Marcos

    Nazário @gustavopinto Gustavo Pinto Rodrigo Bonifácio Eduardo Guerra
  2. @gustavopinto ORM Application Code Database

  3. @gustavopinto @Entity public class Color { private String code; private

    String name; private Boolean enable; }
  4. @gustavopinto @Entity @Table(schema = "public", name = "COLOR") public class

    Color { private String code; private String name; private Boolean enable; }
  5. @gustavopinto @Entity @Table(schema = "public", name = "COLOR") public class

    Color { @Column private String code; @Column private String name; @Column private Boolean enable; }
  6. @gustavopinto @Entity @Table(schema = "public", name = "COLOR") public class

    Color { @Column(name = "CODE", nullable = false) private String code; @Column(name = "NAME", length = 80, nullable = false) private String name; @Column(name = "ENABLE", nullable = false) private Boolean enable; }
  7. @gustavopinto @Entity @Table(schema = "public", name = "COLOR") public class

    Color { @Column(name = "CODE", nullable = false) private String code; @Column(name = "NAME", length = 80, nullable = false) private String name; @Column(name = "ENABLE", nullable = false) private Boolean enable; }
  8. @gustavopinto @Entity @Table(schema = "public", name = "COLOR") public class

    Color { @Column(name = "CODE", nullable = false) private String code; @Column(name = "NAME", length = 80, nullable = false) private String name; @Column(name = "ENABLE", nullable = false) private Boolean enable; }
  9. @gustavopinto @Entity @Table(schema = "public", name = "COLOR") public class

    Color { @Column(name = "CODE", nullable = false) private String code; @Column(name = "NAME", length = 80, nullable = false) private String name; @Column(name = "ENABLE", nullable = false) private Boolean enable; }
  10. @gustavopinto @Entity @Table(schema = "public", name = "COLOR") public class

    Color { @Id @Column(name = "CODE", nullable = false) private String code; @Column(name = "NAME", length = 80, nullable = false) private String name; @Column(name = "ENABLE", nullable = false) private Boolean enable; }
  11. @gustavopinto @Entity @Table(schema = "public", name = "COLOR") public class

    Color { @Id @Column(name = "CODE", nullable = false) private String code; @Column(name = "NAME", length = 80, nullable = false) private String name; @Column(name = "ENABLE", nullable = false) private Boolean enable; }
  12. @gustavopinto @Entity @Table(schema = "public", name = "COLOR") public class

    Color { @Id @Column(name = "CODE", nullable = false) private String code; @Column(name = "NAME", length = 80, nullable = false) private String name; @Column(name = "ENABLE", nullable = false) private Boolean enable; }
  13. @gustavopinto @Entity @Table(schema = "public", name = "COLOR") public class

    Color implements Serializable { @Id @Column(name = "CODE", nullable = false) private String code; @Column(name = "NAME", length = 80, nullable = false) private String name; @Column(name = "ENABLE", nullable = false) private Boolean enable; }
  14. @gustavopinto We catalogued 12 ORM-related problems

  15. @gustavopinto We implemented this catalog in a static analysis tool

  16. @gustavopinto We implemented this catalog in a static analysis tool

    Finds the problems Suggests the fix
  17. @gustavopinto We implemented this catalog in a static analysis tool

    We are using this tool for over 5 years now Finds the problems Suggests the fix
  18. @gustavopinto Could others take advantage of our tool?

  19. @gustavopinto

  20. @gustavopinto We conducted a developer experience (DX) study with 13

    developers
  21. @gustavopinto We conducted a developer experience (DX) study with 13

    developers 3 students, 10 from industry 6 with 7+ years with ORM experience 2 with no previous ORM experience
  22. @gustavopinto

  23. @gustavopinto 6 ORM tasks

  24. @gustavopinto 6 ORM tasks

  25. @gustavopinto 6 ORM tasks

  26. @gustavopinto All participants completed the experiment

  27. @gustavopinto eases ORM modeling Every day I do object-relational mapping,

    and this tool could help me to remember what is missing “ ”
  28. @gustavopinto eases ORM modeling the tool is precise forces best

    practices
  29. @gustavopinto Little docs I found it quite difficult to find

    help in the documentation. There is nothing on the web “ ”
  30. @gustavopinto Little docs Custom annotations were not intuitive The tool

    poses many constraints
  31. None
  32. None
  33. None
  34. None
  35. None
  36. None