Recentemente tive o prazer criar uma publicação no blog da empresa que trabalho (Q4 Web Systems) e gostaria de compartilha-lo no meu blog também. Segue o link: http://www.q4stack.com/2014/11/04/q4-architecture-software-testing/

O post completo também pode ser lido aqui:


My name is Marcos Soares, Software Engineer at Q4 Web systems and today I would like to talk about Software Testing, what is software testing and which techniques we use on our products.

Software Testing

What is Software testing?

Software testing is an area of Software development created to provide information about the behavior of the software and if it meets given requirements. That is one possible definition about Software testing, there are many other definitions as well.

Unfortunately, we can not guarantee that all software work properly without the presence of errors or bugs, since we deal with complex algorithms with different number of states, use cases and behaviors in a given context. Software testing techniques could be applied in an attempt to avoid new errors. Some well-known Software testing techniques are:

  • Smoke testing
  • Regression testing
  • Security testing
  • Functional testing
  • Unit testing
  • Integration testing
  • System testing
  • Acceptance testing

Q4 Architecture: Software Testing

Currently at Q4 we apply the following software testing techniques to our products: Unit Testing, Integration Testing, Regression testing and Functional testing, let’s talk about them individually:

Unit testing

It is a code-level testing, in which the goal is to take the smallest piece of testable software in the application, isolate it from the remainder of the code, and determine whether it behaves exactly as you expect. Whenever possible unit tests should not have any dependencies on things like the file system or a database.  When it is unavoidable, external dependencies can be mocked in order to test just the method.

Our products are based on Microsoft .NET and to implement Unit testing we currently use NUnit and Moq.

Integration testing

It is also a code-level testing that usually is executed right after the Unit testing. The primary goal of this technique is to test the entire functionality of the software, including its dependencies. Functionality that requires a database access or a request for an external web service will be executed on integration testing, because of that usually there are an entire environment setup for integration testing.

Regression testing

It is not a code-level testing but also could be automated. It is a technique that aiming to test new features added to the software and these tests are driven to the affected pieces of the software. The primary goal is to reduce the number of bugs that could be introduced due to the new functionality.

Taking into consideration that we use Scrum methodology at Q4, Regression testing is a phase of our software development process that is applied after a couple of Sprints.

Functional testing

It is not a code-level testing but could be automated. It is a technique of quality assurance and the main goal is to take the specifications, requirements and test the software based on that. Functional testing share the same idea of Regression testing, the difference is Functional testing identifies functions that the software is expected to perform and test it and Regression testing is driven to new functionality.


As a Software development team, we try to achieve the best quality of every project given to us, and Software Testing is just a small part of it. Do you want to be part of Q4 Team? Take a look of our job opportunities.

Feel free to leave comments or reach out by e-mail marcoss@q4websystems.com

Thank you!



NUnit – http://www.nunit.org/

Moq – https://github.com/Moq/moq4

Microsoft Developer Network – http://msdn.microsoft.com/en-us/library/aa292197(v=vs.71).aspx