A framework for building, analyzing, systematically testing and debugging asynchronous reactive software. P# is used by engineers in Azure to design, implement and thoroughly test distributed systems and services.
The P# framework provides:
- Language extensions to C# for building event-driven asynchronous applications, writing test harnesses, and specifying safety and liveness properties.
- A systematic testing engine that can capture and control all specified nondeterminism in the system, systematically explore the actual executable code to discover bugs, and report bug traces. A P# bug trace provides a global order of all communication events, and thus is easier to debug.
- Support for replaying bug traces, and debugging them using the Visual Studio debugger.
The best way to build and start using P# is to read our wiki.
You can also read the manual and available publications:
Follow the instructions in our wiki.
We welcome contributions! However, before you start contributing, please read carefully the development guidelines.
If you are interested in using P# in your project, or have any P# related questions, please send us an email or open a new issue.