Раздел 13 — Техническое задание

Как договориться о программе до того, как написана первая строка кода

Прогресс курса Раздел 13 из 20

Что вы освоите в этом разделе

3 академических часа теории и 1 час практики: практическая работа №15 «Составление технического задания» — на портале. Вы напишете ТЗ на системную утилиту — такую, какие будете программировать в разделах 14–19. С этого раздела начинается блок В — Windows API.
01

Жизненный цикл программы

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

ЭтапВопросРезультат
Анализ и постановка задачичто нужно заказчику?техническое задание
Проектированиекак это устроить?модель, алгоритмы, структура программы (раздел 1)
Кодированиекак написать?исходный текст
Тестированиеделает ли программа то, что требовалось?протокол проверок
Внедрение и сопровождениеработает ли у пользователей, что исправить?новые версии

В российских стандартах (Единая система программной документации, ГОСТ 19.102-77) стадии называются иначе — техническое задание, эскизный проект, технический проект, рабочий проект, внедрение, — но порядок тот же, и первая стадия — ТЗ. Ошибка, найденная в ТЗ, стоит исправления абзаца текста. Та же ошибка, найденная после сдачи программы, стоит переделки кода, повторного тестирования и спора о том, кто виноват.

02

Зачем ТЗ: «что», а не «как»

Техническое задание — документ, в котором заказчик и исполнитель письменно договорились, что программа должна делать и как проверить, что она это делает. Оно нужно всем:

Главное правило: ТЗ описывает, что делает программа, а не как она устроена. «Программа выводит список запущенных процессов с идентификатором и именем» — требование. «Программа вызывает CreateToolhelp32Snapshot и обходит список в цикле while» — решение исполнителя, ему место в проекте, а не в ТЗ. Если в ТЗ написано «как», исполнителю связывают руки, а заказчик берёт на себя ответственность за выбор, в котором не разбирается.

Исключение — ограничения, которые действительно нужны заказчику: «программа работает в Windows 10 без установки дополнительных библиотек», «исходный текст — на C++17». Они тоже про «что»: про условия, в которых программа должна работать, а не про её внутреннее устройство.
03

Разделы ТЗ по ГОСТ 19.201-78

ГОСТ 19.201-78 «Техническое задание. Требования к содержанию и оформлению» — часть ЕСПД. Он задаёт состав разделов; раздел, которому нечего сказать, всё равно пишут со словами «требования не предъявляются» — так видно, что о нём подумали, а не забыли.

РазделЧто в нёмДля учебной утилиты
1. Введениенаименование программы, краткая характеристика области применения2–3 предложения
2. Основания для разработкидокумент, на основании которого ведётся разработка; кто утвердил; наименование темы«учебный план МДК 01.04, практическая работа №15»
3. Назначение разработкифункциональное (что делает) и эксплуатационное (кто, где и зачем использует)абзац
4. Требования к программе4.1 функциональные характеристики; 4.2 надёжность; 4.3 условия эксплуатации; 4.4 состав и параметры технических средств; 4.5 информационная и программная совместимость; 4.6 маркировка и упаковка; 4.7 транспортирование и хранение; 4.8 специальные требованияглавный раздел: 4.1 — подробно, 4.2 и 4.5 — по делу, 4.6–4.7 — «не предъявляются»
5. Требования к программной документациикакие документы сдаются вместе с программойисходный текст с комментариями, руководство пользователя (справка по запуску)
6. Технико-экономические показателиожидаемая польза, сравнение с аналогамикратко или «не предъявляются»
7. Стадии и этапы разработкичто, в каком порядке и к какому сроку делаетсяТЗ → код → тестирование → сдача, с датами
8. Порядок контроля и приёмкикак проверяется, что требования выполненысписок проверок: ввод, ожидаемый результат (пункт 07)
Приложенияформаты файлов, примеры, макеты экрановпример входного файла и вывода
04

Функциональные требования

Раздел 4.1 отвечает на вопрос «что программа делает» так, чтобы по нему можно было написать и программу, и тесты. Удобно идти по той же схеме, что и в модели задачи из раздела 1:

Что описатьВопросыПример
Запуск и входные данныекак запускается, что получает: аргументы командной строки, ввод, файлы«Программа запускается командой wcount <файл>»
Обработкачто вычисляет — результат, а не алгоритм«подсчитывает число строк, слов и символов файла»
Выходные данныечто, куда и в каком виде выводит«выводит в консоль три числа в одной строке через пробел»
Ошибкичто происходит при неверном запуске, отсутствии файла, неверных данных«если файл не открывается — сообщение с именем файла, код завершения 2»
Граничные случаипустой вход, максимальный размер, особые значения«пустой файл — 0 0 0»

