Skip to content

Commit 024c26e

Browse files
committed
Bibliographic notes on PBT
1 parent f67d891 commit 024c26e

File tree

2 files changed

+105
-4
lines changed

2 files changed

+105
-4
lines changed

src/bib/scala-with-cats.bib

Lines changed: 94 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -577,8 +577,8 @@ @Unpublished{kidd07:prob
577577
author = {Kidd, Eric},
578578
title = {Build your own probability monads},
579579
date = 2007,
580-
url = {https://www.randomhacks.net/files/build-your-own-probability-monads.pdf}}
581-
580+
url = {https://www.randomhacks.net/files/build-your-own-probability-monads.pdf}
581+
}
582582

583583
@article{ERWIG_KOLLMANSBERGER_2006,
584584
title={FUNCTIONAL PEARLS: Probabilistic functional programming in Haskell},
@@ -607,3 +607,95 @@ @article{scibor18:modular
607607
articleno = {83},
608608
numpages = {29},
609609
}
610+
611+
@inproceedings{claessen00:quickcheck,
612+
author = {Claessen, Koen and Hughes, John},
613+
title = {QuickCheck: a lightweight tool for random testing of Haskell programs},
614+
year = {2000},
615+
isbn = {1581132026},
616+
publisher = {Association for Computing Machinery},
617+
address = {New York, NY, USA},
618+
url = {https://doi.org/10.1145/351240.351266},
619+
doi = {10.1145/351240.351266},
620+
booktitle = {Proceedings of the Fifth ACM SIGPLAN International Conference on Functional Programming},
621+
pages = {268–279},
622+
numpages = {12},
623+
series = {ICFP '00}
624+
}
625+
626+
@inproceedings{runciman09:smallcheck,
627+
author = {Runciman, Colin and Naylor, Matthew and Lindblad, Fredrik},
628+
title = {Smallcheck and lazy smallcheck: automatic exhaustive testing for small values},
629+
year = {2008},
630+
isbn = {9781605580647},
631+
publisher = {Association for Computing Machinery},
632+
address = {New York, NY, USA},
633+
url = {https://doi.org/10.1145/1411286.1411292},
634+
doi = {10.1145/1411286.1411292},
635+
booktitle = {Proceedings of the First ACM SIGPLAN Symposium on Haskell},
636+
pages = {37–48},
637+
numpages = {12},
638+
location = {Victoria, BC, Canada},
639+
series = {Haskell '08}
640+
}
641+
642+
@article{duregard12:feat,
643+
author = {Dureg\r{a}rd, Jonas and Jansson, Patrik and Wang, Meng},
644+
title = {Feat: functional enumeration of algebraic types},
645+
year = {2012},
646+
issue_date = {December 2012},
647+
publisher = {Association for Computing Machinery},
648+
address = {New York, NY, USA},
649+
volume = {47},
650+
number = {12},
651+
issn = {0362-1340},
652+
url = {https://doi.org/10.1145/2430532.2364515},
653+
doi = {10.1145/2430532.2364515},
654+
abstract = {In mathematics, an enumeration of a set S is a bijective function from (an initial segment of) the natural numbers to S. We define "functional enumerations" as efficiently computable such bijections. This paper describes a theory of functional enumeration and provides an algebra of enumerations closed under sums, products, guarded recursion and bijections. We partition each enumerated set into numbered, finite subsets.We provide a generic enumeration such that the number of each part corresponds to the size of its values (measured in the number of constructors). We implement our ideas in a Haskell library called testing-feat, and make the source code freely available. Feat provides efficient "random access" to enumerated values. The primary application is property-based testing, where it is used to define both random sampling (for example QuickCheck generators) and exhaustive enumeration (in the style of SmallCheck). We claim that functional enumeration is the best option for automatically generating test cases from large groups of mutually recursive syntax tree types. As a case study we use Feat to test the pretty-printer of the Template Haskell library (uncovering several bugs).},
655+
journal = {SIGPLAN Not.},
656+
month = sep,
657+
pages = {61–72},
658+
numpages = {12},
659+
keywords = {enumeration, memoisation, property-based testing}
660+
}
661+
662+
@inproceedings{goldstein24:practice,
663+
author = {Goldstein, Harrison and Cutler, Joseph W. and Dickstein, Daniel and Pierce, Benjamin C. and Head, Andrew},
664+
title = {Property-Based Testing in Practice},
665+
year = {2024},
666+
isbn = {9798400702174},
667+
publisher = {Association for Computing Machinery},
668+
address = {New York, NY, USA},
669+
url = {https://doi.org/10.1145/3597503.3639581},
670+
doi = {10.1145/3597503.3639581},
671+
booktitle = {Proceedings of the IEEE/ACM 46th International Conference on Software Engineering},
672+
articleno = {187},
673+
numpages = {13},
674+
location = {Lisbon, Portugal},
675+
series = {ICSE '24}
676+
}
677+
678+
@inproceedings{reddy20:rlcheck,
679+
author={Reddy, Sameer and Lemieux, Caroline and Padhye, Rohan and Sen, Koushik},
680+
booktitle={2020 IEEE/ACM 42nd International Conference on Software Engineering (ICSE)},
681+
title={Quickly Generating Diverse Valid Test Inputs with Reinforcement Learning},
682+
year={2020},
683+
volume={},
684+
number={},
685+
pages={1410-1421},
686+
url={https://ieeexplore.ieee.org/document/9284117}
687+
doi={}
688+
}
689+
690+
@inproceedings{lemieux23:codamosa,
691+
author={Lemieux, Caroline and Inala, Jeevana Priya and Lahiri, Shuvendu K. and Sen, Siddhartha},
692+
booktitle={2023 IEEE/ACM 45th International Conference on Software Engineering (ICSE)},
693+
title={CodaMosa: Escaping Coverage Plateaus in Test Generation with Pre-trained Large Language Models},
694+
year={2023},
695+
volume={},
696+
number={},
697+
pages={919-931},
698+
keywords={Software testing;Codes;Benchmark testing;Software;Space exploration;Test pattern generators;Software engineering;search based software testing;codex;test suite generation;python;large language model;automated testing},
699+
doi={10.1109/ICSE48619.2023.00085}
700+
url={https://www.carolemieux.com/codamosa_icse23.pdf}
701+
}

src/pages/indexed-types/conclusions.md

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,14 @@ Indexed codata is described in [@10.1145/3022670.2951929].
1111

1212
Fluent APIs. [@Roth_2023]
1313

14-
The probability monad we developed, which is specialized to sampling data, is only one of many possibilities. @ERWIG_KOLLMANSBERGER_2006 show how discrete distributions can be dealt with exactly, in addition to the sampling approach we used. @kidd07:prob shows how the exact and sampling approaches can be factored into base monads and monad transformers.
15-
@scibior15:monads describes how the probability monad can be used as the underlying abstraction on which a variety of different statistical inference algorithms can be defined. This is application of the idea of multiple interpretations that we have stressed throughout this book. @scibor18:modular expands on this idea, breaking down inference algorithms into reusable components.
14+
The probability monad we developed, which is specialized to sampling data, is only one of many possibilities.
15+
Sampling gives us an approximate representation of a distribution. Small discrete distributions can be represented exactly.
16+
@ERWIG_KOLLMANSBERGER_2006 show how this can be done, in addition to the sampling approach we used. @kidd07:prob shows how the exact and sampling approaches can be factored into monad transformer stacks.
17+
@scibior15:monads uses probability monad as the underlying abstraction on which a variety of different statistical inference algorithms are defined. This is application of the idea of multiple interpretations that we have stressed throughout this book. @scibor18:modular expands on this idea, breaking down inference algorithms into reusable components.
18+
19+
We introduced the probability monad in the context of property based testing [@claessen00:quickcheck].
20+
Randomly generating test data is not the only approach.
21+
@runciman09:smallcheck describes an elegant way of enumerating data.
22+
Also see @duregard12:feat for an approach specialized to enumerating algebraic data types.
23+
More recently machine learning techniques are being explored. See, for example, @reddy20:rlcheck and @lemieux23:codamosa.
24+
@goldstein24:practice is an interesting case study of property based testing in practice.

0 commit comments

Comments
 (0)