Wednesday, April 3, 2019

What is software quality?

The main problem in quality management is the fact that the definition of quality is too vague and ambiguous. This is due to the fact that usually the term quality misunderstood. Such confusion may be due to several reasons …
Try to answer the following questions:
  • What is software quality?
  • Popular opinion on the quality
  • Professional approach to quality
Read more about software testing services click here

What is software quality?

In our first issue, we try to give a definition of quality and Software Qa.
The main problem in quality management is the fact that the definition of quality is too vague and ambiguous. This is due to the fact that usually the term quality misunderstood. Such confusion may be due to several reasons.
First, the quality is not a single idea or concept is more diverse and multidimensional concept.
Second, for any concepts and definitions, there are several levels of abstraction, for example, when people talk about as one of the means by this is too broad and vague sense, while another may refer to a specific definition and meaning.
Third, the term quality is an integral part of our everyday communication, but the common and professional use may be very different.

Popular opinion on the quality

Conventional wisdom about the quality is such that it is something intangible and intangible - of it may be controversy and debate, it is possible to criticize and praise, but to weigh and measure the quality of the impossible. Such expressions as "good quality" and "poor quality" are a clear example of how people talk about something uncertain for them, that they can not clearly describe and define. 
This opinion reflects the fact that people perceive and interpret quality in different ways. It is understood that quality can not be controlled and managed, and the more it can not be quantitatively measurable. Such a view clearly contrasts with the professional approach to quality management - quality is a well-defined quantity that can be measured and controlled, it can be managed and improved.
Other popular opinion that the quality is closely connected with a luxury first-class and refined taste. Dear, thoroughly thought out and more technically sophisticated product is considered as a guarantee of high quality than cheaper counterparts. Following this logic, Cadillac - is a quality car, and Chevrolet is not, despite the reliability and the number of breakdowns, or HI-FI system is a quality system, as an ordinary radio - no. Under this approach, the quality is limited to certain class of high-value products with sophisticated functionality and class products. Simply put, it is hardly inexpensive product will be classified as a quality product.

Professional approach to quality

Unfortunately, such an uncertain and vague ideas can not be used to improve functional testing services. Consequently, it is necessary to give a clear and easy to work definition. In 1979, Crosby has defined quality as "compliance» ("conformance to requirements"), and Juran and Gryna in 1970 to define quality as "fitness for use» ("fitness for use"). These two definitions are closely linked and are in excellent agreement, as we shall see later.
"Compliance" suggests that the requirements should be clearly defined so that they can not be understood and interpreted correctly. Later, at the design stage, made regular measurements of the developed product, to determine compliance. 
Any discrepancies should be considered a defect - the lack of quality. For example, the specification of a particular model of radio stations may require ability to make a certain frequency of radio waves at a distance of more than 30 kilometers from the source of broadcasting. 
If the station is unable to fulfill this requirement, it does not meet quality requirements and should be declared unfit and defective. Based on the same principles, if Cadillac meets all the requirements to machines Cadillac, then it’s a quality machine.
If Chevrolet meets all the requirements to machines Chevrolet, therefore, it is also a quality machine. These two machines can be quite different in style, speed and efficiency, but if both are measured by the standard sets for them, then they both will be high-quality machines.
The definition of "fitness for use" takes into account the requirements and expectations of end users of the product, which expect that the product or service provided will be convenient for their needs. However, different users can use the product differently, this means that the product must have the most diverse use cases. By definition, Juran each use case is a characteristic of quality and they can be classified into categories as parameters usability.
These two definitions of quality ("compliance" and "fitness for use") is essentially the same. The difference is that the version of "fitness for use" refers to the role requirements and expectations of the customer. The role of the customer associated with the quality, can never be overstated. From the perspective of the customer, product quality, which he acquired, consists of many different factors, such as: price, performance, reliability, etc.
Only your customer can tell you about the quality because it’s the only thing he really buys. The customer does not buy the product. He buys your assurance that all of his expectations for the product will be realized.

Conclusions

Let’s try again to give a definition of quality from the perspective of the customer or user of the product.
Quality - it’s suitability for use. Does the product is what I need, whether it makes my job if I can use it as I prefer.
And now look at the developer’s perspective.
Quality - is the compliance requirements specified and collected if the product does everything that is stated in the requirements.
The problem is that the specified requirements and collected is usually only part of the real requirements and expectations of the customer. Where is the correct definition of quality?
The quality of this correspondence is the real requirements, explicit and implicit. Very often implicit requirements are so obvious to the customer or the user that he does not even suggest that they are unknown to the developers. For example, let us return to our cars - the customer can describe in detail the requirements for the design parameters of the engine, interior design, exterior colors, but never point out that the tires should be round, and the windshield - transparent.
The customer will be satisfied only if the purchased product will fully meet its real and vital needs, as specified, or not.

