Welcome to software engineering research field!
You possibly have been developing software for years and have just realized that you love it but you want to do something more than just finishing trivial tasks using conventional methods and tools.
Now you want to improve the way you do your challenging tasks. You want to complete them faster and with lower cost. You want to create innovative methods and tools to help other people systematically develop software. If this is true then software engineering research is waiting for you.
1. Background preparation
Please read
- this Roger Pressman and Bruce Maxim (2019). Software Engineering: A Practitioner’s Approach. McGraw-Hill Education book, and
- this Ian Sommerville (2016). Software Engineering. 10th Edition. Pearson book, and
- this Vaclav Rajlich (2012). Software Engineering: The Current Practice. Chapman and Hall/CRC book first.
Although these books provide you a general view and a big picture of software engineering they do not discuss every details about all the mentioned topics. Instead they present summaries about the key problems in software engineering and the most popular solutions to those problems.
In other words, these books prepare a background for you so that you could begin to do a software engineering research.
While reading these books you can also review all the topics on this website for detailed information of each topic these books mention.
After that please read this Andy Oram and Greg Wilson (Editors) (2010). Making Software. What Really Works, and Why We Believe It. O’Reilly Media book to get familiar with the view of software engineering researchers.
2. Software engineering research methods
Please read this William M.K. Trochim (2006). Research Methods Knowledge Base book to get familiar with research terminologies, types and methods first.
In order to begin to do a software engineering research you will need to get the idea of what may be investigated, how to conduct the investigation, what will be produced and how to ensure that what you have found is correct and useful.
It means that you should clarify
- what is your research subject (Is it a laboratory experiment or a real world project?),
- what is your unit of analysis (Is it the whole or a part of the research subject? Is it a a software project or a requirement process or a design process or a testing process or a group of people or a model or a notation or a data structure or an algorithm?),
- what is your research result or research output or research outcome (Is it a model or a method or a technique or a tool or a notation or an answer or an judgment?)
- what you will do to your research subject and how you can obtain your research result (How do you collect and analyze data? How do you formalize or model or represent the problem? How do you formalize or model or present your solution?),
- which method is used to validate your result (Is it a mathematical proof or a controlled experiment or a case study?)
Please read the following papers or books to get knowledge about research subjects, research results, data collection and analysis, and research validation.
- Robert L. Glass et al. (2004). An Analysis of Research in Computing Disciplines
- Salvatore T. March and Gerald F. Smith (1995). Design and Natural Science Research on Information Technology
- Alan R. Hevner et al. (2004). Design Science in Information Systems Research
- Shirley Gregor (2006). The Nature Of Theory In Information Systems
- Shirley Gregor and David Jones (2007). The Anatomy of a Design Theory
- Ken Peffers et al. (2007). A Design Science Research Methodology for Information Systems Research
- Maung K. Sein et al. (2011). Action Design Research
- Juhani Iivari (2015). Distinguishing and Contrasting Two Strategies for Design Science Research
- Shirley Gregor and Alan R. Hevner (2013). Positioning and Presenting Design Science Research for Maximum Impact
- Vijay K. Vaishnavi and William Kuechler, Jr. (2015). Design Science Research Methods and Patterns. CRC Press.
- Jonathan Lazar, Jinjuan Feng and Harry Hochheiser (2017). Research Methods in Human Computer Interaction. Morgan Kaufmann.
Then please read the following papers or books to get knowledge about research subjects, research results, data collection and analysis, and research validation applied in software engineering research field.
- Daniel M. Berry (1992). Academic Legitimacy of the Software Engineering Discipline.
- Robert L. Glass et al. (2002). Research in Software Engineering: An Analysis of the Literature
- Alfonso Fuggetta and Elisabetta Di Nitto (2014). Software Processes
- (2002). What Makes Good Research in Software Engineering?
- (2003). Writing Good Software Engineering Research Papers: Minitutorial
- Barbara Kitchenham (1995). Case Studies for Method and Tool Evaluation
- Marvin V. Zelkowitz and Dolores Wallace (1997). Experimental Validation in Software Engineering
- Barbara Kitchenham et al. (2002). Preliminary Guidelines for Empirical Research in Software Engineering
- Bent Flyvbjerg (2006). Five Misunderstandings About Case-Study Research
- Dag I K Sjøberg et al. (2007). The Future of Empirical Methods in Software Engineering Research
- Barbara Kitchenham and Stuart Charters (2007). Guidelines for Performing Systematic Literature Reviews in Software Engineering
- Steve Easterbrook et al. (2008). Selecting Empirical Methods for Software Engineering Research
- Dag I. K. Sjøberg et al. (2008). Building Theories in Software Engineering
- Claes Wohlin et al. (2012). Experimentation in Software Engineering. Springer
- Per Runeson et al. (2012). Case Study Research in Software Engineering – Guidelines and Examples. John Wiley & Sons
- Susan Elliott Sim et al. (2003). Using Benchmarking to Advance Research: A Challenge to Software Engineering
3. Research problem identification
This is the most difficult task. Before identifying a research problem you should carefully review your background knowledge and your interests. After discovering a research problem you should go back and double-check prerequisite knowledge required for conducting the selected problem to see whether you can actually undertake the research you have chosen.
3.1. Asking for a research problem
The easiest and fastest way to identify a research problem is to consult with your advisor. Maybe he or she already has a funded research project with various problems that need to be solved.
3.2. Searching for a research problem
If you do not have an advisor or your advisor may not have a funded research project for you to work then perhaps you could visit some of the websites below to look for your concrete interested research topics while keeping referring to your background knowledge and experiences whenever possible.
Hopefully, you can identify some keywords that you are interested in (for example software architecture, microservice architecture or multi-tenancy architecture) after browsing these websites.
Example research topics might be
- Multi-tenant event-driven microservice architecture
- Automated web application security scanner
- English-Vietnamese machine translation
- Vietnamese text summarization
- Vietnameses speech recognition model
- Vietnamese speech synthesis model
- Application of generative adversarial networks in photo editing software
- Application of diffusion models in photo editing software
- Migration of legacy database to NewSQL database
- Blockchain-based certificate management system
- Storage models and algorithms in multi-tenant environments
- Empirical study on the impact of AI-assisted development tools on software development productivity and quality
- Automated deployment of cloud-based enterprise systems
After a research topic is identified and selected with some concrete keywords there are 2 approaches for you to look for a research problem: (i) doing a literature review or (ii) searching for tool or method limitations.
3.2.1. Doing a literature review
The core idea of this approach is to search for a concrete problem from a general problem that is available in research papers.
Please select a recent paper that you are most interested in. Then read and analyze this paper to answer the following questions:
- What is the problem that the paper tries to address?
- To which real world software systems has the solution proposed by the paper been applied? It is fine that the answer for this question may not be available.
- What are the other primary approaches that have been proposed to solve the same problem posed by the paper?
- How can these solutions be compared to one another?
- Are there any data and source code illustrating an implementation of the solution that may be used for solution verification and validation?
- What are the remaining issues that the paper has not completely solved?
- Are there any directions for improving the solution? Why? It is fine that the answer for these questions may not be available.
If the selected paper that you have just read only poses a general problem (An indicator of this situation is that you cannot answer most of the questions above) then maybe the paper that you are interested in is a secondary study. You then may need to try to find a primary study that addresses a concrete problem. You may use the websites below for searching for a primary study using some keywords in the secondary study paper:
- https://scholar.google.com/
- https://ieeexplore.ieee.org/Xplore/home.jsp
- https://dl.acm.org/
- https://link.springer.com/
- https://www.sciencedirect.com/
- https://www.aclweb.org/anthology/
- https://paperswithcode.com/sota
- https://sci-hub.se/
Alternatively, you can select another paper that you are interested in, then read and analyze it, and try to answer the questions to look for a research problem. You can repeat this process until you find a concrete problem for your research.
3.2.2. Searching for tool or method limitations
The core idea of this approach is to look into a software system that you are currently involved in.
Then identify the tools (i.e. libraries or frameworks or external systems or architectures or algorithms or notations) and methods related to your selected research topic that have been being used for developing the software system features.
Then try identifying which part of these tools and methods is still not perfect and needs to be improved, or what is missing in these tools and methods that makes them difficult or unable to fulfill specific requirements.
If you follow this approach then please be noted that
- The research results are the improved tools or methods, NOT the software system that you are developing. These results need to be applied to your software system, and other systems also if possible, to evaluate its effectiveness or applicability.
- If the software system that you are involved is trivial or the tasks can be done using the existing solutions without any issues then there may be no business need of improving the tools and methods. Therefore context and motivation examples are critical when identifying a relevant problem.
- You need to ensure that these results have not been produced before or these results are not published for community, and your results bring benefits not just to yourself but also to community. This should be stated clearly in the context and motivation examples.
- You need to be careful about intellectual properties because most reviewers of your research results may need access to the source code of your software system to evaluate your contribution.
4. Solution investigation
Hopefully, at this point you will have spotted an unsolved problem that you are interested in.
Then you shall need to iteratively
- Identify research questions related to the problem.
- Build your background knowledge related to the problem and research questions.
- Check the literature for existing solutions.
- Search for tools and methods related to the problem and research questions.
- Propose your solution to the problem (i.e. providing your answers to the research questions). You may extend an existing tool or method to address some of its disadvantages. You may build a novel tool or method to solve a problem.
- Document your solution.
A note is that if you conduct an applied research, or a validation research, or an evaluation research, or an experience report then you may skip investigating a solution. Instead you leverage existing solutions.
5. Solution evaluation
- You may apply an existing tool or method to a system in a specific context, and collect evidences to prove that the problem can be solved using the tool or method. This approach may be used for applied research, validation research, evaluation research, or experience report. For this approach, you need to ensure that this study has never been conducted by someone else in a similar context, and your result does bring benefits to community.
- You may implement a software system to help others use an existing tool or method more effectively. This approach can be used for applied research. For this approach, you need to clearly clarify the benefits when applying the tool or method by using your software system.
- You may apply two existing tools or methods to develop the same software system, and collect evidences (e.g. performance or scalability) to help others to select the better one in a specific context. This approach can be used for applied research.
- You may soberly and critically evaluate the effectiveness (i.e. the cost, the time, the fix) of your solution by comparing it with existing solutions or baselines using benchmark inputs or prove the correctness of your solution using mathematical modeling and logical reasoning.
- Regardless the selected approach, you always need to clearly clarify a real business need of your research result.
6. Notes
There are 3 core stages of a complete research: Discovering a problem, investigating a solution and evaluating the solution.
However a research does not need to be complete. Some research works may only focus on problem identification or solution investigation or solution evaluation or some combinations of them.
A research method may be applied to one stage, two stages or all the stages of a research. Several different research methods may be applied to different stages of a complete research.
I personally believe that, for a true research, at least one of the three stages must be trial and error attempt and cannot be done using a prescriptive process model.
7. Writing your paper
Hope that you will have found a research problem, solved it, finished documenting and evaluating your solution. Then you will need to write your paper. Your paper must
- Clearly articulate the topic of research,
- Summarize the critical problems and current solutions used in the field,
- Describe the proposed research concepts that constitute your solution, the intended methodology, the evaluation strategy, and results to date, and
- Identify the contributions of the proposed work.
You can use the links below to check grammar for your paper if you are not a native English speaker:
- https://www.reverso.net/spell-checker/english-spelling-grammar/
- https://www.gingersoftware.com/grammarcheck
You can use this Office2007_BibWord tool to manage your paper related work if you will be writing your paper using MS Word 2007 or MS Word 2010.
8. Publishing your paper
After that you will want to choose a conference and/or a publisher to publish your paper. Please use the links below for this purpose.
- International Conference on Software Engineering (ICSE)
- Automated Software Engineering (ASE)
- ACM Special Interest Group on Software Engineering (SIGSOFT)
- Operating Systems Design and Implementation (OSDI)
- Networked Systems Design and Implementation (NSDI)
- ACM Symposium on Principles of Distributed Computing (PODC)
- Association for Computational Linguistics (ACL)
- Advances in Neural Information Processing Systems (NeurIPS)
- International Conference on Learning Representations (ICLR)
- WikiCFP http://www.wikicfp.com/cfp/
- Computer Science Conference Rankings http://www.conferenceranks.com/
- Conference Rankings http://portal.core.edu.au/conf-ranks/
- ISI Journal Search https://mjl.clarivate.com/home
Good luck with your research journey!