Что программируют программисты?

На самом деле этот вопрос будет скорее интересен системным аналитикам, чем программистам.

Речь пойдет не о программировании, а о том, как делать постановки (технические задания) для программистов.

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

Итак, представьте, что Вам нужно написать техническое задание на программное обеспечение.

Как бы Вы это сделали? Наверняка начали бы описывать внутреннее устройство и функции системы, верно?

Да, в целом так. Но дьявол, как известно, скрывается в деталях…

Обычно ТЗ — это перечисление функций: система должна выполнять то…, система должна делать это…, должны быть обеспечены такие-то и такие-то характеристики…

Однако, давайте разберемся в сути. Что же такое Техническое задание на самом деле?..

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

image


Давайте зададимся вопросом: что именно здесь программирует программист?

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

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

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

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

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

Как-то так.

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

Метод составления ТЗ на основе описания интерфейсов является основной сценариев использования (use cases), речь о которых обязательно пойдёт в других статьях.

Такой подход предложили в своё время классики теории Use Cases — Крэг Ларман и Алистер Коберн, труды которых стоят того, чтобы с ними ознакомиться.

Описывайте интерфейсы в своих ТЗ и делайте такие документы, за которые программисты будут Вам благодарны!

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Вы пишете ТЗ с помощью Use Cases (сценариев использования)?
Поделиться публикацией
Ой, у вас баннер убежал!

Ну. И что?
Реклама
Комментарии 20
    +1
    Набор UseCase это несомненно важная часть тз, но далеко не единственная. Не менее важной частью (как минимум) является E-R диаграмма (диаграмма сущности-связи).А кроме того, в тз должны быть нефункциональные требования (например требования на отзывчивость системы), скетчи интерфейса, и т.п.
      +2
      Получается, что на самом деле программисты программируют интерфейс системы. И техническое задание по сути должно представлять из себя в первую очередь описание интерфейса.

      Вы взяли какой-то узкий класс программистов. Есть ещё много тех, которые программируют участки, которые никак не связаны с интерфейсом системы или связаны весьма опосредовано. Это системные функции, библиотеки, драйвера и множество другого.
        +1
        И библиотеки и драйверы тоже прекрасно вписываются в схему «все возможные действия пользователя с создаваемым интерфейсом и
        реакция системы на действия пользователя.» Только в роли пользователя там выступают другие части программы или даже железа. Но в целом — то же самое: запрос — ответ/реакция/встречный запрос.
          0
          Совершенно верно!
          0
          Интерфейсы бывают не только пользовательскими (*UI), но и программными (API).
            0
            И какой, по-вашему, API у задачи, которая на верхнем уровне (а это именно то, что пишется в ТЗ) звучит как «каждый час должны экспортироваться данные туда-то»?
              0
              Это точно мне вопрос? Потому что я не понял, что в моем комментарии имеет отношение к тому, что вы спрашиваете.
                +1
                Да, вам. Из вашей фразы, что интерфейсы бывают не только пользовательскими, но и программными, я сделал вывод, что вы считаете, что программист всегда программирует интерфейс системы. Вот я и поинтересовался, какой интерфейс у описанной мной системы.

                Если я вас неправильно понял, то извините.

                  0
                  Это вопрос мне, наверное.

                  Действующее лицо: робот
                  Событие: срабатывание раз в час

                  Основной сценарий:
                  1.Робот запускает процедуру экспорта данных
                  2.Система производит экспорт.

                  Всё.

                  Далее в разделе «Алгоритмы» можно уже более подробно описать алгоритм экспорта
                    +2
                    Наглядная демонстрация того, что это требование вырождено, в нем нет смысла. Намного проще написать функциональное требование «экспорт должен проводиться раз в час».
                      0
                      никакой вырожденности нет. всё по правилам

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

                      ТЗ, в принципе, и пишутся для того, чтобы перечислить все операции, которые программистам нужно сделать, верно?
                        +2
                        И смысл есть, т.к. такая форма представления чётко указывает на операцию, которую программист должен запрограммировать, а именно — экспорт.

                        А кто будет программировать «робота», который запускает этот экспорт раз в час?

                        ТЗ, в принципе, и пишутся для того, чтобы перечислить все операции, которые программистам нужно сделать, верно?

                        Нет. ТЗ пишется для того, чтобы описать желаемую функциональность (и нефукциональные характеристики) системы.
          +4
          Что бы ни программировал программист, все его задачи можно свести к программированию реакции системы на действия пользователя.

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

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

            Все руководства по разработке usecase рекомендуют избегать каких-либо предположений о реализации пользовательского интерфейса при описании сценариев. Хорошо написанный usecase может быть без реализован при выборе любого UI — например, и оконного, и консольного.
              0
              Собственно Коберн пишет об этом совершенно недвусмысленно:

              <<Памятка 7. Не допускайте деталей графического интерфейса пользователя в варианте использования.

              Описывать движения пользователя при манипулировании интерфейсом в документе о требованиях не следует, так как:
              — Документ становится излишне длинным
              — Требования становятся неустойчивыми в том смысле, что небольшие изменения в проекте интерфейса вызывают изменения в «требованиях» (которые не были в чистом виде требованиями)
              — Это задача разработчика интерфейса пользователя, которому вы должны доверять как специалисту.>>
                0
                ну ок, давайте по-другому

                Что для вас является описанием интерфейса, а что нет?

                Это описание интерфейса?

                1.Система выводит список документов, каждый из которых представлен своим названием, номером, примечанием и датой регистрации.
                2.Пользователь ввод поисковую фразу
                3.Система отбирает подходящие документы и обновляет список
                4.Пользователь выбирает нужный документ
                  0
                  Нет, это нормальный сценарий. Но пример в статье приведен совершенно противоположный (с кнопкой и окном).
                    –2
                    Согласен, но суть-то в том, что как его не описывай, всё равно описывается действия пользователя с интерфейсом системы.
                    Да, может уровнем чуток по-выше, без привязки к конкретным элементам экрана, но всё равно это интерфейс.
              0
              Это основной принцип. Что бы ни программировал программист, все его задачи можно свести к программированию реакции системы на действия пользователя.

              Согласен. Но стоит заменить «пользователя» на внешнюю систему. И получится, что создается система, реагирующая на внешние события.
              А на её события тоже кто-то реагирует… Хм, программа не одинока в этом мрачном мире!
                0
                А если программирует демосцену?

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                Самое читаемое