ბლოგი

როგორ ვქმნი Baby Monitor Timmy-ს GitHub Copilot-ით

AI მეხმარება, უფრო სწრაფად ვიმუშაო. Timmy-ზე პასუხისმგებლობა მაინც ჩემთან რჩება.

Baby Monitor Timmy მარტივი იდეით დაიწყო: ბავშვის მონიტორი, რომელიც სახლში კონფიდენციალურობას პატივს სცემს. ღრუბელში ჩაწერები არ არის და ბავშვის ოთახიდან მონაცემები ზედმეტი გზებით არ გადის. რასაც ბევრი ვერ ხედავს: Timmy-ს ციურიხში მარტო ვქმნი და GitHub Copilot ჩემი ძალიან სწრაფი პროგრამირების პარტნიორია.

ადამიანი–AI-ის სამუშაო პროცესი

როლები მკაფიოდ არის გაყოფილი: ფუნქციებს მე განვსაზღვრავ, პრიორიტეტებს ვადგენ და არქიტექტურულ გადაწყვეტილებებს ვიღებ. 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-ით

ერთ-ერთი ყველაზე კრიტიკული ფუნქცია იყო უსაფრთხო დაწყვილების სისტემა. ორმა მოწყობილობამ ერთმანეთის მიმართ ნდობა ისე უნდა დაამყაროს, რომ მათი იდენტობის დასადასტურებლად ცენტრალურ სერვერს არ დაეყრდნოს. გამოსავალია ECDH P-256 გასაღებების გაცვლა Firebase-ის მეშვეობით, ვიზუალური გადამოწმების ნომერთან (SAS) ერთად, რომელიც „შუაში მდგომი პირის“ ტიპის შეტევებს ამოიცნობს.

Copilot დამეხმარა კრიპტოგრაფიული ჯაჭვის იმპლემენტაციაში: გასაღების გენერირება, საჯარო გასაღებების გაცვლა, საერთო საიდუმლოს მიღება, SAS-ის გამოთვლა და AES-256-GCM შიფრაცია ყველა შემდგომი სიგნალიზაციის მონაცემისთვის. დაწყვილების გასაღებს backend-ზე არ ვაგზავნი; Firestore დოკუმენტის იდენტიფიკატორად მხოლოდ მისი SHA-256 ჰეში გამოიყენება.

უსაფრთხოების აუდიტი: მოწყვლადობების აღმოჩენა და გამოსწორება

AI-ის დახმარებით პროგრამული უზრუნველყოფის შექმნა ჩემთვის მხოლოდ სწრაფად აკრეფას არ ნიშნავს. ის სისტემურად ხარვეზების მოძიებაშიც მეხმარება. უსაფრთხოების აუდიტის მიზნობრივ სპრინტში Copilot-მა კოდის ბაზა გააანალიზა და აღმოაჩინა ექვსი პრობლემა , რომლებიც უნდა გამომესწორებინა:

ექვსივე პრობლემა იმავე სპრინტში გამოსწორდა. აქ არის Copilot ძლიერი: ბევრ ფაილს კითხულობს, შაბლონებს ადარებს და მონიშნავს ადგილებს, რომლებიც უფრო ყურადღებით უნდა შევამოწმო.

განმეორებადი სპრინტები: როგორ განვითარდა აპი

Timmy სწრაფი, თუმცა მკაფიო საზღვრებით გაწერილი სპრინტებით გაიზარდა. რამდენიმე მნიშვნელოვანი ეტაპი:

ყველა სპრინტი ერთსა და იმავე ძირითად სქემას მიჰყვება: მიზნის აღწერა, შემოთავაზებების გადახედვა, ავტომატური ტესტირება და შემდეგ ტესტერებისთვის გამოშვება.

E2E ტესტირება მოწყობილობებს შორის

ბავშვის მონიტორს ერთ მოწყობილობაზე სათანადოდ ვერ დატესტავ. მჭირდება ერთი მოწყობილობა ბავშვის მხარეს და ერთი — მშობლის მხარეს. პროექტი ერთდროულად გაშვებული ორი Android ემულატორით დაიწყო, ახლა კი ამ პროცესს ადგილობრივ iOS სიმულატორსა და რეალურ მოწყობილობებზე შემოწმებაც ავსებს. Android-ის ავტომატური ტესტირების სკრიპტი კვლავ:

  1. აყენებს აპს ორივე ემულატორზე
  2. ორივე მოწყობილობაზე გადის დაწყვილების პროცესს
  3. ამოწმებს, რომ აუდიო და ვიდეო კავშირები დამყარდა
  4. ტესტავს push-to-talk-ს, კამერის მართვასა და სხვა ფუნქციებს

რადგან ორივე ემულატორი ერთსა და იმავე IP მისამართს იყენებს (10.0.2.15), პირდაპირი peer-to-peer კავშირი STUN-ის საშუალებით შეუძლებელია. ყოველი ტესტი Cloudflare TURN relay-ის გავლით უნდა შესრულდეს. ეს შემაწუხებელია, მაგრამ სასარგებლოც: კავშირის ყველაზე რთული გზა ყოველ ჯერზე იტესტება.

რა ვისწავლე

სრულფასოვანი აპის AI პროგრამირების პარტნიორთან ერთად შექმნამ რამდენიმე რამ მასწავლა:

მომავლისკენ

Baby Monitor Timmy განვითარებას განაგრძობს. iOS-ის გამოშვება ახლოსაა; შემდეგ დაემატება სენსორებთან დაკავშირებული ფუნქციები და გაგრძელდება უსაფრთხოების გამყარება. სამუშაო პროცესი მსგავსი რჩება: მიმართულებასა და საზღვრებს მე ვადგენ, Copilot კი სწრაფ იმპლემენტაციასა და შემოწმებაში მეხმარება.

უსაფრთხოებასთან დაკავშირებული ძირითადი კომპონენტები ახლა მოთავსებულია მკაფიო საზღვრებში საჯარო baby-monitor-timmy-core რეპოზიტორიაში. იქვეა დოკუმენტირებული არქიტექტურული გადაწყვეტილებები დაწყვილების, სიგნალიზაციისა და backend-ის ინტერფეისების შესახებ.


მეტი სტატია