Slide 1

Slide 1 text

ʲ࿈ଓߨ࠲ #6ʳTDD #2 LED ド ϥΠ バ (ϗετ PCฤ) 2022/10/31 ύʔιϧςΫϊϩδʔελοϑגࣜձࣾ Ѩ෦ߞೋ [email protected] ૊ΈࠐΈιϑτ΢ΣΞجૅ

Slide 2

Slide 2 text

• ࣗݾ঺հ • ࢀՃऀҰݴίϝϯτ • ߨ࠲։࠵ͷഎܠɾ໨త • ຊ೔ͷςʔϚʲLED ド ϥΠ バ (ϗετPCฤ)ʳ • TDDֶशͷࢀߟ • ࢀՃऀײ૝ • ࣍ճ༧ࠂ ໨࣍ 2

Slide 3

Slide 3 text

• Ѩ෦ɹߞೋʢ͋΂ɹ͜͏͡ʣ • ٕज़ຊ෦ɹػిٕज़෦ɹट౎ݍ2G • [email protected] • ҩྍػث։ൃ • ૊ࠐΈιϑτ΢ΣΞ։ൃɻCݴޠɺϕΞϝλϧͷ։ൃۀ຿ܦݧ͕΄ͱΜͲɻ • LAPRASϙʔτϑΥϦΦɿhttps://lapras.com/public/k-abe • twitter: @juraruming ࣗݾ঺հ 3

Slide 4

Slide 4 text

ࣗ͝༝ʹҰݴίϝϯτ͍͚ͨͩ·͢ͱ͋Γ͕͍ͨͰ͢ɻ ྫ) ໊͓લ ྫ) ࠓճͷߨ࠲ʹظ଴͢Δ͜ͱ ྫ) ͓࢓ࣄ಺༰(࿩ͤΔൣғͰ) ྫ) ιϑτ΢ΣΞ։ൃ୲౰޻ఔ(ཁٻ࢓༷ͷఆٛ?ઃܭ?࣮૷?ςετ?) ࢀՃऀҰݴίϝϯτ 4

Slide 5

Slide 5 text

• ͳʹ͔ςʔϚΛܾΊͯɺιϑτ΢ΣΞ։ൃͷ্ྲྀ޻ఔ͔ΒԼྲྀ޻ఔ·Ͱ આ໌͢Δߨ࠲Λ։࠵͠ɺεΩϧΞοϓΛਤΔɻ ɹ˙ཁٻ࢓༷ͷཧղɹࢿྉɾهࣄ ɹ˙ཁٻ࢓༷ͷ࢓༷Խɹࢿྉɾهࣄ ɹ˙ઃܭɹ ɹɹ˔֓ཁɹࢿྉɾهࣄ ɹɹ˔ৄࡉɹࢿྉɾهࣄ ɹ˙TDD ɹɹ˔#1 ςετۦಈ։ൃ͸͡ΊͷҰาɹࢿྉɾهࣄ ɹɹ˔#2 LEDυϥΠό(ϗετPCฤ)ɹ˒͍·͜͜ ɹɹ˔#3 LEDυϥΠό(λʔήοτฤ) ɹɹ˔#4 ɹɹ˔#5 ɹɹ ߨ࠲։࠵ͷഎܠɾ໨త 5

Slide 6

Slide 6 text

ςʔϚɿ ʲطଘ૊ࠐΈ੡඼(CQ EVΧʔτ)ͷ ϚΠίϯΛҠ২͢Δʳ ߨ࠲։࠵ͷഎܠɾ໨త 6

Slide 7

Slide 7 text

ςʔϚɿʲطଘ૊ࠐΈ੡඼ͷϚΠίϯΛҠ২͢Δʳ ର৅૷ஔɿCQ EVΧʔτ എܠɿ ɾߨࢣ͕͓࣋ͬͯΓɺର৅૷ஔͷυϝΠϯ஌ࣝΛཧղ͍ͯ͠Δɻ ɾιϑτ΢ΣΞͷߏ଄Λཧղ͍ͯ͠Δɻ ɾର৅૷ஔͷϚΠίϯ͕৽ن࠾༻ඇਪ঑඼ʹͳͬͨɻ ɹ⇛ֶशɾεΩϧΞοϓͷͨΊผϚΠίϯʹҠ২ͯ͠ΈΑ͏!!!ɹ ߨ࠲։࠵ͷഎܠɾ໨త 7

Slide 8

Slide 8 text

• LED ド ϥΠ バ (ϗετPCฤ)ͱ͸Կ͔? • TDD͢Δલʹ • TDD΍ͬͯΈΔ ຊ೔ͷςʔϚ ʲLED ド ϥΠ バ (ϗετPCฤ)ʳ 8

Slide 9

Slide 9 text

• LED ド ϥΠ バ (ϗετPCฤ)ͱ͸Կ͔? • TDD͢Δલʹ • TDD΍ͬͯΈΔ ຊ೔ͷςʔϚ ʲLED ド ϥΠ バ (ϗετPCฤ)ʳ 9

Slide 10

Slide 10 text

ɾԿނɺLEDυϥΠόΛϗετPCͰTDD͢Δͷ͔? ▪LED఺౮ɾফ౮ͷ୯७ͳύλʔϯ͔ΒTDDΛ࢝ΊΔɻ ɹཧ༝ɿ࠷ॳ͸؆୯ͳ΋ͷ͔Β͸͡Ί͍ͨɻ ▪ϗετPCͰ׬݁͢ΔςετΛ࣮ࢪ͢Δɻ ɹཧ༝ɿϋʔυ΢ΣΞ͕ͳͯ͘΋ςετ͕ਐΊΔɻ ɹɹɹɹϗετPCɾλʔήοτͰTDDΛͲ͏ਐΊΔࢼͯ͠Έ͔ͨͬͨɻ LED ド ϥΠ バ (ϗετPCฤ)ͱ͸Կ͔? 10

