Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Testing Research Software
Search
Nikoleta
March 14, 2017
Programming
350
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Testing Research Software
Slides for the talk Writing tests for research software for PyCon Namibia 2017
Nikoleta
March 14, 2017
More Decks by Nikoleta
See All by Nikoleta
A trip to earth science with python as a companion
nikoletav3
0
57
Arcas: Using Python to access open research literature
nikoletav3
1
190
Optimisation of short memory strategies in the Iterated Prisoners Dilemma
nikoletav3
0
62
Arcas
nikoletav3
0
530
SSI Selection Day
nikoletav3
0
440
SWORDS-03-10-2016
nikoletav3
0
58
PyCon UK 2016
nikoletav3
0
180
Other Decks in Programming
See All in Programming
Будущее локальных LLM – Алексей Голобурдин, PythoNN
sobolevn
0
110
AI-Powered Domain-Driven Design
ziobrando
0
400
AI駆動開発4年目の現在地(『あなたはFDEになるべきか?』イベント資料)
kumaiu
0
260
Vue.jsで作る空間解析アプリとCapacitorプラグインのData Bridge
hal_spidernight
1
160
Spec-driven Development with AI
simas
PRO
0
2.3k
Kawaiicon: Kubernetes, it's no longer cool, but let's secure it anyway!
barnbarn
0
110
Modernizing iOS Apps
seyfoyun
0
150
あなたの await、OS まで届いてる? strace で覗く JavaScript の非同期
hasutosasaki
1
2.2k
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
1.2k
Coding with AI: How to trust the storyteller (AWS Community Day Adria, Ljubljana 2026)
slobodan
0
140
Vapor Mode でアクセシビリティは 壊れないか検証した話
fuqda
1
330
Optunaを作ったときにやりたかったこと、その後 (2026/10/16, Optuna Meetup #3)
iwiwi
4
1.5k
Featured
See All Featured
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
300
Producing Creativity
orderedlist
PRO
348
41k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3.1k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
23k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
540
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
2
6.4k
The Pragmatic Product Professional
lauravandoore
37
7.5k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
3k
Practical Orchestrator
shlominoach
192
12k
Discover your Explorer Soul
emna__ayadi
2
1.3k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.9k
Transcript
Writing tests for research software @NikoletaGlyn
None
TESTING
0, 1, 1, 2, 3, 5, 8, 13, 21, 34
...
F0 = 0 F1 = 1 Fn = Fn−1 +
Fn−2
main.py def fib(n): if n == 0: return 0 if
n == 1: return 1 return 2 * fib(n - 1)
n 2 3 4 . . . 16 17 18
Fn 1 2 3 . . . 987 1597 2584 Fn−1 1 1 2 . . . 610 987 1597 Fn Fn−1 1.000 2.000 1.500 . . . 1.618 1.618 1.618
n 2 3 4 . . . 16 17 18
Fn 1 2 3 . . . 987 1597 2584 Fn−1 1 1 2 . . . 610 987 1597 Fn Fn−1 1.000 2.000 1.500 . . . 1.618 1.618 1.618 φ 1.61803...
. |-- main.py |-- golden.py
golden.py import main for n in range(10, 100000): golden_ratio =
fib(n) / fib(n - 1) print(golden_ratio)
golden.py import main for n in range(10, 100000): golden_ratio =
fib(n) / fib(n - 1) print(golden_ratio) 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 ...
golden.py import main for n in range(10, 100000): golden_ratio =
fib(n) / fib(n - 1) print(golden_ratio) 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 ... Glynatsi 2017, “SOLVES THE FIBONACCI MYSTERY”
WRITE REVIEW PUBLISH
20% OF GENETIC RESEARCH IS WRONG Gene name errors are
widespread in the scientific literature by Mark Ziemann, Yotam Eren and Assam El-Osta
INDUSTRY
INDUSTRY AMAZON
. |-- main.py |-- golden.py |-- test_main.py
test main.py import unittest import main class TestExample(unittest.TestCase): def test_initial(self):
self.assertEqual(fib(0), 0) self.assertEqual(fib(1), 1) def test_fib(self): self.assertEqual(fib(2), 1) self.assertEqual(fib(3), 2)
test main.py import unittest import main class TestExample(unittest.TestCase): def test_initial(self):
self.assertEqual(fib(0), 0) self.assertEqual(fib(1), 1) def test_fib(self): self.assertEqual(fib(2), 1) self.assertEqual(fib(3), 2) python -m unittest test_main.py
test main.py import unittest import main class TestExample(unittest.TestCase): def test_initial(self):
self.assertEqual(fib(0), 0) self.assertEqual(fib(1), 1) def test_fib(self): self.assertEqual(fib(2), 1) self.assertEqual(fib(3), 2) python -m unittest test_main.py self.assertEqual(fib(2), 1) AssertionError: 2 != 1 ----------------------------- Ran 2 tests in 0.000s FAILED (failures=1)
main.py def fib(n): if n == 0: return 0 if
n == 1: return 1 return 2 * fib(n - 1)
main.py def fib(n): if n == 0: return 0 if
n == 1: return 1 return fib(n - 1) + fib(n - 2)
main.py def fib(n): if n == 0: return 0 if
n == 1: return 1 return fib(n - 1) + fib(n - 2) python -m unittest test_main.py ------------------------------- Ran 2 tests in 0.000s OK
main.py def fib(n): if n == 0: return 0 if
n == 1: return 1 return fib(n - 1) + fib(n - 2) python -m unittest test_main.py ------------------------------- Ran 2 tests in 0.000s OK Glynatsi 2017, “TRYING TO RECLAIM REPUTATION”
Doc Testing
main.py import unittest def fib(n): """Returns the n th fibonacci
number. For example: >>> fib(5) 5 >>> fib(6) 8 >>> fib(5) + fib(6) 13 >>> fib(7) 10 """ if n == 0: return 0 elif n == 1: return 1 else: return fib(n - 1) + fib(n - 2)
python -m doctest main.py Failed example: fib(7) Expected: 10 Got:
13 **************************** 1 items had failures: 1 of 4 in main.fib ***Test Failed*** 1 failures.
main.py import unittest def fib(n): """Returns the n th fibonacci
number. For example: >>> fib(5) 5 >>> fib(6) 8 >>> fib(5) + fib(6) 13 >>> fib(7) 13 """ if n == 0: return 0 elif n == 1: return 1 else: return fib(n - 1) + fib(n - 2)
Property Based Testing
from hypothesis import given from hypothesis.strategies import integers class TestFib(unittest.TestCase):
@given(k=integers(min_value=2)) def test_fib(self, k): self.assertTrue(fib(k), fib(k - 1) + fib(k - 2)) https://github.com/HypothesisWorks @DRMacIver
It’s impossible to conduct research without software, say 7 out
of 10 UK researchers Simon Hettrick uk/blog/2016-09-12-its-impossible-conduct-research-without-out-10-uk- researchers
USE 92%
IMPOSSIBLE 69%
DEVELOP 56%
TRAINING 79%
USE 92% IMPOSSIBLE 69% DEVELOP 56% TRAINING 79%
Axelrod : https://github.com/Axelrod-Python/Axelrod Arcas: https://github.com/Nikoleta-v3/Arcas Ciw: https://github.com/CiwPython/Ciw Pandas: https://github.com/pandas-dev/pandas Skleanr:
http://scikit-learn.org/stable/ Numpy: https://github.com/numpy/numpy cryptography: https://github.com/pyca/cryptography fastnumbers: https://github.com/SethMMorton/fastnumbers yacluster: https://github.com/KrzysiekJ/yacluster binaryornot: https://github.com/audreyr/binaryornot . . .
None
@NikoletaGlyn https://github.com/Nikoleta-v3 @SoftwateSaved @PhoenixCUni