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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Nikoleta
March 14, 2017
Programming
0
320
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
51
Arcas: Using Python to access open research literature
nikoletav3
1
180
Optimisation of short memory strategies in the Iterated Prisoners Dilemma
nikoletav3
0
56
Arcas
nikoletav3
0
500
SSI Selection Day
nikoletav3
0
410
SWORDS-03-10-2016
nikoletav3
0
52
PyCon UK 2016
nikoletav3
0
170
Other Decks in Programming
See All in Programming
maplibre-gl-layers - 地図に移動体たくさん表示したい
kekyo
PRO
0
240
Claude Codeセッション現状確認 2026福岡 / fukuoka-aicoding-00-beacon
monochromegane
4
410
AI時代でも変わらない技術コミュニティの力~10年続く“ゆるい”つながりが生み出す価値
n_takehata
2
720
Claude Code Skill入門
mayahoney
0
200
エージェント開発初心者の僕がエージェントを作った話と今後やりたいこと
thasu0123
0
240
Railsの気持ちを考えながらコントローラとビューを整頓する/tidying-rails-controllers-and-views-as-rails-think
moro
5
390
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
170
Cyrius ーLinux非依存にコンテナをネイティブ実行する専用OSー
n4mlz
0
130
CSC307 Lecture 13
javiergs
PRO
0
320
AHC061解説
shun_pi
0
360
nilとは何か 〜interfaceの構造とnil!=nilから理解する〜
kuro_kurorrr
3
1.9k
How to stabilize UI tests using XCTest
akkeylab
0
110
Featured
See All Featured
The Invisible Side of Design
smashingmag
302
51k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.7k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.4k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
210
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Paper Plane
katiecoart
PRO
0
48k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
470
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
150
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
390
Ruling the World: When Life Gets Gamed
codingconduct
0
170
The Pragmatic Product Professional
lauravandoore
37
7.2k
30 Presentation Tips
portentint
PRO
1
250
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