Effective Requirement Engineering Process Model in Software Engineering

: Requirement Engineering is regarded as one of the major stages in software development and management. The aim of requirement engineering is to analyse, investigate, document and check the services and also the constraints of the software system that is being developed. The world of requirement management has increasingly developed over the years and has become the cornerstone for any software development to be successful, therefore it is vital for every organization to consider and pay more attention to the requirement engineering if they intend to build a quality software product that will satisfy the users. Different viewpoints, objectives, roles and responsibilities are all incorporated into requirements engineering which makes it a difficult and complex process in software engineering. Many researchers have come up with different optimized approaches to the requirement engineering. This paper reviewed relevant literature from Elsevier, Emerald, IEEE, ProQuest and Google Scholar databases. Requirement engineering processes are further outlined and explained which include requirement elicitation and development, validation and verification etc. In conclusion, the paper recommends effective requirements engineering process to adopt depending on the industry’s goal.


Introduction
Developing a software product requires different processes and stages. Requirement engineering is one of the major phases that involves every stakeholder in the software product development [4]. Requirements in the literal sense can be referred to as anything that is discovered in order to develop products or services. A system's requirement includes services and constraints of the operation [1]. In order to meet customers' needs, a well defined requirement must include statements of system functionality that satisfies user requirement and system requirements [5]. Software system requirements are divided into functional and non-functional requirement. Functional requirements refer to statements of services that product or system is required to provide. These include reaction of the system to different inputs, it also involves what the system is not required to do [25]. Non-functional requirements on the other hand refers to the constraints on the services offered by the system, these constraints could include time, process and/or standards [3]. Requirements engineering is a very complex and difficult phase in software development because it has the most impact on the results that will be gotten from the product and it involves every stakeholder including the users [9].
Requirement engineering is an approach or process through which a software engineer collects, analyzes and implement requirements from all stakeholder from all stakeholders into the software development processes. Requirements lifecycle of the software development [14].
In a typical software development environment, requirement engineering is only performed at the beginning phase of the project but in large and complex system development, requirement engineering is a continuous and iterative process as changes occur during the development so as to meet customer needs and quality [27]. Requirement engineering contains sets of activities for analysing, documenting, reviewing, maintaining and validating requirements for a system. Requirement engineering can be further broken down into four groups which are requirement elicitation and development, documentation of requirement, requirement verification and validation and requirement management/planning [28].
This paper reviews an effective model of requirement engineering process for software development. This paper is organized as follows, section 2 describes various requirement engineering models being reviewed based on software development and also highlight the number of journals and their sources being used for this paper. Section 3 introduces and highlights a typical effective model for requirement engineering and its processes. Finally section 4 describes the concluding remarks and future research work.

Related Works
In the past years, researchers have focused more on the requirements engineering part of software engineering being an integral part of the discipline.
Requirements traceability is an important part of requirements management which is an integral part of requirements engineering [7]. Requirements traceability enables the developers to be able to trace the software requirements from the beginning to the end of the development. This includes definitions, techniques, challenges and tools using a systematic analysis [29].
Torkar, Gorschek, Feldt, Raja & Kamran in 2009 proposed a model for effective requirements engineering process thereby producing quality requirements for software development. They went on to discuss the requirement engineering as being the most essential stage of software development life cycle. It is important to apply requirements engineering practices to every stage of the life cycle for software development [12]. Some stages in requirements engineering is iterative and therefore must be repeated at every stage. The model showed that requirement engineering and management has a good impact on quality software production.
A proposed model for requirements elicitation, specification, analysis and management of requirements is being linked with software change management process [31]. This is used to help the development team without an adopted process methodology.
Mogk N. W. in 2014 defines engineering design process as measureable objective functions modelled as an improvement issue where goals, results and first choice of users are being incorporated, this is described in their article; Requirement management system based on optimization model of the design process. The main goal of this design process is to present a method of viewing the requirements that enhance communication with the user and what the user wants which combines decision making techniques with the requirements engineering.
Hofman and Lehner in 2001 studied 15 requirements engineering process in various industries and came up with the fact that some participants saw requirements engineering process as an ad hoc process with a few customization of company's requirement engineering processes or using predefined requirement engineering processes.

Method of Investigation
This study took into consideration a review of two hundred and fifteen journal papers that is published in reputable academic journals ranging from 2001 to 2018. During the research, the keywords that were considered are "Software engineering", "Requirements engineering" and "Software development" and these papers were reviewed. The search was carried out in databases which include IEEE, Elsevier, ProQuest, and Emerald publishing. Table 1 below shows a table detailing the distribution of the search, number of journals and its percentage distribution.

Requirements Engineering Process
Requirements engineering is mainly implemented in software development so as to discover quality and important requirements necessary for the development of the software [11]. These requirements must be clear enough, consistent, editable and précised to enable the production of quality software. This paper reviews a proposed model for effective requirement engineering process and it consists of four phases which are requirements elicitation and development, documentation of requirements, validation and verification of requirements and requirements management and allocation as shown in the figure below. Each of these phases is being explained in detail in the sections below. This model explains requirements engineering as part of the software development.

