gogoWebsite

Functional and non-functional requirements for software development

Updated to 1 hour ago
Functional requirements, generally we are obvious and easy to see, that is, what functions are generally realized, what services are provided, by and large, I think the problem mentioned, or what we say in our daily life: "it looks complex or not", basically it will be for the functional requirements. If you take google's search service as an example, that is:
Provide an input box, provide a button, the user in the input box to enter keywords, press the button, you can search for the corresponding results.
Functionality requirements can vary greatly, and are varied, depending on the website, the software, the business and the purpose of use.

Non-functional requirements, applying the following Wikipedia definition (which is a bit obscure and convoluted, but I think it's a bit more astute and accurate)
In systems engineering and requirements engineering, a non-functional requirement is a requirement that determines the operation of a system or its characteristics based on a number of conditions, rather than a requirement that is specific to the behavior of the system. The opposite of non-functional requirements are functional requirements, which define specific behaviors or functions of a system. Non-functional requirements can also be viewed as characteristics that need to be met in order to satisfy the customer's business needs, but are not in addition to the functional requirements.
The plan for realizing functional requirements is generally detailed in the system design, while the plan for realizing non-functional requirements is detailed in the system architecture. In general, functional requirements define the behavior of the system, while non-functional requirements define the characteristics of the system.
Non-functional requirements are generally referred to as "qualities" of the system, or sometimes as "constraints", "quality attributes", "quality goals", "quality attributes", "quality service requirements", or "non-behavioral requirements". sometimes referred to as "constraints", "quality attributes", "quality goals", "quality properties", "quality service requirements", or "non-behavioral requirements". There are many non-functional requirements that end in "ilitiy", such as stability and portability, so non-functional requirements are sometimes called "ilities". ilities".
Non-functional requirements can be divided into the following two categories:
Execution qualities are qualities that can be observed when the system is in operation, such as security and ease of use.
Evolution qualities (Evolution qualities), and the software system structure and development process related qualities, such as software testability (English: software testability), maintainability, scalability, scalability (scalability), etc.
Non-functional requirements are generally hidden and easily ignored by rookie programmers and designers. Non-functional requirements are different from functional requirements, which have some commonality in different websites and software. For example, @ZiLiu mentioned the problem of mass file storage, Taobao, Tencent, and Google have encountered the same problem and developed similar solutions (TFS, TFS, and GFS).
Non-functional needs of the classification method is more, and there is no industry and consistent standards, but most of the same way, the name / called and categorization may be slightly different, but its meaning and pointing is generally tend to be the same, I briefly introduce my general more often used classification:
  1. Performance/Capacity: Performance and capacity are easy to understand, including the number of users to be supported (especially the peak number of concurrent users), the response time acceptable to users, and the data size (e.g., millions of data size, hundreds of millions of file storage, etc., as mentioned by @Ziliu). Here is a small correction to @Ziliu's point of view, million-level data support, there are still some commercial database products can support, TPC-C/TPC-D as well as a new generation of industry performance testing standards there are ten million data scale test project, there are database vendors to sign up to participate in, of course, for the Taobao such a business model and the actual situation/requirements, the cost-effectiveness and practicality may indeed be relatively low). (of course, for a business model like Taobao and the actual situation/requirements, the price/performance ratio and practicality may indeed be lower)
  2. Reliability/Availability/Resilience: Reliability is a set of attributes related to the ability of software to maintain its functional services and performance levels over a specified period of time and under specified conditions (availability is another term). For example, we require the system to run 7x24 hours a day, and the total number of hours of continuous operation failure and downtime throughout the year should not exceed 10 hours, etc., all belong to this aspect of the requirements. Resilience is related to the ability to rebuild performance levels and recover directly affected data after errors and failures. For example, Alipay needs to ensure that if the transaction submission failure, need to ensure that the rollback, can not be this end of the bank's money is not paid successfully, but that end shows that the payment is successful or vice versa this end of the bank debit, that end in the change of the transaction status is missing because of the redundancy of the traffic or other reasons lead to transactions or the status of the non-payment.
  3. Maintainability/Manageability: The stability of the system without human intervention, self-troubleshooting capability, and testability all belong to this category. Troubleshooting ability, system fixes, upgrades, backups, recovery mechanisms, and convenience or not, all belong to this category. This usually greatly determines the operation and maintenance cost of the system and the difficulty of maintenance.
  4. Security: including transmission encryption, storage encryption, crackability, as well as a variety of unauthorized user behavior how to prevent and control, are the scope of security, where security is not only for the external ordinary users, but also for the internal control of different levels of authority of the user. Small to how to prevent and deal with the user in the input box to enter special characters to get the designer unanticipated results, large to prevent external hackers and internal spies. Security often depends not only on technical implementation, but also on corresponding systems and audits.
  5. Ease of use: Well, this is the hottest topic right now, and it's probably the only area of non-functional requirements that's being highlighted and brought up by all sorts of people. Ease of use design has now risen to a new level, called the human-computer experience, UE design, although there is still some controversy over whether UE is classified as a functional or non-functional requirement, but the mainstream view (including my own) is that it is a typical part of non-functional requirements.
  6. Data consistency: This includes the coding and language of the data, consistency requirements for redundant data (including timing requirements), etc. For example, in order to performance considerations, the overall design of the database does not use the Basque paradigm, but the second or third paradigm requirements to design, some information (such as user registration information), may exist in multiple places in the system at the same time (for example, multiple tables), when the registration information changes, how to ensure that the information recorded in multiple places are modified, and how much time limit is required for all the modifications and so on. This is all part of the scope.
  7. System/Environment Conditions and limitations: Existing hardware and software conditions, platform conditions, and network conditions all fall into this category. Typically, for example, many mobile Internet products must consider the bandwidth conditions of the mobile network, the terminal computing performance and capacity, as well as its mobile network stability and so on.
In fact, from my experience, generally speaking, the cost, difficulty and workload of many software projects and products on non-functional requirements is more than that of functional requirements. In specific software domains, such as websites (especially Taobao, facebook and other massive user scale websites), finance (banking and securities), telecommunication domains, the importance, workload, and technical difficulty of implementing non-functional requirements are far greater than that of implementing functional requirements.

Moreover, the realization of functional requirements is actually, in most cases, more dependent on the masters of the business (or a good product manager) than on the masters of the technology, and the realization of non-functional requirements is precisely the important subject that challenges the masters of the technology.

One of the most typical examples of extreme non-functional requirements is the telecom billing system, the basic function is very simple, get the call length, according to the rate formula to calculate a money out, but put into the massive number of users, real-time billing requirements to see, this is a very challenging technical work.

Another classic case is that a local bank in China (note that it is only a local bank) wanted to introduce a counter service system, and found a vendor in Xinjiapo, who has many cases in Southeast Asia's banking industry, and the functional design is very perfect, reasonable and advanced. However, after the introduction of the system, the local bank issued hundreds of thousands of credit cards within 2 weeks, and the system could not cope with the collapse. This is a typical example of a system with perfect functional requirements but non-functional flaws.

In my experience, non-functional requirements, performance/capacity, and security are generally the most technically challenging, informative, costly, and rewarding areas to focus on, and of course, ease of use (UE) is now an area that receives extreme attention.

The area of non-functional requirements realization is a must-follow, must-familiarize area for aspiring architect-oriented IT technicians.

The biggest root cause of this problem is that only see the part of the functional needs of the site, and did not pay attention to the part of the non-functional, for non-professional IT technicians, this is normal, but for IT technicians, it is a mandatory course that requires serious attention.