Slide 11

Slide 11 text

ɾLEDυϥΠόͱ͸? ▪EVΧʔτͷLEDΛ఺౮ɾফ౮͢ΔػೳΛ࣋ͭσόΠευϥΠόͱ͢Δɻ ɹϞʔλʔݱࡏҐஔͱ੍ޚͷঢ়گΛͭͷ-&%Ͱࢹ֮ԽͰ͖Δɻ LED ド ϥΠ バ (ϗετPCฤ)ͱ͸Կ͔? 11

Slide 12

Slide 12 text

• LED ド ϥΠ バ (ϗετPCฤ)ͱ͸Կ͔? • TDD͢Δલʹ • TDD΍ͬͯΈΔ ຊ೔ͷςʔϚ ʲLED ド ϥΠ バ (ϗετPCฤ)ʳ 12

Slide 13

Slide 13 text

ɾࢲͷTDD։ൃ؀ڥ ▪ϗετPC: macOS Monterey όʔδϣϯ 12.6 ▪ςετϑϨʔϜϫʔΫ: CppUTest 4.0 ▪ίϯύΠϥ: Apple clang version 11.0.0 (clang-1100.0.33.8) ▪ςετର৅ϓϩάϥϛϯάݴޠ: C ▪ϏϧυγεςϜ: cmake 3.21.1 TDD͢Δલʹ 13

Slide 14

Slide 14 text

ɾࢲͷTDD։ൃ؀ڥ ิ଍ ʼ▪ϗετPC: macOS Monterey όʔδϣϯ 12.6 ɾWindows, LinuxͰ΋Մೳ͔ͱࢥ͍·͢ɻ ʼ▪ςετϑϨʔϜϫʔΫ: CppUTest 4.0 ɾϚΠίϯ؀ڥͰ΋TDD͔ͨͬͨ͠ͷͰCppUTestʹܾΊ·ͨ͠ɻ >▪ςετର৅ϓϩάϥϛϯάݴޠ: C ɾςετ͸C++, γεςϜ͸C >▪ϏϧυγεςϜ: cmake 3.21.1 ɾmake͸Ͱ͖ͳ͔ͬͨɾཧղͰ͖ͳ͔ͬͨͷͰcmakeʹ͠·ͨ͠ɻ TDD͢Δલʹ 14

Slide 15

Slide 15 text

ɾࢲͷTDD։ൃ؀ڥ ิ଍2 >▪ϏϧυγεςϜ: cmake 3.21.1 ɾmake͸Ͱ͖ͳ͔ͬͨɾཧղͰ͖ͳ͔ͬͨͷͰcmakeʹ͠·ͨ͠ɻ ɾGitHubͷςϯϓϨʔτϦϙδτϦΛͭ͘Γ·ͨ͠ɻ ɹcmakeͰCppUTestͷςετΛ࣮ߦͰ͖·͢ɻ ࠓճͷιʔείʔυ͸ͭ͗ͷϦϙδτϦʹஔ͖·ͨ͠ɻ https://github.com/grace2riku/evkart_tdd/tree/LedDriver_221031 TDD͢Δલʹ 15

Slide 16

Slide 16 text

ɾTDDͷେࣄͳݪଇΛ֬ೝ ɾςετΛॻ͘ɻ ɾςετࣦഊΛ֬ೝ͢Δ(Ϩου)ɻ ɾςετ੒ޭͤ͞ΔͨΊͷϓϩμΫτίʔυΛॻ͘ɻ ɾςετ੒ޭΛ֬ೝ͢Δ(άϦʔϯ)ɻ ɾςετ੒ޭͨ͠··ιʔείʔυΛ៉ྷ͢Δ(ϦϑΝΫλϦϯά) খ͞ͳεςοϓͰ1ͭͷ՝୊ղܾʹूத͢Δ!!! TDD͢Δલʹ 16

Slide 17

Slide 17 text

• LED ド ϥΠ バ (ϗετPCฤ)ͱ͸Կ͔? • TDD͢Δલʹ • TDD΍ͬͯΈΔ ຊ೔ͷςʔϚ ʲLED ド ϥΠ バ (ϗετPCฤ)ʳ 17

Slide 18

Slide 18 text

ɾTDDͷਐΊํ ɾςετͷ߲໨Λॻ͘(ςετϦετ) ɾςετΛॻ͘ TDD΍ͬͯΈΔ 18

Slide 19

Slide 19 text

ɾTDDͷਐΊํ ɾςετͷ߲໨Λॻ͘(ςετϦετ) ɾςετΛॻ͘ TDD΍ͬͯΈΔ 19

Slide 20

Slide 20 text

ɾςετͷ߲໨Λॻ͘(ςετϦετ) ɹςετ͍߲ͨ͠໨Λॻ͘ɻࠓճ͸3ͭͷςετ΍ͬͯΈ͍ͨɻ ɾυϥΠόΛॳظԽͨ͠Βɺ͢΂ͯͷLED͕Φϑ͍ͯ͠Δ ɾϗʔϧηϯαʔU͕1ͷ৔߹ɺϗʔϧηϯαʔLEDΛΦϯʹ͢Δ ɾϗʔϧηϯαʔU͕0ͷ৔߹ɺϗʔϧηϯαʔLEDΛΦϑʹ͢Δ ɹ ɹৄ͘͠͸ͪ͜Β ɹhttps://github.com/grace2riku/evkart_tdd/blob/LedDriver_221031/ README.md ɹ TDD΍ͬͯΈΔ 20

Slide 21

Slide 21 text

ɾTDDͷਐΊํ ɾςετͷ߲໨Λॻ͘(ςετϦετ) ɾςετΛॻ͘ TDD΍ͬͯΈΔ 21

Slide 22