Testing Strategy


Managers of teams testing and lead tester often develop than necessary working documents and artifacts, documents a higher level, describing the general approaches to system testing and development of the software testing services process in the project. On one of these documents, artifacts, and will be discussed below.

Many of us have been developing a testing strategy, particularly often, such artifacts are interested in the customers of major projects, the development period which exceeds one year. Let’s try to clarify the concept of testing strategy and to answer some questions dismantling the few examples in practice.
Terminology
STRATEGY - the art of leadership, a general plan of this work, based on the current reality at the present stage of development.
There is another option, with a military slant:
The science of warfare, the art of warfare. The overall plan of warfare, military operations.
I cite two definitions, although the first to accurately describe what actually we are dealing with. And although our everyday lives can be seen as waging war for the quality of the product, as we shall see anything "military" in the testing strategy is just not.
Definition
Testing Strategy - a plan of work on testing the system or module-specific functionality and dependencies with other components of systems and platforms. The strategy defines the types of tests that need to perform for a given functional system includes a description of the approaches in terms of testing purposes, and may specify or describe the requirements necessary to conduct the test tools and infrastructure.
It turns a little scary? Let’s try to split into more detailed parts using, for example, the breakdown of the issues that the strategy meets the test.
The strategy responds to the questions:
·         How, how testing will answer that this functionality works?
·         What should be done and what use of the tools for achieving the goals of testing?
·         When a specific functionality will be tested and therefore when to expect the results?
As an additional problem to be solved in the process of understanding the strategy of testing, we can consider the problem of minimizing the cost of testing. Below is an example we analyze a specific case, but now just confine ourselves to stating the fact.
We see that the testing strategy, as an artifact, fits well into the test plan. Templates, test plans offered by different methodologies, often just one of the sections include a description of a testing strategy or include a description of the strategy in points of the plan is responsible for testing of specific parts of the functional. For example, the pattern Rational Unified Process defines testing strategy as the biggest section of the test plan.
That the ideologically more correct: to provide a strategy for the entire project, or to develop specific approaches for each area of ??testing depends on the project. In modern distributed systems with several types of jobs and system agents that also act as users of the system, allocate logical strategy for each set of functional test: the module or subsystem. For simpler applications you can offer testing of all applications on a single strategy.
The customer often wants to control the testing process and see the understanding of the problem of testing for implementing the project. For him, testing strategy is less detailed document, the vision (vision) of how the system will be tested during development.
Practice
In order to move from theory to practical application, try to develop a testing strategy for the two different software solutions: desktop applications, working in single user mode and client-server system of average complexity.
Parsed following examples use a simplified model of the application in the context of interaction between application components and systems, as well as the internal logic of the application.
As a simple desktop application, take, for example, a new scientific calculator.
Scientific calculator
The whole set of functions that applications can be divided into two logical groups: the logic of engineering operations and interaction with the operating system (allocating and freeing resources, the use of system components interact with the system clipboard, etc.).
Of the requirements for the application to provide support for the 5 operating systems in 4 main languages ??of localization and implementation, for example, 50 engineering functions, each of which is clearly covered by one test. Tests, of course, include checking test cases, checking the boundary values, etc. In addition, the application can perform, for example, 5 functions in the interaction with the system (running an application, exit the application, save results to a file, work with clipboard, etc.).
Full coverage of the requirements specifies a set of 5 * 4 * (50 +5) = 1100 test runs. So how to perform all operations available applications for all supported operating systems and language localization.
For example, as you know, picked up not by accident. Let’s try to illustrate the testing strategy in action.
We return to the breakdown of the application functionality into logical groups. There is a set of engineering functionality is system interaction.
It is obvious that the work and the validity of the calculations, implemented within an application and do not use external components are not dependent on the localization of the system. Moreover, if the application is successfully running under a supported operating system and basic functionality for working with engineering functions work, then having a successful run all the engineering tests with the analysis of test results, you can talk about the performance of engineering functions under all supported operating systems and localization.
Thus, to guarantee the availability of engineering operations, the calculator can be run of 50 tests under the same environment.
Interaction with the system, starting, stopping the application, work with the buffer, writing the results to a file in this example, delivers a 5 tests. We have 5 versions of the operating system and 4 localization, which gives 20 combinations and 20 * 5 = 100 test runs.
Thus, for this example, the full scope of functionality is determined by 50 +100 = 150 test runs, including 50 tests of engineering functions are performed under the same configuration and 5 tests of system functions under the 1920 test environment.
Testing strategy in action
In this case, we figured out that it was necessary to test, defined the requirements for tests, conducted a simple analysis of test conditions and dependencies. In essence, defined the strategy: "how" and "what" test. Develop tests can be in parallel to develop a strategy that in any case, the design and development of test strategy is not a substitute.
Full coverage of the requirements specifies 1100 test runs. Parsing functionality and definition of the required set of testing gives the output from the strategy of testing 150 test runs.
For this particular example, the development of a testing strategy provides a direct benefit in the cost of testing at 1100/150 = 7, (3) times. As you can see, it makes sense. Try to consider steps for developing a testing strategy for more complex applications - distributed client-server system.
Distributed system
Approach in developing a testing strategy for distributed systems in much the same developing a testing strategy for a desktop calculator. For example, similar to the previous example, we need to identify the main areas that can be tested separately. To test the complex systems, also useful to distinguish not only, so to speak, the operational steps for testing (that is, what, how and where to be tested), but also to analyze the tactical steps for testing with the development of the system over time.
We return to a strategy of testing complex distributed systems. Carry out an indicative breakdown of functionality to the test area in order to understand how to plan testing and minimize costs.
Suppose that the system has a "thick client, application server and database server, which can operate on different physical platforms. The basic logic input / output validation of values ??and the construction of printed forms focus on the client, application server provides the presentation level and the necessary service logic (automatic data archiving, alerting users about abnormal situations, etc.), and the database provides the addition of direct storage certain part of the data sold, for example, in the form of packages of functions. Nothing particularly difficult to be selected and let the description does not scare some over action - we just outlined the problem for testing.
In order to not overly complicate the problem, restrict the range of test environments by fixed configurations of the database server (often in the industrial exploitation of a dedicated server or a cluster solution for databases) and application server. The client application provides the under with 2 operating systems and are rigidly fixed configuration of the operating system components (for example, on all user machines are regularly installed all the updates and service packs + a set of software on client machines is strictly controlled by the internal IT policy).
Volume problems
Try to describe the problem in terms of test scenarios, then there will be used to assess the complexity of the problem or part of the number of tests required for testing the functional.
Client: 50 tests to work with the data (input forms, data calculation, based on data stored in the dictionaries, search data, editing dictionaries, etc.), 10 tests to work with the printed forms (forming periods of sampling, the choice of types of records, print or export to a predefined list formats, etc.). Let the testing of the system is required, as in the previous case, 5 more tests. By analogy with the previous example we can get the following picture: having 2 environment, we obtain (5 +10) * 2 = 30 test runs to verify the functionality associated with the operating system (including functional printing and exporting in which to create new files in the filesystem) . We assume that the 50 test runs of implementing validation logic of the data can be performed under the same environment. Outcome - 80 test runs to test the client system.
Uniting under the example in testing the functionality of the application server and database. Let the application server implements the 20 teams for data processing and user sessions (excluding the operation of system connection pooling, compression functions transferred over the network traffic, etc.). The database server implements the 1910 system for data archiving operations, construction, usage statistics report, and several more operations. The general sense is that we have a finite set of test operations, and as the configuration defined in advance, we can talk about the final set of tests that must be done that would test the server functionality of the system. Outcome - 30 tests on the server side. Note that in this example, we do not touch the load carrying component testing: we are talking only about the functional testing services.
 Depending on the project artifacts
