Բլոգ

Ինչպես եմ GitHub Copilot-ով ստեղծում Baby Monitor Timmy-ը

ԱԲ-ն օգնում է ինձ ավելի արագ առաջ շարժվել։ Սակայն Timmy-ի պատասխանատվությունը մնում է ինձ վրա։

Baby Monitor Timmy-ը սկսվեց պարզ գաղափարից՝ մանկական մոնիտոր, որը հարգում է տան անձնական տարածքը։ Ամպում ձայնագրություններ չկան, մանկասենյակից դուրս տանող տվյալների անհարկի ուղիներ էլ չկան։ Շատերը չեն տեսնում, որ ես Timmy-ը ստեղծում եմ որպես անհատական նախագիծ Ցյուրիխում, իսկ GitHub Copilot իմ շատ արագ զույգ ծրագրավորողն է։

Մարդու և ԱԲ-ի աշխատանքային հոսքը

Բաժանումը հստակ է․ ես եմ սահմանում գործառույթները, առաջնահերթությունները և ճարտարապետական որոշումները։ Copilot-ն օգնում է իրագործման հարցում՝ կոդ գրելով, թեստեր ավելացնելով, սխալների շրջանակը նեղացնելով և թողարկման քայլերը նախապատրաստելով։

Ինձ մոտ սովորական սպրինտը մոտավորապես այսպես է ընթանում․

  1. Գործառույթի նկարագրություն․ Նկարագրում եմ, թե գործառույթն ինչ պետք է անի՝ ներառյալ եզրային դեպքերն ու սահմանափակումները։
  2. Իրագործում․ Copilot-ն առաջարկում է կոդ և հետևում նախագծում արդեն ընդունված կանոններին։
  3. Թեստավորում․ Ավտոմատացված end-to-end թեստերը գործարկվում են երկու էմուլյատորի վրա և ստուգում երեխայի ու ծնողի սարքերի իրական կապը։
  4. Տարածում․ Երբ թեստերն անցնում են, Android և iOS տարբերակները նախապատրաստվում են համապատասխան խանութների և փորձարկման ալիքների համար։

Այս ցիկլը կրկնվում է նոր գործառույթների և սխալների շտկումների համար։ Ես անձամբ չեմ գրում յուրաքանչյուր տողը, բայց ես եմ որոշում՝ ինչը պետք է ստեղծվի, ինչու պետք է ստեղծվի, և արդյոք առաջարկը համապատասխանում է Timmy-ին։

Գաղափարից մինչև WebRTC

Կենտրոնական տեխնիկական խնդիրը հենց սկզբից պարզ էր՝ երկու հեռախոսի միջև իրական ժամանակում ձայն ու տեսանյութ փոխանցելը։ WebRTC-ն ակնհայտ ընտրություն էր, սակայն այն Flutter-ի հետ միացնելը պարզ չէ․ ICE թեկնածուները, SDP բանակցումը, TURN պահեստային տարբերակը և DataChannel-ները պետք է ճիշտ հերթականությամբ աշխատեն միասին։

Copilot-ն օգնեց ինձ այդ մասերը քայլ առ քայլ միացնել․ կարգավորել peer connection-ը, պահպանել կարևոր հերթականությունը (DataChannel-ը՝ offer-ից առաջ, onTrack-ը՝ setRemoteDescription-ից առաջ), և ազդանշանավորումն իրականացնել Firebase Firestore-ով։ Ամեն մաս պետք է աշխատեր երկու էմուլյատորի վրա, նախքան առաջ անցնելը։

Անվտանգ զուգակցում ECDH-ով

Ամենակարևոր գործառույթներից մեկը անվտանգ զուգակցման համակարգնէր։ Երկու սարք պետք է փոխադարձ վստահություն հաստատեն՝ առանց կենտրոնական սերվերի, որը կհաստատի նրանց ինքնությունը։ Լուծումը՝ Firebase-ով ECDH P-256 բանալիների փոխանակում՝ համակցված տեսողական ստուգման համարի (SAS) հետ, որը բացահայտում է միջնորդի միջոցով կատարվող հարձակումները։