Slide 22 text

ɾςετΛॻ͘ ɹςετϦετͷςετΛॻ͍͍ͯ͘ɻ ɹॻ͍͍͖͍ͯͨͰ͕͢ɺ࠷ॳ͸TDD؀ڥͷ֬ೝΛ΍ͬͯΈ·͢ɻ ɹ˞ίϛοτ͸ࡉ͔͘ࠁΈɺׂͱஸೡʹίϝϯτΛॻ͍ͨͷͰίϛοτϩ άΛ௥͏ͱTDDͷྲྀΕ͕ͳΜͱͳ͘Θ͔Δ͔ͱࢥ͍·͢ɻ ίʔυΛࣸܦ͠TDDͷαΠΫϧΛମײ͢ΔͱΑΓཧղ͕ਂ·Δͱࢥ͍· ͢ɻָͦͯ͘͠͠ͳΔɻ TDD΍ͬͯΈΔ 22

Slide 23

Slide 23 text

ɾςετΛॻ͘ ʙTDD؀ڥͷ֬ೝ 1ʙ ɾbuildσΟϨΫτϦΛ࡞੒͢Δ ɹࠓճͷιʔείʔυͷϦϙδτϦΛΫϩʔϯ͖ͯͯ͠ɺͦͷ֊૚Ͱbuild σΟϨΫτϦΛ࡞੒͢Δɻ ɹ$ mkdir build ɹbuildσΟϨΫτϦʹҠಈ͢Δɻ ɹ$ cd build/ TDD΍ͬͯΈΔ 23

Slide 24

Slide 24 text

ɾςετΛॻ͘ ʙTDD؀ڥͷ֬ೝ 2ʙ ɹbuildσΟϨΫτϦͰcmakeΛ࣮ߦ͠ɺMakefileΛ࡞੒͢Δ $ cmake .. -- The C compiler identification is AppleClang 11.0.0.11000033 -- The CXX compiler identification is AppleClang 11.0.0.11000033 -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working C compiler: /Library/Developer/CommandLineTools/usr/bin/cc - skipped -- Detecting C compile features -- Detecting C compile features - done -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: /Library/Developer/CommandLineTools/usr/bin/c++ - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done Using CppUTest found in /usr/local/Cellar/cpputest/4.0 -- Configuring done -- Generating done -- Build files have been written to: /Users/k-abe/evkart/evkart_tdd/build $ ls CMakeCache.txt Makefile cmake_install.cmake src CMakeFiles bin lib tests TDD΍ͬͯΈΔ 24 Makefile͕ग़དྷͨ

Slide 25

Slide 25 text

ɾςετΛॻ͘ ʙTDD؀ڥͷ֬ೝ 3ʙ ɹ࡞੒͞ΕͨMakefileΛmake͢Δ $ make [ 20%] Building C object src/hello/CMakeFiles/hello.dir/Hello.c.o [ 40%] Linking C static library ../../lib/libhello.a [ 40%] Built target hello [ 60%] Building CXX object tests/CMakeFiles/tdd_test.dir/AllTests.cpp.o [ 80%] Building CXX object tests/CMakeFiles/tdd_test.dir/hello/HelloTest.cpp.o [100%] Linking CXX executable ../bin/tdd_test [100%] Built target tdd_test KojinoMacBook-2:build k-abe$ ls bin tdd_test TDD΍ͬͯΈΔ 25 ࣮ߦϑΝΠϧ(tdd_test)͕Ͱ͖Δ

Slide 26

Slide 26 text

ɾςετΛॻ͘ ʙTDD؀ڥͷ֬ೝ 4ʙ ɹ࣮ߦϑΝΠϧΛ࣮ߦ͢Δ $ ./bin/tdd_test /Users/k-abe/evkart/evkart_tdd/tests/hello/HelloTest.cpp:23: error: Failure in TEST(Hello, Create) Start here!!! . Errors (1 failures, 1 tests, 1 ran, 1 checks, 0 ignored, 0 filtered out, 1 ms) TDD΍ͬͯΈΔ 26 ςετΛ࣮ߦ͠ɺςετ͕ࣦഊ͠ ͨ͜ͱ͕Θ͔Δɻ

Slide 27

Slide 27 text

ɾςετΛॻ͘ ʙTDD؀ڥͷ֬ೝ 5ʙ ɹςετϑΝΠϧΛ֬ೝ͢Δɻ ɹevkart_tdd/tests/hello/HelloTest.cpp TEST(Hello, Create) { FAIL("Start here!!!"); } ※CppUTestͰ࢖͑ΔΞαʔγϣϯ͕ͪ͜ΒΛࢀর TDD΍ͬͯΈΔ 27 FAILͰςετࣦഊ͍ͤͯ͞Δɻ

Slide 28

Slide 28 text

ɾςετΛॻ͘ ʙςετͷ਽ܗ࡞੒ʙ ɹ͔͜͜ΒࠓճͷςετΛॻ͍͍ͯ͘ɻ·ͣ͸ςετͷ਽ܗΛͭ͘Δɻ ɹ ɹࠓճͷιʔείʔυͷϧʔτͷ֊૚(evkart_tdd)Ͱ࣍ͷίϚϯυΛ࣮ߦ͢Δɻ $ NewPackageDirs HallSensorLedDriver creating src/HallSensorLedDriver creating include/HallSensorLedDriver creating tests/HallSensorLedDriver $ NewCModule.sh HallSensorLedDriver HallSensorLedDriver creating include/HallSensorLedDriver/HallSensorLedDriver.h creating src/HallSensorLedDriver/HallSensorLedDriver.c creating tests/HallSensorLedDriver/HallSensorLedDriverTest.cpp TDD΍ͬͯΈΔ 28 σΟϨΫτϦΛͭ͘Γɺ ͦͷதʹCίʔυͷεέϧτϯΛ࡞੒ͯ͘͠ΕΔ CppUTestͷεΫϦϓτΛ࣮ߦ͢Δɻ

