The knowledge of program execution times is crucial for the development and the verification of real-time software. Therefore, there is a need for methods and tools which allow to predict the timing behavior of pieces of program code and entire programs. This thesis presents a novel method for the analysis of program execution times. Programs are represented by graphs which reflect the structure and the timing behavior of the code and can be annotated with user-supplied information about infeasible paths. The graphs are searched for those execution paths which take the maximum time to execute. The search problem is transformed into a linear programming problem: The goal function, which has to be maximized, yields the execution time. Its constants represent the execution times of program parts, the variables the number of executions of these pieces of code. The restrictions of the programming problem describe the code structure and the infeasible paths. The new timing analysis method is special in that it can be used to compute execution time bounds of high quality, i.e., very tight bounds. It does not only calculate execution time bounds, but also derives detailed information about the execution time and the number of executions of every single program construct.