Copilot-ն օգնեց իրականացնել ծածկագրային շղթան՝ բանալիների ստեղծում, հանրային բանալիների փոխանակում, ընդհանուր գաղտնիքի ստացում, SAS-ի հաշվարկ և AES-256-GCM կոդավորում հետագա բոլոր ազդանշանավորման տվյալների համար։ Ես զուգակցման բանալին backend չեմ ուղարկում․ Firestore փաստաթղթի նույնացուցիչ է օգտագործվում միայն դրա SHA-256 հեշը։

Անվտանգության աուդիտ․ խոցելիությունների հայտնաբերում և շտկում

ԱԲ-ի օգնությամբ մշակումն ինձ համար պարզապես ավելի արագ տպագրություն չէ։ Այն օգնում է նաև սխալները համակարգված որոնել։ Անվտանգության կենտրոնացված աուդիտային սպրինտի ընթացքում Copilot-ը վերլուծեց կոդային բազան և գտավ վեց խնդիր որ պետք էր շտկեմ․

Բոլոր վեցը շտկվեցին նույն սպրինտի ընթացքում։ Այստեղ է Copilot-ի ուժեղ կողմը՝ շատ ֆայլեր կարդալը, օրինաչափությունները համեմատելը և այն տեղերը նշելը, որոնք պետք է ավելի ուշադիր ստուգեմ։

Կրկնվող սպրինտներ․ ինչպես զարգացավ հավելվածը

Timmy-ը զարգացավ արագ, բայց հստակ սահմանված սպրինտներով։ Ահա մի քանի կարևոր փուլեր․

Յուրաքանչյուր սպրինտ հետևում է նույն հիմնական ընթացքին․ նկարագրել նպատակը, վերանայել առաջարկները, ավտոմատ թեստավորել, ապա ուղարկել փորձարկողներին։

E2E թեստավորում տարբեր սարքերում

Մանկական մոնիտորը ճիշտ չես կարող թեստավորել մեկ սարքով։ Ինձ պետք է մեկ երեխայի սարք և մեկ ծնողի սարք։ Նախագիծը սկսվեց երկու Android էմուլյատորների միաժամանակյա գործարկմամբ և այժմ այդ ընթացքը լրացնում է տեղային iOS սիմուլյատորով ու իրական սարքով ստուգումներով։ Android-ի ավտոմատացված թեստային սցենարը դեռևս՝

  1. Հավելվածը տեղադրում է երկու էմուլյատորների վրա
  2. Երկու սարքում անցնում է զուգակցման ընթացքը
  3. Ստուգում է, որ ձայնային և տեսահաղորդման կապերը հաստատվել են
  4. Թեստավորում է խոսելու համար սեղմելու գործառույթը, տեսախցիկի կառավարումը և այլ հնարավորությունները

Քանի որ երկու էմուլյատորներն ունեն նույն IP հասցեն (10.0.2.15), STUN-ի միջոցով ուղիղ peer-to-peer կապն անհնար է։ Յուրաքանչյուր թեստային գործարկում պետք է անցնի Cloudflare TURN ռելեյով։ Դա անհարմար է, բայց օգտակար․ ամեն անգամ թեստավորվում է կապի ամենաբարդ ուղին։

Ինչ եմ սովորել

ԱԲ-ի զույգ ծրագրավորողի հետ ամբողջական հավելված ստեղծելն ինձ մի քանի բան սովորեցրեց․

Ապագային նայելով

Baby Monitor Timmy-ը շարունակում է զարգանալ։ iOS-ի թողարկումը մոտ է, իսկ դրանից հետո կավելանան սենսորային նոր գործառույթներ և անվտանգությունը կշարունակի ամրապնդվել։ Աշխատանքի ընթացքը կմնա նման․ ես եմ սահմանում ուղղությունն ու սահմանները, իսկ Copilot-ն օգնում է արագ իրագործել և ստուգել։

Անվտանգությանը վերաբերող կառուցվածքային բաղադրիչներն այժմ տեղակայված են հստակ սահմանների մեջ՝ հանրային baby-monitor-timmy-core պահոցում։ Այդտեղ նաև փաստագրված են զուգակցման, ազդանշանավորման և backend-ի միջերեսների ճարտարապետական որոշումները։


Այլ հոդվածներ