Upgrade to Pro — share decks privately, control downloads, hide ads and more …

組み込みソフトウェア基礎_【連続講座 #5】テスト駆動開発 はじめの一歩

k-abe
September 22, 2022

組み込みソフトウェア基礎_【連続講座 #5】テスト駆動開発 はじめの一歩

社内勉強会向け資料です。
TDD概要・テストフレームワーク(CppUTest)選定理由・マイコンボードにCppUTestを組込みTDDしたことを書きました。

※URLリンク可能な資料はこちらを参照してください。
https://www.docswell.com/s/juraruming/52P665-2022-09-22-225024

k-abe

September 22, 2022
Tweet

More Decks by k-abe

Other Decks in Programming

Transcript

  1. ʲ࿈ଓߨ࠲ #5ʳςετۦಈ։ൃ ͸͡Ί ͷҰา 2022/9/22 ύʔιϧςΫϊϩδʔελοϑגࣜձࣾ Ѩ෦ߞೋ koji.abe@persol.co.jp ૊ΈࠐΈιϑτ΢ΣΞجૅ

  2. • ࣗݾ঺հ • ࢀՃऀҰݴίϝϯτ • ߨ࠲։࠵ͷഎܠɾ໨త • ຊ೔ͷςʔϚʲςετۦಈ։ൃ ͸͡ΊͷҰาʳ •

    TDDֶशͷࢀߟ • ࢀՃऀײ૝ • ࣍ճ༧ࠂ ໨࣍ 2
  3. • Ѩ෦ɹߞೋʢ͋΂ɹ͜͏͡ʣ • ٕज़ຊ෦ɹػిٕज़෦ɹट౎ݍ2G • koji.abe@persol.co.jp • ҩྍػث։ൃ • ૊ࠐΈιϑτ΢ΣΞ։ൃɻCݴޠɺϕΞϝλϧͷ։ൃۀ຿ܦݧ͕΄ͱΜͲɻ

    • LAPRASϙʔτϑΥϦΦɿhttps://lapras.com/public/k-abe • twitter: @juraruming ࣗݾ঺հ 3
  4. ࣗ͝༝ʹҰݴίϝϯτ͍͚ͨͩ·͢ͱ͋Γ͕͍ͨͰ͢ɻ ྫ) ໊͓લ ྫ) ࠓճͷߨ࠲ʹظ଴͢Δ͜ͱ ྫ) ͓࢓ࣄ಺༰(࿩ͤΔൣғͰ) ྫ) ιϑτ΢ΣΞ։ൃ୲౰޻ఔ(ཁٻ࢓༷ͷఆٛ?ઃܭ?࣮૷?ςετ?) ࢀՃऀҰݴίϝϯτ

    4
  5. • ͳʹ͔ςʔϚΛܾΊͯɺιϑτ΢ΣΞ։ൃͷ্ྲྀ޻ఔ͔ΒԼྲྀ޻ఔ·Ͱ આ໌͢Δߨ࠲Λ։࠵͠ɺεΩϧΞοϓΛਤΔɻ ɹ˙ཁٻ࢓༷ͷཧղɹࢿྉɾهࣄ ɹ˙ཁٻ࢓༷ͷ࢓༷Խɹࢿྉɾهࣄ ɹ˙ઃܭɹ ɹɹ˔֓ཁɹࢿྉɾهࣄ ɹɹ˔ৄࡉɹࢿྉɾهࣄ ɹ˙TDD ɹɹ˔#1

    ςετۦಈ։ൃ͸͡ΊͷҰาɹ˒͍·͜͜ ɹɹ˔#2 LEDυϥΠό(ϗετPCฤ) ɹɹ˔#3 LEDυϥΠό(λʔήοτฤ) ɹɹ˔#4 ɹɹ˔#5 ɹɹ ߨ࠲։࠵ͷഎܠɾ໨త 5
  6. ςʔϚɿ ʲطଘ૊ࠐΈ੡඼(CQ EVΧʔτ)ͷ ϚΠίϯΛҠ২͢Δʳ ߨ࠲։࠵ͷഎܠɾ໨త 6

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

  8. • ςετۦಈ։ൃͱ͸? • ؀ڥߏங • ςετΛॻ͍ͯΈΔ ຊ೔ͷςʔϚ ʲςετۦಈ։ൃ ͸͡ΊͷҰาʳ 8

  9. • ςετۦಈ։ൃͱ͸? • ؀ڥߏங • ςετΛॻ͍ͯΈΔ ຊ೔ͷςʔϚ ʲςετۦಈ։ൃ ͸͡ΊͷҰาʳ 9

  10. • ςετۦಈ։ൃͱ͸? ɹจࣈͱ͓ΓςετͰιϑτ΢ΣΞ։ൃΛۦಈ͍ͯ͘͠ɻ ɹςετ͕։ൃͷى఺ͱͳΔɻ ɹ࣮૷ˠςετͰ͸ͳ͘ɺςετˠ࣮૷ͷॱ൪Ͱ։ൃΛਐΊΔɻ ɾʲςετۦಈʳͯ͠Ͳ͏͢Δ? ɹςετΛॻ͍ͯΑΓྑ͍ઃܭΛಋ͘͜ͱ͕TDDͷ໨ࢦ͢ͱ͜Ζɻ ʲςετۦಈ։ൃ ͸͡ΊͷҰาʳ 10

  11. ▪ςετۦಈ։ൃͱ͸? •ςετۦಈ։ൃΛ΍ΔϞνϕʔγϣϯ ɾσάϨʔυ͕গͳ͘ͳΔɻ ɾϦϑΝΫλϦϯάͰίʔυ͕៉ྷʹͳΔɻ ɾ։ൃऀͷෆ͕҆গͳ͘ͳΔ(ͳ͘ͳΓ͸͠ͳ͍ͱࢥ͏)ɻ ʲςετۦಈ։ൃ ͸͡ΊͷҰาʳ 11

  12. ▪ςετۦಈ։ൃͱ͸? •ʲ૊ࠐΈʳͰςετۦಈ։ൃΛ΍ΔϞνϕʔγϣϯ ɾϋʔυ΢ΣΞ͕ͳͯ͘΋ςετ͕Ͱ͖Δɻ ɾϋʔυ΢ΣΞɾιϑτ΢ΣΞͷෆ۩߹ཁҼ੾Γ෼͚͕໌֬ʹͳΔɻ ɹϋʔυ΢ΣΞىҼ΋͘͠͸λʔήοτϚΠίϯͷϓϥοτϑΥʔϜىҼ (ϦϯΫ͍ͯ͠ΔϥΠϒϥϦͷόάͳͲ)ͷ੾Γ෼͚ ʲςετۦಈ։ൃ ͸͡ΊͷҰาʳ 12

  13. ▪ςετۦಈ։ൃͱ͸? •ࢲ͕TDDΛֶͼ͸͡Ίͨಈػ ɾ૊ࠐΈ੡඼ͷ೿ੜ։ൃʢطଘػछͷόʔδϣϯΞοϓʣͰσάϨʔυ͕ ଟ͘ൃੜɻ ɹˠطଘػೳ͕ਖ਼͘͠ಈ͘͜ͱΛอূ͠ͳ͕Β΋৽ػೳΛ૊ΈࠐΉϊ΢ϋ ΢Λֶͼ͔ͨͬͨɻ ʲςετۦಈ։ൃ ͸͡ΊͷҰาʳ 13

  14. ▪ςετۦಈ։ൃͱ͸? •ࢲ͕TDDΛֶΜͩײ૝ ɾૉ௚ʹָ͍͠ɻ ɹɾTDDͷαΠΫϧ(ϨουˠάϦʔϯˠϦϑΝΫλϦϯά)Λճ͢ͷָ͕͍͠ɻ ɹɾςετΛॻ͍ͯςετ͕੒ޭͨ͠ͱ͖ͷշײɻ ɾ҆৺Ͱ͖Δɻ ɾίʔυ͕੒௕͍࣮ͯ͘͠ײ͕ಘΒΕΔɻ ɾίʔυ͕៉ྷʹอͨΕ͍ͯΔ࣮ײ͕͋Δɻ ʲςετۦಈ։ൃ ͸͡ΊͷҰาʳ

    14
  15. ▪ςετۦಈ։ൃͱ͸? •૊ࠐΈͰTDDΛਪਐ͍ͯ͘͠͏͑Ͱͷ՝୊ ɾTDD։࢝લͷઓཱུҊ(Ͳ͜·ͰTDDΛ࢖͏ͷ͔) ɾςετ͕೉͍͠ྖҬ(ྫ. ૊ࠐΈ૷ஔͷը໘ܥ)ͰͷTDD׆༻ ɾྑ͍ઃܭΛಋͨ͘ΊͷTDD׆༻ ɹݱঢ়͸ςετϑϨʔϜϫʔΫΛ࢖͍ςετΛॻ͖ɺTDDͷαΠΫϧΛճͤΔΑ ͏ʹͳͬͨͱ͍͏ঢ়گɻ ɹTDDΛ࢖ͬͨྑ͍ઃܭͷྫ͸TDDֶशͷࢀߟ 4,

    5͕ࢀߟʹͳΔɻ ʲςετۦಈ։ൃ ͸͡ΊͷҰาʳ 15
  16. • ςετۦಈ։ൃͱ͸? • ؀ڥߏங • ςετΛॻ͍ͯΈΔ ຊ೔ͷςʔϚ ʲςετۦಈ։ൃ ͸͡ΊͷҰาʳ 16

  17. ▪؀ڥߏங •ςετϑϨʔϜϫʔΫͷબ୒ ɾUnity ɾCppUTest ɾGoogle Test TDDֶशͷࢀߟ 1ͷຊͰଟ͘આ໌͞Ε͍ͯΔ, ϚΠίϯʹ΋૊ࠐΈՄೳͳςε τϑϨʔϜϫʔΫͷCppUTestͱͨ͠ɻ

    ϗετ؀ڥͰͷΈTDD͢ΔͷͩͬͨΒGoogle Testਪ͠ͷ੠͕ଟ͍ؾ͕͢Δɻ ʲςετۦಈ։ൃ ͸͡ΊͷҰาʳ 17
  18. ▪؀ڥߏங •λʔήοτϚΠίϯͷબఆ ɹSTϚΠΫϩΤϨΫτϩχΫεͷSTM32ϚΠίϯϘʔυʲNUCLEO- F446REʳʹܾΊͨɻ ɾSTM32F446RET6 64ϐϯ ɾArm Cortex-M4ίΞ 180MHz ɾϑϥογϡ:

    512Kbyte ɾSRAM: 128Kbyte ɾArm MbedରԠ ʲςετۦಈ։ൃ ͸͡ΊͷҰาʳ 18
  19. ▪؀ڥߏங •λʔήοτϚΠίϯͷબఆཧ༝ ɾςʔϚɿʲطଘ૊ࠐΈ੡඼(CQ EVΧʔτ)ͷϚΠίϯΛҠ২͢ΔʳͰ͸ Ϟʔλʔ੍ޚ༻Λ͓͜ͳ͏ɻ ֘౰ϚΠίϯϘʔυʹ౥ࡌ͞Ε͍ͯΔϚΠίϯ͸Ϟʔλʔ੍ޚ༻ͷλΠ ϚʔػೳΛ͍࣋ͬͯͨͨΊɻ ɾଞͷSTM32ϚΠίϯϘʔυΑΓଟ͘࢖ͬͨ͜ͱ͕͋Γ׳Ε͍ͯͨɻ ʲςετۦಈ։ൃ ͸͡ΊͷҰาʳ

    19
  20. • ςετۦಈ։ൃͱ͸? • ؀ڥߏங • ςετΛॻ͍ͯΈΔ ຊ೔ͷςʔϚ ʲςετۦಈ։ൃ ͸͡ΊͷҰาʳ 20

  21. ▪ςετΛॻ͍ͯΈΔ •TDDͷεςοϓ ɹɾςετΛॻ͘ɻ ɹɾςετࣦഊΛ֬ೝ͢Δ(Ϩου)ɻ ɹɾςετ੒ޭͤ͞ΔͨΊͷϓϩμΫτίʔυΛॻ͘ɻ ɹɾςετ੒ޭΛ֬ೝ͢Δ(άϦʔϯ)ɻ ɹɾςετ੒ޭͨ͠··ιʔείʔυΛ៉ྷ͢Δ(ϦϑΝΫλϦϯά) ʲςετۦಈ։ൃ ͸͡ΊͷҰาʳ 21

  22. ▪ςετΛॻ͍ͯΈΔ ˒TDDαΠΫϧΛճͯ͠ΈΔσϞ TDDֶशͷࢀߟ 1ͷຊɹLEDυϥΠόʔͷςετର৅ʹ͢Δɻ ʲςετۦಈ։ൃ ͸͡ΊͷҰาʳ 22 ςετର৅ͷϓϩμΫτίʔυ LEDυϥΠό LedDriver.c,

    LedDriver.h ςετίʔυɿ CppUTestͷॻ͖ํͰ ςετΛॻ͘ LedDriverTest.cpp mainؔ਺ɿ ςετ࣮ߦ RunAllTests.cpp
  23. ▪ςετΛॻ͍ͯΈΔ λʔήοτϘʔυͰTDDͯ͠Έͨ࿩ STM32CubeIDEʹCppUTestΛ؀ڥߏங͠ɺSTM32ϚΠίϯͰTDD͢ Δ github͸ͪ͜Βɻ ϙΠϯτɿ ɾRAMͰςετ࣮ߦ(ROMॻ͖׵͑࣌ؒɺॻ͖׵͑ճ਺ߟྀ) ɾ౷߹։ൃ؀ڥͷΈͰςετՄೳ(γϦΞϧλʔϛφϧෆཁ) ɾCppUTestͷϝϞϦ࢖༻ྔ ʲςετۦಈ։ൃ

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

    TDDʹΑΔϚΠίϯͷLνΧ։ൃ(2)(׬) TDDֶशͷࢀߟ 24
  25. • ੋඇͱ΋ߨ࠲ͷײ૝ΛҰݴ͓ئ͍͠·͢ɻ ࢀՃऀײ૝ 25

  26. ɹ࣍ճ͸ʲ10/31(໦) 19:30ʙ20:30ʳͰ։࠵༧ఆͰ͢ɻ ʲ࿈ଓߨ࠲ #6ʳςετۦಈ։ൃ#2 LEDυϥΠό(ϗετPCฤ) ɹ ɹϗετPCͰTDD͍ͨ͠ͱߟ͍͑ͯ·͢ɻ ࢀՃͷํɺੋඇͱ΋ΑΖ͓͘͠Ͷ͕͍͠·͢ɻ ࣍ճ༧ࠂ 26

  27. • ςʔϚͷલఏઆ໌ ʲCQ EVΧʔτʳͱ͸??? ɾಈը1: ૸ߦத ɾಈը2: ج൘Λ֦େ աڈʹॻ͍ٕͨज़ॻ(EV Χʔτ

    で ࢝ΊΔϞ デ ϧ ベ ʔε։ൃ)Λϕʔεʹઆ໌͠·͢ɻ هࡌՕॴɿʲୈ1ষ EVΧʔτͱ͸Կ͔ʳ ࢀߟʲςʔϚͷલఏઆ໌ʳ 27
  28. • ςʔϚͷલఏઆ໌ ςʔϚɿʲطଘ૊ࠐΈ੡඼ͷϚΠίϯΛҠ২͢Δʳ͸࣍ͷલఏͱ͢Δɻ ɾ೿ੜ։ൃ(طʹ͋Δ૷ஔͰϚΠίϯͷΈมߋ) ɾϋʔυ΢ΣΞ͋Γɻిؾత࢓༷֬ೝOKɻ ɾچϚΠίϯͰͷιϑτ΢ΣΞࢿ࢈͋Γɻ˞GitHub, ࢿྉ ͷ֤ϦϯΫ ɾݸਓ։ൃ(͓࢓ࣄʹ΋ద༻Ͱ͖ΔΤοηϯε͸͋Δ͔ͱࢥ͍·͢) ࢀߟʲςʔϚͷલఏઆ໌ʳ

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