Легион
Легион

"И всё равно, посреди всей этой тьмы, я вижу людей, которые не ломаются, я вижу людей, которые не сдаются. Даже зная, что надежда утрачена. И понимают, что от утраты до обретения, на самом деле, всего один шаг…"

В одной из статей на хабре наткнулся на спор о необходимости документации в принципе (бум!).

"Там документацию будете переписывать по 10 раз в день и в конце забьёте на неё"

"Для вхождения в проект нужно читать не доку, а код. Изучать библиотеки и общаться с другими программистами. А документация это максимум для справки, а не погружения."

Дожили.. Так вот господа/товарищи Хабровчане, со всей ответственностью заявляю, что с этой темнотой в умах будем бороться! Документация нужна, должна быть, поддерживаться и сопровождаться. Дальнейшее обсуждение будет направлено на раскрытие темы организации эффективной работы с документацией. Сами подходы и методологии не претендуют на номинацию "серебряной пули" и с полной открытостью оставляют за читателями право предложить свои подходы или развитию предложенных.

Документация программного обеспечения (ПО) — это совокупность всех письменных материалов, которые сопровождают программное обеспечение в процессе его разработки, тестирования, эксплуатации и сопровождения. Документация включает в себя требования, технические спецификации, руководства пользователя, инструкции по установке и эксплуатации, а также другие документы, необходимые для понимания и работы с программным обеспечением.

Документация программного обеспечения включает информацию, созданную для поддержки процесса разработки и эксплуатации системы или программного обеспечения, включая описание функций, данных, архитектуры и требований к ПО.

Виды документации

Документация программного обеспечения включает в себя несколько ключевых видов, которые можно разделить на технические и нетехнические категории:

Техническая документация:

  1. Требования (Requirements Documentation):

    • Описание функциональных и нефункциональных требований к программному обеспечению. Включает в себя спецификации, бизнес-требования, пользовательские истории и другие артефакты, описывающие, что должно быть реализовано.

  2. Архитектурная документация (Architecture Documentation):

    • Описание общей структуры программного обеспечения, включая схемы архитектуры, дизайн систем, описания модулей и их взаимодействие.

  3. Дизайн-документация (Design Documentation):

    • Подробные описания внутреннего устройства и алгоритмов, используемых в программном обеспечении, включая диаграммы классов, ER-диаграммы, описания алгоритмов и другие технические чертежи.

  4. Кодовая документация (Code Documentation):

    • Комментарии внутри кода, авто-документация, и дополнительные файлы, которые объясняют, как работает код. Это включает в себя также руководства по стилю кодирования и описания API.

  5. Тестовая документация (Test Documentation):

    • Включает тестовые планы, тест-кейсы, отчеты о тестировании и автоматизированные тесты, которые обеспечивают проверку функциональности ПО.

  6. Руководства пользователя (User Documentation):

    • Инструкции и справочные материалы, предназначенные для конечных пользователей ПО, включая руководства по эксплуатации, справки, FAQs и обучающие материалы.

Нетехническая документация:

  1. Организационная документация (Organizational Documentation):

    • Описания организационных процессов, процедур и политик, таких как стандарты разработки, процессы управления проектами и процедуры контроля качества.

  2. Методологическая документация (Methodological Documentation):

    • Описание методологий разработки и подходов, применяемых в проекте, таких как Agile, Scrum, Kanban и другие. Включает в себя руководство по использованию этих методологий в рамках конкретной организации или проекта.

  3. Проектная документация (Project Documentation):

    • Включает в себя планы проектов, графики выполнения работ, отчеты о ходе выполнения и другие документы, относящиеся к управлению и контролю за проектом.

  4. Юридическая документация (Legal Documentation):

    • Лицензионные соглашения, соглашения об уровне обслуживания (SLA), договора и другие юридические документы, связанные с программным обеспечением и его использованием.

Эти виды документации помогают обеспечить полноту и точность информации на всех этапах жизненного цикла программного обеспечения, от его разработки до эксплуатации и поддержки.

Какой документация должна быть?

Документация программного обеспечения (ПО) должна соответствовать следующим основным критериям:

  1. Актуальность:

    • Документация должна быть обновлена в соответствии с последними изменениями в ПО. Это включает в себя обновление после каждой итерации разработки или изменения в коде.

  2. Точность:

    • Документация должна точно, на должном уровне абстракции, отражать функциональность, архитектуру, интерфейсы и требования к программному обеспечению. Любые описания должны соответствовать реальной реализации ПО.

  3. Понятность:

    • Информация должна быть представлена ясно и доступно для целевой аудитории. Это означает использование соответствующего уровня технических терминов и пояснений.

  4. Полнота:

    • Документация должна охватывать все аспекты программного обеспечения, включая функциональные требования, архитектурные решения, инструкции по установке и эксплуатации, а также возможные ошибки и способы их устранения.

  5. Доступность:

    • Документация должна быть легкодоступной для всех заинтересованных сторон, включая разработчиков, тестировщиков, пользователей и техническую поддержку. Это включает в себя удобство поиска и навигации по документам.

  6. Стандартизация:

    • Документация должна соответствовать установленным стандартам и нормам, например таким как ISO/IEC/IEEE 12207 или внутренним стандартам компании. Это обеспечивает единообразие и совместимость документов.

  7. Поддерживаемость:

    • Документация должна легко поддерживаться и обновляться в процессе жизненного цикла программного обеспечения. Структура и формат документации должны способствовать легкости внесения изменений.

