Elaborate on software quality attributes

Source: Internet
Author: User
CorrectnessCorrectness refers to the ability of the software to correctly execute tasks as required. The semantics of "correctness" here covers "accuracy ". Correctness is undoubtedly the first important software quality attribute. If the software runs incorrectly, it may cause inconvenience or even loss to the user. The first level of technical review and testing is to check the correctness of the work results. Correctness is easy to say. From "demand development" to "System Design" to "Implementation", errors in any link will reduce the correctness. Machines do not actively cheat people. Software running errors are usually caused by people, so do not make excuses to blame machines for faults. Developers must make every effort to develop any software with the word "correct. RobustnessRobustness refers to the ability of the software to run normally in case of exceptions. The difference between correctness and robustness is that the former describes the behavior of the software within the scope of demand, while the latter describes the behavior of the software beyond the scope of demand. However, the normal and abnormal situations are not easy to distinguish. Developers often either did not expect the exception or treat the exception as a normal situation without processing, reducing the robustness of the results. No matter the difference between correctness and robustness, any software error is an error of the developer. Therefore, it is the developer's obligation to improve the robustness of software. Robustness has two meanings: Fault Tolerance and recovery. Fault Tolerance refers to the ability of the system to fail out of errors when exceptions occur. It is very important to design fault tolerance for such high-risk systems that are used in aerospace, weapons, finance, and other fields. Fault Tolerance is very robust. For example, the fault tolerance capability of UNIX is very strong and it is difficult to cause system problems. Recovery refers to whether the software can be restored to the status before the error occurs after it is re-run (regardless of whether it is live or not. In terms of semantics, recovery is less robust than fault tolerance. For example, if a person suffers from a bad guy, a very strong person does not have a problem at all, indicating that he is fault tolerant. A strong person, although beaten to the ground, after a while, you can get up again. In addition to the pain of skin and meat, you do not need to go to the hospital, indicating that the recovery capability is strong. However, weak people may not be able to recover in the short term, it takes a long time to lie in bed. Recovery capability is very valuable. Microsoft's early Windows systems, such as Windows 3. X and Windows 9x, crash as they do not move. The fault tolerance is indeed poor. However, their recovery capabilities are good. After the machine is restarted, it can generally run normally. For this reason, people are willing to use it. ReliabilityReliability is different from correctness and robustness. Software reliability problems are usually caused by unexpected exceptions in the design and code defects not exposed in the test. Reliability is a time-related attribute. It refers to the probability that a program will not fail within a certain period of time in a certain environment. Therefore, it is a statistic, which is usually used Average no-fault time(MTTF, Mean-Time to fault. Reliability is originally a term in the hardware field. For example, an electronic device is quite good at work, but the physical properties of the device change (such as fever and aging) during work ), slowly, the functions or performance of the system will become abnormal. Therefore, a hardware system from design to production is not necessarily reliable at work. Reliability is sometimes called stability. The software does not change its physical nature during operation. People often think that if a function of the software is correct, it will always be correct. However, we cannot thoroughly test the software and eradicate potential errors in the software. The software runs well at ordinary times, so I cannot tell you which day it will be abnormal. For example, the millennium bug, the common memory leak, and error accumulation problems may occur for a thousand years, and so on. Therefore, it is meaningful to introduce reliability into the software field. Software reliability analysis usually uses statistical methods. Unfortunately, the results currently available for front-line developers are rare. Most articles are limited to theoretical research. I once bought a book about software reliability. This book is full of mathematical formulas, which is hard to understand and how to apply it. Forgive me for my ignorance. I gave this book a support and did not dare to draw a mark. The reliability in the oral English language has a broad meaning, which almost covers correctness and robustness. As long as people find that there is something wrong with the system, it comes down to poor reliability. From a professional perspective, this is not true, but we cannot ask everyone to grasp the meaning of quality attributes accurately. It is necessary to clarify the two confusing concepts of "fault" and "error. In the modern English-Chinese dictionary, the term "fault" is defined as an unexpected situation in which equipment, components, or components cannot run in the required manner, it may be physical or logical. Errors lurking in the Code are often not obvious. The reason why they are not exposed during testing is that the environment and conditions during testing are insufficient for them to be exposed, what's more, we cannot perform the most thorough test on the code. It can be seen that a fault occurs only after it is accumulated over time and meets certain conditions. For example, a memory leak (eat memory) causes memory depletion, and an error accumulation causes a calculation error, resulting in a chain reaction, "performance overhead accumulation" causes a significant reduction in performance, and so on. Therefore, faults are often unpredictable and catastrophic. "Errors" have a wide range of meanings, such as syntax errors, semantic errors, file opening failures, and dynamic storage allocation failures. Generally, program errors are predictable. Therefore, you can preset error handlers. Once these errors occur during running, you can call the error handler to kill them and continue running them. Therefore, incorrect results are generally not catastrophic. PerformancePerformance usually refers to the "time-space" Efficiency of the software, rather than the running speed of the software. People always want the software to run faster and consume less resources. In the old society, landlords treat long jobs like this: they need to hurry up and eat less. Programmers can improve software performance by optimizing data structures, algorithms, and code. Algorithm complexity analysis is a good method to achieve the "unknown crowdsourced security testing" function. The goal of performance optimization is to "run fast and eat less". The key task is to find out the "bottleneck" that limits performance, so don't be busy in the irrelevant places. For example, when you are a teacher in a university and give lectures or experiment with your work, your job title cannot be promoted. Some people have found a breakthrough, "creating" dozens of articles within a year, and strive to break through associate professors and professors. The quality of such "Scholars" is really worrying about taking shortcuts in academics. Performance optimization is like squeezing water from a sponge. If you don't squeeze water, the water won't come out. The more you squeeze the sponge, the more dry it is. Some Programmers think that the current computer is not only faster and the memory is getting bigger and bigger, so the necessity of software performance optimization is reduced. This is not true. We do not know that with the upgrading of machines, the software system is becoming larger and more complex, and performance optimization is still necessary. The most representative is 3D game software, such as Delta Force, tomb shadows, and anti-terrorism elites. If the software (the key is the game engine) is not optimized for perfection, it is impossible to play games smoothly on an ordinary PC. Ease of useEase of use refers to the ease of use of software. Modern people have a fast pace of life, and they can think of things easily. Therefore, usability is an important quality attribute, which is beyond review. The root cause of poor ease-of-use of software is that the developer has made a mistake: He thinks that users will be satisfied as long as they are easy to use. As the saying goes, "Wang taobua, sell yourself ". When developers present the software to users, they often proudly say: "This software is very useful. I will show you how it works ,...... It's easy to use !" The usability of software should be evaluated by users. If users think the software is difficult to use, developers should not reverse: Where can they find the dummies! In fact, it is not a user dumb, but a self-developed software is too dumb. When users really feel that the software is very good, a warm feeling will emerge, so they will use "friendly interface", "Easy to use" and other words to praise the ease of use of the software. ClearClarity means that work results are easy to read and understand. This quality attribute expresses a kind of simple desire: Let me spend money to buy it or use it, let me see what it is. When I was a child, I dropped out of school to become a worker because I couldn't understand why the charge had to be divided into "positive" and "negative. Developers can write programs and documents that are easy to read and understand only when they have clear ideas. What is understandable is usually concise. A primitive problem may be complicated, but a high-level person can design a software system very concisely. If the software system is bloated, it will become a problem sooner or later. So conciseness is the result of "Improving" people's work, not the result of scrawling. In life, the opposite to conciseness is "being confused ". The nonsense master has a famous saying: "If I make you understand it too easily, you must have misunderstood what I mean ." Tang Miao is the most "Mother-in-law" man in Chinese novels. There is a public opinion survey: if there are only four types of men in the world: Tang Miao, Sun Wukong, Zhu Bajie, and Sha Seng, which type do you want to marry? List priorities. The results show that modern women put Tang Miao at the end without exception.

 