More interesting from the standpoint of developing a testing strategy in this example, will factor in the development of the whole system: the creation of new modules in the client application or entry into a system of new server agents.
What should I consider developing a testing strategy for complex distributed or client-server systems. One of the main factors influencing the strategy of testing (after separation of the test areas and an understanding of test problems in each area), is an analysis of the schedule the appearance of new functionality in the system, and often plan to develop designs and specifications for the modules and system components (from This depends on the task of design tests). A clear project plan, divided by tasks of planning, design, design and implementation of testing gives the manager the foundation needed to solve the problem, which raises the question of "when", ie issues related to test planning. Although the temporary assessment and evaluation of complexity of the problem logically extend beyond the definition of the strategy and are planning to direct testing, it is understood the application / system in the context of its development over the project is a strategic component of the test plan.
Thus, developing a testing strategy for small applications, and serious enough systems similar to the stage of the selection of test areas and understand the dependencies of the application functionality from external modules and components. Vary the strategy depending on the type of application under test can in part understand the development of the system over time, since large systems are often developed in several stages and are characterized by large in comparison with desktop applications, a set of functionality that requires Retesting in each new version. Understanding of what exactly should be tested as how specific functionality will be tested, that is the result of satisfying the objectives of testing is often the result of the development strategy of testing.
Conclusions
That in general gives a strategy of testing? Analysis of test tasks on components, the selection of test areas and, ultimately, a more complete understanding of the test tasks in a specific project. As we have seen in testing engineering calculator, understanding the problem allows us to separate the functionality of the application under test or system areas that can be tested independently, thereby reducing (and sometimes quite significant!) The costs of testing.
Let us return to the definition of strategy: "a general plan of work based on the current reality at this stage of development" - is applicable to the testing strategy is understanding "what" "where" (in what environment) and "when" will be tested. The answer to the question "how" we can give an analysis of system requirements and design tests. Agree that having a plan before the development of functional and can be confident enough to schedule tasks for testing, prepare the necessary data and test environment. At any given time, the head, relying on a strategy, he knows where he is and where to go next. Planning a test, the head of department or lead tester does not begin to understand the system and directly engaged in planning, resource allocation and deadlines for specific tasks.
Visit: Software testing companies

