Як організувати проєкт?

Під час роботи над програмним проєктом команди потребують ряд стандартних інструментів які допомагають:

Багато з цих інструментів стали розповсюдженим стандартом, їх знання допомагає швидко стати ефективним у новій команді, а використання - підвищує вірогідність того, що новий працівник матиме менше проблем під час старту.

Деякі з цих інструментів не залежать від виду проєкту, або використаних технологій, інші - класифікуються за їхньою функцією та досупні залежно від мови програмування, використаних технологій та типу проєкту.

Якщо ви починаєте новий проєкт, або хочете підвищити ефективність та прозорість вже існуючого - перегляньте цей список, та оцініть що може допомогти вашій команді.

Горизонтальні інструменти

Це інструменти які не залежать від використаних мов програмування, технологій, чи виду проєкту який ви будете розробляти.

Система контроля версій

Найпопулярнішим варіантом є Git. Його розгорнути на сервері та використовувати "в чистому вигляді", але зазвичай також потрібен веб інтерфейс який дозволяє проглядати збережений код без його завантаження, зручно проглядати зміни до коду та керувати доступом до репозиторіїв.

Ви можете використовувати Github, якщо ви не хочете витрачати час на встановлення, налаштування та підтримку власного сервера, та якщо вимоги безпеки дозволяють вам використовувати сторонні сервери для зберігання вашого коду. Також Github - найкращий вибір для opensource продуктів. Він допомагає простіше відгалуджувати свою версію продукту, та зробити її доступною іншим людям - розповсюджену вимогу до змін opensource продуктів. З іншого боку для продуктів з закритим кодом можливість склонувати репозиторій будьякому співробітнику часто викликає обґрунтований страх, і не має змісту.

Для персонального ж використання, і для того щоб можна було простіше показувати друзям свої домашні доробки можна використати GitWeb.

Найкращим варіантом для закритого проєкту є Gerrit. Він зберігає інструменти та гнучкість яку пропнує Git, але серверна версія репозиторія стає центральною. Також Gerrit пропонує зручний інтерфейс для ревью кода. Після кожного раунду коментарів, можна переглянути чергові зміни до пул ріквеста, та не витрачати зайвого часу для перевірки вже проглянутих змін. Gerrit використовують для проєктів Qt та Android.

Якщо ви розробляєте компьютерну гру, то скоріше за все вам треба зберігати в репозиторії окрім кода також великі бібліотеки та графічні чи звукові файли. Нажаль Git для таких проєктів не пристосований, і доводиться використовувати або SVN, або Perforce. UnrealEngine до прикладу має підтримку цих двох сервісів. Підтримка Git там поверхнева і реалізована скоріше через його популярність, ніж через його пристосованість до такого роду проєктів. Також дуже великі проєкти, або проєкти з монорепозиторієм зазвичай схиляються до Perforce.

Зберігання та обмін файлами

Google Drive, NextCloud.

Планування задач

Trello, Jira, RedMine

Документи

Кожній розробці чи проєкту має передувати дослідження. Над ним краще працювати так, щоб будьякий момент можна було показати поточний доробок колегам чи замовникам та отримати їх коментарі. Також там має бути зручно писати та структурувати текст, додавати світлини та графіки.

Google Docs, Wiki

Система автоматизації.

Оперції з кодом та продакшен серверами мають бути стандартизовані та автоматизовані. Це дозволяє спростити стандартні операції, та надійно делегувати їх виконання колегам з нижчим рівнем доступу. Це також дозволяє прозоро керувати серверами - всім відомо що і як виконується.

Jenkins

Моніторинг

netflix: servo, vector

Система збірки проєктів

Blaze

Навігація по коду

Kythe, OpenGrok.

Технологічно залежні інструменти

Багато процесів застосовні до коду та його зміни, але вони мають бути спеціально підлаштовані під технології чи мови.

Автоматична збірка

Ant, Maven, Gradle.

Grunt, npm.

Make, autotools, cmake..

Тестування

Інструменти для тестування коду зазвичай діляться на декілька груп:

Також самі тести діляться на декілька груп, в залежності від того, який об'єм підсистеми вони тестують. Найпростіші тести - юніт тести - перевіряють роботу найменших частин системи, часто в ізоляції від інших частин. Найскладніші - end-to-end тести, перевіряють функціональнальність всієї системи та взаємодії всих її частин.

JUnit, TestNg; Mockito; JaCoCo, Cobertura

spec; jasmine

googletest

Статичний аналіз

jslint, tslint

PMD