Many people have a strange experience when reading graduate students: If you write your articles in a concise manner, they will be easy to understand. You may not be able to contribute, but you can only add some mysterious things, only by making simple things complex will the contribution hit rate be increased. Although this approach may be effective, do not apply this "experience" to product development!

SecurityHere, security refers to information security, which is security rather than safety. Security refers to the ability to prevent illegal system intrusion, which is both a technical issue and a management issue. Information security is a profound learning, and its development is based on the struggle between justice and evil. There seems to be no absolutely secure system in this world, and even the US military system is frequently hacked. Today, hackers are flooding around the world. This is really a high level of magic! For most software products, it is neither impossible nor necessary to prevent illegal intrusion. Because developers and customers are willing to invest only a limited amount of money to improve security, they have to consider whether the value is worthwhile. What kind of security is satisfactory? Generally, if the cost of illegal intrusion (taking into account multiple factors such as time, cost, and risk) is higher than the expected benefit, such a system can be considered as secure. ScalabilityScalability reflects the software's ability to adapt to "changes. In the process of software development, "Changes" are commonplace, such as requirements, design changes, algorithm improvements, and program changes. Since the software is "soft", is it inherently easy to modify to adapt to "changes "? The key lies in the scale and complexity of the software. If the software scale is small and the problem is very simple, it is indeed easy to modify. In this case, there is no "scalability. If there are only 100 lines of software code, "Software Engineering" is useless. If the scale of the software is large and the problem is complicated, if the scalability of the software is poor, the software is like a house caused by cards. Pulling out or inserting a card may make the house collapse. Scalability is a key quality attribute in the system design phase. CompatibilityCompatibility refers to the ability of two or more software to exchange information with each other. Because the software is not used in a "vacuum", it must be able to interact with other software. For example, if the file formats of the two word processing software are compatible, both of them can operate on the other party's files, which is very good for users. The word processing software WPS developed by Kingsoft in China can be used to operate Word files. The commercial rule of compatibility is: the weak try to be compatible with the strong; otherwise, the strong should not be compatible; otherwise, the market will be divided. If you often watch "gangster" movies in Hong Kong, you can easily understand the truth. Therefore, WPS must be compatible with word, otherwise it will not survive. However, word is definitely not compatible with WPS, unless WPS is the leader in China. PortabilitySoftware portability refers to the ability of the software to run in different software and hardware environments (CPU, OS, and compiler) without modification or slight modification, which is mainly embodied in code portability. The lower the programming language, the harder it is to transplant programs written with it. This is because different hardware architectures (such as Intel CPU and iSCSI CPU) use different instruction sets and word lengths, while OS and compiler can block this difference, so higher language portability is better. C ++/C is an intermediate language, because it has flexible "bit operations" (therefore, it has hardware operation capabilities) and can be directly embedded into assembly code. However, C ++/C does not depend on specific hardware, so it is more portable than assembly languages. Java is a high-level language. Java programs are called "one-time compilation and run everywhere", with 100% portability. In order to improve the performance of Java programs, the latest Java standards allow people to use some optimization technologies related to the platform. In this way, after optimization, the Java program cannot "compile once and run everywhere ", it is still able to "compile once and compile everywhere ". Generally, the "device-related program" and "device-independent program" should be separated during software design, and the "function module" and "User Interface" should be separated to improve portability. This article is excerpted from "high quality programming guide: C ++/C Language"

Edited by Lin Rui and Han Yongquan

Published by Electronic Industry Publishing House

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.