Non-Functional Requirements (NFRs) are rarely treated as \first-clas" design elements as Functional
Requirements do. Often they are stated informally and incorporated in the final software as an after-
thought. Time and again, however, NFRs have been cited as the common causes of software development
delay and failure of the shipped software during execution resulting in huge financial and sometimes
human life loses.
In this research, we leverage existing research work for the treatment of NFRs to propose an approach
that enables to systematically analyze and design NFRs in parallel with functional requirements. Our
approach premises on the importance of focusing on tactics (the specifics approaches used to fulfill NFRs)
as opposed to focusing on NFRs themselves. Such observation lays the ground work for formulating
different processes that can be applied for various tactics for successful incorporation of NFRs to FRs
during object-oriented analysis and design (OOAD).
Specifically, we provide processes that utilize classpects for analyzing and designing a particular
group of tactics. This processes enable us to maintain separation between NFRs and FRs even if they
are integrated into one system. Therefore, both traceability and future maintenance is made easier.
We also tackle the various problems that arise from interaction among NFRs. We enhance an
existing approach in better dealing with this interactions that can be positive and negative. We also
capture the relative importance users put into NFRs (prioritization) and use such knowledge in managing
the interactions among NFRs.