Secure coding

Creating a Professional Application – How to Create Tests Part 2

September 21, 2012 by Adrian Stolarski

After the first stage it was time for step two. What can I say? Here is a further classification of software testing methods. First, get to know the theory, then calmly deal with the practice of knowledge. The text is almost like StarWars is not it?

Testing due to the male range of applications

Testing for the scope of the application is very important in the creation of each application. It allows you to avoid many mistakes in production. I was able to classify and put in a few paragraphs:

  • The first is a very important part of the application unit tests. This is actually a testing program at the lowest level of the application. Here we test all the functions and methods individually, completely detached from the rest of the application. The tests are held only for compatibility with a specific type or range of data. Usually there are chosen limits, such as maximum and minimum data taking, and the minimum value of less than or more data from max or min. The unit tests also have a modular testing or testing components. Tests of this type are usually performed by programmers with the prepared input data.
  • Much more serious tests from our point of view are called application integration testing. Think that what we were able to test is a new set of components individually. Now is the time to execute the next step. We need to make sure that all the interfaces between these components are correctly defined and that they properly interact with each other. Let us consider an example. Suppose you have written and tested the module responsible for retrieving data from a SQL database.

Then we want to form our website which was filled with data retrieved from the database. So you need to check whether it is possible. Most of the major applications, I know, mostly composed of a few or several cooperating systems, and so in most of cases, check whether the communication between the individual modules or layers is in no way affected. And that’s why tests should be carried out as application integration. To test this type of testing include top-down, bottom-up and testing of bing-bang.

  • Further tests with which to acquaint yourself are application regression testing. Their goal is to see if and how an application works, if we make it to modify or improve our errors or add new functionality. Tests of this type are carried out both for the finished product, or have a separate part of the project. The main feature of each test regression is its repeatability. By using this method we are able to find the errors resulting from changes in the work environment or changes in the source code. For this regression tests reveal many previously undiscovered bugs.
  • There are also tests to help plan the scope and duration of the rest of the test application. They also help testers while performing other types of tests, and they help everyone to recognize the application and subject tests. This refers, of course, to exploratory testing applications. In fact, it is the least formal method of creating a test application. Most of the exploratory tests not only tested the application, but also know the rules of the application and prepare documentation for later performance of other tests.

In this method, software testers join the job without pre-defined use cases and test cases, but with predetermined objective measures. All types of software tests that are performed through the use of this method in general allow testers to discover new relationships in the tested software. Exploratory tests, but rather their correct execution, influence the testing strategy, and what actions will take place during the next iteration of the software testing. They are used to explore the relationships between the different modules of the system and it is best explained by a very broad use of this type of testing during application testing.

After all, we all know that reading technical requirements and specifications of the client documentation never really gives us the full picture of how the system works and how it really saves us in certain situations. Exploratory testing is also used to find all the mistakes in the strategy of testing and to reveal the missing test cases in a given strategy. Found in this way, errors are usually a signal to developers and testers that there are whole classes, test cases containing resin. With this approach we are able to analyze the causes of errors in a specific part of the application.

Another exploratory testing technique is to identify priorities for individual test applications and test cases. It is generally accepted that all the features that work properly during exploratory testing, generally receive much lower priority and may be delayed and wait for the normal phase of testing.

Performance testing of applications and programs

Another group of software testing is performance testing. Why they have not really served? The answer to this question is very simple. Benchmarks are based on research that influenced the behavior of an application or system of its increased workload. Most of these tests are performed using dedicated software for this operation.

In general, these tests are divided into three groups. The first of these are the real tests. Mostly during the duration of the response time we test all the components and modules that are critical to the business functions of the application. Mostly as their criterion is assumed that the individual actions are performed by the applications within an acceptable period of time.

Further tests of this family are stress testing. These shall be carried out by the maximum load of the system. If we introduce too much data or too many users at once, it reduces the time available for the program or system resources. Then we begin a study to determine whether the system will fail in a certain, prescribed way. With this approach, we can also search for defects in an application that runs in safe mode. In addition, stress testing allows you to see what the consequences will be loss of data after a crash, which is caused by excessive load.

Third tests are stress tests. They rely on the fact that the load is a working application, but do not overload it. These are usually subjected to testing applications with a large number of users working simultaneously. Database applications can be tested also by a large number of transactions. Also, it is often that a situation persists for a long predetermined time in the scenario. You can also see how many queries are able to handle the system up in a predetermined period of time.

As for performance testing, they rely essentially on two stages. The main objective of the first stage of testing the productive application as soon as possible to spot any bottlenecks in the program, or any other undesirable behaviors of such applications. The second stage involves the removal of all the problems, and then carries out the verification of whether the problems have actually been removed.

Then, of course, at the end of the process, a report is created, whose task is to confirm the results of tests that took place during the test. This involves for example, the maximum number of queries that an application can handle, and the fact that the application does not cause any adverse effects in the style of data loss, or loss of session during a very heavy load application. It is well to remember that in the case when the second stage of the application testing any errors are detected, usually repeats the process of testing the productive application.