Каждое требование — отдельный пронумерованный пункт с глаголом «должна»: «4.1.3. Программа должна…». Номер нужен, чтобы на пункт можно было сослаться в проверке и в споре. Одно требование — одно проверяемое свойство: пункт «программа должна считать строки и слова и работать быстро» проверить целиком нельзя.

Коды завершения для системной утилиты — тоже требование: по ним другая программа (или скрипт) узнаёт, как всё прошло. Принято: 0 — успех, 1 — неверный запуск (нет аргументов), 2 и дальше — ошибки выполнения. В разделе 14 ваша программа будет получать код завершения дочернего процесса — именно этот.

05

Требования к данным

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

СвойствоЧто указатьПример
форматтекст или двоичный; как устроена запись«текстовый файл, одна запись в строке: фамилия, группа, балл через пробел»
допустимые значениятипы, диапазоны, обязательность«группа — целое 1…99; балл — число 2.00…5.00 с двумя знаками»
размерынаибольшая длина строки, число записей, размер файла«фамилия — до 31 символа; до 100 записей»
кодировка и концы строкв каком виде хранится текст«латиница, ASCII; конец строки — CR LF или LF»
неверные данныечто делать с записью, которая не подходит«строка с ошибкой пропускается, её номер выводится в сообщении»

Ограничения по размерам — не прихоть: из них исполнитель выберет вместимость массивов (разделы 8 и 10), а тестировщик — граничные тесты. «До 100 записей» проверяется файлами из 100 и 101 записи.

06

Проверяемые формулировки

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

НепроверяемоПроверяемо
программа должна работать быстрообработка файла размером 10 МБ занимает не более 2 секунд на компьютере из п. 4.4
удобный интерфейсвсе команды меню выбираются одной клавишей; текущий пункт выделен цветом
программа должна обрабатывать ошибкипри отсутствии файла выводится «Cannot open <имя>», код завершения 2
надёжная работапри любом содержимом входного файла программа не завершается аварийно
поддержка больших файловфайлы до 2 ГБ; строки длиной до 1000 символов
и другие функции по необходимости— (такое требование удаляют: его нельзя ни выполнить, ни проверить)

Слова-сигналы непроверяемости: «быстро», «удобно», «надёжно», «современный», «и т. д.», «по возможности», «при необходимости», «достаточный», «оптимальный». Встретили такое слово в своём ТЗ — замените числом, условием или перечнем.

07

Порядок контроля и приёмки

Раздел 8 ТЗ — это та таблица тестов, которую вы составляли в каждой практической работе, только написанная до программы. Для каждого функционального требования — хотя бы одна проверка; для требования об ошибке — проверка, которая эту ошибку вызывает:

№ТребованиеДействиеОжидаемый результат
14.1.2wcount text.txt, в файле 3 строки, 7 слов, 40 символов3 7 40, код 0
24.1.4wcount без аргументовподсказка по запуску, код 1
34.1.5wcount nofile.txt — файла нетCannot open nofile.txt, код 2
44.1.6пустой файл0 0 0, код 0

Если для требования не получается придумать проверку — значит, требование сформулировано плохо (пункт 06). Этот раздел полезно писать одновременно с разделом 4.1: он сразу показывает непроверяемые пункты. Работа принимается, когда все проверки раздела 8 пройдены — ни больше, ни меньше.

08

Пример: ТЗ на утилиту wcount

Сокращённое ТЗ на утилиту подсчёта строк, слов и символов — в объёме, который ожидается в практической работе №15. Разделы 4.6–4.7 и 6 — «не предъявляются».

1. Введение

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

2. Основания для разработки

Учебный план МДК 01.04 «Системное программирование», практическая работа №15. Тема разработки — «Утилита подсчёта строк, слов и символов».

3. Назначение разработки

Функциональное: подсчёт числа строк, слов и символов в текстовом файле. Эксплуатационное: используется пользователями Windows в консоли и в командных файлах; результат и код завершения должны быть пригодны для обработки другими программами.

4. Требования к программе

4.1. Функциональные характеристики.

  • 4.1.1. Программа должна запускаться командой wcount <имя_файла>; имя файла может содержать путь и пробелы (в кавычках).
  • 4.1.2. Программа должна выводить в консоль одну строку: число строк, число слов и число символов файла через пробел, и завершаться с кодом 0.
  • 4.1.3. Строка — последовательность символов, завершённая переводом строки, или последняя непустая последовательность без него. Слово — непрерывная последовательность символов, отличных от пробела, табуляции и перевода строки. Символы — все байты файла, кроме символов конца строки (CR и LF).
  • 4.1.4. При запуске без аргументов или с двумя и более аргументами программа должна выводить строку Usage: wcount <file> и завершаться с кодом 1.
  • 4.1.5. Если файл не удаётся открыть, программа должна выводить Cannot open <имя_файла> и завершаться с кодом 2.
  • 4.1.6. Для пустого файла программа должна выводить 0 0 0.

