Технический дизайн проекта "<название_проекта>"¶
<_Этот документ должен содержать подробное описание дизайна и конкретных решение проекта, созданного на основе SAD (Архитектуры Системы) данного проекта, своего рода подробная пояснительная записка. Цель документа - представить детальное описание разрабатываемого продукта. Этот документ будет в последствии использоваться командой поддержки для нахождения и исправления ошибок, для внесения изменений и дополнений к данному проекту, а также для передачи кода другим и/или новым членам команды разработчиков. Весь текст данного шаблона с применением курсива, заключённый в угловые скобки, должен быть либо заменён на конкретные сведения о проекте, либо удалён_.>
- Table of contents
- Технический дизайн проекта "<название_проекта>"
Введение¶
В этом разделе представлена общая информация о данном документе.
Цель написания данного документа¶
<Приведите здесь полное описание основных целей данной SDS спецификации. Можно пользоваться текстом, приведённым в самом начале шаблона, если это подходит для данного проекта.>
Описание разрабатываемого проекта¶
<Эта часть скорее всего будет такой же, как она расписана в SRS, если не требуется каких-то специфических пояснений. В этом случае достаточно вставить сюда ссылку на соответствующий раздел SRS.>
Архитектура системы¶
<В этой части содержится дизайн верхнего уровня, и в первой версии SDS ей должно быть уделено главное внимание. Здесь должно быть очень хорошо описана точная организация системы в соответствии с требованиями (SRS и SAD). Можно привести здесь ссылки на соответствующие разделы SRS и SAD.>
Декомпозиция системы¶
<В этой части должны быть описаны различные компоненты и подсистемы. За исходный документ опять же можно взять SAD и привести ссылки на его ссответствующие разделы.>
Структура и связи¶
<Полностью проясните связи и зависимости различных компонент системы, чтобы другой разработчик смог быстро сориентироваться, что он может попортить при внесении изменений в какую-либо из подсистем. Сюда можно вставить структурную диаграмму. Для более полного понимания добавьте текстовое описание.>
Пользовательский интерфейс¶
<В этой секции описываются главные принципы построения пользовательского интерфейса. Для построения конкретных примеров можно воспользоваться разделом«Классы пользователей» из SRS и/или SAD. Здесь не нужно касаться каких-либо технических деталей, зато можно вставить эскизы и какие-то текстовые сообщения. Другой разработчик должен просто составить себе картину, для каких категорий пользователей какие интерфейсы используются.>
Детальное описание компонент¶
<В этом разделе содержится детальное описание системы, на неё следует обратить особое внимание во второй версии документа. Здесь должны быть описаны главные основы реализации системы. Другой разработчик должен иметь возможность разобраться в исходном коде при помощи этого документа, не прибегая к помощи автора кода. Поэтому, пожалуйста, думайте о своих товарищах, которым придётся разбираться с вашим кодом при помощи этого вашего описания. Постарайтесь по возиожности максимально облегчить им жизнь.>
Описание компонентного шаблона¶
<Этот раздел не является частью дизайна. Это просто шаблон, по которому вы будете описывать компоненты в последующих. Каждая часть шаблона помечается меткой. Здесь, в этом разделе, нужно кратко описать назначение каждого из пунктов: другой разработчик должен понять, какая информация будет находиться под какой меткой. Например, он должен уяснить при описании компонента его функции и процессы будут описаны под меткой "*Функции*". Для облегчения понимания, используйте таблицу или маркированный список. Можно просто адаптировать предложенный ниже шаблон - выкинуть из него ненужные компоненты и добавить отсутствующие.>
Название¶
Уникальное имя компонента и его положение в системе.
Тип¶
Модуль, подпрограмма, файл данных, управляющая процедура, класс etc
Назначение¶
Функциональные требования и требования по производительности, включая также и порождённые требования, которые покрываются данной реализацией. Порождённые требования могут не указываться явно в SRS, но могут подразумеваться и будут описаны либо в приложениях SRS, либо /и в SAD.
Исходные файлы¶
Файл(ы), в котором(ых) находится реализация данного компонента.
Функции¶
Что делает компонент, какие процессы преобразования происходят, входные данные, используемые алгоритмы, возвращаемые значения, места хранения данных и какие данные меняются в процессе.
Структура¶
Внутренняя структура компонента, элементы, из которых компонент состоит, и функциональные требования, покрываемые каждой частью.
Зависимости¶
Влияние функциональной работы компонента и его производительности на другие компоненты. Как данный компонент может быть использован другими компонентами. Какие другие компонент использует данный компонент. Детали взаимодействия, такие как временные параметры, условия взаимодействия (например, порядок выполнения или разделение данных), а также порядок создания, копирования, использования, сохранения и уничтожения компонента.
Интерфейсы¶
Детальное описание всех внешних и внутренних интерфейсов, как механизмов обмена данными, включая сообщения, параметры, общие области данных etc. Все сообщения об ошибках и коды ошибок должны быть указаны. Все форматы окон, интерактивных сообщений и другие компоненты пользовательского интерфейса (изначально определённые в SRS и SAD) должны быть включены сюда.
Ресурсы¶
Полное описание необходимых для функционирования компонента внешних ресурсов (программных и аппаратных). В качестве примера можно рассматривать наличие соединения с Интернет, базы данных, память, требования к CPU (если есть), каналы ввода/вывода, принтеры, CD-рекордеры, библиотеки, системные сервисы etc.
Алгоритм работы¶
Полное описание функций, представленных в секции «Функции». Для описания алгоритма и логики можно использовать псевдокод, если это удобно.
Данные¶
Описание метода представления, начальных значений, использования, семантики и формата внутренних данных компонента.
Компонент A (или Класс, или Функция …)¶
<Подробно опишите разрабатываемый компонент, используя определённый выше шаблон шаблон. Если какая-то часть шаблона не применима для данного компонента, НЕ ВЫБРАСЫВАЙТЕ её, а просто пометьте её N/A (not applicable), потому что эта часть уже заявлена в шаблоне. Если есть какие-то компоненты, имеющие принципиально разную структуру, то лучше определить компонентный шаблон для каждого такого типа компонент.>
Название¶
<Впишите сюда название компонента, как он встречается в исходном коде. По возможности полностью укажите его положение в системе, например, класс в иерархии классов. Можно диграммку даже приложить.>
Тип¶
<…>
Назначение¶
<Опишите в этом разделе, для чего данный компонент предназначен. Приведите здесь номер(а) требования из SRS, которые ему соответствуют, или просто вставьте ссылку на соответствующий раздел SRS>
Исходные файлы¶
<Впишите сюда имена файлов, в которых находится объявления и реализация данного компонента. Если используется встроенная система версионного контроля, то лучше вставить ссылку на эти файлы.>
Функции¶
<При описании функциональности особое внимание обратите на места, которые наиболее трудны для понимания. Сэкономьте время своих товарищей, а также и своё, если вдруг через некоторое время придётся вспоминать, что написано в этом коде.>
Структура¶
<Так же, как и в функциях постарайтесь осветить все тёмные места.>
Зависимости¶
<Постарайтесь включить сюда наиболее полную информацию об использовании этого компонента. Если не знаете сами, поинтересуйтесь об этом у товарищей, которые пользуются вашим компонентом. В конце-концов, это может и вам помочь посмотреть на реализацию компонента с другой стороны.>
Интерфейсы¶
<Интерфейсы опишите, как можно более точно и подробно. Так как при использовании вашего компонента, именно здесь другие разработчики будут искать информацию о том, как с ним взаимодействовать.>
Ресурсы¶
<…>
Алгоритм работы¶
<Код сюда переписывать, конечно, не нужно, но желательно пояснить, как работают те или иные функции и/или методы.>
Данные¶
<Опять же, не стоит включать сюда описание, к примеру, всех переменных, которые используются данным компонентом, но желательно прояснить все узкие и тёмные места. Помните, что это пояснительная записка.>
Компонент …¶
<…>
Повторное использование и связи с другими продуктами¶
<Повторное использование может оказаться очень важной стратегией. В одних случаях могут быть использованы какие-то свободно распространяемые компоненты, в других случаях могут быть адаптированы какие-то уже существующие модули или классы. Поэтому укажите здесь, где этот компонент используется ещё, если знаете, и можно указать, для чего этот компонент можно использовать ещё, если есть какие-то предложения и/или соображения на этот счёт.>
Используемые подходы и решения¶
<Используйте этот раздел для описания проектных подходов и решений, если это может облегчить понимание метода проектирования. Здесь также можно описать хорошие идеи, которые не были реализованы, и причины, по которым это было сделано. Во-первых, не пропадёт ваш труд, который не был использован при реализации компонента, во-вторых, это может сэкономить вам время, если вдруг потребуется переделка компонента, в-третьих, это может сэкономить время ваших товарищей, которые столкнулись с подобной проблемой.>
Псевдокод компонентов¶
<Сюда при необходимости можно поместить псевдокод описанных выше компонентов, а в описании просто вставить ссылки на него. Если этот раздел не нужен, то просто его выкиньте.>
Приложение 1: Словарь терминов¶
<Сюда нужно включить список специфических терминов, акронимов и аббревиатур, ежели таковые используются в этом документе. Лучше в алфавитном порядке>