  In the last decade it became a common practice to formalise software
requirements to improve the clarity of users' expectations. In this work we
build on the fact that functional requirements can be expressed in temporal
logic and we propose new sanity checking techniques that automatically detect
flaws and suggest improvements of given requirements. Specifically, we describe
and experimentally evaluate approaches to consistency and redundancy checking
that identify all inconsistencies and pinpoint their exact source (the smallest
inconsistent set). We further report on the experience obtained from employing
the consistency and redundancy checking in an industrial environment. To
complete the sanity checking we also describe a semi-automatic completeness
evaluation that can assess the coverage of user requirements and suggest
missing properties the user might have wanted to formulate. The usefulness of
our completeness evaluation is demonstrated in a case study of an aeroplane
control system.
