Program domains are useful in many areas of software engineering including software reliability, testing, and program comprehension. Program paths provide understanding of program dynamic behaviour. In this work, we show that it is possible to extract domains and the paths they represent from software using program execution based algorithms.This thesis looks at five different execution based algorithms for identifying the domains/paths. These algorithms work differently to generate the domains from a possibly infinite set of possible paths. Two of the algorithms utilize an operational profile that describes the probability distribution of possible inputs. This allows them to generate the most important paths first.These program execution based algorithms were explored using some simple functions. The results showed that the Probabilistic Execution algorithm produces the domains in the strictly most significant order, limited only by the equality of the integration available. The Monte Carlo Execution algorithm provided almost the same accuracy but is somewhat simpler. Of the algorithms that do not utilize operational profiles, Random Execution worked the best.