Slide 29

Slide 29 text

ɾςετΛॻ͘ ʙcmakeઃఆมߋ1ʙ ɹ௥Ճͨ͠ϑΝΠϧΛmake͢ΔΑ͏ʹcmakeઃఆϑΝΠϧ (CMakeLists.txt)Λมߋ͢Δɻ ɹࠓճͷओ୊͸TDDͰcmakeͰ͸ͳ͍ͷͰৄ͘͠͸આ໌͠·ͤΜɻ ɹ۩ମతͳมߋ఺͸ͭ͗ͷίϛοτΛࢀߟʹ͍ͯͩ͘͠͞ɻ ɹ ɹ ɹ TDD΍ͬͯΈΔ 29

Slide 30

Slide 30 text

ɾςετΛॻ͘ ʙcmakeઃఆมߋ2ʙ ɹcmakeઃఆมߋޙʹMakefile࡞੒ɾmake͠ੜ੒͞Ε࣮ͨߦϑΝΠϧΛ࣮ߦ͢Δͱࠓճ௥Ճͨ͠ HallSensorLedDriverͷςετ͕ࣦഊ͍ͯ͠Δ͜ͱ͕֬ೝͰ͖ͨɻ $ ./bin/tdd_test /Users/k-abe/evkart/evkart_tdd/tests/hello/HelloTest.cpp:23: error: Failure in TEST(Hello, Create) Start here!!! . /Users/k-abe/evkart/evkart_tdd/tests/HallSensorLedDriver/HallSensorLedDriverTest.cpp:23: error: Failure in TEST(HallSensorLedDriver, Create) Start here . Errors (2 failures, 2 tests, 2 ran, 2 checks, 0 ignored, 0 filtered out, 1 ms)ɹ ɹ TDD΍ͬͯΈΔ 30

Slide 31

Slide 31 text

ɾςετΛॻ͘ ʙGitHubςϯϓϨʔτͷhelloςετΛແࢹ͢ΔΑ͏มߋʙ ɹGitHubςϯϓϨʔτͷhelloςετ͸ෆཁʹͳͬͨͷͰແࢹ͢Δςετʹ มߋ͢Δ(IGNORE_TESTʹมߋ͢Δ)ɻ evkart_tdd/tests/hello/HelloTest.cpp //TEST(Hello, Create) IGNORE_TEST(Hello, Create) { FAIL("Start here!!!"); } TDD΍ͬͯΈΔ 31

Slide 32

Slide 32 text

ɾςετΛॻ͘ ʙυϥΠόΛॳظԽͨ͠Βɺ͢΂ͯͷLED͕ফ౮͍ͯ͠Δʙ ςετʲυϥΠόΛॳظԽͨ͠Βɺ͢΂ͯͷLED͕ফ౮͍ͯ͠ΔʳΛςετ ໊শʲLedsOffAfterCreateʳͱͯ͠ॻ͘ɻ 
 طଘͷCreateςετΛLedsOffAfterCreateʹมߋ͢Δɻ // υϥΠόΛॳظԽͨ͠Βɺ͢΂ͯͷLED͕ফ౮͍ͯ͠Δ TEST(HallSensorLedDriver, LedsOffAfterCreate) { FAIL("Start here"); } TDD΍ͬͯΈΔ 32

Slide 33

Slide 33 text

ɾςετΛॻ͘ ʙυϥΠόΛॳظԽͨ͠Βɺ͢΂ͯͷLED͕ফ౮͍ͯ͠Δʙ makeɺ࣮ߦ͢Δͱ૝ఆͱ͓Γςετ͸ࣦഊ͍ͯ͠Δɻ $ ./bin/tdd_test ! /Users/k-abe/evkart/evkart_tdd/tests/HallSensorLedDriver/ HallSensorLedDriverTest.cpp:24: error: Failure in TEST(HallSensorLedDriver, LedsOffAfterCreate) Start here . Errors (1 failures, 2 tests, 1 ran, 1 checks, 1 ignored, 0 filtered out, 1 ms) TDD΍ͬͯΈΔ 33 ςετ໊͕Create͔Βมߋޙ ͷLedsOffAfterCreateʹͳ͍ͬͯΔɻ

Slide 34

Slide 34 text

ɾςετΛॻ͘ ʙυϥΠόΛॳظԽͨ͠Βɺ͢΂ͯͷLED͕ফ౮͍ͯ͠ Δʙ Ϩου͔ΒάϦʔϯ(ςετ͕੒ޭ)ʹ͢Δɻ ςετ੒ޭͤ͞ΔͨΊʹ͸FAILΞαʔγϣϯΛফͤ͹Α͍ɻ make࣮͠ߦ͢Δͱςετ੒ޭΛ֬ೝͰ͖Δɻ $ ./bin/tdd_test !. OK (2 tests, 1 ran, 0 checks, 1 ignored, 0 filtered out, 1 ms) TDD΍ͬͯΈΔ 34

Slide 35

Slide 35 text

ɾςετΛॻ͘ ʙυϥΠόΛॳظԽͨ͠Βɺ͢΂ͯͷLED͕ফ౮͍ͯ͠Δʙ ςετ͸੒ޭ͕ͨ͠ςετ͢΂͖͜ͱΛ͍ͯ͠ͳ͍ɻҙຯͷ͋ΔςετΛॻ͍͍ͯ͘ɻ ਖ਼͘͠ॳظԽ͢Δ͜ͱΛ֬ೝ͢ΔͨΊʹͭ͗ͷΑ͏ͳςετΛॻ͘ɻ // υϥΠόΛॳظԽͨ͠Βɺ͢΂ͯͷLED͕ফ౮͍ͯ͠Δ TEST(HallSensorLedDriver, LedsOffAfterCreate) { unsigned char virtualLeds = 0xff; HallSensorLedDriver_Create(&virtualLeds); BYTES_EQUAL(0, virtualLeds); } TDD΍ͬͯΈΔ 35 ϦϑΝΫλϦϯά

