$30 off During Our Annual Pro Sale. View Details »

【連続講座 #5】テスト駆動開発 はじめの一歩_221124_connpass_event_slide

k-abe
November 24, 2022

【連続講座 #5】テスト駆動開発 はじめの一歩_221124_connpass_event_slide

2022/11/24に開催したイベント(#5 【連続イベント】組込みソフトウェア基礎 TDD #1 はじめの一歩 概要・環境構築)の資料です。
https://k-abe.connpass.com/event/264592/

※URLリンクが有効な資料はこちらを参照ください。
https://www.docswell.com/s/juraruming/5RVGRZ-2022-11-24-212247

k-abe

November 24, 2022
Tweet

More Decks by k-abe

Other Decks in Technology

Transcript

  1. ʲ࿈ଓߨ࠲ #5ʳςετۦಈ։ൃ ͸͡ΊͷҰา


    2022/11/24 ConnpassΠϕϯτ൛
    2022/11/24


    ύʔιϧςΫϊϩδʔελοϑגࣜձࣾ


    Ѩ෦ߞೋ [email protected]
    ૊ΈࠐΈιϑτ΢ΣΞجૅ

    View Slide

  2. ▪ύʔιϧςΫϊϩδʔελοϑגࣜձࣾ


    ɹٕज़ຊ෦ɹػిٕज़෦ɹट౎ݍ2GɹѨ෦ɹߞೋʢ͋΂ɹ͜͏͡ʣ


    ▪ҩྍػث։ൃ


    ɾ૊ࠐΈιϑτ΢ΣΞ։ൃɻ


    ɾCݴޠɺϕΞϝλϧͷ։ൃۀ຿ܦݧ͕΄ͱΜͲɻ


    ࣗݾ঺հ 1
    2

    View Slide

  3. ▪ٕज़ॻΛॻ͍ٕͯज़ॻయ13ʹࢀՃͨ͠Γɺ


    ɹ


    ▪ϚΠίϯͷίϯςετ(※)ʹࢀՃͨ͠Γɺ


    ɹ※SPRESENSE™ ׆༻ίϯςετ


    ɹ૊ࠐΈιϑτ΢ΣΞ։ൃ͕޷͖ͳ͓͡͞ΜͰ͢ɻ


    ɹΑΖ͓͘͠ئ͍͠·͢ɻ


    ▪LAPRASϙʔτϑΥϦΦɿhttps://lapras.com/public/k-abe


    ▪twitter: @juraruming
    ࣗݾ঺հ 2
    3

    View Slide

  4. • ߨ࠲։࠵ͷഎܠɾ໨త


    • ຊ೔ͷςʔϚʲςετۦಈ։ൃ ͸͡ΊͷҰาʳ


    • TDDֶशͷࢀߟ


    • QA


    • ·ͱΊ


    • ࣍ճ༧ࠂ
    ໨࣍
    4

    View Slide

  5. • ͳʹ͔ςʔϚΛܾΊͯɺιϑτ΢ΣΞ։ൃͷ্ྲྀ޻ఔ͔ΒԼྲྀ޻ఔ·Ͱ
    આ໌͢Δߨ࠲Λ։࠵͠ɺεΩϧΞοϓΛਤΔɻ


    ɹ˙ཁٻ࢓༷ͷཧղɹࢿྉɾهࣄ


    ɹ˙ཁٻ࢓༷ͷ࢓༷Խɹࢿྉɾهࣄ


    ɹ˙ઃܭɹ


    ɹɹ˔֓ཁɹࢿྉɾهࣄ


    ɹɹ˔ৄࡉɹࢿྉɾهࣄ


    ɹ˙TDD


    ɹɹ˔#1 ςετۦಈ։ൃ͸͡ΊͷҰาɹ˒͍·͜͜


    ɹɹ˔#2 LEDυϥΠό(ϗετPCฤ)


    ɹɹ˔#3 LEDυϥΠό(λʔήοτฤ)


    ɹɹ˔#4


    ɹɹ˔#5


    ɹɹ
    ߨ࠲։࠵ͷഎܠɾ໨త
    5

    View Slide

  6. ςʔϚɿ


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

    View Slide

  7. ςʔϚɿʲطଘ૊ࠐΈ੡඼ͷϚΠίϯΛҠ২͢Δʳ


    ର৅૷ஔɿCQ EVΧʔτ


    എܠɿ


    ɾߨࢣ͕͓࣋ͬͯΓɺର৅૷ஔͷυϝΠϯ஌ࣝΛཧղ͍ͯ͠Δɻ


    ɾιϑτ΢ΣΞͷߏ଄Λཧղ͍ͯ͠Δɻ


    ɾର৅૷ஔͷϚΠίϯ͕৽ن࠾༻ඇਪ঑඼ʹͳͬͨɻ


    ɹ⇛ֶशɾεΩϧΞοϓͷͨΊผϚΠίϯʹҠ২ͯ͠ΈΑ͏!!!ɹ
    ߨ࠲։࠵ͷഎܠɾ໨త
    7

    View Slide

  8. • ςετۦಈ։ൃͱ͸?


    • ؀ڥߏங


    • ςετΛॻ͍ͯΈΔ
    ຊ೔ͷςʔϚ


    ʲςετۦಈ։ൃ ͸͡ΊͷҰาʳ
    8

    View Slide

  9. • ςετۦಈ։ൃͱ͸?


    • ؀ڥߏங


    • ςετΛॻ͍ͯΈΔ
    ຊ೔ͷςʔϚ


    ʲςετۦಈ։ൃ ͸͡ΊͷҰาʳ
    9

    View Slide

  10. • ςετۦಈ։ൃͱ͸?


    ɹจࣈͱ͓ΓςετͰιϑτ΢ΣΞ։ൃΛۦಈ͍ͯ͘͠ɻ


    ɹςετ͕։ൃͷى఺ͱͳΔɻ


    ɹ࣮૷ˠςετͰ͸ͳ͘ɺςετˠ࣮૷ͷॱ൪Ͱ։ൃΛਐΊΔɻ


    ɾʲςετۦಈʳͯ͠Ͳ͏͢Δ?


    ɹςετΛॻ͍ͯΑΓྑ͍ઃܭΛಋ͘͜ͱ͕TDDͷ໨ࢦ͢ͱ͜Ζɻ


    ʲςετۦಈ։ൃ ͸͡ΊͷҰาʳ
    10

    View Slide

  11. ▪ςετۦಈ։ൃͱ͸?


    ●ςετۦಈ։ൃΛ΍ΔϞνϕʔγϣϯ


    ɾσάϨʔυ͕গͳ͘ͳΔɻ


    ɾϦϑΝΫλϦϯάͰίʔυ͕៉ྷʹͳΔɻ


    ɾ։ൃऀͷෆ͕҆গͳ͘ͳΔ(ͳ͘ͳΓ͸͠ͳ͍ͱࢥ͏)ɻ


    ʲςετۦಈ։ൃ ͸͡ΊͷҰาʳ
    11

    View Slide

  12. ▪ςετۦಈ։ൃͱ͸?


    ●ʲ૊ࠐΈʳͰςετۦಈ։ൃΛ΍ΔϞνϕʔγϣϯ


    ɾϋʔυ΢ΣΞ͕ͳͯ͘΋ςετ͕Ͱ͖Δɻ


    ɾϋʔυ΢ΣΞɾιϑτ΢ΣΞͷෆ۩߹ཁҼ੾Γ෼͚͕໌֬ʹͳΔɻ


    ɹϋʔυ΢ΣΞىҼ΋͘͠͸λʔήοτϚΠίϯͷϓϥοτϑΥʔϜىҼ
    (ϦϯΫ͍ͯ͠ΔϥΠϒϥϦͷόάͳͲ)ͷ੾Γ෼͚
    ʲςετۦಈ։ൃ ͸͡ΊͷҰาʳ
    12

    View Slide

  13. ▪ςετۦಈ։ൃͱ͸?


    ●ࢲ͕TDDΛֶͼ͸͡Ίͨಈػ


    ɾ૊ࠐΈ੡඼ͷ೿ੜ։ൃʢطଘػछͷόʔδϣϯΞοϓʣͰσάϨʔυ͕
    ଟ͘ൃੜɻ


    ɹˠطଘػೳ͕ਖ਼͘͠ಈ͘͜ͱΛอূ͠ͳ͕Β΋৽ػೳΛ૊ΈࠐΉϊ΢ϋ
    ΢Λֶͼ͔ͨͬͨɻ


    ʲςετۦಈ։ൃ ͸͡ΊͷҰาʳ
    13

    View Slide

  14. ▪ςετۦಈ։ൃͱ͸?


    ●ࢲ͕TDDΛֶΜͩײ૝


    ɾૉ௚ʹָ͍͠ɻ


    ɹɾTDDͷαΠΫϧ(ϨουˠάϦʔϯˠϦϑΝΫλϦϯά)Λճ͢ͷָ͕͍͠ɻ


    ɹɾςετΛॻ͍ͯςετ͕੒ޭͨ͠ͱ͖ͷշײɻ


    ɾ҆৺Ͱ͖Δɻ


    ɾίʔυ͕੒௕͍࣮ͯ͘͠ײ͕ಘΒΕΔɻ


    ɾίʔυ͕៉ྷʹอͨΕ͍ͯΔ࣮ײ͕͋Δɻ
    ʲςετۦಈ։ൃ ͸͡ΊͷҰาʳ
    14

    View Slide

  15. ▪ςετۦಈ։ൃͱ͸?


    ●૊ࠐΈͰTDDΛਪਐ͍ͯ͘͠͏͑Ͱͷ՝୊


    ɾTDD։࢝લͷઓཱུҊ(Ͳ͜·ͰTDDΛ࢖͏ͷ͔)


    ɾςετ͕೉͍͠ྖҬ(ྫ. ૊ࠐΈ૷ஔͷը໘ܥ)ͰͷTDD׆༻


    ɾྑ͍ઃܭΛಋͨ͘ΊͷTDD׆༻


    ɹݱঢ়͸ςετϑϨʔϜϫʔΫΛ࢖͍ςετΛॻ͖ɺTDDͷαΠΫϧΛճͤΔΑ
    ͏ʹͳͬͨͱ͍͏ঢ়گɻ


    ɹTDDΛ࢖ͬͨྑ͍ઃܭͷྫ͸TDDֶशͷࢀߟ 4, 5͕ࢀߟʹͳΔɻ
    ʲςετۦಈ։ൃ ͸͡ΊͷҰาʳ
    15

    View Slide

  16. • ςετۦಈ։ൃͱ͸?


    • ؀ڥߏங


    • ςετΛॻ͍ͯΈΔ
    ຊ೔ͷςʔϚ


    ʲςετۦಈ։ൃ ͸͡ΊͷҰาʳ
    16

    View Slide

  17. ▪؀ڥߏங


    ●ςετϑϨʔϜϫʔΫͷબ୒


    ɾUnity


    ɾCppUTest


    ɾGoogle Test


    TDDֶशͷࢀߟ 1ͷຊͰଟ͘આ໌͞Ε͍ͯΔ, ϚΠίϯʹ΋૊ࠐΈՄೳͳςε
    τϑϨʔϜϫʔΫͷCppUTestͱͨ͠ɻ


    ϗετ؀ڥͰͷΈTDD͢ΔͷͩͬͨΒGoogle Testਪ͠ͷ੠͕ଟ͍ؾ͕͢Δɻ
    ʲςετۦಈ։ൃ ͸͡ΊͷҰาʳ
    17

    View Slide

  18. ▪؀ڥߏங


    ●λʔήοτϚΠίϯͷબఆ


    ɹSTϚΠΫϩΤϨΫτϩχΫεͷSTM32ϚΠίϯϘʔυʲNUCLEO-
    F446REʳʹܾΊͨɻ


    ɾSTM32F446RET6 64ϐϯ


    ɾArm Cortex-M4ίΞ 180MHz


    ɾϑϥογϡ: 512Kbyte


    ɾSRAM: 128Kbyte


    ɾArm MbedରԠ
    ʲςετۦಈ։ൃ ͸͡ΊͷҰาʳ
    18

    View Slide

  19. ▪؀ڥߏங


    ●λʔήοτϚΠίϯͷબఆཧ༝


    ɾςʔϚɿʲطଘ૊ࠐΈ੡඼(CQ EVΧʔτ)ͷϚΠίϯΛҠ২͢ΔʳͰ͸


    Ϟʔλʔ੍ޚΛ͓͜ͳ͏ɻ


    ֘౰ϚΠίϯϘʔυʹ౥ࡌ͞Ε͍ͯΔϚΠίϯ͸Ϟʔλʔ੍ޚ༻ͷλΠ
    ϚʔػೳΛ͍࣋ͬͯͨͨΊɻ


    ɾଞͷSTM32ϚΠίϯϘʔυΑΓଟ͘࢖ͬͨ͜ͱ͕͋Γ׳Ε͍ͯͨɻ


    ʲςετۦಈ։ൃ ͸͡ΊͷҰาʳ
    19

    View Slide

  20. • ςετۦಈ։ൃͱ͸?


    • ؀ڥߏங


    • ςετΛॻ͍ͯΈΔ
    ຊ೔ͷςʔϚ


    ʲςετۦಈ։ൃ ͸͡ΊͷҰาʳ
    20

    View Slide

  21. ▪ςετΛॻ͍ͯΈΔ


    ●TDDͷεςοϓ


    ɹɾςετΛॻ͘ɻ


    ɹɾςετࣦഊΛ֬ೝ͢Δ(Ϩου)ɻ


    ɹɾςετ੒ޭͤ͞ΔͨΊͷϓϩμΫτίʔυΛॻ͘ɻ


    ɹɾςετ੒ޭΛ֬ೝ͢Δ(άϦʔϯ)ɻ


    ɹɾςετ੒ޭͨ͠··ιʔείʔυΛ៉ྷ͢Δ(ϦϑΝΫλϦϯά)


    ʲςετۦಈ։ൃ ͸͡ΊͷҰาʳ
    21

    View Slide

  22. ▪ςετΛॻ͍ͯΈΔ


    ˒TDDαΠΫϧΛճͯ͠ΈΔσϞ


    TDDֶशͷࢀߟ 1ͷຊɹLEDυϥΠόʔͷςετର৅ʹ͢Δɻ


    ʲςετۦಈ։ൃ ͸͡ΊͷҰาʳ
    22
    ςετର৅ͷϓϩμΫτίʔυ


    LEDυϥΠό


    LedDriver.c, LedDriver.h
    ςετίʔυɿ


    CppUTestͷॻ͖ํͰ


    ςετΛॻ͘


    LedDriverTest.cpp
    mainؔ਺ɿ


    ςετ࣮ߦ


    RunAllTests.cpp

    View Slide

  23. ▪ςετΛॻ͍ͯΈΔ


    λʔήοτϘʔυͰTDDͯ͠Έͨ࿩


    STM32CubeIDEʹCppUTestΛ؀ڥߏங͠ɺSTM32ϚΠίϯͰTDD͢
    Δ
    github͸ͪ͜Βɻ
    ϙΠϯτɿ
    ɾRAMͰςετ࣮ߦ(ROMॻ͖׵͑࣌ؒɺॻ͖׵͑ճ਺ߟྀ)
    ɾ౷߹։ൃ؀ڥͷΈͰςετՄೳ(γϦΞϧλʔϛφϧෆཁ)
    ɾCppUTestͷϝϞϦ࢖༻ྔ
    ʲςετۦಈ։ൃ ͸͡ΊͷҰาʳ
    23

    View Slide

  24. 1. ςετۦಈ։ൃʹΑΔ૊ΈࠐΈϓϩάϥϛϯά


    2. ʦಈըͰղઆʧ࿨ా୎ਓͷ“ςετۦಈ։ൃ”ߨ࠲ هࣄҰཡ


    3. ʰςετۦಈ։ൃʹΑΔ૊ΈࠐΈϓϩάϥϛϯάʱΛಡΜͰֶΜͩ͜ͱ


    4. TDDʹΑΔϚΠίϯͷLνΧ։ൃ(1)


    5. TDDʹΑΔϚΠίϯͷLνΧ։ൃ(2)(׬)


    TDDֶशͷࢀߟ
    24

    View Slide

  25. • ࣭͝໰ɺؾʹͳͬͨ͜ͱ͋Ε͹ڞ༗Λ͓ئ͍͠·͢ɻ
    QA
    25

    View Slide

  26. ▪ ͍Ζ͍Ζॻ͖·͕ͨ͠TDDͷεςοϓʹଇΓ·ͣ͸खΛಈ͔ͯ͠ମײͯ͠ΈΔɺ͕TDDΛཧղ͢Δ͸͡Ί
    ͷҰา͔ͳͱࢥ͍·͢ɻ


    ●TDDͷεςοϓ(࠶ܝ)


    ɹɾςετΛॻ͘ɻ


    ɹɾςετࣦഊΛ֬ೝ͢Δ(Ϩου)ɻ


    ɹɾςετ੒ޭͤ͞ΔͨΊͷϓϩμΫτίʔυΛॻ͘ɻ


    ɹɾςετ੒ޭΛ֬ೝ͢Δ(άϦʔϯ)ɻ


    ɹɾςετ੒ޭͨ͠··ιʔείʔυΛ៉ྷ͢Δ(ϦϑΝΫλϦϯά)


    ·ͱΊ
    26

    View Slide

  27. ɹ࣍ճ͸ʲ12/22(໦) 19:30ʙ20:15ʳͰ։࠵༧ఆͰ͢ɻ


    ʲ࿈ଓߨ࠲ #6ʳςετۦಈ։ൃ#2 LEDυϥΠό(ϗετPCฤ)


    ɹ


    ɹϗετPCͰTDD͍ͨ͠ͱߟ͍͑ͯ·͢ɻ


    ࢀՃͷํɺੋඇͱ΋ΑΖ͓͘͠Ͷ͕͍͠·͢ɻ
    ࣍ճ༧ࠂ
    27

    View Slide

  28. • ςʔϚͷલఏઆ໌


    ʲCQ EVΧʔτʳͱ͸???


    ɾಈը1: ૸ߦத


    ɾಈը2: ج൘Λ֦େ


    աڈʹॻ͍ٕͨज़ॻ(EV Χʔτ
    で
    ࢝ΊΔϞ
    デ
    ϧ
    ベ
    ʔε։ൃ)Λϕʔεʹઆ໌͠·͢ɻ


    هࡌՕॴɿʲୈ1ষ EVΧʔτͱ͸Կ͔ʳ


    ࢀߟʲςʔϚͷલఏઆ໌ʳ
    28

    View Slide

  29. • ςʔϚͷલఏઆ໌


    ςʔϚɿʲطଘ૊ࠐΈ੡඼ͷϚΠίϯΛҠ২͢Δʳ͸࣍ͷલఏͱ͢Δɻ


    ɾ೿ੜ։ൃ(طʹ͋Δ૷ஔͰϚΠίϯͷΈมߋ)


    ɾϋʔυ΢ΣΞ͋Γɻిؾత࢓༷֬ೝOKɻ


    ɾچϚΠίϯͰͷιϑτ΢ΣΞࢿ࢈͋Γɻ˞GitHub, ࢿྉ ͷ֤ϦϯΫ


    ɾݸਓ։ൃ(͓࢓ࣄʹ΋ద༻Ͱ͖ΔΤοηϯε͸͋Δ͔ͱࢥ͍·͢)


    ࢀߟʲςʔϚͷલఏઆ໌ʳ
    29

    View Slide

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

    View Slide