Functional testing, which is called a black box in a nutshell

There are tests that are called black-box testing method. They rely on the fact that the tester program did not really know anything about the internal structure of the program and how the program is written. They are used for testing the functionality of the data. Very often they are performed not by testers or developers within the company, but by people from outside the company.

In extreme cases, we even try to make sure these people do not have any knowledge of application programming, so as not to interfere with the testing process. Such a person will never base their work on any test data or software, but on whether the program contains all the intended functionality and that really is consistent with its documentation. In the absence of any functionality or feature of the program, which was founded in the documentation, software functional tests detect a fault.

In the case of functional testing range of subjects, it will be much different than in the case of all types of structural tests. These tests are more likely to discover the fact that something is done wrong, yet do not provide any precise information about the cause of errors in the software. Software functionality tests usually have a very wide range of functionality to be tested. So in most systems they are referred to herein based on the test data of the relative similarity of data.

This method allows one very important thing. This makes it possible to test a huge range of data, while reducing the applied tests, which have to have a very similar mechanism to go through the program. Mostly all types of functional tests are performed upon completion of the software development cycle, but it does not matter the way to run them much earlier. In fact, these tests should not even test all the components and processes of the program, and then just run it for the entire system.

How is the test divided into the subject?

This is another very important division. I chose the option of all different types of bullets, because I think that in this way it will be easier to read. Ready? So let’s get started. Here is a possible breakdown:

  • The first type to mention here is the structural tests. These tests carry a different name by the white test box. They can be made at all levels of testing applications. All structural techniques are the best and are most effective if it is done right after the specification-based techniques. They are designed to fully support the measurement accuracy of software testing because it allows then to evaluate the test coverage of that type of structure.

The coating is measured by means of the implementation of the code by a variety of tests and is expressed as a percentage of coated factors. When using this method, we can virtually test at all levels, and especially at the level of the integration of the testing and use of tools for measuring the coverage of the data code elements. This is done by means of the so-called declaration and decisions.

Structural testing can also be used, if you rely on the system architecture, such as the hierarchy of appeals. Mostly it is used to test the entire system, system integration and acceptance tests to determine the level. It is an ideal solution for testing business models.

  • Another type of test is called testing of the interface. It is usually performed during the integration of the modules in the system and all subsystems into larger systems. But as we all know, each module has an arbitrarily defined public interface, which is periodically called and queried by other components of the program. The main purpose of testing is to detect faults in the interfaces, which appeared in the system due to errors in the interface or false assumptions interface.

In the case of testing the interfaces, we distinguish between the several types such as parametric interface, the interface through which data is transferred from one system component to another. Shared memory interface is a block of memory that is used to exchange data that is shared between subsystems. Interfaces are procedural, in which one subsystem really encapsulates a set of certain procedures caused by other subsystems.

There are message passing interfaces, where one of the subsystems of the second subsystem requests service by giving him a message.

  • Further tests are any software acceptance testing. Their main goal is to show everyone that all the requirements of the specification have been correctly implemented. These testsare formed in two contexts of each organization. The first is carried out for software written to order, while the second has been the software that is ready for this to hit the shelves.

The first tests I mentioned are classic tests, which usually are simply a subset of the system test. In the latter case, the alpha tests are done, which really makes the company’s independent test team and beta testing, completely independent of the company, made out.

  • Further tests are mutational testing. This method is primarily used to measure the quality of testing of the system, based on an examination of their resistance to the occurrence of random errors in the system. It is based on the introduction of an automatic multiple small random errors in the program and every time you start unit testing, which should detect these errors.

An example of a mutation is to change the logical operator and/ orthe condition or deny a conditional instruction function. The effectiveness of mutational testing in the context of providing high quality testing systems has been demonstrated many years ago. Existing restrictions make mutational testing, however, that in spite of its advantages, it is still used in industrial software development processes. It is a method that really requires massive computing power.


In these two articles I think I showed all the possible ways to do software testing data. As you can see, all kinds of tests, we can categorize the thousands of different ways, depending on what it is really a test is needed to do. The software itself is also tested in a variety of ways, depending on which aspect of its operation at any given time is important for us. If the software is subject to rapid change, we want be sure their introduction does not adversely affect existing functionality so we use regression testing.

On the other hand, if we want to show the client that the application is in accordance with its requirements, we prepare acceptance tests. Stress tests will be used for applications when we need to be sure that they work efficiently.

In the next article we will show you several types of tests, and I will explain all the most popular frameworks for their implementation. I hope it comes out another beautiful article, in which I pride myself.

Posted: September 21, 2012
Adrian Stolarski
View Profile

Adrian Stolarski is a freelance security tech blogger, specializing in Java, PHP, and JQuery. In his own words, he does the hard work of training the unemployed. Currently, he handles Evaluation Visualization for real-time systems with XWT and Eclipse RAP. If he sees that something works, he asks how it works and why it works, then sets out to make it work better. A researcher for InfoSec Institute, he currently lives in Poland, but plans to move to London.