Software testing involves many different types of testing to ensure that the software product will be defect-free in terms of functional and non-functional specification, which can help save potential future costs after deployment if the system behaves unexpectedly. If a program cannot work as it was intended, it becomes unprofitable and risks users from seeking out and switching to the competitor software (the next best thing). To prevent this scenario from happening, DTC offers its client testing services of existing clients application solutions (web, desktop and mobile solutions). The most common techniques of testing activities that we conduct are black box testing, but if the client allows us access to some integration points where intermediate results are testable, it is possible to do gray box or white box testing.
According to client’s needs and requirements DTC use various tools for creation of test cases and for evidence of bugs. We have lot of experience in this field with more than 30.000 test case developed.
For the purpose of regression testing we can develop automated test that can help the client to fully accelerate the testing and verify the consistency of previously developed functional units.
For automation testing we use various programming languages and tools and we can cover test automation for all app platforms Web, Desktop and Mobile (Android, iOS, WP). Also, we can offer application performance testing of API,web and mobile platform.
For all platforms it is possible to perform responsive design testing on different devices (different operating systems on mobile devices in combination of different browsers, different operating systems on desktop devices in combination with different browsers) and on mobile phone emulators (in general Android and iOS).
BlackBox testing is a software testing method in which internal structure of the tested system is not known to the tester (tester sees it as a black box and don't know how software is implemented). Using this technique we can find errors in incorrect or missing functions, interface errors, errors in database access, performance errors etc... Advantage is that this method of testing is easily performed and does not required any programming knowledge nor internal structure of the system. Some of disadvantages are that tests can be difficult to design and become redundant. Also this technique can not test all available funcionalities in depth, and as a result many program paths will be left untested.
WhiteBox testing (also known as Code-Based Testing) is a software testing method in which internal structure and all implementation details of system that is subject to test, are fully known to the tester. Advantage is that inputs that tester uses are relevant to code paths, so all functional details are effectively covered with no redundancy. Disadvantage is that tests are very complex and it is necessary to have very skilled tester with programming knowledge to write and perform tests, which leads to increased costs. Also it is most exhaustive and time consuming method of testing.
GreyBox testing is a software testing method which is a combination of Black Box and White box testing methods. In this method internal structure of the system is partially known to the tester, and tester could know used data structures and algorithms which are used for software development purposes. Example of using this method is when test cases are written styding the internal code and later testing is done using only the blackbox method. Advantage is that this can lead to designing fewer test cases that can find more potential errors than using only blackbox method for writing test cases and testing. Also tests are performed from users perspective and not from designers perspective. But disadvantage is that some of internal structure needs to be known, and tests can be redundant if software designer has already performed a test case.
Manual testing is a process of finding out bugs in a software program, application or product, when the tester acts as an end user and manually executes prepared test cases without using any automation tools. Any result of execution that is not expected is recorded and analysed in a form of test report. The advantage is that manual test cases can be designed to cover almost all aspects of software application, however executing them can be very resource and time consuming.
Automated software testing is a process by which prepared scripts execute test cases on a software application in order to discover any bugs. It involves using various automation and scripting tools like Selenium, Ruby, TestComplete etc. Tests that are subject to be executed over and over again (regression testing) could be automated to reduce costs of manual execution. This is reasonable to be done for test scenarios reflecting functional requirements that are not changing too often but consume much of manual testing efforts. Automation can be done not matter that application is the web, mobile or desktop oriented, also as inter-application. Test automation can be done by imitating real client actions during using application developed or just testing the lower application layers (e.q API functions testing) Advantages is that in the long run automation prevents human errors in manual test execution, and decrease costs of regression testing process. Disadvantage is that functionalities that are changing too often are not suitable for automation because it could result in time consuming maintenance.
Unit testing provides checking that already designed functions of modules operate correctly. It provides detection of bugs in early stages of development. Units are smallest functional parts of software program and can not always be tested without using supporting drivers or tools. For this level of testing white-box method is usually used, which means that internal structure of implementation is very well known.
Integration testing provides checking that interaction between implemented functions is working as intended. This means that two or more modules are combined and interaction between them is assured to be working as expected. It is usually done after unit testing and this could find potential problems with interfaces between units.
System testing provides checking functionality of the whole system to verify that all functionalities are working as expected and that quality of system fulfills given characteristics. This involves testing of different aspects of system behavior: stability-when loads are not expected, reliability-when system goes into recovery or failure mode, security in potential hacking of system, and performance - in general speed of system. Any of these characteristics can be checked concurrently with others or independently. System testing does not require knowledge of internal system structure and uses blackbox technique.
Security testing involves executing non-functional type of tests in order to discover vulnerabilities and security flaws of tested application. This is done to prevent various hacking attacks. It is a must for application that is accessible over the Internet.
Performance testing involves performing simulations of various workloads on given system to find how system performs in terms of responsiveness and stability. There are many subtypes of performance testing such as Load testing (when workload is increased over normal conditions), Stress testing (when overload is beyond the system limits), Spike testing (when overload is only at some particular moments increased) etc...Output of these tests is usually given in a form of report that analyze capacity of servers.
Regression testing involves performing functional and non-functional testing on already tested parts of software when new additions of code or improvements are made. This is done in order to ensure that changes done to the software does not have any side-effects on older functionalities. For this purpose no new test cases are designed but already used test cases are exploited. If changes of code happen often, it could be very costly to manually re-run all test cases for the whole system, so test automation is here very common and reasonable to use. Automation for purpose of regression testing could be done not only for some critical tests but for whole test suites.
Static testing involves testing of initial software requirements without any code execution. It is done in verification process when required functionalities are deeply analyzed against clarity, unambiguous, and that can be tested. Every single requirement detail which can lead to misinterpretation is clarified. This is usually known as static analysis and is known to be cost effective way of testing before development even starts.
Smoke testing involves executing set of simple tests that aim is to ensure that most important functions of system are working. This is done in order to decide if system is stable enough to support further in depth testing, so time is not wasted if critical functions are not working. This type of testing is also known as "Build Verification Testing".
Functional testing involves verifying that software is developed in compliance to the functional specification. Detailed test cases are written and used as guides for whole process of functional testing with black box method. Result is given in a form of report that states what functions are not working as expected.
If same software product is used on multiple platforms and different devices (desktop, web, android, iOS ets...), it is very important to check that all this users can easily and conveniently use the application. This is known as usability testing. If some user can not easily use the given application there is great chance that he/she will use another concurrent application and maybe never come back, even if usability problems of applications are later solved. This type of testing is a must for web and mobile applications at a large scale.