Dissecting RUP - tasks and roles in the testing


Classification of tasks and roles in the Software testing , based on the methodology RUP.
Around the roles and tasks associated with testing and quality assurance, has developed several contradictory ideological currents that have assiduously cultivated supports these ideas. 
Point of view is largely the opposite, in many respects contradictory. Testing is seen on the one hand some polumehanicheskim process that requires no special skills: tester see that kind "klikalschikom" which simply chasing the application waits until it "falls", and then gleefully reports an error and continues in the same spirit. 
Recently, we must pay tribute, there are materials on testing and quality, the publication of the book, develop sites devoted to this area - this line of thought is gradually disappearing, "no." From another point of view, which is probably partly cultivated, and testers themselves (in the broadest sense of the word), software testing services - a process that covered many uncertainties, it is difficult formalization and measurable. 
If, however, to add test automation services, which is estimated to those who instilled the tools and solutions for testing, requires a large (compared to manual testing) effort and to talk about evaluating the quality of the product line of test turns entirely opaque to the casual observer, and sometimes for themselves testers and QA.
Seems to me that this situation is related to the fact that there is some misunderstanding of the processes associated with testing and quality assurance. Meanwhile, the direction of testing is clearly defined roles and tasks as it solves. 
Having defined the roles and tasks, it is possible not only to imagine a more or less the standard testing process, but also understand that it has not. Note, I do not identify the processes of testing and quality assurance. The objectives of quality assurance, I plan to return in subsequent publications. I now propose to consider testing as part of the quality assurance process.
Try to define and understand what their roles and tasks are directed testing. In order not to reinvent the wheel, I propose to build on the existing methodology RUP (Rational Unified Process), the most common and the full version.
Analogy
There is a wonderful advertising: How to make cars SAAB? Take a plane and cut all unnecessary, that helps him take off.
Let’s try to get a template for a RUP-MTP (Master Test Plan) and cut off all unnecessary, that is not the topic of this article. The most interesting thing that had cut off virtually the entire pattern, leaving only one application and sign for the calculation of resources. Add a translation, we cut out too much.
Testing Activities
Let us consider in more detail the existing activities/tasks associated with testing:
·         Plan Test
- identify requirements for test
- assess risk
- develop test strategy
- identify test resources
- create schedule
- generate Test Plan
·         Design Test
- prepare workload analysis
- identify and describe test cases
- identify and structure test procedures
- review and assess test coverage
·         Implement Test
- record or program test scripts
- identify test-specific functionality in the Design and Implementation Model
- establish external data sets
·         Execute Test
- execute Test procedures
- evaluate execution of Test
- recover from halted Test
- verify the results
- investigate unexpected results
- log defects
·         Evaluate Test
- evaluate Test-case coverage
- evaluate code coverage
- analyze defects
- determine if Test Completion Criteria and Success Criteria have been achieved
Roles in testing
Test Manager, Test Project Manager
Produces management control (management oversight)
Responsibility:
Provides technical direction
Receives the necessary resources
Provides management reporting
Test Designer
Test Designer
Defines and prioritizes the development of test cases ensures
Responsibility:
Developing a test plan
Developing a model for testing
Evaluates the effectiveness of testing
Tester, test engineer
Tester
Runs tests
Responsibility:
Runs tests
Captures the results
Restores the tests and the system after failures
Documenting change requests
Administrator of the test system, applications, support life-cycle testing
Test System Administrator
Provides management and support test environments and data
Responsibility:
Administers the test management system
Installs and manages access to test systems
Database administrator, database manager
Database Administrator, Database Manager
Provides management and support of test data (databases)
Responsibility:
Administers the test data (database)
Test Designer
Designer
Establishes and defines the operations, attributes and relationships of test classes
Responsibility:
Establishes and defines the test classes
Establishes and defines the test sets (packets)
Developer tests
Implementer
Develops unit tests (unit tests), test classes and test sets (packets)
Responsibility:
Creates the test classes, collecting probe packets and integrates them with the test model
As you can see, on closer inspection, it turns out that the tests - a well-defined process with dedicated roles and area of responsibility for the various players of the project. The order of the tasks defined in the usual (full) round of testing. This cycle can be applied both for projects aimed at lengthy iterations, and for "quick" projects ongoing on evolutionary techniques (evolutionary) or according to the increasing pace of XP.
Hopefully, after a brief excursion into the inner world of tasks and roles in testing, will be less confusion.


