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
Splat
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
evandrix
June 29, 2012
Technology
1
100
Splat
FYP research
evandrix
June 29, 2012
Tweet
Share
More Decks by evandrix
See All by evandrix
Finding a Way Out
evandrix
0
48
Floating Point Consistency
evandrix
1
46
Other Decks in Technology
See All in Technology
10Xにおける品質保証活動の全体像と改善 #no_more_wait_for_test
nihonbuson
PRO
2
210
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
3k
GitHub Issue Templates + Coding Agentで簡単みんなでIaC/Easy IaC for Everyone with GitHub Issue Templates + Coding Agent
aeonpeople
1
190
IaaS/SaaS管理における SREの実践 - SRE Kaigi 2026
bbqallstars
4
1.7k
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
6
68k
生成AIを活用した音声文字起こしシステムの2つの構築パターンについて
miu_crescent
PRO
1
130
M&A 後の統合をどう進めるか ─ ナレッジワーク × Poetics が実践した組織とシステムの融合
kworkdev
PRO
1
420
Agile Leadership Summit Keynote 2026
m_seki
1
540
Introduction to Bill One Development Engineer
sansan33
PRO
0
360
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
3.8k
Amazon S3 Vectorsを使って資格勉強用AIエージェントを構築してみた
usanchuu
3
440
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
10
73k
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.3k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
2.1k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
290
Reality Check: Gamification 10 Years Later
codingconduct
0
2k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.3k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
90
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
WCS-LA-2024
lcolladotor
0
450
GitHub's CSS Performance
jonrohan
1032
470k
A better future with KSS
kneath
240
18k
The Language of Interfaces
destraynor
162
26k
Transcript
Splat: Simple Python Lazy Automated Tester Lee Wei Yeong
[email protected]
tiny.cc/lwy08 1 Saturday, 3 November, 12
Introduction 2 2 Saturday, 3 November, 12
Motivation • writing unit tests ‣ crucial ‣ costly but
invisible ‣ can be automated 3 3 Saturday, 3 November, 12
• dynamically typed • clean, concise & elegant syntax •
builtin introspection & reflection facility 4 4 Saturday, 3 November, 12
Why bytecode? • “Growing numbers of... closed source applications... using...Python...”
(Smith, 2010) • simple • fast 5 5 Saturday, 3 November, 12
Background 6 6 Saturday, 3 November, 12
Existing tools • Pythoscope • Pytestsgenerator • ...but neither works!
7 7 Saturday, 3 November, 12
Existing tools • Ruby Test case Generator (RuTeG) ‣ structural
testing ‣ evolutionary search ‣ tests object-oriented programs 8 8 Saturday, 3 November, 12
Software testing 9 9 Saturday, 3 November, 12
Sample test target 10 10 Saturday, 3 November, 12
Sample unit test 11 11 Saturday, 3 November, 12
SPLAT 12 12 Saturday, 3 November, 12
Lazy instantiation • technique inspired by IRULAN • initially: None
proxy metaclass wrapper • test data only generated for active variables 13 13 Saturday, 3 November, 12
Lazy instantiation 14 14 Saturday, 3 November, 12
Lazy instantiation 15 LOAD_GLOBAL (A) CALL_FUNCTION 0 STORE_FAST (arg1) LOAD_CONST
(‘arg1’) LOAD_FAST (arg1) STORE_ATTR (attr1) LOAD_FAST (arg1) RETURN_VALUE 15 Saturday, 3 November, 12
Lazy instantiation 16 LOAD_GLOBAL (A) CALL_FUNCTION 0 STORE_FAST (arg1) LOAD_CONST
(‘arg1’) LOAD_FAST (arg1) STORE_ATTR (attr1) LOAD_FAST (arg1) RETURN_VALUE function1 ( Param1(None), Param2(None), Param3(None) ) 16 Saturday, 3 November, 12
Lazy instantiation 17 LOAD_GLOBAL (A) CALL_FUNCTION 0 STORE_FAST (arg1) LOAD_CONST
(‘arg1’) LOAD_FAST (arg1) STORE_ATTR (attr1) LOAD_FAST (arg1) RETURN_VALUE function1 ( Param1(None), Param2(None), ‘default’ ) 17 Saturday, 3 November, 12
Lazy instantiation 18 LOAD_GLOBAL (A) CALL_FUNCTION 0 STORE_FAST (arg1) LOAD_CONST
(‘arg1’) LOAD_FAST (arg1) STORE_ATTR (attr1) LOAD_FAST (arg1) RETURN_VALUE function1 ( Param1(None), Param2(None), ‘default’ ) 18 Saturday, 3 November, 12
Lazy instantiation 19 LOAD_GLOBAL (A) CALL_FUNCTION 0 STORE_FAST (arg1) LOAD_CONST
(‘arg1’) LOAD_FAST (arg1) STORE_ATTR (attr1) LOAD_FAST (arg1) RETURN_VALUE TypeError! 19 Saturday, 3 November, 12
Lazy instantiation 20 LOAD_GLOBAL (A) CALL_FUNCTION 0 STORE_FAST (arg1) LOAD_CONST
(‘arg1’) LOAD_FAST (arg1) STORE_ATTR (attr1) LOAD_FAST (arg1) RETURN_VALUE function1 ( { ‘attr1’: Param1_attr1(None) }, Param2(None), ‘default’ ) 20 Saturday, 3 November, 12
Lazy instantiation 21 LOAD_GLOBAL (A) CALL_FUNCTION 0 STORE_FAST (arg1) LOAD_CONST
(‘arg1’) LOAD_FAST (arg1) STORE_ATTR (attr1) LOAD_FAST (arg1) RETURN_VALUE function1 ( { ‘attr1’: Param1_attr1(None) }, None, ‘default’ ) 21 Saturday, 3 November, 12
Demonstration 22 22 Saturday, 3 November, 12
Architecture 23 23 Saturday, 3 November, 12
Challenges • Vague error messages • Lack of existing tool
support • Test program contains imports 24 24 Saturday, 3 November, 12
Challenges • Relationship between input arguments • Various programming constructs
• Range of test data values 25 25 Saturday, 3 November, 12
Limitations • Custom Exceptions, e.g. InvalidGraphType • Random functions •
Generators 26 26 Saturday, 3 November, 12
Evaluation 27 27 Saturday, 3 November, 12
Criteria • Quality • Performance • Generality 28 28 Saturday,
3 November, 12
Results 29 Python package # 29 Saturday, 3 November, 12
Results 30 Mean number of iterations to achieve 100% coverage
= 497 30 Saturday, 3 November, 12
Conclusion 31 31 Saturday, 3 November, 12
Future work • improve tool sophistication • optimise using PyPy
• more comprehensive benchmarks 32 32 Saturday, 3 November, 12
evandrix.github.com/Splat 33 Saturday, 3 November, 12