If you can't fly then run, if you can't run then walk, if you can't walk then crawl, but whatever you do you have to keep moving forward." -Martin Luther King Jr.Preface I clearly remember the first time I used a computer. I can say that it changed my life. Soon after, we bought our first PC and my journey started. My first projects were quite small, like a timetable generator for my classmates, as we took a variety of language and elective classes. My first real project was a management system for an association of junior firefighters; I was 16 years old at that time. As soon as I received the requirements, I started to work on the system as I was very enthusiastic. When I thought I finished the project, the software went live. Soon I got several bug reports, and other feature requests. Of course, my code was a complete mess; it was full of code duplications and security holes (an authorized user accidentally "hacked" it once). Aside from the reported bugs, I discovered several bugs myself that I had to fix (everywhere). Enhancing the software was almost as big of a challenge as writing it from scratch. This was the time I realized that not only are the functional requirements important, the quality and the security of the software are also crucial. I have been working to advance this principle through my doctoral studies ever since. I hope my work in this field helps developers in building better software.Although the thesis emphasizes the author's contribution, none of the presented research works would have been possible without the help of others. First and foremost, I would like to thank my supervisor, Dr. Rudolf Ferenc, for his guidance and his useful advice that helped me throughout my studies. His positive and calm attitude helped me a lot; without him, I would have probably never done any scientific research. My special thanks go to Dr. Péter Hegedűs, whom I consider my second mentor. He taught me a lot of indispensable things about research, and helped me many times over the years. My sincere thanks go to Dr. Tibor Gyimóthy, the former head of the Department of Software Engineering, for supporting my research work. I would like to express my gratitude to Dr. Csaba Nagy and Dr. Gábor Szőke with whom I started my scientific journey. My many thanks go to my colleagues and article co-authors, namely Dr.