Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Testing Research Software
Search
Nikoleta
March 14, 2017
Programming
0
310
Testing Research Software
Slides for the talk Writing tests for research software for PyCon Namibia 2017
Nikoleta
March 14, 2017
Tweet
Share
More Decks by Nikoleta
See All by Nikoleta
A trip to earth science with python as a companion
nikoletav3
0
46
Arcas: Using Python to access open research literature
nikoletav3
1
170
Optimisation of short memory strategies in the Iterated Prisoners Dilemma
nikoletav3
0
54
Arcas
nikoletav3
0
450
SSI Selection Day
nikoletav3
0
400
SWORDS-03-10-2016
nikoletav3
0
48
PyCon UK 2016
nikoletav3
0
160
Other Decks in Programming
See All in Programming
Microsoft Orleans, Daprのアクターモデルを使い効率的に開発、デプロイを行うためのSekibanの試行錯誤 / Sekiban: Exploring Efficient Development and Deployment with Microsoft Orleans and Dapr Actor Models
tomohisa
0
240
ソフトウェアテスト徹底指南書の紹介
goyoki
1
150
ECS初心者の仲間 – TUIツール「e1s」の紹介
keidarcy
0
150
🔨 小さなビルドシステムを作る
momeemt
3
670
パッケージ設計の黒魔術/Kyoto.go#63
lufia
3
430
もうちょっといいRubyプロファイラを作りたい (2025)
osyoyu
0
350
Oracle Database Technology Night 92 Database Connection control FAN-AC
oracle4engineer
PRO
1
430
TanStack DB ~状態管理の新しい考え方~
bmthd
2
490
「手軽で便利」に潜む罠。 Popover API を WCAG 2.2の視点で安全に使うには
taitotnk
0
800
オープンセミナー2025@広島「君はどこで動かすか?」アンケート結果
satoshi256kbyte
0
260
はじめてのMaterial3 Expressive
ym223
2
170
AI Coding Agentのセキュリティリスク:PRの自己承認とメルカリの対策
s3h
0
160
Featured
See All Featured
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
Visualization
eitanlees
148
16k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.9k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Side Projects
sachag
455
43k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Thoughts on Productivity
jonyablonski
70
4.8k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
RailsConf 2023
tenderlove
30
1.2k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.5k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
580
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