Most people maybe think that software engineers are only coders that develop and maintain applications, systems, and infrastructures. This is not false. But, software engineers are also responsible for the assessment and improvement of the source code itself, based on specific metrics and techniques. This post briefly discusses how software engineering can evaluate modern software systems.
There are mainly two paths for software evaluation: qualitative and quantitative studies. First, qualitative studies (based on questionnaires, interviews, case studies) are essential for the understanding of developers’ needs (environmental, organizational, technical issues, etc.) and for the improvement of developers’ performance (less bugs, better program functionality, efficient development). Second, quantitative studies (based on static and dynamic analysis, statistics, machine learning, etc.) are essential for the understanding of the source code itself and the improvement of the tools and techniques that programmers use to develop software products of high in-use quality (having less unexpected software errors—-crashes).
In both of the aforementioned cases software engineers need a sample of developers and source code. Usually, if the sample is large, the results would be better. A main challenge regarding a qualitative study can be the gathering of the subjects and the design of the empirical questions. In addition, regarding quantitative studies, a main challenge can be the finding of the source code under examination. However, these issues have been almost eliminated thanks to the open source software and several web communities (e.g. GitHub, StackOverflow). Also, the fact that companies, such as Microsoft and Google are active research centers, give the opportunity to the researchers to investigate how developers are organized in teams, collaborate, write code, and so on.
Finally, software engineering can help developers and companies to produce better systems, applications, and infrastructures, by using high-quality development tools (editors, IDEs, testing tools, repositories) and processes, as well as better organizational structures (based on sociological and psychological theories).