This curriculum module presents a framework for understanding software product and process specifications. An unusual approach has been chosen in order to be able to address all aspects related to specification without confusing the many existing uses of the term. In this module, the term specification refers to any plan (or standard) according to which products of some type are constructed or processes of some type are performed, not to the products or processes themselves. In this sense, a specification is itself a product that describes how products of some type should look or how processes of some type should be performed. The framework includes (1) a reference software life-cycle model and terminology, (2) a characterizing scheme for software product and process specifications, (3) guidelines for using the characterization scheme to identify clearly certain life-cycle phases, and (4) guidelines for using the characterization scheme to select and evaluate specification techniques.