SOFTWARE engineering is the domain of systematic software development. It emphasizes on quality of processes and products, and increase in productivity. In it is defined the processes, methods and software tools covering the entire software lifecycle, from requirements engineering to maintenance.
Software tools that cover one or more phases of the software development lifecycle are known as computer-aided software engineering tools. When conducting research in software engineering, one normally comes up with new approaches and software tools for software developers to increase software quality and productivity.
To do research, one has to have a problem or opportunity in hand. A good start is by looking at what is inefficient in a software development environment and how current software development problems can be alleviated. It can be in the form of a software development competency matrix for project management, or a risk management software tool, or a defect-based software project management tool for a more assured approach to estimating project costs or predicting project success.
Take requirements engineering for instance. A current industry problem is in defining clearly what the customer wants so that delays usually associated with changing requirements can be reduced. Techniques and software tools are needed to support this phase in the software development life-cycle.
Software tools that can extract information about design complexity or contradictions in requirements can help simplify the software development process. The provision of “bridging” software tools that allow for information extraction or transfer from one tool to another, and integrating the tools by use of a repository is a good project. This is usually done through interfacing on files or systems integration.
Software testing on the Web is a challenging task. Software tools that help do distributed testing will surely help.
Developing methods and tools for collaborative software development on the Web is an emerging area. This includes project management tools, collaborative review and inspection tools, measurement tools, code sharing tools, consistency checking tools, and Java code generation tools based on specifications.
Another area of interest is in program or system translations. Say, converting systems coded in Cobol to C language. This is the case of handling legacy systems, which are difficult to maintain due to increasing code rigidity over the years. It can be done through reverse engineering approaches that will allow for more structured and efficient coding techniques or through direct language-to-language translation.
Configuration management, which is basically change management in the software development process, also is an area of interest. Companies might not have proper change management procedures and systems to document the what, why, who and when of changes. This can span from technology changes to code changes involving versioning and releases.
The introduction of artificial intelligence into the software development process to aid developers in managing software development for tasks such as matching requirements with available software components is also a worthwhile area to look into.
All in all, software engineering is an exciting research discipline that requires innovative minds, a thorough understanding of the software development processes, and knowledge and skills in programming for the development of software tools.