Эти критерии помогают обеспечить, что документация будет полезной и эффективной на всех этапах жизненного цикла ПО, от разработки до поддержки и эксплуатации.

На этом разделе все те кто не понимал что такое документация и зачем она требуется надеюсь вопрос закрыли. Перейдем к вопросу "Кто ее поддерживает?".

Кто поддерживает документацию?

Самая простая и короткая формулировка ответа на этот вопросу будет: "Все"

Другая крайность приведет нас к штату специальных должностей, таких как, Системный аналитик, Бизнес аналитик, Технический писатель, Compliance специалист, CTO/CIO и другие. Но, это не означает необходимость спешно идти открывать новые позиции в отделе кадров, конечно. Все эти специальные позиции могут быть распределены в виде ролей по штатному расписанию, при наличии достаточной компетенции и ресурса у этих людей. В конечном счете, решение за руководителем и в качестве компетенций у сотрудников, на которых возложена эта задача.

Теперь, когда мы разобрались, кто отвечает за документацию, рассмотрим, как организовать этот процесс эффективно.

Рекомендации по эффективной работе с документацией

Организация эффективной работы с документацией является ключевым аспектом успешного управления проектами и жизненным циклом ПО. Эффективное управление документацией способствует улучшению коммуникации внутри команды, повышению качества продуктов, а также снижению рисков, связанных с ошибками и недопониманием. Вот несколько принципов и рекомендаций для организации работы с документацией, каждый из которых эксперт по работе с документацией может раскрыть, как минимум, до отдельной статьи:

1. Централизованное хранение и управление документами

Рекомендуется использовать централизованное хранилище для всей документации, чтобы обеспечить легкий доступ и удобство использования. Это может быть система управления документацией (DMS), репозиторий на основе облачных технологий (например, Confluence, SharePoint) или специализированные инструменты для управления проектной документацией.

Преимущества: Все участники команды имеют доступ к актуальной информации, что снижает риск использования устаревших данных и улучшает координацию работы.

2. Версионность и контроль изменений

Используйте инструменты для отслеживания версий документов (например, Git, системы контроля версий для документации), что позволяет сохранять историю изменений и быстро возвращаться к предыдущим версиям при необходимости.

Преимущества: Обеспечение прозрачности изменений и возможность отслеживать эволюцию документации. Это особенно важно для технической документации, которая может часто изменяться по мере разработки ПО.

3. Стандартизация и шаблоны

Внедрите стандарты и шаблоны для всех видов документации (например, требования, тест-кейсы, отчеты о прогрессе). Это помогает поддерживать единообразие, облегчает восприятие и снижает вероятность ошибок.

Преимущества: Упрощение создания новой документации и обеспечение соответствия всем документам внутри проекта установленным стандартам.

4. Регулярное обновление и актуализация

Обеспечьте регулярное обновление документации, особенно в случае изменений в проекте или продукте. Это может быть частью спринтов в Agile, когда после каждой итерации документация пересматривается и обновляется.

Преимущества: Снижение риска использования устаревшей информации, поддержание актуальности данных для всех участников проекта.

5. Доступность и понятность документации

Постарайтесь сделать документацию понятной и доступной для всех участников команды, вне зависимости от их уровня технической подготовки. Это включает в себя использование простого языка, визуальных материалов (схем, диаграмм) и разделение документации по уровням сложности.

Преимущества: Улучшение коммуникации и понимания между разными участниками команды, снижение риска ошибок из-за неправильного понимания документации.

6. Обратная связь и корректировка

Включите процесс сбора обратной связи от пользователей документации. Это может быть частью ретроспектив в Agile или регулярных встреч команды, где обсуждается, что работает хорошо, а что требует улучшений.

Преимущества: Постоянное улучшение качества документации и её соответствие реальным потребностям пользователей.

7. Обучение и поддержка

Организуйте обучение для команды по эффективному использованию и созданию документации. Это может включать воркшопы, семинары или внутренние курсы по использованию стандартов и инструментов документации.

Преимущества: Повышение квалификации команды, снижение времени на создание и использование документации, улучшение качества конечных документов.

8. Автоматизация работы с документацией

Используйте инструменты для автоматической генерации документации из кода или для интеграции документации с процессами CI/CD.

Преимущества: Снижение ручного труда, повышение точности и актуальности технической документации.

