<p>In software engineering practice, fixing bugs in a timely manner lowers various potential costs in software maintenance. However, manually determining the bug-fixing schedules can be time-consuming, cumbersome, and error-prone. Therefore, many researchers have investigated ways to automate the bug triage process. This dissertation seeks to further enhance the state-of-the-art on bug triage in multiple ways. We first introduce a new tool that enables us to thoroughly investigate the past bug assignment decisions in the issue tracking systems. This way, we may better understand how the ITS evolves and what factors contribute to the bug assignment decisions of the triagers. We particularly explore the bug dependency graph, textual information of the bugs, bug arrivals to the system, developers' experience and schedules, and priority and severity of the bugs. Moreover, our tool enables researchers to compare their approach with the actual bug triage practice and also traditional bug triage models. Secondly, we design an integer programming model that determines bug assignment to the developers by incorporating multiple aspects of the bug triage problem. Specifically, we enhance existing bug triage models in the literature by simultaneously considering developers' schedules, bug dependencies, bug fixing time, suitability of the developers, developers' capacity to solve multiple bugs, and the exact date of assignment. Our approach leverages natural language processing, machine learning, and integer programming to achieve a comprehensive semi-automated solution. Lastly, we extend our analysis for automated bug triage by incorporating uncertainty into the model formulation. We propose a novel method based on approximate dynamic programming (ADP) to formulate the uncertainty in the bug arrival time and developers' schedules in the system. Our numerical study shows that our ADP-based approach improves the myopic integer programming-based solution by estimating the downstream cost of the assignments. Furthermore, as the ADP learns the underlying uncertainty associated with bugs and developers, it can be considered the first online solution for bug triage in the literature.</p>