Slide 36

Slide 36 text

ɾςετΛॻ͘ ʙυϥΠόΛॳظԽͨ͠Βɺ͢΂ͯͷLED͕ফ౮͍ͯ͠Δʙ make͢ΔͱίϯύΠϧΤϥʔͱͳΔɻ $ make [ 25%] Built target hello [ 50%] Built target HallSensorLedDriver Consolidate compiler generated dependencies of target tdd_test [ 62%] Building CXX object tests/CMakeFiles/tdd_test.dir/HallSensorLedDriver/HallSensorLedDriverTest.cpp.o /Users/k-abe/evkart/evkart_tdd/tests/HallSensorLedDriver/HallSensorLedDriverTest.cpp:25:3: error: no matching function for call to 'HallSensorLedDriver_Create' HallSensorLedDriver_Create(&virtualLeds); ^~~~~~~~~~~~~~~~~~~~~~~~~~ /Users/k-abe/evkart/evkart_tdd/include/HallSensorLedDriver/HallSensorLedDriver.h:10:6: note: candidate function not viable: requires 0 arguments, but 1 was provided void HallSensorLedDriver_Create(void); ^ 1 error generated. make[2]: *** [tests/CMakeFiles/tdd_test.dir/HallSensorLedDriver/HallSensorLedDriverTest.cpp.o] Error 1 make[1]: *** [tests/CMakeFiles/tdd_test.dir/all] Error 2 make: *** [all] Error 2 TDD΍ͬͯΈΔ 36

Slide 37

Slide 37 text

ɾςετΛॻ͘ ʙυϥΠόΛॳظԽͨ͠Βɺ͢΂ͯͷLED͕ফ౮͍ͯ͠Δʙ ίϯύΠϧΤϥʔΛղফ͠makeɺςετ࣮ߦ͢Δͱͭ͗ʹͳΔɻ LEDυϥΠόͷॳظԽΛ͍ͯ͠ͳ͍ͨΊςετ͸ࣦഊ͢Δɻ KojinoMacBook-2:build k-abeKojinoMacBook-2:build k-abe$ ./bin/tdd_test ! /Users/k-abe/evkart/evkart_tdd/tests/HallSensorLedDriver/HallSensorLedDriverTest.cpp:26: error: Failure in TEST(HallSensorLedDriver, LedsOffAfterCreate) LONGS_EQUAL((0) & 0xff, (virtualLeds) & 0xff) failed expected < 0 (0x0)> but was <255 (0xff)> . Errors (1 failures, 2 tests, 1 ran, 1 checks, 1 ignored, 0 filtered out, 1 ms) TDD΍ͬͯΈΔ 37

Slide 38

Slide 38 text

