Software failures can lead to significant costs and even human hardship and danger. We believe that with an appropriate set of tools and techniques it is possible to improve the reliability of both existing and new software without a huge upfront investment.
Formal methods do not have to be “too expensive” or “too time consuming”; simple things can drastically improve the assurance of software, even without complete verification. Furthermore, academia is constantly generating new ideas. Which of those translate into suitable tools for a given context? There is a spectrum of assurance and we believe in combining different techniques to gradually bring software from zero assurance to fully verified. We aim to identify, use and improve upon the most suitable tools for the job.
We offer high-assurance services and team augmentation for clients who either have high-assurance needs or are themselves solution providers in this space. In particular, we are happy to assist in the following areas:
- Specification: help craft and lay specifications, and asses their aptness to an original goal by proving relevant properties about them
- Testing: help create better test suites, and build tools for executing them over complex domains
- Auditing: comprehensively test a system, report and showcase behaviours that are potentially harmful to system security or safety, assess code quality
- Tooling: improve existing tools to suit the testing/verification needs of a particular project, or write domain-specific tools from scratch
- Refactoring: help improve existing code bases through the use of modularisation, strongly typed code, purity, and other compile-time guarantees
- Full-fledged verification: assist in projects aiming to develop a completely verified piece of software