47 research outputs found
Finding The Lazy Programmer's Bugs
Traditionally developers and testers created huge numbers of explicit tests, enumerating interesting cases, perhaps
biased by what they believe to be the current boundary conditions of the function being tested. Or at
least, they were supposed to.
A major step forward was the development of property testing. Property testing requires the user to write a few
functional properties that are used to generate tests, and requires an external library or tool to create test data
for the tests. As such many thousands of tests can be created for a single property. For the purely functional
programming language Haskell there are several such libraries; for example QuickCheck [CH00], SmallCheck
and Lazy SmallCheck [RNL08].
Unfortunately, property testing still requires the user to write explicit tests. Fortunately, we note there are
already many implicit tests present in programs. Developers may throw assertion errors, or the compiler may
silently insert runtime exceptions for incomplete pattern matches.
We attempt to automate the testing process using these implicit tests. Our contributions are in four main
areas: (1) We have developed algorithms to automatically infer appropriate constructors and functions needed
to generate test data without requiring additional programmer work or annotations. (2) To combine the
constructors and functions into test expressions we take advantage of Haskell's lazy evaluation semantics by
applying the techniques of needed narrowing and lazy instantiation to guide generation. (3) We keep the type
of test data at its most general, in order to prevent committing too early to monomorphic types that cause
needless wasted tests. (4) We have developed novel ways of creating Haskell case expressions to inspect elements
inside returned data structures, in order to discover exceptions that may be hidden by laziness, and to make
our test data generation algorithm more expressive.
In order to validate our claims, we have implemented these techniques in Irulan, a fully automatic tool for
generating systematic black-box unit tests for Haskell library code. We have designed Irulan to generate high
coverage test suites and detect common programming errors in the process
Semantic Versioning Checking in a Declarative Package Manager
Semantic versioning is a principle to associate version numbers to
different software releases in a meaningful manner. The correct use
of version numbers is important in software package systems where
packages depend on other packages with specific releases. When
patch or minor version numbers are incremented, the API is unchanged
or extended, respectively, but the semantics of the operations
should not be affected (apart from bug fixes). Although many
software package management systems assumes this principle, they do
not check it or perform only simple syntactic signature checks. In
this paper we show that more substantive and fully automatic checks
are possible for declarative languages. We extend a package manager
for the functional logic language Curry with features to check the
semantic equivalence of two different versions of a software
package. For this purpose, we combine CurryCheck, a tool for
automated property testing, with program analysis techniques in
order to ensure the termination of the checker even in case of
possibly non-terminating operations defined in some package. As a
result, we obtain a software package manager which checks semantic
versioning and, thus, supports a reliable and also
specification-based development of software packages
Feat: Functional Enumeration of Algebraic Types
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)
Smart test data generators via logic programming
We present a novel counterexample generator for the interactive theorem prover Isabelle based on a compiler that synthesizes test data generators for functional programming languages (e.g. Standard ML, OCaml) from specifications in Isabelle. In contrast to naive type-based test data generators, the smart generators take the preconditions into account and only generate tests that fulfill the preconditions. The smart generators are constructed by a compiler that reformulates the preconditions as logic programs and analyzes them by an enriched mode inference. From this inference, the compiler can construct the desired generators in the functional programming language. These test data generators are applied to find errors in specifications, as we show in a case study of a hotel key card system
The additional difficulties for the automatic synthesis of specifications posed by logic features in functional-logic languages
This paper discusses on the additional issues for the automatic inference of algebraic property-oriented specifications which arises because of interaction between laziness and logical variables in lazy functional logic languages.
We present an inference technique that overcomes these issues for the first-order fragment of the lazy functional logic language Curry. Our technique statically infers from the source code of a Curry program a specification which consists of a set of equations relating (nested) operation calls that have the same behavior. Our proposal is a (glass-box) semantics-based inference method which can guarantee, to some extent, the correctness of the inferred specification, differently from other (black-box) approaches based on testing techniques
Extrapolate: generalizing counterexamples of functional test properties
This paper presents a new tool called Extrapolate that automatically generalizes counterexamples found by property-based testing in Haskell. Example applications show that generalized counterexamples can inform the programmer more fully and more immediately what characterises failures. Extrapolate is able to produce more general results than similar tools. Although it is intrinsically unsound, as reported generalizations are based on testing, it works well for examples drawn from previous published work in this area
Fertilizing
Die neue DĂĽngeverordnung hat keine Ă„nderungen der Anforderungen an die Technik zur MineraldĂĽngung gebracht.
Die technische Entwicklung beschränkt sich auf die Weitentwicklung und Praxiseinführung von Neuerungen der vergangenen Jahre. Elektrische Antriebe sind weiterhin in der Entwicklung, aber immer noch im Prototypenstatus.
Die kostenlos von der ESA zur Verfügung gestellten Daten der Sentinel-Satelliten werden zu einer Zunahme der kartenbasierten teilflächenspezifischen Düngung und der Nachfrage nach Mineraldüngerstreuern mit dafür notwendiger Technik führen.The new fertilizer ordinance has not brought any changes in the requirements for mineral fertilizer technology.
The technical development is limited to the further development and practical introduction of innovations of the past years. Electric drives are still under development, but still in prototype status.
The data from the Sentinel satellites provided free of charge by ESA will lead to an increase in map-based sub-area-specific fertilization and the demand for mineral fertilizer spreaders with the necessary technology