{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2024,9,16]],"date-time":"2024-09-16T11:14:36Z","timestamp":1726485276910},"reference-count":45,"publisher":"Association for Computing Machinery (ACM)","issue":"12","content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["SIGPLAN Not."],"published-print":{"date-parts":[[2004,12]]},"abstract":"\n Many techniques have been developed over the years to automatically find bugs in software. Often, these techniques rely on formal methods and sophisticated program analysis. While these techniques are valuable, they can be difficult to apply, and they aren't always effective in finding real bugs.\n Bug patterns<\/jats:italic>\n are code idioms that are often errors. We have implemented automatic detectors for a variety of bug patterns found in Java programs. In this paper, we describe how we have used bug pattern detectors to find serious bugs in several widely used Java applications and libraries. We have found that the effort required to implement a bug pattern detector tends to be low, and that even extremely simple detectors find bugs in real applications.From our experience applying bug pattern detectors to real programs, we have drawn several interesting conclusions. First, we have found that even well tested code written by experts contains a surprising number of obvious bugs. Second, Java (and similar languages) have many language features and APIs which are prone to misuse. Finally, that simple automatic techniques can be effective at countering the impact of both ordinary mistakes and misunderstood language features.\n <\/jats:p>","DOI":"10.1145\/1052883.1052895","type":"journal-article","created":{"date-parts":[[2005,11,14]],"date-time":"2005-11-14T18:08:27Z","timestamp":1131991707000},"page":"92-106","update-policy":"http:\/\/dx.doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":341,"title":["Finding bugs is easy"],"prefix":"10.1145","volume":"39","author":[{"given":"David","family":"Hovemeyer","sequence":"first","affiliation":[{"name":"University of Maryland, College Park, Maryland"}]},{"given":"William","family":"Pugh","sequence":"additional","affiliation":[{"name":"University of Maryland, College Park, Maryland"}]}],"member":"320","published-online":{"date-parts":[[2004,12]]},"reference":[{"key":"e_1_2_1_1_1","volume-title":"Bug Patterns In Java","author":"Allen E.","year":"2002","unstructured":"E. Allen . Bug Patterns In Java . APress , 2002 . E. Allen. Bug Patterns In Java. APress, 2002."},{"key":"e_1_2_1_2_1","volume-title":"http:\/\/ant.apache.org\/","author":"Ant Apache","year":"2004","unstructured":"Apache Ant , http:\/\/ant.apache.org\/ , 2004 . Apache Ant, http:\/\/ant.apache.org\/, 2004."},{"key":"e_1_2_1_3_1","doi-asserted-by":"publisher","DOI":"10.5555\/872024.872575"},{"key":"e_1_2_1_4_1","doi-asserted-by":"publisher","DOI":"10.5555\/829514.830533"},{"key":"e_1_2_1_5_1","unstructured":"G. Back and D. Engler. MJ: A system for constructing bug-finding analyses for Java. http:\/\/www.stanford.edu\/~gback\/gback-icse2004.pdf 2003. G. Back and D. Engler. MJ: A system for constructing bug-finding analyses for Java. http:\/\/www.stanford.edu\/~gback\/gback-icse2004.pdf 2003."},{"key":"e_1_2_1_6_1","doi-asserted-by":"publisher","DOI":"10.1145\/503272.503274"},{"key":"e_1_2_1_7_1","volume-title":"http:\/\/jakarta.apache.org\/bcel\/","author":"Code Engineering Library The Byte","year":"2004","unstructured":"The Byte Code Engineering Library , http:\/\/jakarta.apache.org\/bcel\/ , 2004 . The Byte Code Engineering Library, http:\/\/jakarta.apache.org\/bcel\/, 2004."},{"key":"e_1_2_1_8_1","volume-title":"Effective Java Programming Language Guide","author":"Bloch J.","year":"2002","unstructured":"J. Bloch . Effective Java Programming Language Guide . Addison-Wesley , 2002 . J. Bloch. Effective Java Programming Language Guide. Addison-Wesley, 2002."},{"key":"e_1_2_1_9_1","doi-asserted-by":"publisher","DOI":"10.1002\/(SICI)1097-024X(200006)30:7%3C775::AID-SPE309%3E3.0.CO;2-H"},{"key":"e_1_2_1_10_1","volume-title":"http:\/\/checkstyle.sourceforge.net","year":"2004","unstructured":"CheckStyle , http:\/\/checkstyle.sourceforge.net , 2004 . CheckStyle, http:\/\/checkstyle.sourceforge.net, 2004."},{"key":"e_1_2_1_11_1","doi-asserted-by":"publisher","DOI":"10.1145\/512529.512560"},{"key":"e_1_2_1_12_1","doi-asserted-by":"publisher","DOI":"10.1145\/502034.502042"},{"key":"e_1_2_1_13_1","first-page":"229","volume-title":"USENIX Conference on Domain Specific Languages","author":"Crew R. F.","year":"1997","unstructured":"R. F. Crew . ASTLOG : A language for examining abstract syntax trees . In USENIX Conference on Domain Specific Languages , pages 229 -- 241 , Santa Barbara , 1997 . R. F. Crew. ASTLOG: A language for examining abstract syntax trees. In USENIX Conference on Domain Specific Languages, pages 229--241, Santa Barbara, 1997."},{"key":"e_1_2_1_14_1","volume-title":"Java Pitfalls","author":"Daconta M. C.","year":"2000","unstructured":"M. C. Daconta , E. Monk , J. P. Keller , and K. Bohnenberger . Java Pitfalls . John Wiley & Sons, Inc. , 2000 . M. C. Daconta, E. Monk, J. P. Keller, and K. Bohnenberger. Java Pitfalls. John Wiley & Sons, Inc., 2000."},{"key":"e_1_2_1_15_1","doi-asserted-by":"publisher","DOI":"10.1145\/512529.512538"},{"key":"e_1_2_1_16_1","volume-title":"http:\/\/www.drjava.org\/","year":"2004","unstructured":"DrJava , http:\/\/www.drjava.org\/ , 2004 . DrJava, http:\/\/www.drjava.org\/, 2004."},{"key":"e_1_2_1_18_1","volume-title":"http:\/\/www.eclipse.org\/","author":"Eclipse","year":"2004","unstructured":"Eclipse , http:\/\/www.eclipse.org\/ , 2004 . Eclipse, http:\/\/www.eclipse.org\/, 2004."},{"key":"e_1_2_1_19_1","doi-asserted-by":"publisher","DOI":"10.1145\/945445.945468"},{"key":"e_1_2_1_20_1","doi-asserted-by":"publisher","DOI":"10.5555\/1251229.1251230"},{"key":"e_1_2_1_21_1","doi-asserted-by":"publisher","DOI":"10.1109\/32.908957"},{"key":"e_1_2_1_22_1","doi-asserted-by":"publisher","DOI":"10.1145\/231379.231389"},{"key":"e_1_2_1_23_1","doi-asserted-by":"publisher","DOI":"10.1145\/193173.195297"},{"key":"e_1_2_1_24_1","doi-asserted-by":"publisher","DOI":"10.1145\/512529.512558"},{"key":"e_1_2_1_25_1","doi-asserted-by":"publisher","DOI":"10.1145\/301618.301665"},{"key":"e_1_2_1_26_1","doi-asserted-by":"publisher","DOI":"10.1145\/512529.512531"},{"key":"e_1_2_1_27_1","volume-title":"http:\/\/www.gnu.org\/software\/classpath\/","author":"Classpath GNU","year":"2004","unstructured":"GNU Classpath , http:\/\/www.gnu.org\/software\/classpath\/ , 2004 . GNU Classpath, http:\/\/www.gnu.org\/software\/classpath\/, 2004."},{"key":"e_1_2_1_28_1","doi-asserted-by":"publisher","DOI":"10.1145\/512529.512539"},{"key":"e_1_2_1_29_1","doi-asserted-by":"publisher","DOI":"10.1145\/581339.581377"},{"key":"e_1_2_1_30_1","volume-title":"Proceedings of the PODC Workshop on Concurrency and Synchronization in Java Programs, St. John's","author":"Hovemeyer D.","year":"2004","unstructured":"D. Hovemeyer and W. Pugh . Finding concurrency bugs in Java . In Proceedings of the PODC Workshop on Concurrency and Synchronization in Java Programs, St. John's , Newfoundland, Canada , July 2004 . D. Hovemeyer and W. Pugh. Finding concurrency bugs in Java. In Proceedings of the PODC Workshop on Concurrency and Synchronization in Java Programs, St. John's, Newfoundland, Canada, July 2004."},{"key":"e_1_2_1_31_1","unstructured":"Java(tm) 2 Platform Standard Edition http:\/\/java.sun.com\/j2se\/ 2004. Java(tm) 2 Platform Standard Edition http:\/\/java.sun.com\/j2se\/ 2004."},{"key":"e_1_2_1_32_1","unstructured":"Collected java practices. http:\/\/www.javapractices.com. Collected java practices. http:\/\/www.javapractices.com."},{"key":"e_1_2_1_33_1","volume-title":"http:\/\/www.jboss.org\/","year":"2004","unstructured":"JBoss , http:\/\/www.jboss.org\/ , 2004 . JBoss, http:\/\/www.jboss.org\/, 2004."},{"key":"e_1_2_1_34_1","volume-title":"http:\/\/www.jedit.org\/","year":"2004","unstructured":"jEdit , http:\/\/www.jedit.org\/ , 2004 . jEdit, http:\/\/www.jedit.org\/, 2004."},{"key":"e_1_2_1_35_1","volume-title":"UNIX Programmer's Supplementary Documents","author":"Johnson S.","year":"1986","unstructured":"S. Johnson , Lint , a C program checker . In UNIX Programmer's Supplementary Documents Volume 1 ( PS 1), April 1986 . S. Johnson, Lint, a C program checker. In UNIX Programmer's Supplementary Documents Volume 1 (PS1), April 1986."},{"key":"e_1_2_1_36_1","doi-asserted-by":"publisher","DOI":"10.5555\/1760267.1760289"},{"key":"e_1_2_1_37_1","doi-asserted-by":"publisher","DOI":"10.1145\/996841.996868"},{"key":"e_1_2_1_38_1","volume-title":"http:\/\/pmd.sourceforge.net","author":"PMD","year":"2004","unstructured":"PMD , http:\/\/pmd.sourceforge.net , 2004 . PMD, http:\/\/pmd.sourceforge.net, 2004."},{"key":"e_1_2_1_39_1","unstructured":"W. Pugh. The double checked locking is broken declaration. http:\/\/www.cs.umd.edu\/users\/pugh\/java\/memory-Model\/DoubleCheckedLocking.html July 2000. W. Pugh. The double checked locking is broken declaration. http:\/\/www.cs.umd.edu\/users\/pugh\/java\/memory-Model\/DoubleCheckedLocking.html July 2000."},{"key":"e_1_2_1_40_1","doi-asserted-by":"publisher","DOI":"10.1109\/ISSRE.2004.1"},{"key":"e_1_2_1_41_1","doi-asserted-by":"publisher","DOI":"10.1145\/265924.265927"},{"key":"e_1_2_1_42_1","volume-title":"3rd Annual Pattern Languages of Program Design Conference","author":"Schmidt D.","year":"1996","unstructured":"D. Schmidt and T. Harrison . Double-checked locking: An Optimization pattern for efficiently initializing and accessing thread-safe objects . In 3rd Annual Pattern Languages of Program Design Conference , 1996 . D. Schmidt and T. Harrison. Double-checked locking: An Optimization pattern for efficiently initializing and accessing thread-safe objects. In 3rd Annual Pattern Languages of Program Design Conference, 1996."},{"key":"e_1_2_1_43_1","volume-title":"Proceedings of the 10th Usenix Security Symposium, Washington, D.C.","author":"Shankar U.","year":"2001","unstructured":"U. Shankar , K. Talwar , J. S. Foster , and D. Wagner . Detecting format string vulnerabilities with type qualifiers . In Proceedings of the 10th Usenix Security Symposium, Washington, D.C. , Aug. 2001 . U. Shankar, K. Talwar, J. S. Foster, and D. Wagner. Detecting format string vulnerabilities with type qualifiers. In Proceedings of the 10th Usenix Security Symposium, Washington, D.C., Aug. 2001."},{"key":"e_1_2_1_44_1","first-page":"97","volume-title":"Proceedings of the USENIX Annual Technical Conference","author":"Sterling N.","year":"1993","unstructured":"N. Sterling . WARLOCK --- a static data race analysis tool . In Proceedings of the USENIX Annual Technical Conference , pages 97 -- 106 , Winter 1993 . N. Sterling. WARLOCK --- a static data race analysis tool. In Proceedings of the USENIX Annual Technical Conference, pages 97--106, Winter 1993."},{"key":"e_1_2_1_45_1","unstructured":"B. Tate. Bitter Java. Manning Publications 2002. B. Tate. Bitter Java. Manning Publications 2002."},{"key":"e_1_2_1_46_1","doi-asserted-by":"publisher","DOI":"10.1145\/587051.587060"}],"container-title":["ACM SIGPLAN Notices"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/1052883.1052895","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2022,12,28]],"date-time":"2022-12-28T14:16:27Z","timestamp":1672236987000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/1052883.1052895"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2004,12]]},"references-count":45,"journal-issue":{"issue":"12","published-print":{"date-parts":[[2004,12]]}},"alternative-id":["10.1145\/1052883.1052895"],"URL":"https:\/\/doi.org\/10.1145\/1052883.1052895","relation":{},"ISSN":["0362-1340","1558-1160"],"issn-type":[{"value":"0362-1340","type":"print"},{"value":"1558-1160","type":"electronic"}],"subject":[],"published":{"date-parts":[[2004,12]]},"assertion":[{"value":"2004-12-01","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}