My research activity focuses on various topics that are interconnected and can benefit from each other's techniques and methodologies. Such topics are:
Empirical Software Engineering: focuses on applying empirical methods, data analysis, and experimentation to understand and improve software engineering practices. It involves collecting and analyzing data from software development projects to gain insights into various aspects of software engineering, such as development processes, project management, software quality, and productivity. Empirical software engineering aims to provide evidence-based recommendations and guidelines for practitioners to make informed decisions and improve software development practices.
Mining Software Repositories: a research field that involves analyzing data from software repositories. This includes version control systems, bug tracking systems, mailing lists, and code review systems. MSR techniques are used to extract valuable information from these repositories, such as commit history, bug reports, code changes, and developer discussions. The extracted data can be analyzed to understand software evolution, identify patterns, detect defects, predict software quality, and support various software engineering tasks.
Software Maintenance and Evolution: refer to the activities involved in managing and improving software systems after their initial development. This includes tasks such as bug fixing, performance optimization, feature enhancement, and adapting software to changing requirements. Software maintenance and evolution are supported by various techniques, including program analysis, refactoring, code review, and version control. The analysis of software repositories and application empirical methods can provide insights into the maintenance and evolution process, such as identifying common maintenance tasks, predicting maintenance efforts, and understanding the impact of code changes on software quality.
Software Security: focuses on protecting software systems from vulnerabilities and malicious attacks. It involves implementing secure coding practices, conducting security assessments, and applying security controls to prevent unauthorized access, data breaches, and other security threats. Software security also involves identifying and fixing security vulnerabilities through techniques such as code review, static and dynamic analysis, and penetration testing. Empirical methods and mining software repositories can help in understanding security vulnerabilities, analyzing security incident data, and improving software security practices through evidence-based recommendations.
Natural Language Processing: is a branch of artificial intelligence that focuses on the interaction between computers and human language. NLP techniques enable computers to understand, interpret, and generate human language. In the context of software engineering, NLP can be used to analyze software-related textual data, such as source code comments, documentation, bug reports, and developer discussions. NLP techniques can be applied for tasks such as sentiment analysis of user feedback, automated code documentation generation, and code summarization.
Text Analysis: also known as Text Mining or Text Analytics, is the process of extracting valuable insights and knowledge from unstructured textual data. In the context of software engineering, text analysis can be applied to various tasks, such as code clone detection, identification of software vulnerabilities in source code, analysis of user reviews, and extraction of software requirements from textual specifications.
Mining software repositories provides valuable data for empirical software engineering research, while natural language processing and text analysis techniques can be applied to analyze and extract knowledge from textual software artifacts. The findings from these analyses can further enhance software maintenance, evolution, and security practices.