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
980
組み込み開発でテスタビリティを支える / Testability in Embedded Software
テスト自動化研究会の活動で作成した資料の公開用簡略版
Hiroki Iseri
February 17, 2018
Tweet
Share
More Decks by Hiroki Iseri
See All by Hiroki Iseri
高品質と高スピードを両立させるソフトウェアQA/Software QA that Supports Agility and Quality
goyoki
11
4.4k
高スピードと高品質を支えるソフトウェアQA(開発変革セミナー)
goyoki
1
65
アジャイルを支えるテストアーキテクチャ設計/Test Architecting for Agile
goyoki
12
4.3k
高品質と高スピードを両立させるテストアプローチ/Test Approach that Improves Quality and Agility Together
goyoki
17
18k
プレイヤーとしてのチームのテスト力UP/Improving team skills for testing
goyoki
3
1.7k
テスト設計チュートリアル/Test Design Tutorial
goyoki
12
6.4k
自動テストを活躍させるための基礎作りとテスト設計の工夫
goyoki
8
4.3k
テスト自動化の成果をどう評価し、どう次につなげるか/Test Automation Next Step
goyoki
1
910
Teams and Systems for Successful Test Automation
goyoki
0
290
Other Decks in Programming
See All in Programming
カウシェで Four Keys の改善を試みた理由
ike002jp
1
130
The Nature of Complexity in John Ousterhout’s Philosophy of Software Design
philipschwarz
PRO
0
170
API for docs
soutaro
4
1.7k
Cursor/Devin全社導入の理想と現実
saitoryc
29
22k
Optimizing JRuby 10
headius
0
580
エンジニア向けCursor勉強会 @ SmartHR
yukisnow1823
3
12k
Cursorを活用したAIプログラミングについて 入門
rect
0
180
データと事例で振り返るDevin導入の"リアル" / The Realities of Devin Reflected in Data and Case Studies
rkaga
1
950
生成AIで知るお願いの仕方の難しさ
ohmori_yusuke
1
120
データベースの技術選定を突き詰める ~複数事例から考える最適なデータベースの選び方~
nnaka2992
0
140
LRパーサーはいいぞ
ydah
6
1.3k
ニーリーQAのこれまでとこれから
nealle
2
770
Featured
See All Featured
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Art, The Web, and Tiny UX
lynnandtonic
298
20k
Making Projects Easy
brettharned
116
6.2k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.4k
Build The Right Thing And Hit Your Dates
maggiecrowley
35
2.7k
Building Applications with DynamoDB
mza
94
6.4k
The Language of Interfaces
destraynor
158
25k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Site-Speed That Sticks
csswizardry
6
540
Music & Morning Musume
bryan
47
6.5k
Stop Working from a Prison Cell
hatefulcrawdad
268
20k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.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