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
990
組み込み開発でテスタビリティを支える / Testability in Embedded Software
テスト自動化研究会の活動で作成した資料の公開用簡略版
Hiroki Iseri
February 17, 2018
Tweet
Share
More Decks by Hiroki Iseri
See All by Hiroki Iseri
テスト分析入門/Test Analysis Tutorial
goyoki
12
2.7k
高品質と高スピードを両立させるソフトウェアQA/Software QA that Supports Agility and Quality
goyoki
11
4.5k
高スピードと高品質を支えるソフトウェアQA(開発変革セミナー)
goyoki
1
78
アジャイルを支えるテストアーキテクチャ設計/Test Architecting for Agile
goyoki
12
4.3k
高品質と高スピードを両立させるテストアプローチ/Test Approach that Improves Quality and Agility Together
goyoki
17
19k
プレイヤーとしてのチームのテスト力UP/Improving team skills for testing
goyoki
3
1.7k
テスト設計チュートリアル/Test Design Tutorial
goyoki
12
6.5k
自動テストを活躍させるための基礎作りとテスト設計の工夫
goyoki
8
4.3k
テスト自動化の成果をどう評価し、どう次につなげるか/Test Automation Next Step
goyoki
1
920
Other Decks in Programming
See All in Programming
TypeScript LSP の今までとこれから
quramy
0
140
tsconfigのオプションで変わる型世界
keisukeikeda
1
130
Rethinking Data Access: The New httpResource in Angular
manfredsteyer
PRO
0
220
TypeScriptのmoduleオプションを改めて整理する
bicstone
4
440
DevTalks 25 - Create your own AI-infused Java apps with ease
kdubois
2
130
CQRS/ESのクラスとシステムフロー ~ RailsでフルスクラッチでCQRSESを組んで みたことから得た学び~
suzukimar
0
200
JVM の仕組みを理解して PHP で実装してみよう
m3m0r7
PRO
1
250
TypeScript エンジニアが Android 開発の世界に飛び込んだ話
yuisakamoto
6
970
CRUD から CQRS へ ~ 分離が可能にする柔軟性
tkawae
0
230
RubyKaigiで得られる10の価値 〜Ruby話を聞くことだけが RubyKaigiじゃない〜
tomohiko9090
0
110
衛星の軌道をWeb地図上に表示する
sankichi92
0
250
Cursor Meetup Tokyo ゲノミクスとCursor: 進化と制約のあいだ
koido
1
430
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
35
2.7k
Optimising Largest Contentful Paint
csswizardry
37
3.3k
Why You Should Never Use an ORM
jnunemaker
PRO
56
9.4k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Thoughts on Productivity
jonyablonski
69
4.7k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
52
2.8k
Adopting Sorbet at Scale
ufuk
76
9.4k
Art, The Web, and Tiny UX
lynnandtonic
298
21k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Speed Design
sergeychernyshev
30
970
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