Difficulty: Intermediate
Duration: 350 hours (full time)
Skills:
-
Experience with Python programming
-
Experience with Git version control
-
Experience with software testing, including
pytestor similar testing frameworks -
Optional: Experience with Github Actions, Continuous Integration, and Continuous Delivery
Mentors:
Austin Soplata (asoplata (Austin E. Soplata) · GitHub), Nicholas Tolley (ntolley (Nicholas Tolley) · GitHub)
About HNN-Core: The Human Neocortical Neurosolver (HNN) is a software for interpreting the cell and circuit neural origin of macroscale magneto-/electro-encephalography (MEG/EEG) data using biophysically-detailed microcircuit simulations. HNN-Core is the modern open source interface defining the HNN network model that allows simulations to be run through a user-friendly graphical user interface (GUI) or through a Python API as a library. Official website of HNN software (https://hnn.brown.edu/), HNN Textbook website with tutorials and examples (HNN Textbook), Contributing guide (Contributing Guide — hnn-core 0.5.0 documentation).
Goal: The current testing suite in HNN-Core has several areas that could be significantly improved to simplify and generalize how tests work, increase code reliability, and test edge cases more comprehensively. The goal of this project is to refactor the test infrastructure to be more systematic, comprehensive, and maintainable while improving code coverage across the codebase.
Subgoals:
-
Main issue summarizing requirements: REF/TEST: Large test refactors · Issue #1118 · jonescompneurolab/hnn-core · GitHub
-
Expand the existing
Networkfixture inconftest.pyto support multiple network configurations including networks with no drives, different sizes, and various drive combinations. Refactor existing tests to use these standardized fixtures consistently, instead of defining their own networks locally. -
Identify and split long, monolithic tests into smaller, independent test functions where possible. For example, refactor
test_add_drivesto test individual drive types and their arguments separately before testing combinations. -
Use Codecov or pytest coverage tools to identify untested code paths and add targeted tests to improve coverage, focusing on edge cases and full argument coverage for functions.
-
Add at least one long-duration simulation test using the default model with standard drives to catch timing-related bugs that only appear over extended timeframes.
-
Modernize the codebase by, for example, replacing
os.pathusage withPathlibthroughout the test suite for improved readability and maintainability. -
Enable tests to run on all installation types (not just editable source) to support a wider range of development workflows and better debugging for users.
-
Bonus: Expand our GUI testing framework in particular.
Tech keywords: Python, software testing, pytest, code coverage, continuous integration, computational neuroscience, NEURON simulator
Related issues: