{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,2,21]],"date-time":"2025-02-21T23:08:26Z","timestamp":1740179306137,"version":"3.37.3"},"reference-count":65,"publisher":"Association for Computing Machinery (ACM)","issue":"POPL","license":[{"start":{"date-parts":[[2019,12,20]],"date-time":"2019-12-20T00:00:00Z","timestamp":1576800000000},"content-version":"vor","delay-in-days":0,"URL":"http:\/\/www.acm.org\/publications\/policies\/copyright_policy#Background"}],"funder":[{"DOI":"10.13039\/100000001","name":"National Science Foundation","doi-asserted-by":"publisher","award":["CNS-1823244"],"id":[{"id":"10.13039\/100000001","id-type":"DOI","asserted-by":"publisher"}]}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2020,1]]},"abstract":"Contract systems, especially of the higher-order flavor, go hand in hand with blame. The pragmatic purpose of blame is to narrow down the code that a programmer needs to examine to locate the bug when the contract system discovers a contract violation. Or so the literature on higher-order contracts claims.<\/jats:p>\n In reality, however, there is neither empirical nor theoretical evidence that connects blame with the location of bugs. The reputation of blame as a tool for weeding out bugs rests on anecdotes about how programmers use contracts to shift blame and their attention from one part of a program to another until they discover the source of the problem.<\/jats:p>\n This paper aims to fill the apparent gap and shed light to the relation between blame and bugs. To that end, we introduce an empirical methodology for investigating whether, for a given contract system, it is possible to translate blame information to the location of bugs in a systematic manner. Our methodology is inspired by how programmers attempt to increase the precision of the contracts of a blamed component in order to shift blame to another component, which becomes the next candidate for containing the bug. In particular, we construct a framework that enables us to ask for a contract system whether (i) the process of blame shifting causes blame to eventually settle to the component that contains the bug; and (ii) every shift moves blame ``closer'' to the faulty component.<\/jats:p>\n Our methodology offers a rigorous means for evaluating the pragmatics of contract systems, and we employ it to analyze Racket's contract system. Along the way, we uncover subtle points about the pragmatic meaning of contracts and blame in Racket: (i) the expressiveness of Racket's off-the-shelf contract language is not sufficient to narrow down the blamed portion of the code to the faulty component in all cases; and (ii) contracts that trigger state changes (even unexpectedly, perhaps in the runtime system's data structures or caches) interfere with program evaluation in subtle ways and thus blame shifting can lead programmers on a detour when searching for a bug. These points highlight how evaluations such as ours suggest fixes to language design.<\/jats:p>","DOI":"10.1145\/3371133","type":"journal-article","created":{"date-parts":[[2019,12,20]],"date-time":"2019-12-20T19:45:25Z","timestamp":1576871125000},"page":"1-29","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":3,"title":["Does blame shifting work?"],"prefix":"10.1145","volume":"4","author":[{"given":"Lukas","family":"Lazarek","sequence":"first","affiliation":[{"name":"Northwestern University, USA"}]},{"given":"Alexis","family":"King","sequence":"additional","affiliation":[{"name":"Northwestern University, USA"}]},{"given":"Samanvitha","family":"Sundar","sequence":"additional","affiliation":[{"name":"Northwestern University, USA"}]},{"given":"Robert Bruce","family":"Findler","sequence":"additional","affiliation":[{"name":"Northwestern University, USA"}]},{"given":"Christos","family":"Dimoulas","sequence":"additional","affiliation":[{"name":"Northwestern University, USA"}]}],"member":"320","published-online":{"date-parts":[[2019,12,20]]},"reference":[{"key":"e_1_2_2_1_1","doi-asserted-by":"publisher","DOI":"10.5555\/2595044.2595050"},{"key":"e_1_2_2_3_1","doi-asserted-by":"publisher","DOI":"10.1109\/ISSRE.1995.497652"},{"key":"e_1_2_2_4_1","doi-asserted-by":"publisher","DOI":"10.1145\/1570506.1570507"},{"key":"e_1_2_2_5_1","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796806005971"},{"key":"e_1_2_2_6_1","doi-asserted-by":"publisher","DOI":"10.1109\/CSF.2011.26"},{"volume-title":"International Symposium on Database Programming Languages","author":"Cheney James","key":"e_1_2_2_7_1","unstructured":"James Cheney , Amal Ahmed , and Umut A. Acar . 2007. Provenance as dependency analysis . In International Symposium on Database Programming Languages . Springer, New York, NY, 138\u2013152. James Cheney, Amal Ahmed, and Umut A. Acar. 2007. Provenance as dependency analysis. In International Symposium on Database Programming Languages. Springer, New York, NY, 138\u2013152."},{"key":"e_1_2_2_8_1","volume-title":"Symposium on Implementation and Application of Functional Languages","author":"Chitil Olaf","year":"2003","unstructured":"Olaf Chitil , Dan McNeill , and Colin Runciman . 2003 . Lazy assertions . In Symposium on Implementation and Application of Functional Languages . Springer, New York, NY, 1\u201319. Olaf Chitil, Dan McNeill, and Colin Runciman. 2003. Lazy assertions. In Symposium on Implementation and Application of Functional Languages. Springer, New York, NY, 1\u201319."},{"volume-title":"d.]. Mutators Overview","author":"Coles Henry","key":"e_1_2_2_9_1","unstructured":"Henry Coles . [n. d.]. Mutators Overview . http:\/\/pitest.org\/quickstart\/mutators\/ . Accessed: 2019-07-02. Henry Coles. [n. d.]. Mutators Overview. http:\/\/pitest.org\/quickstart\/mutators\/ . Accessed: 2019-07-02."},{"key":"e_1_2_2_10_1","volume-title":"Contract Monitoring and Call-by-name Evaluation. In Nordic Workshop on Programming Theory. Tallinn, Estonia.","author":"Degen Markus","year":"2008","unstructured":"Markus Degen , Peter Thiemann , and Stefan Wehr . 2008 . Contract Monitoring and Call-by-name Evaluation. In Nordic Workshop on Programming Theory. Tallinn, Estonia. Markus Degen, Peter Thiemann, and Stefan Wehr. 2008. Contract Monitoring and Call-by-name Evaluation. In Nordic Workshop on Programming Theory. Tallinn, Estonia."},{"volume-title":"True lies: Lazy contracts for lazy languages (faithfulness is better than laziness). In 4. Arbeitstagung Programmiersprachen","author":"Degen Markus","key":"e_1_2_2_11_1","unstructured":"Markus Degen , Peter Thiemann , and Stefan Wehr . 2009. True lies: Lazy contracts for lazy languages (faithfulness is better than laziness). In 4. Arbeitstagung Programmiersprachen . L\u00fcbeck, Germany . Markus Degen, Peter Thiemann, and Stefan Wehr. 2009. True lies: Lazy contracts for lazy languages (faithfulness is better than laziness). In 4. Arbeitstagung Programmiersprachen. L\u00fcbeck, Germany."},{"key":"e_1_2_2_12_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.jlap.2010.07.006"},{"key":"e_1_2_2_13_1","doi-asserted-by":"publisher","DOI":"10.1145\/2103746.2103766"},{"volume-title":"Proceedings of the Second Workshop on Software Testing, Verification, and Analysis. IEEE","author":"DeMillo Richard A.","key":"e_1_2_2_14_1","unstructured":"Richard A. DeMillo , Dana S. Guindi , Kim King , Mike M. McCracken , and Jefferson A. Offutt . 1988. An extended overview of the Mothra software testing environment . In Proceedings of the Second Workshop on Software Testing, Verification, and Analysis. IEEE , New York, NY, 142\u2013151. Richard A. DeMillo, Dana S. Guindi, Kim King, Mike M. McCracken, and Jefferson A. Offutt. 1988. An extended overview of the Mothra software testing environment. In Proceedings of the Second Workshop on Software Testing, Verification, and Analysis. IEEE, New York, NY, 142\u2013151."},{"key":"e_1_2_2_15_1","doi-asserted-by":"publisher","DOI":"10.1109\/C-M.1978.218136"},{"key":"e_1_2_2_16_1","doi-asserted-by":"publisher","DOI":"10.1145\/2039346.2039348"},{"key":"e_1_2_2_17_1","doi-asserted-by":"publisher","DOI":"10.1145\/2509136.2509548"},{"key":"e_1_2_2_18_1","doi-asserted-by":"publisher","DOI":"10.1145\/1926385.1926410"},{"key":"e_1_2_2_19_1","doi-asserted-by":"publisher","DOI":"10.1145\/2951913.2951930"},{"key":"e_1_2_2_20_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-28869-2_11"},{"key":"e_1_2_2_21_1","doi-asserted-by":"publisher","DOI":"10.1145\/2034773.2034800"},{"key":"e_1_2_2_22_1","doi-asserted-by":"publisher","DOI":"10.1145\/3276503"},{"key":"e_1_2_2_23_1","doi-asserted-by":"publisher","DOI":"10.1007\/11737414_16"},{"key":"e_1_2_2_24_1","volume-title":"Contracts for Higher-Order Functions. In ACM International Conference on Functional Programming. ACM","author":"Findler Robert Bruce","year":"2002","unstructured":"Robert Bruce Findler and Matthias Felleisen . 2002 . Contracts for Higher-Order Functions. In ACM International Conference on Functional Programming. ACM , New York, NY, 48\u201359. Robert Bruce Findler and Matthias Felleisen. 2002. Contracts for Higher-Order Functions. In ACM International Conference on Functional Programming. ACM, New York, NY, 48\u201359."},{"key":"e_1_2_2_26_1","volume-title":"Lazy Contract Checking for Immutable Data Structures. In Revised Papers of the 16th International Workshop on Implementation of Functional Languages (IFL)","author":"Findler Robert Bruce","year":"2007","unstructured":"Robert Bruce Findler , Shu-yu Guo, and Anne Rogers . 2007 . Lazy Contract Checking for Immutable Data Structures. In Revised Papers of the 16th International Workshop on Implementation of Functional Languages (IFL) . Springer, New York, NY, 111\u2013128. Robert Bruce Findler, Shu-yu Guo, and Anne Rogers. 2007. Lazy Contract Checking for Immutable Data Structures. In Revised Papers of the 16th International Workshop on Implementation of Functional Languages (IFL). Springer, New York, NY, 111\u2013128."},{"key":"e_1_2_2_27_1","doi-asserted-by":"publisher","DOI":"10.1145\/2500365.2500603"},{"key":"e_1_2_2_28_1","volume-title":"2014 IEEE 25th international symposium on. IEEE","author":"Gopinath Rahul","year":"2014","unstructured":"Rahul Gopinath , Carlos Jensen , and Alex Groce . 2014 . Mutations: How close are they to real faults?. In Software reliability engineering (ISSRE) , 2014 IEEE 25th international symposium on. IEEE , New York, NY, 189\u2013200. Rahul Gopinath, Carlos Jensen, and Alex Groce. 2014. Mutations: How close are they to real faults?. In Software reliability engineering (ISSRE), 2014 IEEE 25th international symposium on. IEEE, New York, NY, 189\u2013200."},{"key":"e_1_2_2_29_1","volume-title":"Space-Efficient Manifest Contracts. In ACM Symposium on Principles of Programming Languages (POPL \u201915)","author":"Greenberg Michael","year":"2015","unstructured":"Michael Greenberg . 2015 . Space-Efficient Manifest Contracts. In ACM Symposium on Principles of Programming Languages (POPL \u201915) . ACM, New York, NY, USA, 181\u2013194. Michael Greenberg. 2015. Space-Efficient Manifest Contracts. In ACM Symposium on Principles of Programming Languages (POPL \u201915). ACM, New York, NY, USA, 181\u2013194."},{"key":"e_1_2_2_30_1","volume-title":"Contracts Made Manifest. In ACM Symposium on Principles of Programming Languages. ACM","author":"Greenberg Michael","year":"2010","unstructured":"Michael Greenberg , Benjamin C. Pierce , and Stephanie Weirich . 2010 . Contracts Made Manifest. In ACM Symposium on Principles of Programming Languages. ACM , New York, NY, 353\u2013364. Michael Greenberg, Benjamin C. Pierce, and Stephanie Weirich. 2010. Contracts Made Manifest. In ACM Symposium on Principles of Programming Languages. ACM, New York, NY, 353\u2013364."},{"key":"e_1_2_2_31_1","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796818000217"},{"volume-title":"Top quality type error messages","author":"Heeren Bastiaan J","key":"e_1_2_2_32_1","unstructured":"Bastiaan J Heeren . 2005. Top quality type error messages . Utrecht University . Bastiaan J Heeren. 2005. Top quality type error messages. Utrecht University."},{"key":"e_1_2_2_33_1","doi-asserted-by":"publisher","DOI":"10.1145\/2103656.2103671"},{"key":"e_1_2_2_34_1","doi-asserted-by":"publisher","DOI":"10.1007\/11737414_15"},{"key":"e_1_2_2_35_1","doi-asserted-by":"publisher","DOI":"10.1145\/3110282"},{"key":"e_1_2_2_36_1","volume-title":"Monitors and Blame Assignment for Higher-order Session Types. In ACM Symposium on Principles of Programming Languages. ACM","author":"Jia Limin","year":"2016","unstructured":"Limin Jia , Hannah Gommerstadt , and Frank Pfenning . 2016 . Monitors and Blame Assignment for Higher-order Session Types. In ACM Symposium on Principles of Programming Languages. ACM , New York, NY, 582\u2013594. Limin Jia, Hannah Gommerstadt, and Frank Pfenning. 2016. Monitors and Blame Assignment for Higher-order Session Types. In ACM Symposium on Principles of Programming Languages. ACM, New York, NY, 582\u2013594."},{"key":"e_1_2_2_37_1","doi-asserted-by":"publisher","DOI":"10.1109\/TSE.2010.62"},{"key":"e_1_2_2_38_1","doi-asserted-by":"publisher","DOI":"10.1145\/581396.581397"},{"key":"e_1_2_2_39_1","doi-asserted-by":"publisher","DOI":"10.1145\/2635868.2635929"},{"key":"e_1_2_2_40_1","volume-title":"Blame Assignment for Higher-order Contracts with Intersection and Union. In ACM International Conference on Functional Programming. ACM","author":"Keil Matthias","year":"2015","unstructured":"Matthias Keil and Peter Thiemann . 2015 . Blame Assignment for Higher-order Contracts with Intersection and Union. In ACM International Conference on Functional Programming. ACM , New York, NY, USA, 375\u2013386. Matthias Keil and Peter Thiemann. 2015. Blame Assignment for Higher-order Contracts with Intersection and Union. In ACM International Conference on Functional Programming. ACM, New York, NY, USA, 375\u2013386."},{"key":"e_1_2_2_41_1","doi-asserted-by":"publisher","DOI":"10.1145\/2610384.2628052"},{"key":"e_1_2_2_42_1","unstructured":"Richard J Lipton. 1971. Fault diagnosis of computer programs. Richard J Lipton. 1971. Fault diagnosis of computer programs."},{"volume-title":"Object-oriented Software Construction","author":"Meyer Bertrand","key":"e_1_2_2_43_1","unstructured":"Bertrand Meyer . 1988. Object-oriented Software Construction . Prentice Hall , London, UK . Bertrand Meyer. 1988. Object-oriented Software Construction. Prentice Hall, London, UK."},{"volume-title":"Advances in Object-Oriented Software Engineering","author":"Meyer Bertrand","key":"e_1_2_2_44_1","unstructured":"Bertrand Meyer . 1991. Design by Contract . In Advances in Object-Oriented Software Engineering . Prentice Hall , London, UK , 1\u201350. Bertrand Meyer. 1991. Design by Contract. In Advances in Object-Oriented Software Engineering. Prentice Hall, London, UK, 1\u201350."},{"key":"e_1_2_2_45_1","doi-asserted-by":"publisher","DOI":"10.5555\/129093"},{"key":"e_1_2_2_46_1","doi-asserted-by":"publisher","DOI":"10.1145\/2983990.2984021"},{"key":"e_1_2_2_47_1","volume-title":"Proceedings of the 11th USENIX Conference on Operating Systems Design and Implementation. USENIX Association","author":"Moore Scott","year":"2014","unstructured":"Scott Moore , Christos Dimoulas , Dan King , and Stephen Chong . 2014 . SHILL: A Secure Shell Scripting Language . In Proceedings of the 11th USENIX Conference on Operating Systems Design and Implementation. USENIX Association , Berkeley, CA, USA, 183\u2013199. Scott Moore, Christos Dimoulas, Dan King, and Stephen Chong. 2014. SHILL: A Secure Shell Scripting Language. In Proceedings of the 11th USENIX Conference on Operating Systems Design and Implementation. USENIX Association, Berkeley, CA, USA, 183\u2013199."},{"key":"e_1_2_2_48_1","doi-asserted-by":"publisher","DOI":"10.1145\/2364527.2364579"},{"key":"e_1_2_2_49_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.scico.2013.09.005"},{"volume-title":"Algorithmic Program DeBugging","author":"Shapiro Ehud Y.","key":"e_1_2_2_50_1","unstructured":"Ehud Y. Shapiro . 1983. Algorithmic Program DeBugging . MIT Press , Cambridge, MA, USA . Ehud Y. Shapiro. 1983. Algorithmic Program DeBugging. MIT Press, Cambridge, MA, USA."},{"volume-title":"Safe and effective contracts","author":"Shinnar Avraham Ever","key":"e_1_2_2_51_1","unstructured":"Avraham Ever Shinnar . 2011. Safe and effective contracts . Harvard University , Boston, MA . Avraham Ever Shinnar. 2011. Safe and effective contracts. Harvard University, Boston, MA."},{"key":"e_1_2_2_52_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-00590-9_2"},{"key":"e_1_2_2_53_1","volume-title":"Blame and Coercion: Together Again for the First Time. In ACM Conference on Programming Language Design and Implementation. ACM","author":"Siek Jeremy","year":"2015","unstructured":"Jeremy Siek , Peter Thiemann , and Philip Wadler . 2015 a. Blame and Coercion: Together Again for the First Time. In ACM Conference on Programming Language Design and Implementation. ACM , New York, NY, USA, 425\u2013435. Jeremy Siek, Peter Thiemann, and Philip Wadler. 2015a. Blame and Coercion: Together Again for the First Time. In ACM Conference on Programming Language Design and Implementation. ACM, New York, NY, USA, 425\u2013435."},{"key":"e_1_2_2_54_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-662-46669-8_18"},{"volume-title":"ACM Symposium on Principles of Programming Languages. ACM","author":"Jeremy","key":"e_1_2_2_55_1","unstructured":"Jeremy G. Siek and Philip Wadler. 2010. Threesomes, with and Without Blame . In ACM Symposium on Principles of Programming Languages. ACM , New York, NY, 365\u2013376. Jeremy G. Siek and Philip Wadler. 2010. Threesomes, with and Without Blame. In ACM Symposium on Principles of Programming Languages. ACM, New York, NY, 365\u2013376."},{"key":"e_1_2_2_56_1","doi-asserted-by":"publisher","DOI":"10.1145\/1640134.1640140"},{"key":"e_1_2_2_57_1","volume-title":"Nested and Dynamic Contract Boundaries. In International Workshop on Implementation of Functional Languages (IFL)","author":"Stephen Strickland T.","year":"2009","unstructured":"T. Stephen Strickland and Matthias Felleisen . 2009 b. Nested and Dynamic Contract Boundaries. In International Workshop on Implementation of Functional Languages (IFL) . Springer, New York, NY, 141 \u2013 158. T. Stephen Strickland and Matthias Felleisen. 2009b. Nested and Dynamic Contract Boundaries. In International Workshop on Implementation of Functional Languages (IFL). Springer, New York, NY, 141 \u2013 158."},{"key":"e_1_2_2_58_1","doi-asserted-by":"publisher","DOI":"10.1145\/2384616.2384685"},{"key":"e_1_2_2_59_1","volume-title":"Expressing Contract Monitors As Patterns of Communication. In ACM International Conference on Functional Programming. ACM","author":"Swords Cameron","year":"2015","unstructured":"Cameron Swords , Amr Sabry , and Sam Tobin-Hochstadt . 2015 . Expressing Contract Monitors As Patterns of Communication. In ACM International Conference on Functional Programming. ACM , New York, NY, 387\u2013399. Cameron Swords, Amr Sabry, and Sam Tobin-Hochstadt. 2015. Expressing Contract Monitors As Patterns of Communication. In ACM International Conference on Functional Programming. ACM, New York, NY, 387\u2013399."},{"key":"e_1_2_2_60_1","doi-asserted-by":"publisher","DOI":"10.1145\/2837614.2837630"},{"key":"e_1_2_2_61_1","doi-asserted-by":"publisher","DOI":"10.1145\/2384616.2384674"},{"key":"e_1_2_2_62_1","volume-title":"Proceedings of the 9th IEEE Working Conference on Mining Software Repositories. IEEE","author":"Thung Ferdian","year":"2012","unstructured":"Ferdian Thung , David Lo , Lingxiao Jiang , 2012 . Are faults localizable? . In Proceedings of the 9th IEEE Working Conference on Mining Software Repositories. IEEE , New York, NY, 74\u201377. Ferdian Thung, David Lo, Lingxiao Jiang, et al. 2012. Are faults localizable?. In Proceedings of the 9th IEEE Working Conference on Mining Software Repositories. IEEE, New York, NY, 74\u201377."},{"key":"e_1_2_2_63_1","doi-asserted-by":"publisher","DOI":"10.1145\/2661088.2661101"},{"volume-title":"ACM Symposium on Principles of Programming Languages. ACM","author":"Vitousek Michael M.","key":"e_1_2_2_64_1","unstructured":"Michael M. Vitousek , Cameron Swords , and Jeremy G. Siek . 2017. Big types in little runtime: open-world soundness and collaborative blame for gradual type systems . In ACM Symposium on Principles of Programming Languages. ACM , New York, NY, 762\u2013774. Michael M. Vitousek, Cameron Swords, and Jeremy G. Siek. 2017. Big types in little runtime: open-world soundness and collaborative blame for gradual type systems. In ACM Symposium on Principles of Programming Languages. ACM, New York, NY, 762\u2013774."},{"key":"e_1_2_2_65_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-00590-9_1"},{"key":"e_1_2_2_66_1","doi-asserted-by":"publisher","DOI":"10.1145\/3110280"},{"key":"e_1_2_2_67_1","doi-asserted-by":"publisher","DOI":"10.1145\/3276504"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3371133","content-type":"application\/pdf","content-version":"vor","intended-application":"syndication"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3371133","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2023,1,1]],"date-time":"2023-01-01T09:57:41Z","timestamp":1672567061000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3371133"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2019,12,20]]},"references-count":65,"journal-issue":{"issue":"POPL","published-print":{"date-parts":[[2020,1]]}},"alternative-id":["10.1145\/3371133"],"URL":"https:\/\/doi.org\/10.1145\/3371133","relation":{},"ISSN":["2475-1421"],"issn-type":[{"type":"electronic","value":"2475-1421"}],"subject":[],"published":{"date-parts":[[2019,12,20]]},"assertion":[{"value":"2019-12-20","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}