In part 2 of this series, we have seen how software engineering methodology plays an instrumental role in software development life cycle. In this post, we will see how software requirement engineering is done on software projects and how practical considerations are involved during software requirement engineering.
Imagine a software engineer who has no practical knowledge of software requirement engineering has been assigned to gather customer requirements. First of all, the software engineer will not be able to understand what are the crucial requirements of the customer. The software engineer will also be not capable of understanding the relationship among the customer requirements. Thus the software requirements gathered by the software engineer will not be considered good. If a software design is built using this set of requirements then the software product will have lots of problems and software defects.
An experienced software engineer on the other hand knows the ins and outs of gathering software requirements from customers. An experienced software engineer also knows how to manage software requirements. An experienced software engineer also will convert software requirements into good software requirements specifications. He/she will create good use cases using UML (Unified Modeling Language). This will ensure that there will be no defect in the software requirement specifications and these specifications will lead to creating good software designs.
So how budding software engineers can get good experience in software requirement engineering, even when they are studying at the university? The answer lies in how they are being taught software engineering. If they are being taught only theory of software engineering then they will have no practical experience. On the other hand, if they are being subjected to build software products as a part of their curriculum then they will have some good exposure to practical considerations involved in software engineering.
This is the most important factor which plays an important role in effectiveness of teaching software engineering.