ɾςετΛॻ͘ ʙυϥΠόΛॳظԽͨ͠Βɺ͢΂ͯͷLED͕ফ౮͍ͯ͠Δʙ LEDυϥΠόͷॳظԽΛͯ͠makeɺ࣮ߦ͢Δɻςετ͸੒ޭ͢Δɻ void HallSensorLedDriver_Create(unsigned char* address) { *address = 0; // ͜ΕΛ௥Ճͨ͠ } $ ./bin/tdd_test !. OK (2 tests, 1 ran, 1 checks, 1 ignored, 0 filtered out, 1 ms) $ ./bin/tdd_test -v IGNORE_TEST(Hello, Create) - 0 ms TEST(HallSensorLedDriver, LedsOffAfterCreate) - 0 ms OK (2 tests, 1 ran, 1 checks, 1 ignored, 0 filtered out, 1 ms) TDD΍ͬͯΈΔ 38

Slide 39

Slide 39 text

ɾςετΛॻ͘ ʙϗʔϧηϯαʔU͕1ͷ৔߹ɺϗʔϧηϯαʔLEDΛΦϯ ʹ͢Δʙ ςετ໊শʲTurnOnHallULedʳͱͯ͠ॻ͘ɻ 
 TDD΍ͬͯΈΔ 39 ͜ΕΛ֬ೝ͍ͨ͠!!!

Slide 40

Slide 40 text

ɾςετΛॻ͘ ʙϗʔϧηϯαʔU͕1ͷ৔߹ɺϗʔϧηϯαʔLEDΛΦϯʹ ͢Δʙ ςετ໊শʲTurnOnHallULedʳͱͯ͠ॻ͘ɻ 
 ϗʔϧηϯαUɾVɾWͷLED͸ಉ͡ΞυϨεͷGPIOσʔλϨδελʹׂΓ෇ ͚ΒΕ͍ͯΔɻ ॴ༗͍ͯ͠ΔEVΧʔτ(2013೥ൃചϞσϧ)ͩͱ8ϏοτͷσʔλϨδελʹͭ ͗ͷΑ͏ʹׂΓ౰ͯΒΕ͍ͯΔɻ 2bit໨: ϗʔϧηϯαʔU LEDɹˠ0x04ॻ͖ࠐΈͰLED఺౮ 3bit໨: ϗʔϧηϯαʔV LEDɹˠ0x08ॻ͖ࠐΈͰLED఺౮ 4bit໨: ϗʔϧηϯαʔW LEDɹˠ0x10ॻ͖ࠐΈͰLED఺౮ TDD΍ͬͯΈΔ 40

Slide 41

Slide 41 text

ɾςετΛॻ͘ ʙϗʔϧηϯαʔU͕1ͷ৔߹ɺϗʔϧηϯαʔLEDΛΦϯʹ͢Δʙ ςετ໊শʲTurnOnHallULedʳͱͯ͠ॻ͘ɻ 
 ςετΛ௥Ճ͠ɺࣦഊ͢Δ͜ͱΛ֬ೝ͢Δɻ // ϗʔϧηϯαʔU͕1ͷ৔߹ɺϗʔϧηϯαʔLEDΛΦϯʹ͢Δ TEST(HallSensorLedDriver, TurnOnHallULed) { FAIL("Fail: TurnOnHallULed!!!"); } make͠ςετΛ࣮ߦ͢Δɻ௥Ճͨ͠ςετ͕૝ఆͱ͓Γࣦഊ͍ͯ͠Δ͜ͱΛ֬ೝͰ͖Δɻ $ ./bin/tdd_test ! /Users/k-abe/evkart/evkart_tdd/tests/HallSensorLedDriver/HallSensorLedDriverTest.cpp:32: error: Failure in TEST(HallSensorLedDriver, TurnOnHallULed) Fail: TurnOnHallULed!!! .. Errors (1 failures, 3 tests, 2 ran, 2 checks, 1 ignored, 0 filtered out, 4 ms) TDD΍ͬͯΈΔ 41

Slide 42

Slide 42 text

ɾςετΛॻ͘ ʙϗʔϧηϯαʔU͕1ͷ৔߹ɺϗʔϧηϯαʔLEDΛΦϯ ʹ͢Δʙ ςετ໊শʲTurnOnHallULedʳͱͯ͠ॻ͘ɻ 
 FAILͷΞαʔγϣϯΛ࡟আ͠ɺmakeɾςετΛ࣮ߦ͢Δɻςετ͕੒ޭ͢ Δɻ $ ./bin/tdd_test !.. OK (3 tests, 2 ran, 1 checks, 1 ignored, 0 filtered out, 1 ms) TDD΍ͬͯΈΔ 42

Slide 43

Slide 43 text

ɾςετΛॻ͘ ʙϗʔϧηϯαʔU͕1ͷ৔߹ɺϗʔϧηϯαʔLEDΛΦϯʹ͢Δʙ ςετ໊শʲTurnOnHallULedʳͱͯ͠ॻ͘ɻ 
 ςετ͕ػೳ͢Δ͜ͱ͸֬ೝͰ͖ͨɻ֬ೝ͍ͨ͠ςετΛॻ͘ɻ // ϗʔϧηϯαʔU͕1ͷ৔߹ɺϗʔϧηϯαʔLEDΛΦϯʹ͢Δ TEST(HallSensorLedDriver, TurnOnHallULed) { unsigned char virtualLeds; HallSensorLedDriver_Create(&virtualLeds); HallSensorLedDriver_TurnOn(0x04); BYTES_EQUAL(0x04, virtualLeds); } ςετΛॻ͍ͨΒmake͢Δɻ TDD΍ͬͯΈΔ 43

Slide 44

Slide 44 text

ɾςετΛॻ͘ ʙϗʔϧηϯαʔU͕1ͷ৔߹ɺϗʔϧηϯαʔLEDΛΦϯʹ͢Δʙ Τϥʔ͕ൃੜ͢ΔɻHallSensorLedDriver_TurnOn͸ؔ਺ఆ͍ٛͯ͠ͳ͍ͷͰ૝ఆ௨Γɻ $ make [ 25%] Built target hello [ 50%] Built target HallSensorLedDriver Consolidate compiler generated dependencies of target tdd_test [ 62%] Building CXX object tests/CMakeFiles/tdd_test.dir/HallSensorLedDriver/HallSensorLedDriverTest.cpp.o /Users/k-abe/evkart/evkart_tdd/tests/HallSensorLedDriver/HallSensorLedDriverTest.cpp:34:3: error: use of undeclared identifier 'HallSensorLedDriver_TurnOn'; did you mean 'HallSensorLedDriver_Create'? HallSensorLedDriver_TurnOn(0x04); ^~~~~~~~~~~~~~~~~~~~~~~~~~ HallSensorLedDriver_Create /Users/k-abe/evkart/evkart_tdd/include/HallSensorLedDriver/HallSensorLedDriver.h:10:6: note: 'HallSensorLedDriver_Create' declared here void HallSensorLedDriver_Create(unsigned char* address); ^ /Users/k-abe/evkart/evkart_tdd/tests/HallSensorLedDriver/HallSensorLedDriverTest.cpp:34:30: error: cannot initialize a parameter of type 'unsigned char *' with an rvalue of type 'int' HallSensorLedDriver_TurnOn(0x04); ^~~~ /Users/k-abe/evkart/evkart_tdd/include/HallSensorLedDriver/HallSensorLedDriver.h:10:48: note: passing argument to parameter 'address' here void HallSensorLedDriver_Create(unsigned char* address); ^ 2 errors generated. make[2]: *** [tests/CMakeFiles/tdd_test.dir/HallSensorLedDriver/HallSensorLedDriverTest.cpp.o] Error 1 make[1]: *** [tests/CMakeFiles/tdd_test.dir/all] Error 2 make: *** [all] Error 2 TDD΍ͬͯΈΔ 44

Slide 45

Slide 45 text

ɾςετΛॻ͘ ʙϗʔϧηϯαʔU͕1ͷ৔߹ɺϗʔϧηϯαʔLEDΛΦϯʹ͢Δʙ ϔομʔϑΝΠϧʹHallSensorLedDriver_TurnOnΛϓϩλΠϓએݴ͢Δɻ ίϯύΠϧΤϥʔ͸ղফ͞ΕΔ͕ɺؔ਺ͷ࣮ମ͕ͳ͍͔ΒϦϯΫΤϥʔʹͳΔɻ $ make [ 25%] Built target hello [ 37%] Building C object src/HallSensorLedDriver/CMakeFiles/HallSensorLedDriver.dir/HallSensorLedDriver.c.o [ 50%] Linking C static library ../../lib/libHallSensorLedDriver.a [ 50%] Built target HallSensorLedDriver Consolidate compiler generated dependencies of target tdd_test [ 62%] Building CXX object tests/CMakeFiles/tdd_test.dir/HallSensorLedDriver/HallSensorLedDriverTest.cpp.o [ 75%] Linking CXX executable ../bin/tdd_test Undefined symbols for architecture x86_64: "_HallSensorLedDriver_TurnOn", referenced from: TEST_HallSensorLedDriver_TurnOnHallULed_Test::testBody() in HallSensorLedDriverTest.cpp.o ɹ(লུ) ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) make[2]: *** [bin/tdd_test] Error 1 make[1]: *** [tests/CMakeFiles/tdd_test.dir/all] Error 2 make: *** [all] Error 2 TDD΍ͬͯΈΔ 45

