Main Page

Google Summer of Code 2020 Work Product Submission

August 31, 2020


Alexandra Livadas


INCF – International Neuroinformatics Coordinating Facility

Project Title

LORIS Automated Testing


Christine Rogers, Shen Wang

Project Description and Overview

The aim of this project is to improve the automated testing code coverage of the LORIS codebase. Two secondary goals are to make improvements to the RaisinBread dataset (used by LORIS developers for manual and automated tests) and to develop a code coverage reporting tool to make automated tests easier to implement across the board. This project is a continuation of my Google Summer of Code project last summer, where the aim was to improve the unit testing coverage of the LORIS codebase.

My Deliverables

This is a list of the deliverables my mentors and I set for myself at the beginning of the project.

  1. Complete unit testing coverage for core libraries that lacked significant coverage.
  2. Add integration testing coverage for modules that did not have baseline coverage.
  3. Improve upon the RaisinBread dataset by both fixing inconsistent data and adding more data for tables and modules that were lacking.
  4. Develop a tool to easily calculate the LORIS code coverage metrics.
  5. Write helpful technical documentation for both external and internal LORIS contributors.

Summer Timeline


Throughout May, I helped in the release testing process for the most recent release of LORIS (23.0). This involved manually testing 6 modules and creating both issues and PRs to report on and fix any bugs or major errors. Along with the two other Google Summer of Code students working with LORIS, I started working on the LORIS Cheatsheet, a document containing useful information for LORIS developers. I contributed to other documentation as well, namely updating many of the publicly available markdowns on GitHub that needed updates for the 23.0 release.

June - July

This period was mainly spent developing unit tests for core LORIS libraries. After discussion with my mentors, it was determined that the unit testing coverage as of the beginning of the summer was not sufficient and that this should take priority over integration test development. I completed unit testing coverage for 7 core libraries in total, improving code coverage by 23% overall. The related PRs are listed below.

July - August

This period was spent working on integration testing, improving RaisinBread, and developing a code coverage tool. I wrote integration tests for modules that were lacking coverage, as well as two helper functions to test new project permissions across all modules. I improved the RaisinBread dataset by adding and making changes to the data that were requested by developers. I configured the PHPUnit code coverage tool to work with LORIS and developed a script to edit the generated HTML reports. Finally, in the last weeks of August, I created a finalized version of the LORIS Developer’s Guide and added it to the publicly available documents on the LORIS repository.

My Merged PRs

This is my list of merged PRs from this summer. The PRs related to my project are listed below in more detail.

My Open PRs

This is my list of open PRs from this summer. The PRs related to my project are listed below in more detail.

Unit Testing PRs

  1. Unit tests for the Database library
  2. Unit tests for the Candidate libary
  3. Unit tests for the User and UserPermissions library
  4. Unit tests for the Utility library
  5. Unit tests for the NDB_Page library
  6. Unit tests for the NDB_BVL_Instrument library
  7. Unit tests for the NDB_Factory library

Integration Testing PRs

  1. Helper functions to test user project permissions, integration tests for the Candidate Profile module
  2. Integration tests for the Electrophysiology Browser module

Raisinbread PRs

  1. Removed Reliability module references from dataset
  2. Change the Visit Stage to match Instrument data
  3. Applied the new HRRT patch to RaisinBread
  4. Added CNV and CPG records to test the Genomic Browser module
  5. Added BMI instructions to test the Help Editor module

Code Coverage

PR #6885
Near the end of my project, I configured the LORIS testing environment to generate code coverage metrics for the LORIS codebase. As part of this, I also created a tool that generates HTML files using the PHPUnit and XDebug code coverage tools and then edits them to display the information most important to LORIS developers.


  1. Detail added to the RaisinBread README
  2. Installation Markdowns for the 23.0-release - Merged PR #6510
  3. Troubleshooting Installation Document - Merged PR #6511
  4. RaisinBread refresh script added to the RaisinBread README
  5. Updates to the Unit Testing Guide
  6. New installation documents added to the main LORIS README
  7. Help document created for Instruments module
  8. External Developer’s Guide
  9. Internal Developer’s Guide

My July 28th Presentation

I gave this presentation to the LORIS development team on July 28th. I presented the progress I had made in my project at this point of the summer. I gave an overview of the current LORIS code coverage metrics and discussed the documentation and tools I was developing to keep track of code coverage metrics.

My Experience

I am very proud of the work that I was able to accomplish throughout this summer with my mentors. Since I had worked with the LORIS team last summer as well, I was glad to be working with everyone again. As always, the LORIS team and my two mentors were very kind and supportive throughout the process and offered a lot of help and feedback that was very appreciated. The work was challenging at times but very interesting, and I definitely gained some new skills and knowledge over the course of the summer. I also enjoyed having two other GSOC students working for LORIS this summer. It was nice to have other people in a similar position to mine that I could bounce ideas off of and get help if I needed any!

I would like to thank my mentor Christine and also Shen Wang for their help throughout the project. Thank you to the entire LORIS and INCF team for everything, I had a really wonderful experience!