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
340
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
54
Arcas: Using Python to access open research literature
nikoletav3
1
180
Optimisation of short memory strategies in the Iterated Prisoners Dilemma
nikoletav3
0
59
Arcas
nikoletav3
0
510
SSI Selection Day
nikoletav3
0
420
SWORDS-03-10-2016
nikoletav3
0
53
PyCon UK 2016
nikoletav3
0
170
Other Decks in Programming
See All in Programming
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
4
310
Apache Hive: Toward a Cloud Native Lakehouse
okumin
0
170
OpenSpecのproposalにbrainstormingを持たせてみた
tigertora7571
1
160
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
470
FDEが実現するAI駆動経営の現在地
gonta
2
240
わからない話を追いかけたら、プログラミング言語を作る側にいた
ydah
2
120
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
160
PHPだって関数型したい 〜できること、できないこと〜 / fp-in-php
jsoizo
1
260
Go言語とトイモデルで学ぶTransformerの気持ち / fukuokago23-transformer
monochromegane
0
150
変わらないものが、変わるものを決める — 意図駆動開発 × イベントソーシング × イミュータブル | What Doesn't Change Decides What Can — IDD × Event Sourcing × Immutability
tomohisa
0
850
AI時代、エンジニアはどう育つのか -未経験エンジニアの成長を間近で見て考えたこと-
thasu0123
0
200
【やさしく解説 設計編・中級 #1】一つの車に、運転手は一人 ~ある倉庫システムの事例から~
panda728
PRO
0
200
Featured
See All Featured
Game over? The fight for quality and originality in the time of robots
wayneb77
1
230
Git: the NoSQL Database
bkeepers
PRO
432
67k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
450
How to Ace a Technical Interview
jacobian
281
24k
4 Signs Your Business is Dying
shpigford
187
22k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
190
Prompt Engineering for Job Search
mfonobong
0
390
The SEO Collaboration Effect
kristinabergwall1
1
510
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
310
The SEO identity crisis: Don't let AI make you average
varn
0
520
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
470
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