Software development in practice is still human intensive,
involving human error, human judgment and subjective
assessment.  The outcome is often uncertain and
unpredictable and, along with uncertainty in natural
phenomena, inevitably leads to software risks and
uncertainties.  Despite the pervasiveness of human
involvement, surprisingly few techniques exist that
model related software uncertainties explicitly.
This dissertation begins to remedy
this situation by presenting the Maxim of Uncertainty
in Software Engineering, stating that ``Uncertainty
is inherent and inevitable in software processes and
products,'' and, as corollary, urging that software
uncertainties be modeled explicitly.

Ideally, an uncertainty modeling
technique should include probabilistic notions of
uncertainty and confidence, support multiple factors
of influence, and allow dynamic updating of uncertainty
values during development.  Here, we claim that
Bayesian Belief Networks meet these desiderata and
are therefore suitable for software uncertainty modeling.

We are specifically interested in software traceability
and how it may be improved through notions of judgment,
confidence, belief, evidence, and causal influence.
To this end, we posit a research hypothesis, stating that
software uncertainty modeling, specifically Bayesian
network modeling of developers' confidence levels,
allows improved traceability of software artifacts and
relations.

This requires that Bayesian network models of confidence
levels be constructed.  We describe how, given a system
of interrelated software artifacts, an isomorphic Bayesian
network is constructed.  The structure and belief values
in this network are later revised and refined as the
network is validated against project data and developer
judgment.
 
For validation, we studied the artifacts and relations
of a system being developed at Beckman Instruments.
Bayesian networks were constructed to capture and confirm developers'
confidences in software artifacts and relationships.
An example scenario of confidence fluctuation was used
to study developers' ability to trace and track artifacts
and associated confidences with and without the Bayesian
information.  The study showed that improvement in developer
scores was, as hypothesized, achieved with statistical
significance.
Additional contributions include a prototype implementation
of a Java applet for software belief networks and a 
collection of confidence factors that may influence
levels of developer confidence in software requirements.