Эти принципы помогают организовать процесс работы с документацией таким образом, чтобы она не становилась бременем для команды, а наоборот, служила мощным инструментом для улучшения коммуникации, качества и скорости разработки программного обеспечения.

Заключение

Документация в ИТ - это не просто обязательная формальность, а важный инструмент, который помогает команде сохранять фокус, качество и скорость разработки. Она служит связующим звеном между всеми участниками процесса, обеспечивая понимание и согласованность на всех этапах проекта. Успешная работа с документацией требует не только создания, но и постоянного поддержания её актуальности и доступности. Организация эффективной работы с документацией — это не разовая задача, а непрерывный процесс, требующий внимания и дисциплины.

Поддержание документации на высоком уровне — залог успешного управления проектом и обеспечения его качественного выполнения. Пусть документация станет вашим надежным помощником, а не обузой. Применяя приведенные принципы и подходы, вы сможете наладить работу с документацией так, чтобы она приносила реальную пользу всей команде и проекту в целом.

Комментарии (23)


  1. SuperKozel
    30.08.2024 19:27
    +3

    Я сталкивался с таким заблуждение на уровне техлида, что код должен быть самодокументируемым) каким-то волшебным образом человек должен понимать бизнес логику через её отражение в коде. Я стараюсь оставлять пару строчек на неочевидных моментах или оставлять @see-ссылку на таску. Вопрос-а существует хороший фреймворк для связи кода и документации? Типа оставляешь в код ссылку-атрибут на якорь в доке .md и можешь прыгать туда-обратно?


    1. tentakle
      30.08.2024 19:27

      Если ваш код сложно читать без документации, наверное, это плохой код. Где здесь противоречие? "Документируют" в таком случае костыли, которые без стакана не разберешь, но это не значит, что теперь-то все хорошо, это значит, что в вашем коде костыли, которые без стакана не разберешь.


  1. QualityLab
    30.08.2024 19:27
    +7

    Документация нужна, должна быть, поддерживаться и сопровождаться.

    В идеале -- да. И к нему нужно стремиться. Мы так и делаем.

    Но почему-то все равно хочется сказать "но")))


    1. discoverer-official Автор
      30.08.2024 19:27

      Да, я вас прекрасно понимаю. Все дело в золоте стоимости содержания. Если на текущих специалистов раскидать роли по обслуживанию документации, то скорее всего у них будет недостаточно опыта (научатся, но не сейчас) и времени, если нанять (качество найма тоже влияет) специализированный штат, то это дорого - должно быть обоснование таких затрат (эффект выгоды на полезность). Даже в идеальном штате, все может рассыпаться из-за неумелового руководителя..

      Поэтому и есть этот внутренний "но"..

      Но (каламбур), как и во многих других сферах бытия, мы должны двигаться к цели даже если никогда её не достигнем. Сравнивать опыт друг друга с точки зрения близости достижения этой цели..


      1. QualityLab
        30.08.2024 19:27
        +1

        мы должны двигаться к цели

        Или хотя бы лежать в ее направлении))))

        Согласна.


  1. ganqqwerty
    30.08.2024 19:27

    Какие хорошие механизмы есть для того, чтобы не полагаться на совестливость и отличную память людей в вопросах поддержания актуальности документации? Definition of Done и скрам-мастер с дрыном? Или что-то более технологичное существует?


    1. discoverer-official Автор
      30.08.2024 19:27

      Версионирование, как одна из хороших практик.

      Есть слои версий: версия продукта (пакета), релиза, компонента, сервиса, апи, документа.

      Если построенны процессы, то на этапе планирования готовится ~60% всего, а волна апдейтов версий завершает в конце задуманное.

      Ретроспективы и ревью/демо как контрольная точка с чек листом.


    1. Aceki
      30.08.2024 19:27

      Если составлять документацию до написания кода, то она всегда будет актуальной.


  1. Busla
    30.08.2024 19:27

    Примечательно, что с точки зрения автора Ops не существует, только Dev и заказчики/пользователи.


  1. Elpi
    30.08.2024 19:27
    +1

    "Несовершенство закона российского умаляется их повсеместным неисполнением»

    *

    Вы с какой целью запугиваете народ такими канцелярскими текстами? Вся нормативка уже давно существует. Игнорируют ее.

    *

    Причины тоже известны: а) большая загрузка; б) сознательное поддержание беспорядка и неполноты с целью повысить собственную стоимость в глазах начальников.

    *

    Методы борьбы (или просто нормальной работы) - ставьте задачи в трекер с признаком "требует документирования". И требуйте исполнения.

    *

    Вы не сказали о самом, нмв, главном. Документирование - это сохранение и накопление знания.


  1. sergebn
    30.08.2024 19:27

    Автор, расставте п этой статье ссылки на ГОСТы. Воможно вы увидете ещё одну проблему. А так тема ещё та...