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
組み込み開発でテスタビリティを支える / Testability in Embedded So...
Search
Hiroki Iseri
February 17, 2018
Programming
0
1k
組み込み開発でテスタビリティを支える / Testability in Embedded Software
テスト自動化研究会の活動で作成した資料の公開用簡略版
Hiroki Iseri
February 17, 2018
Tweet
Share
More Decks by Hiroki Iseri
See All by Hiroki Iseri
チームのテスト力を総合的に鍛えて品質、スピード、レジリエンスを共立させる/Testing approach that improves quality, speed, and resilience
goyoki
5
940
テスト分析入門/Test Analysis Tutorial
goyoki
13
3.2k
高品質と高スピードを両立させるソフトウェアQA/Software QA that Supports Agility and Quality
goyoki
11
4.9k
高スピードと高品質を支えるソフトウェアQA(開発変革セミナー)
goyoki
1
97
アジャイルを支えるテストアーキテクチャ設計/Test Architecting for Agile
goyoki
12
4.4k
高品質と高スピードを両立させるテストアプローチ/Test Approach that Improves Quality and Agility Together
goyoki
17
20k
プレイヤーとしてのチームのテスト力UP/Improving team skills for testing
goyoki
3
1.8k
テスト設計チュートリアル/Test Design Tutorial
goyoki
12
6.5k
自動テストを活躍させるための基礎作りとテスト設計の工夫
goyoki
8
4.4k
Other Decks in Programming
See All in Programming
Quand Symfony, ApiPlatform, OpenAI et LangChain s'allient pour exploiter vos PDF : de la théorie à la production…
ahmedbhs123
0
210
猫と暮らす Google Nest Cam生活🐈 / WebRTC with Google Nest Cam
yutailang0119
0
160
すべてのコンテキストを、 ユーザー価値に変える
applism118
3
1.4k
NPOでのDevinの活用
codeforeveryone
0
860
20250704_教育事業におけるアジャイルなデータ基盤構築
hanon52_
5
850
Startups on Rails in Past, Present and Future–Irina Nazarova, RailsConf 2025
irinanazarova
0
140
AI時代の『改訂新版 良いコード/悪いコードで学ぶ設計入門』 / ai-good-code-bad-code
minodriven
20
8.3k
Hack Claude Code with Claude Code
choplin
5
2.3k
MDN Web Docs に日本語翻訳でコントリビュートしたくなる
ohmori_yusuke
1
130
ペアプロ × 生成AI 現場での実践と課題について / generative-ai-in-pair-programming
codmoninc
2
19k
PHPで始める振る舞い駆動開発(Behaviour-Driven Development)
ohmori_yusuke
2
410
Google Agent Development Kit でLINE Botを作ってみた
ymd65536
2
260
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
134
9.4k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
Speed Design
sergeychernyshev
32
1k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
Designing Experiences People Love
moore
142
24k
Building Adaptive Systems
keathley
43
2.7k
Documentation Writing (for coders)
carmenintech
72
4.9k
Building Applications with DynamoDB
mza
95
6.5k
A Modern Web Designer's Workflow
chriscoyier
695
190k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.7k
Transcript
1
)43.&/ • 4 • D@AFID=;DKH1*/"D@E;':<GJK B9 ; (: •
• ;8:,84;>AIC?0 # L4DKH31-/3235!;M • 04$D@AFID=%5"+6/$D@E3 1-/4D@AFID=%; *7+# 2
WWfkiab_RQNOheiS hegjmh`T • %'( CZ[hei ^H\IQRVK LZD • Cfkiab_hei&)'SDn+38
7093;oA • hegjmh`SPBcei^PG\ • Chegjmh`S PWWfkiab_Scei F%$ J]\D Chei^ETBVKhegjmh`^[XUGD • Chei SMYSdehlD!*39-6923;<" /3<=10;736=<094:;23;>9539 09263.:4=?0;3#!.=3409,>9580@;" 3
4 " #!
746:<7.+, >5;8/0-1=39-<=2? • >%& ! (*? • >'&)
! (*? • >$#(&$!! ! (*? • >$"%$' ! (*? • > "%! (*? • >( ! (*? • >#&'(# ! (*? !" ( S.) $ # 5
)[Y\P[YZ]_[WMQ • *"c3@:A67;<;CEd • )*I • +!c37B:AD67;<;CEd • [Y\&P b
.V) JSKH • c1?>CA?<<67;<;CEd • [Y\-V)JSKH • , (c2:8?=@?B67;<;CEd • [Y\-PTJSF[Y\$ RP/'I • %c4;=@<;8;CEd • )[Y\SLP$ VXa^`OJSKH • c4C67;<;CEd • )[Y\O0GUINH • #,c5>9:ABC6>967;<;CEd • [Y\-V#,JSKH 6
" 0,.4:0% • 0,1 • 0,1,*>6#"
• 0,.4:0% • 0,1 "0,.4:0%#" • +,08<7;0,.4:0% • 0,.4:0%#3>2&'$! # • -51&'$$>(0)/90,.4:0% • 0,.4:0%= • 0,.4:0% 7
• /+0 • /+0+)=5" ! • /+-39/$
• /+0 !/+-39/$" ! • *+/7;6:/+-39/$ • /+-39/$"2=1%&# " • ,40%&##='/(.8/+-39/$ • /+-39/$< • /+-39/$ 8 $ # % ! "
UQVGUQSY_ULG KNV^Mb *( UQSY_ULJ CI • ) ) +(
UQSY_ULJBIKcOUPT\JCI • FHI"!)$G% • `M]cKcOUPT\A-=<86=KcOUPT\ ,( UQSY_ULJBIEZaRQJCI • ,DGKZacTAUQV&# • UQSY_ULG • UQVG G • 36>?'4>'.<5@:6;?4?7<;)36>?'2:699> • UQV#ZaRQ • /0/1)GX^WPQA_QP[cQWUQV 9
TOQY`TFE&?D • TOV% E>DGdQeZHeO • • TOV)E% ?D=E#>D= •
-LdZFKbeN_d<UXSI<.10Lea< • ' • TOV)B E% ?D='E#>D= • -cK<]^`Rd[<VbeM • • "!E% !ACD=% A+@Ld\eWdV E,?D=( $E#>D • -`dJ*<[`[cPSM*</49473472; 07642:587 10
?9:DH?43(1 • ?9@3 '1,?9@FJ?4H?4 • ?9@ • 8B?4<6=7 •
.-2)?9@;EI • #$&$%"0?9@ • %$ $! +* • ?9@ • ?9@>JI,)/,AG5C+* 11
12 )' % )' /
)' ,+! ! )' % )' / . "- )'($ #&*
13 .* ( .*
!6 .* 31# # .* ( .* !6 5 $4 .*,' %)0 2/ +&/ "-/
" • #$ $ • •
• • !$" 14
^Z`) EI^Z`Oq[sfPsZI&4v @G&4I*E (HBL • # I+Oq[sfPsZ • u
tRXpJpYNbGF,M!ALu? tTkg\kJ"-u?+0rWseZ!pU • %G+Oq[sfPsZ • # HCDOq[sfPsZ • uQilos[ ?Xilos[ ?. I • 3%GOq[sfPsZ • ^Z`!IOq[sfPsZ • u_d]S t:=68'u?^Z`!/ t>6<=? =7;59;'u?12$!pUrjc[mqU • 1Oq[sfPsZ • VsaohnI1IOq[sfPsZ • u6;9IK?Upsdn 15
YUV]cYOH HPf_W[ YU[D GBA • YU[>J >LK • IXgdH C
? MK • !FPfVg^QgU • &9-/+928/"# '754*<8154CZ\WRCC@K • )*($%# +&(CTabegVH@NC@K • (249;`gU# 0.-USc_[ ,:3=6<8154FE!CC@K 16 " "" "$' "")% $' * ( & #!
856:?80** • ( • /B3847=, '#%!)856:? 80. • 859&$+"2>B,*
• 859 *) $-A • * ( • ;@<1@9* • *856:?80. 17
aZ]fnaSH +H-#v +?: 2OQPH=,L0L • &H + • 8'AC;P&N`to=D>P< •
hq[ZH + • 8Trh_bHIOQP< • jdYlrbH + • 8.' I<9^tkHZVoI < • /EHbptcUg • u *) • (&<O5AC;F;<:3s4nZWIF;< • 8 $JH6 • %R1@BF;<:n\tZR!.AF;< • 87JH6 • GAF;<:eXRM0KF;< • 8[VmnaS • -"#=[VmnaSitoEFOF;< 18
aZ]fnaSH +H-#v +?: 2OQPH=,L0L • &H + • 8'AC;P&N`to=D>P< •
hq[ZH + • 8Trh_bHIOQP< • jdYlrbH + • 8.' I<9^tkHZVoI < • /EHbptcUg • u *) • (&<O5AC;F;<:3s4nZWIF;< • 8 $JH6 • %R1@BF;<:n\tZR!.AF;< • 87JH6 • GAF;<:eXRM0KF;< • 8[VmnaS • -"#=[VmnaSitoEFOF;< 19 /79-;>6 4:# $# !%(#@10 ?8/793<5( $)+ @1* /79.= '#"&2,/79.=
, "Syktn]th , "[ohq`bPMZ • gbh+RNKOI, "[hfme^tP/-R 'V2W )RQZU
PS1 5T HHPJZ clh^_\ S1 5Tz o]topq &3 Tz opq&3T HHPJZ S o]topqS &$ sviLY\]i r#UPS1 5 6!=<LYsviU PS1 5 1 5S .4) sviS opq&$S ) %Sopq&$ Spjdqta) :D?B w7)+X 0qb`S( LYx ohq`b /-R'V2W , " >G@EFADC :>;PSohq`bS ohq`b- [ /-u*R'V2W 98
0 • .!-$'%&) #+-/
• ,"!(!-$'%&),"* $"' %! 2/%! -5.* :4)93 +; # A+>?8 -5)9 =6(# -5)9 -507 &1@assertion $'IF ,< 21
9!:C@CM B?K • =;LE7M <JG"IK8 BMBG"HF>8 • C • Tg^
• acaeY[U # • cfS # • Q`WPS] #(%bOfZ # • *331% • $@C\XZ_c\N@D7B C= >A &BAK • dRVgTg^ RO^h+0-/,.2').,6/.45i 22
$V S)T$LUT] 0EE=DF@BA !V • otvUQJRV0EE=DF@BA • -*0763504V8:F;?<B>*2:A:>=D • "V0EE=DF@BAL(&\
N^PK_# • (_%YTM^XT[TJmvlcd`Z&V $_ UO] • gunbr'0EE=DF@BA • - ;BAEF9=GCD +*EF:F@;9:EE=DF,1..//- • gunbrS`hvipu_ HeqvZVI] gvlWgunbrUO] • guoafsvipu'kvjV$_ UO] 23
01%,*')(:>G[PU]LOIV[=AC 24 • %,*')(:G[PU]LOIV[>4 ?MJN> ;69ZSY;<892C -F]R[K]J>WEQWX4 ->A3< D29MJN
7CHJMTD! \ 5B2: @C .%,"+*)#&$%,*')(WEQWX=AC /
UQVGUQSY_ULG KNV^Mb 25 *( UQSY_ULJ CI • ) )
+( UQSY_ULJBIKcOUPT\JCI • FHI"!)$G% • `M]cKcOUPT\A-=<86=KcOUPT\ ,( UQSY_ULJBIEZaRQJCI • ,DGKZacTAUQV&# • UQSY_ULG • UQVG G • 36>?'4>'.<5@:6;?4?7<;)36>?'2:699> • UQV#ZaRQ • /0/1)GX^WPQA_QP[cQWUQV
;79@F;0&(/I4;5:E' " • /I4;5:EHBG%$)#;79@F;0 • ;79@F;0 .$-?I=12/* ' •
;7<HBG"$-;79@F;0'D3>8C* ' • ;79@F;0.,*$ .;7<'76IA&% #-+!. 26
RmV^W]hFJ+IMN0/73J 4 +IMN0/K^Z_- 'J( • #&J1 QH@>?C=Q+5 "l "l"6GAE!)BN: +ID;EXkfmak_LSk\mcTmZQ0/
BN • "p1 K;>?C: • "p1 KPON>?C: • UdYTW_2 *8% lXk[e_nbmjk`lgSimo • .$9,9Q <N 27 " !
'#*" ,$ )
'.*" ,$- 0 ,$2+ ,$ (4 3 /1!% (4 &5 28
4* '#*" ,$ )
'.*" ,$- 0 ,$2+ ,$ (4 3 &6 # /1!% (4 &5 -! <+ 4* 20" $ 3> :';) = .0"$ 4* /5, 7(% 29 <+ 4* 20" $ ; ? 8 9& 6 1
4* 62:0 <3!*9
6@:0 <3!= C%(<3F; "&"#)' <3! "7H+ "G &6 # AD/4 " "7H+5J -! <+ 4* 20" $ 3> :';) = .0"$ 4* /5, 7(% 30 <+ 4* 20" $ ; ? 8 9& 6 1 -K>.1 '"E $' 8I ?ML ,B
Vt[d\cnMP ORS#"-'P( 'P(Nd`e#"P • aieYZVP!u^j_`dlvO& Pr kqu7=G=@*B>*4BA;=DAE+T# JrkqKNOd`eP QT$LS oXimtb_`dl
\o`w) iUXps] ^j_`dl \o`w gtfYZV ^j_`dl \o`w) " ^j_`dl \o`w) ^j_`dl \o`w Pd`e w)Jd`bhpdWO%LS d`e w) d`bhpdWO%LS d`e w) d`e w d`e w 654*2/0.13/..2*8=<?;:@*<=G?;=*EB>FH:D=*, 9B>FH:D=*@?>=*;I;@=*CDB;=EE=E 31
!LRS('5/M 1T$C + Q/T 1ESHOM('M 64 !-TGPGPDFKB • ('p%I# •
3fqdWXULRS 0AYg^lAn`ZKJ$* 74 !-T&ES • 9??:>@;=<LRS!._X`Z • [eaVa]cM, 84 !-T ESgn^]T"N • a]cp2 a]cT • IM) T • 3iblAibl\hjmq\ko 32 "' )$ # ! %* $$&(
+NUW10>8O 9Y-B 5 T8Y 9GWHRO10O • .:M10O &*YFICVGW • lmq(*TgvdO4
• FICVTW • ;'/u '/fvr) 2!S@WOK"&GW • _pvu%10w4)x • FICVTW • tvs\nvOkio[rYFICV3ZK*GW • -%10wkredb`?krea[?<7)x • $N YAXJFICVTW • ,6Qcjh]^[KP?EEO=K#FNMWELDA 33
?;@5%46L9?:>F. • ?;@.K5*)53/ • ?;@JCI')4?;=BH?75 • K K •
?;@GL?7H?7 • .!#E8A<D5 -0/ • ",&2?;=BH?75+(41$- 34
jfk$ ZOXgok^_[[|ajbisU x]t|[|ajbismh|z}2=<9;2:~ • gok^_[Zlr]zZ(Tx]t*R • "W)WR%Kjfhnwj\!S'P-N [pwc|euz :<5 3;>
q]by dzky|v| Ix]t,76V& QJZ I x]t,T({ Z }wz b +Rx]tZYOK45<1458` v|R(~ H2=<9;2:.2@@BDG?C@B.<BFGRVx]t R[pwc|euzSq]bydzky|v x]tZjfkT# L2=<9;2:.;G?CA?EAFM/2=<9;2:0 35
LGM ;.:HRM>?<<_ALBJV8 Q_LFYO^C `")(%'"&! • \=W; 7- 9;19202:- 36 <S[D_FY^
&($ #'* U=B]E^M]_Z_ System Service OS Service Abstraction Hardware Driver +#'*\=W514 5/:,]C9>@KJ NKC;73 XOKMLGM9 LGM 55/:61 4 +BZGI614 7E ^T_P^M; XOKMLGM9 LGM 8 72:
NHO</;JSO@A==_CNDMX8 )('&)=_CNDMXQK_] 37 Broker
*F_RH9=UZ8"! <U\CG514, 8 < * )('&)QK_]7:3+ =LUN>T6=_CND MXWBPIV`c a <2;5+NHKRZN> 0 76; -Z=[K?V%$#b.T[_H^LEYH
4'+5ZVW\`ZRHBLHQcSZT X_DI19NH&$:0( • "K,KHQcSZTX_I2UVZ^deb]aH MYcaH!P ;<=O3 AH IHUVZ^QcSZTX_*)D JO3"K,KI9N
8G<6 • /P.G%7BLG2QcSZT[IE> C19NHZV[#H&$:9@F6 • UVZ^QcSZTX_*)D2ZVW\`ZRG ->C 6O9:2ZVW\`ZRP?O 38
WSXGWSU[dWLG KNXcMg 39 *( WSU[dWLJ CI • ) ) AQg\ahU[Rbg
+( WSU[dWLJBIKhOWPV_JCI • FHI"!)$G% • eM`hKhOWPV_A-=<86=KhOWPV_ ,( WSU[dWLJBIE]fTSJCI • ,DGK]fhVAWSX&# • WSU[dWLG • WSXG G • 36>?'4>'.<5@:6;?4?7<;)36>?'2:699> • WSX#]fTS • /0/1)GZcYPSAdSP^hSYWSX
'$('$%)+'#! "*,-& "*,-&
40
]Z_I]Z[`g]VS?RUcjl\ , DKGIUcjl\@PQAM *) HQ"M • W]il]VbH]Z[`g]VSQAM> • %N
J]Z[`g]V S#BER> • (30=]Z_Icj_[WakY +) @PQ"M • O! H]Z[`g]VSQ"M • (]Z_&%=2f^h=.4;768'59:'14;<=f^h&] Z_=f^hdlZ]Z_ ,) CGQ"M • $H]Z[`g]VI SDR • WkXgek[hH]Z_SR • m-/HL"TF%]Z_ 41
".+/#,+ 647 • "./- • 647 (6459:621&)!'3<810
• ;*/- • +6471; $(*%0 (James W. Grenning) 42
UQVGUQSY_ULG KNV^Mb 43 *( UQSY_ULJ CI • ) )
+( UQSY_ULJBIKcOUPT\JCI • FHI"!)$G% • `M]cKcOUPT\A-=<86=KcOUPT\ ,( UQSY_ULJBIEZaRQJCI • ,DGKZacTAUQV&# • UQSY_ULG • UQVG G • 36>?'4>'.<5@:6;?4?7<;)36>?'2:699> • UQV#ZaRQ • /0/1)GX^WPQA_QP[cQWUQV
@<>BD@:8 "4(69CEF?1 • @<A/ .36 • @<>BD@:/&8@<A/+! • @<ACE=<.36
• @<A,@<A8!0$ &)6 • @<>BD@:#-,%7.@<A -,%7. @<A85*6 • @<A '2( @<A;F<86 • @<>BD@:86/6@<A8(6 44
856;?80(!/ 859( - +% • 859( %856;?80(!/. • 856;?80/- *&,'
• (1@6B=2B5'#$8594B: %)>7<@3"$ (/A 45
c`bhlcXRKV c`eRUJSN!H • UJSOLMF^`cj1aieZ[WRQ RI • 'Q o*o$ • ("T+R)q38;
F6599 r • #R,G • gbpnTYdX\jR% • 4598:QPc`e]pfR R% • 2A?<B-2C>?-W_kYmaieZ[W&R.8C=?DE-20-7<DE@B/ 46
/.0''*"( ' • -21' %#$ !+) &/.0-21', //
Excel! void test_1_1() { … expect1 = 1; expect2 = 0; … assert(expect1 == result1); assert(expect2 == result2); … } void test_userCreation_minusAgeIsInvalid(void) { … expectUser = createUser(“invalid usar”, -1); … EXPECT_EQUAL_USER(expectUser, result); … } … " Test as Documantation 47 xUnit Test Patterns: Refactoring Test Code(Gerard Meszaros)
/.0''*"( ' • -21' %#$ !+) &/.0-21', //
Excel! void test_1_1() { … expect1 = 1; expect2 = 0; … assert(expect1 == result1); assert(expect2 == result2); … } void test_userCreation_minusAgeIsInvalid(void) { … expectUser = createUser(“invalid usar”, -1); … EXPECT_EQUAL_USER(expectUser, result); … } … " Test as Documantation 48 xUnit Test Patterns: Refactoring Test Code(Gerard Meszaros)
Wvvltko~¼¬§®&+ flyzTeslrryTUT¬§®¥»¯·² ¢©·¹£ • YuklTeslrry • biyj{xlTflyzT¬§®)B9FP • YutkozouthrTflyzT_umojT¬§®µ¨«¯ $4HDO
• ]hxkVzuVflyzTYuklT¬§®P • flyzTYuklTZ{vrojhzoutT¬§®¥»¯¥±³ºID • flyzT_umojTotTcxuk{jzoutT¬§®G¬§®/ C¸¦«¢ • Xlnh|ouxTeslrry • WyylxzoutTdu{rlzzl¬§®¤»§-/hyylxzout- 7 • [xxhzojTflyz¬§®?2'- • ^tzlxhjzotmTflyzy¼:¬§®!";¬§®?2 • dlyu{xjlT_lhqhml¼·¨»§J, • autklzlxsotoyzojTflyz¼¶¹ª´º ?2>¼ • \xlynT\o~z{xl¼*18.\xhmorlTflyz6L 5¬§® • \xlw{ltzTZli{mmotm¬§®- R7°«¡; • `ht{hrT^tzlx|ltzout¬§®C(3%EA¬§®C • eru}Tflyzy¬§®C/K • cxupljzTeslrr • X{mmTflyzy N& M&R • Zl|lruvlxyTauzTgxozotmTflyzyJ<@¬§®0]omnT • flyzT`hotzlthtjlTYuyz¬§®¥§®S • cxuk{jzoutTX{my¬§®0# =¬§®°£Q xUnit Test Patterns: Refactoring Test Code(Gerard Meszaros) 49
*??6=59Dpe_fRR 26AB(1<6;;A()(e_f^ogRlhY[blm\ • 26AB 1<6;;Ap+@@3B94(26AB • e_f$ I • R
% • -=B6@34B9=7(26ABAp!URe_fSRIGF "Oe_f$ IWV • 06A>C@46(.63:376plao_&IHTJGLNGPG • />=56B6@<9=9AB94(26ABpkmcjnP XLNGNE$ IQPLNGV • #R %RM • ,@6A8(,9DBC@6p R`dfZdiXe_f]o_'O KPG 50
:68<>:31 .#/2=?@9+ • :6;) (-/ • :68<>:3)!1:6;) %
• :6;=?76(-/ • :6;&:6;1* !$/ • :68<>:3 '& 01:6;)65@=(#/ • :6;",#:6;4@61/ • :68<>:31/)/:6;1#/ 51
! •
"D1,>:E "D1$!&' " %$!&' "0A ;C " F2 6=4=( "& #" "68 /7 "-<. "*?@AG VSTeP+D (http://qualab.jp/vstep/) ) 1 9B) 53 52
?<@ 7?<>AC?;:/8 ?<@&BD=<37! )( ?<@ 7.:6 28 • ?<>AC?;7# 7'.409:E"
*( 287-8?<@:8 +( ?<@ 7$ :/8 • ?<>AC?;7 :1,%5 :/8 53
" g?bR " +SA " KGSA 6[PC
$ ," 0 ," 8Z MU XL MU 5] H; e`V PC_ aQ PC 1X @EH 5] H; ":YN :YJ "g?X> " + *!-0 "=cf "^J ) " 6[PC 5]H; " 6[PC 5]H; 6[F Oh 1 … 6[F -20℃ *# (. Oh /'. O21 <TB7 30s35s 54 VSTeP%" &JaSST'16\dJW 9JaSST\dID34
55 1 % 0
TRV H>KG BJ TRV HC@^KBJ !
! … ") ! …. ") (+)& $M]QWL\]OH%EA DTRV"K BJ;TRV HK BJ (,)HTRV"KA: TRV?FTRV"K: TRVH# GIDJ <TRV"HH= ^N[RY_R'XSP_QY_RH ZU\]O`53482) ^05!:/*.798`1-634a ! …. QA ! 56
7E@/ENKOHE !"!#H4E • NKO?14E!"!#!$+%$'&() '$+%$'&*-, • JRH6<C.5F9JR3BFE:4 • NKO3JR:>NKMPSNI@ 3BD.
3 • !"!#ANKOQTLK@@=7E H G8NKOA6;2D0 1"#A →24-B '6/;< ?!9. 1" ,%1" (3 (& ?!9. → 8?$ 1" *#A →50 :=@+)7> 57
B s¡£ 2C ¦©¤9wu • §£¡£2C ¦©¤ • ¡£D}to¡£¥xF z y
• q¡£$E?M0 \kmjfelhkjT`gngiT©¥ (,K4rU_cdbZV • B ¡£>O}x*oQA }y ¡£3RD}<z}u{xt • ]^]a~y¡£B L6 .! | • 2C ¦©¤¯ XW ¡£JH;<7 • ¡£/%)8p¡£ =' YW ¡£¬B &|yp # ¡£B Nv • 5"}t¡£JH¨¢ª • V:¡£¬«¬¤S ¡£ • B @¡£©ª¡£+/%®8 • V1G-@¨¢ª[c`IP 58
%#'" • %#' %#')&*%#'" %#' (+$# !" %
'P7 -*$! K:2I FBJ?% '3G+&. FB;H% '6> ;HN9K:% ' *-&OpenCVK: N9 <O5E ")/5 E*$! K: ;H2I % '3G -*$!K: N9=QN9 @ % '%#, % '/%( N9K:;H% ' % 'P7MA % '%#,C8 ;H1D0 % '3G % '6>4RL 59
• ! • "% '$ !
# &' 60