Baby Monitor Timmy қарапайым идеядан басталды: үйдегі құпиялылықты сақтайтын нәресте мониторы. Бұлтқа жазба сақталмайды, бала бөлмесінен сыртқа қажетсіз дерек жіберілмейді. Көпшілік біле бермейтін жайт: Timmy-ді Цюрихте жеке жоба ретінде жалғыз өзім әзірлеймін, ал GitHub Copilot — менімен жұптасып жұмыс істейтін өте жылдам бағдарламашы.
Адам мен ЖИ арасындағы жұмыс үдерісі
Міндеттер нақты бөлінген: мүмкіндіктерді мен айқындаймын, басымдықтарды белгілеймін және архитектуралық шешімдерді қабылдаймын. Copilot іске асыруға көмектеседі: код жазады, тесттер қосады, қателердің себебін нақтылауға көмектеседі және шығарылым қадамдарын дайындайды.
Мендегі әдеттегі спринт шамамен былай өтеді:
- Мүмкіндіктің сипаттамасы: Мен мүмкіндіктің не істеуі керегін, соның ішінде шеткі жағдайлар мен шектеулерді сипаттаймын.
- Іске асыру: Copilot код ұсынып, жобада қалыптасқан қағидаларды ұстанады.
- Тестілеу: Автоматтандырылған E2E тесттері екі эмуляторда орындалып, бала мен ата-ана құрылғылары арасында нақты байланыс орнайтынын тексереді.
- Таратуға дайындау: Тесттер сәтті өтсе, Android және iOS құрастырылымдары тиісті қолданбалар дүкені мен тестілеу арналарына дайындалады.
Бұл цикл жаңа мүмкіндіктерді әзірлегенде және қателерді түзеткенде қайталанады. Әр жолды өзім жазбасам да, нені жасау керегін, неге жасалатынын және ұсыныстың Timmy-ге сай келетін-келмейтінін мен шешемін.
Тұжырымдамадан WebRTC-ге дейін
Негізгі техникалық міндет басынан-ақ анық болды: екі телефон арасында дыбыс пен бейнені нақты уақытта тарату. WebRTC айқын таңдау еді, бірақ оны Flutter-мен біріктіру оңай емес: ICE кандидаттары, SDP келісу үдерісі, TURN арқылы резервтік қосылу және DataChannel арналары дұрыс ретпен бірге жұмыс істеуі керек.
Copilot осы бөліктерді кезең-кезеңімен біріктіруге көмектесті: тең дәрежелі қосылымды орнату, маңызды реттілікті сақтау (offer алдында DataChannel, setRemoteDescription алдында onTrack) және сигнал алмасуды Firebase Firestore арқылы іске асыру. Келесі қадамға өтпес бұрын әр бөлік екі эмуляторда жұмыс істеуі керек болды.
ECDH арқылы қауіпсіз жұптастыру
Ең маңызды функциялардың бірі қауіпсіз жұптастыру жүйесі болды. Орталық сервер олардың жеке басын растамай-ақ, екі құрылғы бір-біріне өзара сенім орнатуы керек. Шешім: Firebase арқылы ECDH P-256 кілт алмасуы және ортадағы адам шабуылын анықтайтын визуалды тексеру нөмірі (SAS).
Copilot криптографиялық тізбекті іске асыруға көмектесті: кілттерді жасау, ашық кілттермен алмасу, ортақ құпия мәнді шығару, SAS есептеу және кейінгі барлық сигнал алмасу деректерін AES-256-GCM арқылы шифрлау. Жұптастыру кілтін серверлік жүйеге жібермеймін; Firestore құжатының идентификаторы ретінде тек оның SHA-256 хэші қолданылады.
Қауіпсіздік аудиті: осалдықтарды табу және түзету
ЖИ көмегімен әзірлеу мен үшін тек жылдамырақ теру емес. Ол қателерді жүйелі түрде іздеуге де көмектеседі. Қауіпсіздікке арналған арнайы аудит спринтінде Copilot код базасын талдап, мен түзетуге тиіс алты мәселені тапты:
- Сигнализация деректерінде енгізуді тексерудің болмауы
- ICE кандидаттарын өңдеу кезінде жарысу жағдайларының туындау ықтималдығы
- Тиісті түрде тазаланбай қалған ескірген сессия деректері
- Тым рұқсатшіл Firestore қауіпсіздік ережелері
- Сертификатты бекіту мәселесінің ескерілмеуі
- TURN тіркелгі деректері ағынындағы қателерді өңдеудің жеткіліксіздігі
Алтауы да сол спринтте түзетілді. Copilot-тың күші осында: көп файлды оқу, үлгілерді салыстыру және мұқият тексеруім керек жерлерді белгілеу.
Итеративті спринттер: қолданба қалай дамыды
Timmy жылдам, бірақ шекарасы анық спринттер арқылы дамыды. Кейбір маңызды кезеңдер:
- v1.8: Жұптастыру жүйесін толық қайта жасау — Firebase арқылы ECDH P-256 қолданатын 4 таңбадан тұратын код бұрынғы кілтті тікелей пайдалану тәсілін алмастырды.
- v1.10: Қауіпсіздікті күшейту спринті — алты осалдықты аудиттеу және түзету циклі.
- v1.11: Барлық экрандардағы қараңғы режим, сондай-ақ дәл қазір оқып отырған басты бет пен блог.
- v1.12: Ата-ана экранын ауқымды жаңарту, түнгі көру режимі және камера кадрларын талдау арқылы қозғалысты анықтау.
Әр спринт бірдей негізгі үлгімен жүреді: мақсатты сипаттау, ұсыныстарды қарап шығу, автоматты тестілеу, содан кейін тестілеушілерге жіберу.
Құрылғылар арасындағы E2E тестілеу
Нәрестені бақылау қолданбасын бір ғана құрылғыда дұрыс тексеру мүмкін емес. Бір құрылғы бала жағында, екіншісі ата-ана жағында болуы керек. Алғашында жоба бір уақытта жұмыс істейтін екі Android эмуляторында тексерілді, ал қазір бұл үдеріс жергілікті iOS симуляторындағы және нақты құрылғылардағы тексерулермен толықтырылған. Автоматтандырылған Android тест скрипті әлі де мыналарды орындайды:
- Қолданбаны екі эмуляторға да орнатады
- Екі құрылғыда да жұптастыру қадамдарынан өтеді
- Дыбыс және бейне қосылымдарының орнатылғанын тексереді
- Сөйлесу үшін басу (push-to-talk), камераны басқару және басқа мүмкіндіктерді тексереді
Екі эмулятор да бір IP мекенжайын пайдаланатындықтан10.0.2.15, STUN арқылы тікелей тең дәрежелі қосылым орнату мүмкін емес. Әр тест іске қосылған сайын қосылым Cloudflare TURN ретрансляторы арқылы өтуі керек. Бұл қолайсыз болғанымен, пайдалы: ең күрделі қосылым жолы әр жолы тексеріледі.
Не үйрендім
ЖИ-мен жұптасып жұмыс істейтін бағдарламашының көмегімен толыққанды қолданба жасау маған бірнеше нәрсені үйретті:
- Архитектура бұрынғыдан да маңызды. Анық қағидалар мен жақсы құжатталған код базасы ЖИ-ге бірізді код ұсынуға көмектеседі. Екіұштылықтың салдары тез арада қымбатқа түседі.
- Тестілеу — міндетті. ЖИ жасаған код та адам жазған код сияқты мұқият тексерілуі керек. Автоматтандырылған E2E тесттері қолмен тексергенде оңай байқалмай қалатын мәселелерді тапты.
- Адам бақылауды өз қолында ұстайды. Әр архитектуралық шешімді, қауіпсіздікке қатысты әрбір ымыраны және өнімнің барлық шекарасын мен айқындаймын. ЖИ іске асыруды жылдамдатады, бірақ пайымды алмастырмайды.
- Жылдамдық сапаға мүмкіндік береді. Мүмкіндіктерді әзірлеу күндер емес, сағаттар алатындықтан, жетілдіруге және қателерді түзетуге көбірек мүмкіндік қалады. Жылдамдық өздігінен сапаға кепілдік бермейді.
Алдағы жоспар
Baby Monitor Timmy дами береді. iOS шығарылымы жақында шығады; одан кейін қосымша сенсор мүмкіндіктері енгізіліп, қауіпсіздікті ұдайы күшейту жұмыстары жалғасады. Жұмыс үдерісі өзгермейді: бағыт пен шекараларды мен белгілеймін, ал Copilot оларды жылдам іске асырып, тексеруге көмектеседі.
Қауіпсіздікке қатысты негізгі құрамдастар енді нақты белгіленген шекаралар аясында жалпыға ашық baby-monitor-timmy-core репозиторийінде орналасқан. Жұптастыру, сигнализация және backend интерфейстеріне қатысты архитектуралық шешімдер де сол жерде құжатталған.