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
ʲ࿈ଓߨ࠲ #5ʳςετۦಈ։ൃ ͡ΊͷҰา2022/11/24 ConnpassΠϕϯτ൛2022/11/24ύʔιϧςΫϊϩδʔελοϑגࣜձࣾѨ෦ߞೋ [email protected]ΈࠐΈιϑτΣΞجૅ
View Slide
▪ύʔιϧςΫϊϩδʔελοϑגࣜձࣾɹٕज़ຊ෦ɹػిٕज़෦ɹटݍ2GɹѨ෦ɹߞೋʢ͋ɹ͜͏͡ʣ▪ҩྍػث։ൃɾࠐΈιϑτΣΞ։ൃɻɾCݴޠɺϕΞϝλϧͷ։ൃۀܦݧ͕΄ͱΜͲɻࣗݾհ 12
▪ٕज़ॻΛॻ͍ٕͯज़ॻయ13ʹࢀՃͨ͠Γɺɹ▪ϚΠίϯͷίϯςετ(※)ʹࢀՃͨ͠Γɺɹ※SPRESENSE™ ׆༻ίϯςετɹࠐΈιϑτΣΞ։ൃ͕͖ͳ͓͡͞ΜͰ͢ɻɹΑΖ͓͘͠ئ͍͠·͢ɻ▪LAPRASϙʔτϑΥϦΦɿhttps://lapras.com/public/k-abe▪twitter: @jurarumingࣗݾհ 23
• ߨ࠲։࠵ͷഎܠɾత• ຊͷςʔϚʲςετۦಈ։ൃ ͡ΊͷҰาʳ• TDDֶशͷࢀߟ• QA• ·ͱΊ• ࣍ճ༧ࠂ࣍4
• ͳʹ͔ςʔϚΛܾΊͯɺιϑτΣΞ։ൃͷ্ྲྀఔ͔ΒԼྲྀఔ·Ͱઆ໌͢Δߨ࠲Λ։࠵͠ɺεΩϧΞοϓΛਤΔɻɹ˙ཁٻ༷ͷཧղɹࢿྉɾهࣄɹ˙ཁٻ༷ͷ༷Խɹࢿྉɾهࣄɹ˙ઃܭɹɹɹ˔֓ཁɹࢿྉɾهࣄɹɹ˔ৄࡉɹࢿྉɾهࣄɹ˙TDDɹɹ˔#1 ςετۦಈ։ൃ͡ΊͷҰาɹ˒͍·͜͜ɹɹ˔#2 LEDυϥΠό(ϗετPCฤ)ɹɹ˔#3 LEDυϥΠό(λʔήοτฤ)ɹɹ˔#4ɹɹ˔#5ɹɹߨ࠲։࠵ͷഎܠɾత5
ςʔϚɿʲطଘࠐΈ(CQ EVΧʔτ)ͷϚΠίϯΛҠ২͢Δʳߨ࠲։࠵ͷഎܠɾత6
ςʔϚɿʲطଘࠐΈͷϚΠίϯΛҠ২͢ΔʳରஔɿCQ EVΧʔτഎܠɿɾߨࢣ͕͓࣋ͬͯΓɺରஔͷυϝΠϯࣝΛཧղ͍ͯ͠ΔɻɾιϑτΣΞͷߏΛཧղ͍ͯ͠ΔɻɾରஔͷϚΠίϯ͕৽ن࠾༻ඇਪʹͳͬͨɻɹ⇛ֶशɾεΩϧΞοϓͷͨΊผϚΠίϯʹҠ২ͯ͠ΈΑ͏!!!ɹߨ࠲։࠵ͷഎܠɾత7
• ςετۦಈ։ൃͱ?• ڥߏங• ςετΛॻ͍ͯΈΔຊͷςʔϚʲςετۦಈ։ൃ ͡ΊͷҰาʳ8
• ςετۦಈ։ൃͱ?• ڥߏங• ςετΛॻ͍ͯΈΔຊͷςʔϚʲςετۦಈ։ൃ ͡ΊͷҰาʳ9
• ςετۦಈ։ൃͱ?ɹจࣈͱ͓ΓςετͰιϑτΣΞ։ൃΛۦಈ͍ͯ͘͠ɻɹςετ͕։ൃͷىͱͳΔɻɹ࣮ˠςετͰͳ͘ɺςετˠ࣮ͷॱ൪Ͱ։ൃΛਐΊΔɻɾʲςετۦಈʳͯ͠Ͳ͏͢Δ?ɹςετΛॻ͍ͯΑΓྑ͍ઃܭΛಋ͘͜ͱ͕TDDͷࢦ͢ͱ͜Ζɻʲςετۦಈ։ൃ ͡ΊͷҰาʳ10
▪ςετۦಈ։ൃͱ?●ςετۦಈ։ൃΛΔϞνϕʔγϣϯɾσάϨʔυ͕গͳ͘ͳΔɻɾϦϑΝΫλϦϯάͰίʔυ͕៉ྷʹͳΔɻɾ։ൃऀͷෆ͕҆গͳ͘ͳΔ(ͳ͘ͳΓ͠ͳ͍ͱࢥ͏)ɻʲςετۦಈ։ൃ ͡ΊͷҰาʳ11
▪ςετۦಈ։ൃͱ?●ʲࠐΈʳͰςετۦಈ։ൃΛΔϞνϕʔγϣϯɾϋʔυΣΞ͕ͳͯ͘ςετ͕Ͱ͖ΔɻɾϋʔυΣΞɾιϑτΣΞͷෆ۩߹ཁҼΓ͚͕໌֬ʹͳΔɻɹϋʔυΣΞىҼ͘͠λʔήοτϚΠίϯͷϓϥοτϑΥʔϜىҼ(ϦϯΫ͍ͯ͠ΔϥΠϒϥϦͷόάͳͲ)ͷΓ͚ʲςετۦಈ։ൃ ͡ΊͷҰาʳ12
▪ςετۦಈ։ൃͱ?●ࢲ͕TDDΛֶͼ͡ΊͨಈػɾࠐΈͷੜ։ൃʢطଘػछͷόʔδϣϯΞοϓʣͰσάϨʔυ͕ଟ͘ൃੜɻɹˠطଘػೳ͕ਖ਼͘͠ಈ͘͜ͱΛอূ͠ͳ͕Β৽ػೳΛΈࠐΉϊϋΛֶͼ͔ͨͬͨɻʲςετۦಈ։ൃ ͡ΊͷҰาʳ13
▪ςετۦಈ։ൃͱ?●ࢲ͕TDDΛֶΜͩײɾૉʹָ͍͠ɻɹɾTDDͷαΠΫϧ(ϨουˠάϦʔϯˠϦϑΝΫλϦϯά)Λճ͢ͷָ͕͍͠ɻɹɾςετΛॻ͍ͯςετ͕ޭͨ͠ͱ͖ͷշײɻɾ҆৺Ͱ͖Δɻɾίʔυ͕͍࣮ͯ͘͠ײ͕ಘΒΕΔɻɾίʔυ͕៉ྷʹอͨΕ͍ͯΔ࣮ײ͕͋Δɻʲςετۦಈ։ൃ ͡ΊͷҰาʳ14
▪ςετۦಈ։ൃͱ?●ࠐΈͰTDDΛਪਐ͍ͯ͘͠͏͑Ͱͷ՝ɾTDD։࢝લͷઓཱུҊ(Ͳ͜·ͰTDDΛ͏ͷ͔)ɾςετ͕͍͠ྖҬ(ྫ. ࠐΈஔͷը໘ܥ)ͰͷTDD׆༻ɾྑ͍ઃܭΛಋͨ͘ΊͷTDD׆༻ɹݱঢ়ςετϑϨʔϜϫʔΫΛ͍ςετΛॻ͖ɺTDDͷαΠΫϧΛճͤΔΑ͏ʹͳͬͨͱ͍͏ঢ়گɻɹTDDΛͬͨྑ͍ઃܭͷྫTDDֶशͷࢀߟ 4, 5͕ࢀߟʹͳΔɻʲςετۦಈ։ൃ ͡ΊͷҰาʳ15
• ςετۦಈ։ൃͱ?• ڥߏங• ςετΛॻ͍ͯΈΔຊͷςʔϚʲςετۦಈ։ൃ ͡ΊͷҰาʳ16
▪ڥߏங●ςετϑϨʔϜϫʔΫͷબɾUnityɾCppUTestɾGoogle TestTDDֶशͷࢀߟ 1ͷຊͰଟ͘આ໌͞Ε͍ͯΔ, ϚΠίϯʹࠐΈՄೳͳςετϑϨʔϜϫʔΫͷCppUTestͱͨ͠ɻϗετڥͰͷΈTDD͢ΔͷͩͬͨΒGoogle Testਪ͠ͷ͕ଟ͍ؾ͕͢Δɻʲςετۦಈ։ൃ ͡ΊͷҰาʳ17
▪ڥߏங●λʔήοτϚΠίϯͷબఆɹSTϚΠΫϩΤϨΫτϩχΫεͷSTM32ϚΠίϯϘʔυʲNUCLEO-F446REʳʹܾΊͨɻɾSTM32F446RET6 64ϐϯɾArm Cortex-M4ίΞ 180MHzɾϑϥογϡ: 512KbyteɾSRAM: 128KbyteɾArm MbedରԠʲςετۦಈ։ൃ ͡ΊͷҰาʳ18
▪ڥߏங●λʔήοτϚΠίϯͷબఆཧ༝ɾςʔϚɿʲطଘࠐΈ(CQ EVΧʔτ)ͷϚΠίϯΛҠ২͢ΔʳͰϞʔλʔ੍ޚΛ͓͜ͳ͏ɻ֘ϚΠίϯϘʔυʹࡌ͞Ε͍ͯΔϚΠίϯϞʔλʔ੍ޚ༻ͷλΠϚʔػೳΛ͍࣋ͬͯͨͨΊɻɾଞͷSTM32ϚΠίϯϘʔυΑΓଟͬͨ͘͜ͱ͕͋Γ׳Ε͍ͯͨɻʲςετۦಈ։ൃ ͡ΊͷҰาʳ19
• ςετۦಈ։ൃͱ?• ڥߏங• ςετΛॻ͍ͯΈΔຊͷςʔϚʲςετۦಈ։ൃ ͡ΊͷҰาʳ20
▪ςετΛॻ͍ͯΈΔ●TDDͷεςοϓɹɾςετΛॻ͘ɻɹɾςετࣦഊΛ֬ೝ͢Δ(Ϩου)ɻɹɾςετޭͤ͞ΔͨΊͷϓϩμΫτίʔυΛॻ͘ɻɹɾςετޭΛ֬ೝ͢Δ(άϦʔϯ)ɻɹɾςετޭͨ͠··ιʔείʔυΛ៉ྷ͢Δ(ϦϑΝΫλϦϯά)ʲςετۦಈ։ൃ ͡ΊͷҰาʳ21
▪ςετΛॻ͍ͯΈΔ˒TDDαΠΫϧΛճͯ͠ΈΔσϞTDDֶशͷࢀߟ 1ͷຊɹLEDυϥΠόʔͷςετରʹ͢Δɻʲςετۦಈ։ൃ ͡ΊͷҰาʳ22ςετରͷϓϩμΫτίʔυLEDυϥΠόLedDriver.c, LedDriver.hςετίʔυɿCppUTestͷॻ͖ํͰςετΛॻ͘LedDriverTest.cppmainؔɿςετ࣮ߦRunAllTests.cpp
▪ςετΛॻ͍ͯΈΔλʔήοτϘʔυͰTDDͯ͠ΈͨSTM32CubeIDEʹCppUTestΛڥߏங͠ɺSTM32ϚΠίϯͰTDD͢Δgithubͪ͜ΒɻϙΠϯτɿɾRAMͰςετ࣮ߦ(ROMॻ͖͑࣌ؒɺॻ͖͑ճߟྀ)ɾ౷߹։ൃڥͷΈͰςετՄೳ(γϦΞϧλʔϛφϧෆཁ)ɾCppUTestͷϝϞϦ༻ྔʲςετۦಈ։ൃ ͡ΊͷҰาʳ23
1. ςετۦಈ։ൃʹΑΔΈࠐΈϓϩάϥϛϯά2. ʦಈըͰղઆʧాਓͷ“ςετۦಈ։ൃ”ߨ࠲ هࣄҰཡ3. ʰςετۦಈ։ൃʹΑΔΈࠐΈϓϩάϥϛϯάʱΛಡΜͰֶΜͩ͜ͱ4. TDDʹΑΔϚΠίϯͷLνΧ։ൃ(1)5. TDDʹΑΔϚΠίϯͷLνΧ։ൃ(2)()TDDֶशͷࢀߟ24
• ࣭͝ɺؾʹͳͬͨ͜ͱ͋Εڞ༗Λ͓ئ͍͠·͢ɻQA25
▪ ͍Ζ͍Ζॻ͖·͕ͨ͠TDDͷεςοϓʹଇΓ·ͣखΛಈ͔ͯ͠ମײͯ͠ΈΔɺ͕TDDΛཧղ͢Δ͡ΊͷҰา͔ͳͱࢥ͍·͢ɻ●TDDͷεςοϓ(࠶ܝ)ɹɾςετΛॻ͘ɻɹɾςετࣦഊΛ֬ೝ͢Δ(Ϩου)ɻɹɾςετޭͤ͞ΔͨΊͷϓϩμΫτίʔυΛॻ͘ɻɹɾςετޭΛ֬ೝ͢Δ(άϦʔϯ)ɻɹɾςετޭͨ͠··ιʔείʔυΛ៉ྷ͢Δ(ϦϑΝΫλϦϯά)·ͱΊ26
ɹ࣍ճʲ12/22() 19:30ʙ20:15ʳͰ։࠵༧ఆͰ͢ɻʲ࿈ଓߨ࠲ #6ʳςετۦಈ։ൃ#2 LEDυϥΠό(ϗετPCฤ)ɹɹϗετPCͰTDD͍ͨ͠ͱߟ͍͑ͯ·͢ɻࢀՃͷํɺੋඇͱΑΖ͓͘͠Ͷ͕͍͠·͢ɻ࣍ճ༧ࠂ27
• ςʔϚͷલఏઆ໌ʲCQ EVΧʔτʳͱ???ɾಈը1: ߦதɾಈը2: ج൘Λ֦େաڈʹॻ͍ٕͨज़ॻ(EV Χʔτで࢝ΊΔϞデϧベʔε։ൃ)Λϕʔεʹઆ໌͠·͢ɻهࡌՕॴɿʲୈ1ষ EVΧʔτͱԿ͔ʳࢀߟʲςʔϚͷલఏઆ໌ʳ28
• ςʔϚͷલఏઆ໌ςʔϚɿʲطଘࠐΈͷϚΠίϯΛҠ২͢Δʳ࣍ͷલఏͱ͢Δɻɾੜ։ൃ(طʹ͋ΔஔͰϚΠίϯͷΈมߋ)ɾϋʔυΣΞ͋Γɻిؾత༷֬ೝOKɻɾچϚΠίϯͰͷιϑτΣΞࢿ࢈͋Γɻ˞GitHub, ࢿྉ ͷ֤ϦϯΫɾݸਓ։ൃ(͓ࣄʹద༻Ͱ͖ΔΤοηϯε͋Δ͔ͱࢥ͍·͢)ࢀߟʲςʔϚͷલఏઆ໌ʳ29
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻऴΘΓ30