Grey Box Testing

Grey Box TestingWhat is grey box testing? This is another typical software testing question that asks you to describe a type of software testing.

So what is it? Simply, grey box testing is a combination of black box testing and white box testing.

Specifically, grey box testing means that the tester has some idea of the system internals, such as data structures, algorithms, boundary values, or some assumptions that the code makes. It is therefore a combination of black box testing (no information about system internals), and white box testing (complete information about system internals, typically through access to the source code).

How does this work in practice?

Example 1: suppose you are testing an application that computes the square of an arbitrary number. In case you don’t know anything about the internals of the application, you might test out some values like -1, 0, 1, 2, and 10. If the app computes the square of all those values correctly, you would assume that the app functions correctly. However, suppose you further know that the app internally uses 16 bit numbers (this is the additional information in grey box testing). You then try a number larger than 2^16. The app will either compute it incorrectly, or it might even crash. You’ve just found a bug.

Example 2: suppose you are testing a web app that passes information between the web page and a server. When you input incorrect values on the client side, Javascript running in the browser prevents you from submitting the request. Suppose you know that the server never expects to receive invalid input because it assumes validation will always happen on the client side (this is the additional information in grey box testing). You then disable Javascript in the browser, input an invalid value, make the request, and the server processes it (probably making an invalid state in the database). You’ve just found a bug.

In summary: grey box testing is a step between white box testing and black box testing. In grey box testing, the tester has some (incomplete) information about system internals, and can use this information to create better tests.

 

Scalability Testing

Scalability Testing

What is scalability testing? This is another software testing question that asks you about a less common definition for a type of testing. Fortunately, there is nothing particularly difficult about answering this question.

Scalability testing is simply testing how well an application will scale. Usually, this means increasing the number of users, but it might also mean increasing any other volume that the application has to handle, such as data volume or the number of supported transactions.

In case the application does not scale according to requirements, scalability tests help identify the bottlenecks that are holding the application back in scale.

Scalability testing is therefore a special kind of performance testing, and is closely related to load testing.

In summary, scalability testing is testing an application to see how well it will scale under greater loads, and identifying the bottlenecks that might prevent successful scaling.

System Testing and End to End Testing

 

Software Testing And End To End Testing

What’s the difference between system testing and end to end testing? This sometimes shows up on a list of common software testing questions, so it must occasionally be asked in interviews. It’s a bad question though, because in most organizations, system testing and end to end testing mean the same thing.

If you are asked this question during an interview, how should you answer?

First, define system testing. System testing is testing of the entire, complete application to ensure the finished, integrated application meets the functional and system requirements.

Second, explain that in most organizations (perhaps including the ones you’ve worked at previously), end to end testing means exactly the same thing.

Finally, explain that there is another meaning for end to end testing, but this is less commonly used. This second meaning is testing an individual workflow in the application from beginning to end. For example, in an email application, this might mean logging in to the app, opening a new email, responding the email, and closing the app.

In summary: when asked about the difference between system testing and end to end testing, explain that system testing is the testing of the completed, integrated application to ensure its compliance with requirements. End to end testing is usually just another name for this process.