Property-based testing (PBT) focuses on testing specifications rather than implementations. It uses random testing against properties expressed as code to generate many test cases, reducing testing effort. PBT represents a system as states, commands to transition between states, and properties relating commands to expected states. This allows effective testing of stateful systems. PBT has been used successfully for concurrency, distributed systems, and finding bugs unit tests missed. Popular PBT libraries include Scalacheck, QuickCheck, and Hypothesis.