Slide 46

Slide 46 text

ɾςετΛॻ͘ ʙϗʔϧηϯαʔU͕1ͷ৔߹ɺϗʔϧηϯαʔLEDΛΦϯʹ͢Δʙ ؔ਺ͷ࣮ମΛॻ͘ɻॲཧ͸ະ࣮૷ʹ͓ͯ͘͠ɻϦϯΫ͕੒ޭ͢ΔͷͰ ςετΛ࣮ߦ͢Δɻ $ ./bin/tdd_test ! /Users/k-abe/evkart/evkart_tdd/tests/HallSensorLedDriver/HallSensorLedDriverTest.cpp:35: error: Failure in TEST(HallSensorLedDriver, TurnOnHallULed) LONGS_EQUAL((0x04) & 0xff, (virtualLeds) & 0xff) failed expected <4 (0x4)> but was <0 (0x0)> Errors (1 failures, 3 tests, 2 ran, 2 checks, 1 ignored, 0 filtered out, 1 ms) HallSensorLedDriver_TurnOn͸ະ࣮૷ͷͨΊςετ͕૝ఆͱ͓Γࣦഊ͢Δɻ TDD΍ͬͯΈΔ 46

Slide 47

Slide 47 text

ɾςετΛॻ͘ ʙϗʔϧηϯαʔU͕1ͷ৔߹ɺϗʔϧηϯαʔLEDΛΦϯʹ͢Δʙ ςετΛ੒ޭͤ͞ΔͨΊͷͭ͗ͷ࣮૷Λߦ͏ɻ HallSensorLedDriver_TurnOnͰ͸HallSensorLedDriver_CreateͷҾ਺ʹࢦఆͨ͠ΞυϨε ͷLEDΛΦϯ͢Ε͹ςετ͸੒ޭ͢Δ͸ͣɻ static unsigned char* hallSensorLedsAddress; void HallSensorLedDriver_Create(unsigned char* address) { // *address = 0; hallSensorLedsAddress = address; *hallSensorLedsAddress = 0; } void HallSensorLedDriver_TurnOn(unsigned char ledBitNumber) { *hallSensorLedsAddress = 0x04; } TDD΍ͬͯΈΔ 47

Slide 48

Slide 48 text

ɾςετΛॻ͘ ʙϗʔϧηϯαʔU͕1ͷ৔߹ɺϗʔϧηϯαʔLEDΛΦϯ ʹ͢Δʙ make͠ςετΛ࣮ߦ͢Δɻςετ੒ޭ͕֬ೝͰ͖ͨɻ $ ./bin/tdd_test -v IGNORE_TEST(Hello, Create) - 0 ms TEST(HallSensorLedDriver, TurnOnHallULed) - 0 ms TEST(HallSensorLedDriver, LedsOffAfterCreate) - 0 ms OK (3 tests, 2 ran, 2 checks, 1 ignored, 0 filtered out, 2 ms) TDD΍ͬͯΈΔ 48

Slide 49

Slide 49 text

ɾςετΛॻ͘ ʙϗʔϧηϯαʔU͕0ͷ৔߹ɺϗʔϧηϯαʔLEDΛΦϑ ʹ͢Δʙ ςετ໊শʲTurnOffHallULedʳͱͯ͠ॻ͘ɻ 
 TDD΍ͬͯΈΔ 49 ͜ΕΛ֬ೝ͍ͨ͠!!!

Slide 50

Slide 50 text

ɾςετΛॻ͘ ʙϗʔϧηϯαʔU͕0ͷ৔߹ɺϗʔϧηϯαʔLEDΛΦϑʹ͢Δʙ LEDΦϯͷͱ͖ͱಉ༷ͷखॱͰςετ௥Ճɺ࣮૷Λߦ͏ɻ // ௥Ճͨ͠ςετ // ϗʔϧηϯαʔU͕0ͷ৔߹ɺϗʔϧηϯαʔLEDΛΦϑʹ͢Δ TEST(HallSensorLedDriver, TurnOffHallULed) { unsigned char virtualLeds; HallSensorLedDriver_Create(&virtualLeds); HallSensorLedDriver_TurnOn(0x04); HallSensorLedDriver_TurnOff(0x04); BYTES_EQUAL(0x00, virtualLeds); } // ςετΛ੒ޭͤ͞Δ࣮૷ void HallSensorLedDriver_TurnOff(unsigned char ledBitNumber){ *hallSensorLedsAddress = 0x00; } TDD΍ͬͯΈΔ 50

Slide 51

Slide 51 text

ɾςετΛॻ͘ ʙϗʔϧηϯαʔU͕0ͷ৔߹ɺϗʔϧηϯαʔLEDΛΦϑʹ ͢Δʙ make͠ςετΛ࣮ߦ͢Δɻ $ ./bin/tdd_test -v IGNORE_TEST(Hello, Create) - 0 ms TEST(HallSensorLedDriver, TurnOffHallULed) - 0 ms TEST(HallSensorLedDriver, TurnOnHallULed) - 0 ms TEST(HallSensorLedDriver, LedsOffAfterCreate) - 0 ms OK (4 tests, 3 ran, 3 checks, 1 ignored, 0 filtered out, 4 ms) TDD΍ͬͯΈΔ 51

Slide 52

Slide 52 text

ଟ෼ɺօ͞Μ͕ࢥ͍ͬͯΔ͜ͱɾɾɾ ▪LEDΦϯɾΦϑ͢Δςετ΋ϋʔυίʔσΟϯά͡Όͳ͍? ▪3छྨ͋ΔLED͏ͪଞͷLEDͷΦϯɾΦϑʹରԠͰ͖Δίʔυʹͳ͍ͬͯ ͳ͍ͷͰ͸? TDD΍ͬͯΈΔ 52

Slide 53

Slide 53 text

ଟ෼ɺօ͞Μ͕ࢥ͍ͬͯΔ͜ͱɾɾɾ ▪LEDΦϯɾΦϑ͢Δςετ΋ϋʔυίʔσΟϯά͡Όͳ͍? ὎ͦͷ௨Γɻ ▪3छྨ͋ΔLED͏ͪଞͷLEDͷΦϯɾΦϑʹରԠͰ͖Δίʔυʹͳ͍ͬͯ ͳ͍ͷͰ͸? ὎ͦͷ௨Γɻ TDD΍ͬͯΈΔ 53

Slide 54

Slide 54 text

ଟ෼ɺօ͞Μ͕ࢥ͍ͬͯΔ͜ͱɾɾɾ Q. TDDҙຯ͋Δͷ??? 1छྨͷLEDΛ఺౮͢Δςετ͕ॻ͚ͨɻ ɹˠଞͷػೳɾෳࡶ͕࣮͞૷͞Ε͍ͯͳ͍ɻඞཁ࠷௿ݶͷίʔυʹͳͬͯ ͍Δɻ ଞͷ2छྨͷLEDΛΦϯɾΦϑ͢ΔςετΛॻ͖ɺςετࣦഊΛ֬ೝ͢Δɻ ςετΛ௨࣮͢૷ΛΠϯΫϦϝϯλϧʹ௥Ճ͍ͯ͘͠ (͜Ε·Ͱͷςετ͕੒ޭ͢Δ͜ͱΛอ࣋͠ͳ͕Β)ɻ ςετओಋͰίʔυ͕ঃʑʹ࣮૷͞Ε੒௕͍ͯ͘͠ɻ TDD΍ͬͯΈΔ 54

Slide 55

Slide 55 text

1. ςετۦಈ։ൃʹΑΔ૊ΈࠐΈϓϩάϥϛϯά 2. ʦಈըͰղઆʧ࿨ా୎ਓͷ“ςετۦಈ։ൃ”ߨ࠲ هࣄҰཡ 3. ʰςετۦಈ։ൃʹΑΔ૊ΈࠐΈϓϩάϥϛϯάʱΛಡΜͰֶΜͩ͜ͱ 4. TDDʹΑΔϚΠίϯͷLνΧ։ൃ(1) 5. TDDʹΑΔϚΠίϯͷLνΧ։ൃ(2)(׬) TDDֶशͷࢀߟ 55

Slide 56

Slide 56 text

• ੋඇͱ΋ߨ࠲ͷײ૝ΛҰݴ͓ئ͍͠·͢ɻ ࢀՃऀײ૝ 56

Slide 57

Slide 57 text

ɹTDDͷߨ࠲ͷ࣍ճ͸ʲ12/xx(x) 19:30ʙ20:30ʳͰ։࠵༧ఆͰ͢ɻ ʲ࿈ଓߨ࠲ #7ʳςετۦಈ։ൃ#2 LEDυϥΠό(λʔήοτฤ) ɹ ɹ࣍ճ͸ϚΠίϯج൘ͰTDD͍ͨ͠ͱߟ͍͑ͯ·͢ɻ ࢀՃͷํɺੋඇͱ΋ΑΖ͓͘͠Ͷ͕͍͠·͢ɻ ࣍ճ༧ࠂ 57

Slide 58

Slide 58 text

• ςʔϚͷલఏઆ໌ ʲCQ EVΧʔτʳͱ͸??? ɾಈը1: ૸ߦத ɾಈը2: ج൘Λ֦େ աڈʹॻ͍ٕͨज़ॻ(EV Χʔτ で ࢝ΊΔϞ デ ϧ ベ ʔε։ൃ)Λϕʔεʹઆ໌͠·͢ɻ هࡌՕॴɿʲୈ1ষ EVΧʔτͱ͸Կ͔ʳ ࢀߟʲςʔϚͷલఏઆ໌ʳ 58

Slide 59

Slide 59 text

• ςʔϚͷલఏઆ໌ ςʔϚɿʲطଘ૊ࠐΈ੡඼ͷϚΠίϯΛҠ২͢Δʳ͸࣍ͷલఏͱ͢Δɻ ɾ೿ੜ։ൃ(طʹ͋Δ૷ஔͰϚΠίϯͷΈมߋ) ɾϋʔυ΢ΣΞ͋Γɻిؾత࢓༷֬ೝOKɻ ɾچϚΠίϯͰͷιϑτ΢ΣΞࢿ࢈͋Γɻ˞GitHub, ࢿྉ ͷ֤ϦϯΫ ɾݸਓ։ൃ(͓࢓ࣄʹ΋ద༻Ͱ͖ΔΤοηϯε͸͋Δ͔ͱࢥ͍·͢) ࢀߟʲςʔϚͷલఏઆ໌ʳ 59

Slide 60

Slide 60 text

͝੩ௌ͋Γ͕ͱ͏ ͍͟͝·ͨ͠ɻ ऴΘΓ 60