Testing Criteria


Criteria - is a trait that has three main purposes: it is produced by 
1) an assessment
2) identification and 
3) classification. Consider these three appointments in turn applied to software testing.
Introduction
The term "testing criteria" is interesting because of its use in the field of software testing services often leads to misunderstandings, while in other areas of human activity such problems do not arise.
 For example, when we start a project on testing and the customer asked what the criteria of testing will be used must specify exactly what criteria he has in mind - a criteria for testing is complete, or the criteria of selection tests for regression testing services, or it may be some more test . 
Why is this happening and how to get rid of the uncertainty associated with the use of the term "testing criteria" - these are the two main issues, which is devoted to this essay.
Digression about the terms
Dates always cause much controversy. Want to find definitions of terms that would satisfy everyone. Alas, this rarely happens. People invest in the same words mean different things, which sometimes leads to mutual misunderstanding.
Terms that are used only in some special areas are less prone to this phenomenon of multiplicity of meanings. It is unlikely that the terms "surplus", "giardiasis" or "abyss" will cause difficulties with the ambiguity in the interpretation of experts in relevant subject areas. Layman also look into the dictionary and also receive a completely unambiguous interpretation of these terms.
Problems arise with the terms that are used not only in one special area, and are in different domains have different meanings, or at least different shades of meaning. For example, the word "bay" may mean either a small bay, and a coil of rope or cable. The word "function" in mathematics and programming means is not quite the same thing.
But worst of all is the case with words that are widely used in everyday speech. Clarification of the meaning of domestic terms applicable to a particular area - the most common cause of terminological disputes.
You can see that the meaning of the word is determined not only by word but also the context in which it is used. Terms that are used in different subject areas, require clarification of context, only after this term acquires a precise meaning.
However, there is a simple trick that allows some to cope with the ambiguous interpretation of the term. This technique - refinement of the context by using not a single word, a typical phrase. In this case the characteristic phrase "pulling" zasoboy context, thereby creating an environment conducive to a correct interpretation of the term.
For example, mentioned earlier, the term "function" has some shades of meaning depending on context, but if you say "mathematical function" or "function in C", the context immediately clear.
In this essay we will talk about using the term "criteria", which is owned by just one of the most ambiguous concepts of household. More precisely, we are interested in a more narrow term "criteria for testing, and in particular its use in the field of software testing.
What is a "criteria"?
"Criteria - sign, on the basis of which is assessed, definition, classification of anything, measure. "
Thus, the criteria - it is a sign that has three main purposes: using it is
 1) assessment, 
