gifts2017

Методика постановки задачи

Опубликовал Пишу код как картины (yurii_host) в раздел Программирование - Практика программирования

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

Очень часто бывает, что тебе присылают ТЗ на многих страницах. Слов написано много, но важные детали, необходимые для реализации, пропущены. Или другая ситуация: общаешься с заказчиком и пытаешься записать его слова, а потом сам не понимаешь, что написал. Или еще вот: делал задачу два месяца назад, но все детали уже выветрились из головы, и нужно лезть в код, чтобы освежить в памяти детали. Еще периодически требуется объяснить другому программисту, что от него требуется, и хочется быть уверенным, что он тебя правильно понял.

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


Метод состоит из двух этапов:

1. Описание ожидаемого результата в виде таблицы. При этом нужно нарисовать таблицу с заголовками полей.

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

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

 

Продемонстрирую суть методики на примере.

 

Пример. Задача расчета себестоимости.

Пусть нам нужно описать алгоритм списания по ФИФО при реализации товара.

Шаг 1: в качестве ожидаемого результата хотим получить движения в регистре Остатки после проведения документа Расходная накладная. Рисуем заголовки полей регистра:

Регистр Остатки

  Регистратор     Период     Склад     Товар     Количество  
         

 

Нарисуем одну строку под шапкой, но не заполняем ее

 

Шаг 2.1: Заполняем поля в ожидаемом результате и параллельно рисуем источники данных.

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

Регистр Остатки (ожидаемый результат)

  Регистратор     Период     Склад     Товар     Количество  
 РН1  Д10  С1    


Документ Расходная накладная

  Ссылка     Дата     Склад  
 РН1  Д10  С1


Шаг 2.2: Связь с первым источником данных описали, переходим к следующим полям.

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

Регистр Остатки (ожидаемый результат)

  Регистратор     Период     Склад     Товар     Количество  
 РН1  Д10   С1   Т1   


Документ Расходная накладная

  Ссылка     Дата     Склад  
 РН1  Д10   С1 


Документ Расходная накладная (табличная часть)

  Ссылка     Товар     Количество  
 РН1  Т1   20


Шаг 2.3: Описываем заполнение последнего поля.

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

Регистр Остатки (ожидаемый результат)

  Регистратор     Период     Склад     Товар     Количество  
 РН1  Д10   С1   Т1   - 3 
 РН1  Д10  С1  Т1  - 17


Документ Расходная накладная

  Ссылка     Дата     Склад  
 РН1  Д10   С1 


Документ Расходная накладная (табличная часть)

  Ссылка     Товар     Количество  
 РН1  Т1   20


Регистр Остатки

  Регистратор     Период     Склад     Товар     Количество  
 ПН1  Д1   С1   Т1   3 
 ПН2  Д2  С1  Т1  30

 

 В результате получили детальное описание задачи. При этом оно содержит только важные детали.

 

Этот способ я использую при постановке задач по проведению документов и написанию отчетов.

См. также

Подписаться Добавить вознаграждение
Комментарии
1. mosAdm (mosAdm) 05.07.15 20:07
Вы явно не Андрей Габец. Эту методику он читает в 3-м УЦ наверно лет 10 уже.
2. Пишу код как картины (yurii_host) 05.07.15 22:41
(1) mosAdm, я не Андрей Габец и его курсов не посещал. Я простой разработчик и до такой схемы дошел самостоятельно. Мне приятно, что это уже кто-то придумал, да к тому же еще и читает на курсах. Значит, она действительно имеет ценность.
У меня есть еще куча идей для статей, которые я планирую опубликовать в ближайшее время. Эта методика хорошо ложится для создания юнит-тестов. Чуть позже выберу время и опубликую пример, как это использовать на практике.
3. Дмитрий Бабкин (DimaBab) 06.07.15 09:13
Доброго времени суток!

Почему первые даты Д10?
Зачем мы брали расходные, если в итоге приходные используются?
4. Пишу код как картины (yurii_host) 06.07.15 11:34
(3) DimaBab, в моем примере предполагается, что Д1 раньше, чем Д2, а Д2 - раньше, чем Д10.
В задаче РН - расходная накладная, ПН - приходная накладная. Приход должен быть раньше расхода.
5. Михаил Кочнев (Mi4man) 06.07.15 13:20
(1) mosAdm, Автор выложил всем, а Габец пусть дальше читает...
shumvlesu; +1 Ответить
6. Сергей Крымов (СергейК) 08.07.15 09:24
Интересная методика. Попробую использовать. Спасибо, что поделились!
7. Андрей Акулов (DrAku1a) 09.07.15 03:52
СокрЛП(Статья): Планируя структуру документа "от регистра" (от результата), надо определить - какие измерения будут "в целом на документ", а какие "построчно" - в случае с регистром "Товары на складах" и документом "Реализация" - построчно будут реквизиты "Товар" и "Количество", а в целом на документ - "Регистратор", "Период" и "Склад".

Конкретизируйте название. "Методика постановки задачи" предполагает наличие общей методики (на разные виды задач, не только же документы и отчеты делаем).
8. Сергей Д (dddxddd) 09.07.15 17:33
(2) yurii_host, я даже не знаю что такое 3-м УЦ, но когда объясняю задачу, рисую аналогичные таблички...
(1) mosAdm, не всему что начитывют учителя, можно верить (правда не в этом примере). Но самое главное это надо уметь применять на практике...
9. Вадим Латышев (pro1c@inbox.ru) 09.08.15 17:59
для примитивных случаев самое оно!