4.2. Надёжность. При любом содержимом файла (в том числе двоичном) программа не должна завершаться аварийно. Файл не должен изменяться.

4.3. Условия эксплуатации. Запуск пользователем без прав администратора; специальной подготовки пользователя не требуется.

4.4. Технические средства. Компьютер с Windows 10 или 11 (x64), 4 ГБ оперативной памяти.

4.5. Совместимость. Исполняемый файл запускается без установки дополнительных библиотек. Входной файл — текст в любой однобайтовой кодировке, концы строк CR LF или LF; размер — до 2 ГБ.

4.6–4.8. Требования не предъявляются.

5. Требования к программной документации

Исходный текст на C++17 с комментариями; руководство пользователя — одна страница: запуск, вывод, коды завершения.

7. Стадии и этапы разработки

ТЗ — неделя 1; программа и тесты — неделя 2; приёмка — неделя 3.

8. Порядок контроля и приёмки

По таблице проверок пункта 07 этой страницы, дополненной проверками для 4.1.3 (файл без перевода строки в конце; строка из одних пробелов) и 4.2 (двоичный файл, файл 2 ГБ).

Заметьте, чего в этом ТЗ нет: ни слова о ifstream, getline, массивах и функциях. Как считать — решит исполнитель. Зато есть определения «строки» и «слова»: без них две честные программы дадут разные числа на файле без перевода строки в конце — и обе будут правы.

09

Типичные ошибки ТЗ

ОшибкаПримерЧем опаснаКак исправить
описано «как», а не «что»«использовать функцию CreateProcess и массив из 100 элементов»исполнитель не может выбрать лучшее решение; ограничение без причиныописать результат; ограничение — только если оно нужно заказчику
непроверяемые слова«быстро», «удобно», «надёжно»приёмка превращается в спорчисло, условие, перечень (пункт 06)
нет ошибочных ситуацийописан только «хороший» запускпрограмма молча падает на первом же неверном вводедля каждого входа — что будет при его отсутствии и неверном значении
нет граничных случаевничего о пустом файле, максимальном размеревыход за границы массива (раздел 8)пустой вход, максимум, максимум + 1
термины без определений«слово», «строка», «активный процесс»разные программы дают разные ответыопределить в 4.1 или в приложении
противоречия4.1.2 — «выводит в файл», 8 — «проверить вывод на экране»выполнить оба требования нельзяперечитать ТЗ целиком после написания
несколько требований в одном пункте«считает строки, выводит в файл и работает быстро»невозможно сказать, выполнен ли пунктодин пункт — одно свойство
раздел 8 пуст или «проверить работу»«приёмка — по результатам тестирования»нет критерия «готово»таблица проверок со ссылками на пункты 4.1
разделы пропущенынет 4.2–4.5не видно, подумали о них или забыли«требования не предъявляются»

Ключевые выводы раздела

Запомните главное

  • ТЗ — первая стадия жизненного цикла: договор о том, что делает программа и как это проверить
  • ТЗ описывает «что», а не «как»; ограничения — только нужные заказчику
  • Разделы по ГОСТ 19.201-78: введение, основания, назначение, требования к программе (4.1–4.8), документация, показатели, стадии, приёмка
  • Функциональное требование: запуск и вход, результат, вывод, ошибки, граничные случаи; коды завершения
  • Требования к данным: формат, диапазоны, размеры, кодировка, реакция на неверные данные
  • Каждое требование — отдельный пункт, проверяемый наблюдаемым результатом
  • Раздел приёмки — таблица проверок со ссылками на пункты требований
Связи раздела. Опирается на раздел 1 — модель задачи: входные и выходные данные, ограничения; на таблицы тестов из практических работ №3–14; на раздел 10 — аргументы командной строки и коды завершения; раздел 11 — форматы файлов. Нужен для: разделов 14–19 — каждая практическая работа блока В начинается с уточнения требований к утилите; итогового проекта — ТЗ на проект пишется по этому разделу.
Практическая работа №15 — на учебном портале. Задания по вариантам, критерии оценивания и сдача — в курсе на portal.nevabit.ru. Учётную запись выдаёт преподаватель.
Раздел 12: Классы Практика на портале