Software is a large and complex artifact, produced primarily by humans for humans. Software development and operational use are therefore dominated by human action, human judgment and decision making, and inevitably human error. The outcome is, therefore, often uncertain and unpredictable and, along with uncertainty in natural phenomena, leads to unavoidable software uncertainties. Most if not all software failures are experienced by or otherwise affect human users. Similarly, most software defects can be traced to human origins, be it an error introduced directly by a developer or a defect that is only indirectly human-related. An IEEE software engineering standard, for example, identifies two key sources of software uncertainty as ``poor knowledge or understanding of the problem domain'' and ``insufficient, untimely orientation to user needs and to overall quality'' [IEE94].
The observation that ``software engineering is fraught with uncertainty'' is often used to explain the known symptoms of the software crisis, including high costs and unexpected slips in development schedule as well as unpredictable failures of operational software. The abundance of uncertainty also justifies extensive measures taken by researchers and practitioners attempting to identify and alleviate software risks and uncertainties.
While software risk management has long been an active field of research producing significant contributions (cf. [Boe89, Boe91]), the subject of software uncertainties has largely been overlooked, with the notable exception of software reliability models [Lit79] and models for validation of software dependability [LS93]. This omission is particularly surprising in light of extensive research in modeling and management of uncertainty carried out in Artificial Intelligence (AI) domains (cf. [Pea88, Nea90, HMW95]).
Thus, despite the pervasiveness of human involvement and related software uncertainties, surprisingly few attempts have been made to model those uncertainties explicitly. This dissertation aims to remedy this situation, initially by presenting the Maxim of Uncertainty in Software Engineering (MUSE) and as a corollary, urging that software uncertainties be modeled directly, using an appropriate uncertainty modeling technique.
Ideally, an uncertainty modeling technique should include probabilistic notions of uncertainty and confidence, provide for multiple sources of evidence and influence, and support dynamic updating of uncertainty values during software development. In this dissertation, we claim that Bayesian Belief Networks meet these desiderata and are therefore suitable for software uncertainty modeling.
There are many perceived benefits of modeling software uncertainty, including, among others:
We generally believe that software uncertainty modeling holds promise for improved human understanding and decision making in a wide range of development activities. In this dissertation, however, we focus on specific benefits of uncertainty modeling for specific development situations. To this end, we describe several premises and propose a specific research hypothesis to be validated against a real software project. The premises and hypothesis for this dissertation are described next.