2) identification and 
3) classification.
We consider in detail these three appointments in turn applied to software testing in the next two sections. But first try to understand why the use of the term "testing criteria" in other domains does not lead to uncertainty.
In the following explanation I am getting ahead of myself a little, maybe it will become clearer after reading the next section. Nevertheless, I want to immediately deal with all the other areas to the rest of this essay to focus on software testing. So I apologize to readers that this explanation seems convincing enough, I hope that after reading the next section, all fall into place.
So, why in other subject areas covered by this term without any problems? To answer this question is enough to pay attention to the contexts in which this phrase is used, and that it meant by testing.
There are two main contexts in which uses the term "testing criteria".
First, the most widely used - a comparison of something to set the parameters and identifying the best among them. By testing in this context refers to the comparison itself, so that is probably more correct in this situation would opt out of using the term "testing criteria", replacing it with a more explicit "comparison criteria. Nevertheless, the context of the comparison is easily identified and rigidly defines what action to take - choose the best of several, so that the term "testing criteria" in this context clearly concretized and does not cause any confusion.
The second, more specific context, is associated with an area of study or knowledge control. In this case, under the testing means testing the level of knowledge. In this case also clear from the context, a decision must be taken - whether achieved a certain level of knowledge, so that here the term is instantiated completely unique.
Other fairly common causes unknown to me.
Area of software testing is different in that there contexts in which use of the term "testing criteria" can be considered meaningful, much more. This is what is causing ambiguity when the term is used without a clear indication of the context.
Also, remember that the test has three purposes - with an assessment of him, the definition and classification. In the field of software testing found all three of these aspects, as in other areas, as can be seen from the above - only the first two.
The next two sections, all three criteria for appointment are discussed in detail in relation to software testing, and proposes a set of phrases using the term "criteria", which is more specific than the general term "testing criteria" and the more tightly bound, each to their context, so that their use does not cause confusion.
Evaluation and Assessment
These two aspects are very closely related to each other. More precisely, the first is usually subordinated to the latter. So let’s start with the second, as more significant.
Using the criteria, as can be seen from the etymology of the term (Greek kriterion - means for the decision), is inextricably linked with the adoption of certain decisions. criteria helps to determine what action should be taken in any given situation.
To make an informed decision requires information. Where did it take? The main source of information are different metrics, ie, the quantitative characteristics of the phenomena or objects.
Deciding to use metrics as follows: we compute the current value of metrics and compared with some critical value. If the critical value is reached - one decision, and if not achieved - another solution.
Calculating the current value of the metric - this assessment. The choice of critical values and compare with it - this definition. This is the very first two aspects of the criteria.
Of course, this simplified model. In real life, for a decision can be used more than one metric, and a set of interrelated or independent metrics. And the choice can be multi variant. But the general idea remains the same.
However, the move closer to the subject and see what decisions must be taken in testing the software in different situations that determine the different contexts of use of the term "criteria". And for every situation, it will offer a specific context for this phrase, which instead use the phrase "testing criteria" can significantly reduce the confusion.
Criteria testing began
If testing can be seen as some activity in the software development process, the natural way would create two decision points - when this work started and when it is complete.
However, testing is not an indivisible act more correct to speak of him as a sub process of the process of software development. This sub process consists of a series of activities, each of which is related dependencies with other activities, including those not related to testing. For more details, the reader may refer to any model of software development process, such as Rational Unified Process, now important for us to only one consequence of this concept - is meaningless to talk about the criteria for start or completion of testing, because it begins and ends with beginning and end of the whole project.
More correct to speak about the beginning and end of individual activities, such as testing the design documentation, development of tests, performance testing services, and related criteria.
Recall again that the test - it is not just a metric, and the pair: the metric plus some critical value.
Thus, as a criteria for the start of test development can be, for example, the following condition: "describes all the use cases." Here, the metric - the ratio of the described use cases to the number of all reported, the critical value - 100%.
However, this condition can not be a criteria for the start of running tests, it will have to wait for the implementation of some other conditions, such as this: "half implemented functionality of the application, developers have covered unit-tests, 80% of the written code, and these tests do not detect errors." Here we see a composite metric that is constructed from three affiliates of simple metrics. First - the percentage of implemented "features", or function points, or use cases, or anything else, what can be measured by the functionality, the critical value - 50%. Second - covering the written code unit-test, the critical value - 80%. The third - the ratio of the number of successful unit-tests to their total number, the critical value - 100%.
In the above example, the second and third parts of a composite metric clarify the first part, which, without this clarification, it becomes too uncertain. The reason for this is that the term "realized" also refers to the number of "household" concept, and therefore admits the ambiguity of interpretation. Developers can assume that the "realized" - means the code is written, and testers - the code is fully debugged and stable.
I do not intend in this essay to go into a discussion of how well or poorly at a particular criteria, because it strongly depends on the particular situation. Just need to understand that the choice of suitable criteria is not straightforward - the metrics are not uniquely determined by a decision to take, and critical values can also vary greatly. Do not try to find a universal criteria for all occasions, remember: that the Russian is good - then the German’s death.
However, it is so difficult to begin testing how to finish it.
Criteria for termination and testing
If you start to do something only one way, you can finish at least two - successful and unsuccessful.
Criteria associated with the completion of testing, usually related to follow-up to test, since it is the key - after it enters the product or service, or returned for revision.
In fact, there is a third possible outcome - continued testing. And since you need to determine one of three possible outcomes, requires two different criteria. They are commonly referred to as the criteria of successful and unsuccessful completion of testing.
However, these terms are often confusing because some people consider successful testing of the safe passage of the product of all the tests, while others say the successful test, if you have found a lot of defects and hack to death "product. Since the concept of "successful" test is too vague and subjective, and also has an emotional, I prefer the more neutral terminology - a criteria for the completion of testing (the product is good enough) and the cessation of testing (the product needs some work).
These two criteria are generally independent, but they are applied simultaneously. This means that we need to verify fulfillment of each and make a decision on the grounds that some of them executed. And what if both criteria together? In this case it means that the criteria chosen unsuccessfully. Product can not be both so bad that require special and so good to let it into operation. But if you for some reason all the same criteria are chosen so that this situation is possible, set the criteria for priorities and make decisions on the basis of a high-priority criteria.
So, what criteria can be used to determine whether to stop testing, continue or terminate it? No wonder that the metrics used in the criteria for completion and termination may be different. And there may be the same.
Let’s start with the cessation of testing, as a simpler and less responsible. Strictly speaking, it is precisely because the more simple, because less than responsible. Sending product back for revision to anything testers did not oblige, much worse if they give "good" substandard products. Perhaps for this reason, the testers are so eager to "hack to death" product - to delay the adoption of responsible decisions. However, now it’s not about the motivations of testers, and what criteria they use to determine whether the product back for revision or for that was not warranted.
Unlike the criteria for the initiation of activities for testing, which usually somehow related to the amount of work performed (see examples in the previous section), the criteria for termination and testing, usually based on some metrics of product quality.
Classical and most common quality metric is the ratio of the number of completed requirements for their total number. Using this metric as a basis, can be formulated, for example, such conditions:
·         testing is terminated if the infringements of more than 20% of the requirements for application functionality (metric - the ratio of the number of outstanding claims to their total number, the critical value - 20%)
·         testing is completed, if verified that all the requirements (metric - the ratio of the number of completed requirements for their total number, the critical value - 100%)
·         testing is continuing, if not satisfied none of the previous two conditions.
Of course, this metric is not ideal, since it is nonlinear - not all requirements are equally important. You can improve this metric, for example, introducing to the requirements of the "weight" or "criticality". But let it remain outside our field of view, I repeat - I’m not going to discuss here the advantages and disadvantages of specific criteria.
However, despite this disclaimer, I want to point out three bad metric with which I, unfortunately, is often encountered in real life: the number of defects found, the number of executed tests and code coverage of the program. If someone does not agree with this point of view - welcome to the forum for discussion.
Once again on the metrics and assessments
Until now we have two parts - "Evaluation and Assessment", focuses on the second, ie the definition of when it’s doing some conditions affecting the adoption of a decision, and the estimate holds a subordinate role. However, the assessment itself is a very useful practical function. Knowing the current value of the metric allows us to see how far it is separated from the critical value, allows you to monitor changes in current value, so you can anticipate and plan for the term decision.
Mini-criteria
In addition to the above-described "big" decisions have to take a lot of small daily decisions in which also involved some or other criteria.
And chief among these mini-tests is a criteria for passing a single test. Using this criteria, we decide whether we can assume that the observed behavior is correct or not. Formulation of criteria for successful completion of tests - this is one of the main problems of testing, the so-called "oracle problem".
Honestly, I rarely met a confusing use of the term criteria as applied to the criteria of passing the tests. Therefore, to dwell on this subject will not, otherwise it will be pulled over too long a chain, which would lead us away from the topic of our essay, and already it’s time to finally turn to the third destination criteria.
Classification
To some extent, this third aspect is reduced to the previous two, since the main task of classification is the decision on whether two instances of members of the same class or different classes. Theoretically speaking, the task of classification is to construct a system of classes. However, in practice it is usually expressed in the selection of specific representatives of these classes, so the criteria used for classification, as a rule, called the selection criteria.
In software testing, this manifests itself in the formation of test kits. Thus it is necessary to decide whether to include a given test in a test set or it is not necessary. Because you want on the one hand to minimize the test set to reduce the run time tests, on the other hand ensure sufficient representativeness of the test suite - a problem of selection is extremely important.
Using a selection criteria for the formation of test kits, in my opinion, most clearly and vividly explained in the following quote from an article by Olga Bezzubovoy "The museum as an object of philosophical-anthropological study»:
"The classic criteria for selection of museum objects [...] in many respects different from the principles of compiling an archive and library. If the latter claim to be the most complete (more than a vast collection, so it is more valuable), the museum collections are divided between two poles - a marginal thing and the thing perfect, exemplary. That is, on the one hand, we have items that are not having an independent value, give an idea of the whole class, on the other side - all unique, out of the ordinary. "
Yes, a set of tests - this is not a library or archive it - the museum.
When forming a set of tests makes sense, to include the tests are exactly the two types: tests, "which, while not possessing intrinsic value, give an idea of the whole class, and tests of" marginal, unique, out of the ordinary. "
On this principle, in particular, is based techniques partition the input data into equivalence classes: elected representatives from each equivalence class (giving an idea of the whole class) and the boundary or close to the boundary values (the word derives from a marginal margin, which means edge or border area something).
While the partition into equivalence classes is commonly referred to in the context of functional testing services, application of this principle is not limited to this type of Software QA. For example, when stress testing separately verified the behavior of the system under "normal" and "peak" load - these are two great classes, which in testing are regarded as different in their properties.
On the other hand, some kinds of testing have focused on either only the typical, or only marginal objects or phenomena. For example, if usability testing is constructed portrait of the typical user, and for testing the stability of persistently searched for specific data, which can lead to a crash.
Here we will, because our goal was just to show how the term "criteria" used in the context of the problem of classification tests, ie the construction of test suites, and not explore different ways of classification.
Conclusion
So, we saw that the use of the term "criteria" in the field of software testing is very varied. Different types of criteria used for making large and small decisions - from decisions about passing a single test to a decision on successful testing in general. And all of them to a greater or lesser degree may be considered "testing criteria".
Based on the above considerations, I strongly encourage everyone to stop using the term "testing criteria" in order to reduce the already considerable confusion with the terminology in the field of software testing. Instead, I propose to use more specific phrases for the criteria used in different situations.


