  Software Engineering and the implementation of software has become a
challenging task as many tools, frameworks and languages must be orchestrated
into one functioning piece. This complexity increases the need for testing and
analysis methodologies that aid the developers and engineers as the software
grows and evolves. The amount of resources that companies budget for testing
and analysis is limited, highlighting the importance of automation for economic
software development. We propose Probabilistic Software Modeling, a new
paradigm for software modeling that builds on the fact that software is an
easy-to-monitor environment from which statistical models can be built.
Probabilistic Software Modeling provides increased comprehension for engineers
without changing the level of abstraction. The approach relies on the recursive
decomposition principle of object-oriented programming to build hierarchies of
probabilistic models that are fitted via observations collected at runtime of a
software system. This leads to a network of models that mirror the static
structure of the software system while modeling its dynamic runtime behavior.
The resulting models can be used in applications such as test-case generation,
anomaly and outlier detection, probabilistic program simulation, or state
predictions. Ideally, probabilistic software modeling allows the use of the
entire spectrum of statistical modeling and inference for software, enabling
in-depth analysis and generative procedures for software.
