Published on

Software QA internship takeaways

Categorised under

Getting started on a large codebase

Before diving into the code, it is important to have a clear understanding of all the functionalities of the application.

Explore the project as an end-user, and list out some features that you like or which irks you.

Then, you should look at how the code is organised, and take note of any guidelines that is set by the team.

Working on a feature or bugfix

Before working on any code, understand all aspects of the code, including the existing functionality, dependencies, and purpose of each component you are working on, to ensure you are on the same page as the team.

A good practice is to take a look at the past commits of the file to get a better understanding of certain decisions that led to the current state of the code. Then, using a debugger tool, e.g. vue devtools, inject some fake values to understand the significance of each part of the component.

Performing tests

  • Tests are very useful in helping you to be 100% clear about how the code should work, and ensure that any future changes made will not break the existing functionalities.

  • Creating unit tests that can be automated, instead of setting up an entire staging environment and manually simulating the end-user’s interactions, also helped me to find numerous issues with the existing implementation easily without having to rely on the logs for debugging. This should be something you do, especially when you are unfamiliar with the language or the codebase you are working on.

  • Even if the codebase does not have any unit/automated testing, it would be good to implement unit or integration tests to ensuring the validity of the code, and demonstrating all supported usecases of your code.

  • When I began my internship, all tests were done manually, and verifying a new feature in the backend involved creating fake entries in the database, and triggering the backend function calls via the frontend, or testing the cron job using another cron job in the staging platform with a higher frequency. This made testing very complicated and time consuming.

  • Using mockito and phpunit made it much easier to test the backend services quickly, and allowed me to control the database state required for each test.