Requirements Elicitation and Development
This phase of requirements engineering focuses on collecting and gathering of data and information from respective stakeholders which include customers, users, constraints, environment, standards etc. It also examines these information and objectives of requirements for the system to be developed. First of all, the stakeholders must be identified with respect to the system and raw requirements are being gathered from various viewpoints. These raw information and data have not been analysed or documented in a well-formed requirement notation [15]. System requirements, business requirements, user requirements, customer requirements, security requirements, standards are some of the viewpoints collected at this phase which could be done either by observing or by interviewing stakeholders. User needs may not be understood which makes it difficult for the system analyst to get the user requirements, therefore, the system analyst will have to collect raw requirements from the users and perform analysis on them where feedback is received before the results is being used to develop a quality software based on the user requirements. A contextual model for requirements development is shown in the figure below. Requirements Analysis: The major activity in the development of any quality software is the analysis of collected requirements. Gathering requirements is one but analyzing these requirements is critical which can be conflicting and difficult all in the view of meeting business requirements [18]. Some of the activities in requirements analysis include communication, prioritisation, negotiation etc. These analyzed requirements must be documented so as to aid future improvements and maintenance of the system.
Allocation and Flow-down of Requirements: The top-level requirements and low-level requirements are very different which brings about the allocation and flow-down of requirements. This is to make sure that the system requirements at both top-level and low-level will work together to reach the objectives of the software [19]. The top-level requirement is designed in an hierarchical form so as to manage information in all the levels. Detailing of the requirements tends to increase as design is being carried out down to the low-level because system requirements at the low-level must be specific. Subsystems must carry the system requirements of the whole system which brings about allocation of requirements in order to design the structure of the system. Low-level requirements may resemble that of the top-level or might differ therefore, the floe-down of requirements consists of requirements meant for the low-level elements in response to the allocation. During this phase, requirements identification, traceability, verification and validation must be considered before moving on to the next phase.

Documentation of Requirements
After the gathering and collection of requirements for the system, it is being documented to contain a description of the behaviour of the software system. Functional and non-functional requirements are being gathered and documented with the aid and completion of allocation and flow-down of requirement processes [21]. Documentation of requirements include two major stages which are requirement identification and requirement specification.
Requirements Identification: In requirements identification, a unique identifier is being assigned to each requirement which is used to identify a requirement during the process of software development and management. There are three activities carried out during requirements identification which are basic numbering activity, identification activity and support/automation of managed items and requirements. Requirement Specification: The requirements specification document is being made available after the identification of requirements has been successful. This document does not pay attention to the process of development but focuses on the software product that is delivered software requirement specification is a tool that describes the software and its behaviour including user interaction [27]. This requirement specification also describes the non-functional requirements which talks about the constraints of the design and implementation. Requirement specification describes the performance of the software which also helps in reducing development cost. Operating speed, availability, maintainability, security and recovery are amongst the features the requirements specification evaluates.

Requirement Verification & Validation
Different group of people are being put in place to confirm and affirm that the requirements from the software requirements specification are stated which is the validation process and also that they are correctly stated which is the verification process [28]. These activities has to do with checking the raw requirements against the system requirements and making sure the documentation is correct. There are various methods used for validating requirement but the ones most commonly used are prototyping and review of requirements with stakeholders. System level requirement need to be verified.
Traceability is important during validation and verification so as to introduce audit trail in checking correctness, consistency and understandability of the requirements.

Requirement Management and Planning
Requirement management and planning has to do with checking and following the changes in the requirements and dependencies of the document to make sure everything is in order during the software engineering process. Requirement management is an iterative process that must continue from beginning of the software production i.e. from planning stage to completion of software and during maintenance [17]. This happens because the requirements tend to change in the process. Requirements are bound to change and its changes can cause damage hence, the introduction of change management is vital. Requirement change management is the ability to manage the changes in requirements during the software development life cycle.
Requirement management is one of the difficult phases in the development lifecycle because reviewing and adopting a change to requirement will bring about a heavy cost and redevelopment work. Requirement management have tools dedicated to collecting system requirement and access information about the requirements. The development team is being brought together in a secure and concurrent cooperative standard by software requirement management tool. It is important to keep record of changes and create repository for requirements change requests and their documents must comply with standard industrial templates.

Conclusion
Requirement engineering is the beginning phase of software development life cycle where requirements such as user requirements and system requirements are collected, understood and analysed for the development of the software product [7]. This paper has reviewed a requirement engineering process model which is effective in the production of quality software. This model is more effective compared to others because of the introduction of requirements management and planning phase whereas other models are being limited to verification, validation, specification and elicitation. Because of the iterative nature of requirements, management and planning phase helps to put things in place for changes. For further research, software requirements specification can be looked into for modification to be implemented in software development.