Testing Philosophy


Software Testing covers a wide range of species activity, very similar sequence of development processes software. This includes setting objectives for the test designing, writing tests, testing, testing, and finally execution of tests and examination of test results. 
Plays a crucial role designing the test. Chance of a range of approaches to the development of philosophy,or the strategy of designing tests, shown in Figure 2. To oriented strategies in the design of tests is to consider two extreme approaches, which are at the boundaries of the spectrum. It is also noteworthy that many of those who work in this area, often throw in one or other extreme.
Supporter (or supporter), an approach consistent with the left boundary spectrum, design their tests, exploring the outer sheet or specification interface of the program or module that they test.Program he sees as a black box. Position it as follows: "I do not interested in looks like this program and I fulfilled all the commands, or all way. I’ll be satisfied if the program will behave as describe din the specifications. " His ideal - to test all possible combinations and value sat the entrance.
He likes the approach consistent with the other end of the spectrum,designing their own tests, studying the logic of the program. He begins with the fact that seeks to prepare a sufficient number of tests to ensure that every command was executed at least once. If it is a bit more tempted, he is designing the tests so that each team is a conditional jump performed in each direction at least once. His ideal - to check every way, each branch of the algorithm. In this case, it completely (or almost) no interested in the specification.
Neither of these extremes is not a good strategy. Reader,however, have probably noticed that the first of these, namely the one in according to which the program is seen as a black box,preferable. Unfortunately, it suffers the disadvantage that completely feasible
Consider a trivial attempt to test the program,receiving input three numbers and calculates their average.Testing of this program for all values ??of the input data is impossible.Even for machines with relatively low accuracy of calculations oftests would be counted in billions. Even If we had the computing power,sufficient to perform all tests in a reasonable time, we would spend on several orders of magnitude more time to prepare these tests, and then check. 
Programs such as real-time systems,operating systems and data management programs that preserve"Memory" of previous input data, is even worse. We would need software testing services program not only for each input value, but also for each sequence, each combination of input data. Therefore,exhaustive testing of all input data of any reasonable program impracticable.
These considerations lead to the second fundamental principle testing: testing - the problem is largely economic.Since exhaustive testing is impossible, we must restrict ourselves to something anything less. Each test should give the maximum benefit in comparison withour costs. This return is measured toyu probability that the test detect snot detected before the error. 
Costs are measured in time and cost preparation, implementation and verification of test results. Considering that the cost limited budget and schedule, one could argue that attesting, in essence, represents the art of selection tests maximum potential. Furthermore, each test should be representative certain class of input values, so that a correct implementation created some of our conviction that a certain class of input program is executed correctly. This usually requires some knowledge of the algorithm and the structure of the program, and we thus shifted to the right end of the spectrum.
Module Integration
The second important aspect of the test (after the design of tests) is a sequence of merging all modules in the system or program. This aspect of the problem usually does not receive sufficient attention and often considered too late. 
The choice of this sequence, however, is one of the most vital decision taken at stage testing, since it determines the form in which written tests, types of tools necessary testing sequence programming modules as well as the thoroughness and efficiency of all stages testing. For this reason, such decision should be made at the level of project as a whole and at a sufficiently early stage.
There is a wide range of possible approaches that can be used for the merge modules into larger units. In most general they can be considered as options for the six main approaches described in the following six sections. Immediately behind them is a section where proposed approaches are compared by their impact on software reliability software qa services.