  Software requirements prioritization plays a crucial role in software
development. It can be viewed as the process of ordering requirements by
determining which requirements must be done first and which can be done later.
Powerful requirements prioritization techniques are of paramount importance to
finish the implementation on time and within budget. Many factors affect
requirement prioritization such as stakeholder expectations, complexity,
dependency, scalability, risk, and cost. Therefore, finding the proper order of
requirements is a challenging process. Hence, different types of requirements
prioritization techniques have been developed to support this task. In this
survey, we propose a novel classification that can classify the prioritization
techniques under two major classes: relative and exact prioritization
techniques class, where each class is divided into two subclasses. We depend in
our classification on the way the value of ranking is given to the requirement,
either explicitly as a specific value in the case of the exact prioritization
techniques class, or implicitly in the case of the Relative prioritization
technique class. An overview of fifteen different requirements prioritization
techniques are presented and organized according to the proposed classification
criteria's. Moreover, we make a comparison between methods that are related to
the same subclass to analyze their strengths and weaknesses. Based on the
comparison results, the properties for each proposed subclass of techniques are
identified. Depending on these properties, we present some recommendations to
help project managers in the process of selecting the most suitable technique
to prioritize requirements based on their project characteristics (number of
requirements, time, cost, and accuracy).
