Как правильно создать функции, тесты, истории и сломать их

Я пытаюсь схватить всю методологию TDD и как таковой, я действительно не знаю, как представить это как хороший краткий вопрос, таким образом, вот долгая вытянутая версия. Я, кажется, испытываю разрыв между подающим шары (Martin), деньги (Растушевки), и другой подобной игрой / простыми примерами и полностью функционирующим Корпоративным приложением.

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

Не пытаясь запустить любые войны, я вполне уверен дело не в этом, таким образом, я затем говорю мне, что 'бизнес-возможность' должна переключить середину приложения от клиентской бизнес-возможности до компаний (создатель приложения) бизнес-возможность.

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

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

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

Затем это начинает расширяться во что-то, что я думаю, было бы полностью недопустимо: Как электронная проверка завершения порядка, Когда заказ получен, я хочу проверить, что x12 файл переводится в плоский файл и если это приводит журнал проверки или перевода к сбою, и пошлите ошибку по электронной почте, информация для заказа и состояние извлечены и загружены в базу данных, которую плоский файл отправляется очереди к as400, и состояние обновляется к базе данных, которую as400 отправляет подтверждению, что они получили заказ, и состояние обновляется к базе данных, которую as400 отправляет подтверждению плоского файла, и состояние обновляется к базе данных, подтверждение переводится в x12, и состояние обновляется к базе данных, x12 подтверждение направляется соответственно, и состояние обновляется к базе данных, которую подтверждение отправляется клиенту, и состояние обновляется к базе данных, если x12 содержит недопустимые данные, регистрируют ошибку, посылают электронное письмо и если плоский файл не вытягивают очереди за 2 минуты, регистрируют ошибку, посылают электронное письмо и т.д. с n к x питанию возможных ошибочных сценариев.

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

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

Как Вы определяете, когда/где и как сломать эти вещи и разделить их? Легко сказать, разламывают их на самая маленькая часть, которая предлагает бизнес-возможность, но когда у Вас не может быть одной части без многих других частей, каков 'реальный' ответ? Все это не соответствует на одном липком.

Я открыт для ответов, которые включают больше книг, учебных руководств, видео, но я думаю, были ли, возможно, некоторые приложения реального мира, которые составляют эти типы вещей, которые придерживаются гибких принципов и принципов TDD, которые, вероятно, обеспечили бы большую часть значения? По общему признанию я относительно плохо знаком с этим, но я прошел книги Martin/Feathers/Osherove, я видел много katas на tic-tac-toe, боулинге, простые числа и т.д., но нет никакого входа, никакое сообщение об ошибке ничего подобного вид материала 'реального мира'.


Позвольте мне попробовать что-то еще.

Я заставляю файл от мейнфрейма через ftp, перечисляющего заказы быть помещенным с нашими поставщиками, этот файл называют сводным файлом. Я проверяю на этот файл каждые 5 минут. Когда существует файл, я анализирую его, затем проверяют, чтобы гарантировать, что мы получили каждый заказ, перечисленный в этом summaryfile через MQ. Как двойная проверка я также проверяю на существование заказов, потому что, если сводному файлу не удается быть полученным, мы не можем удостовериться, что получили все заказы. Так как это сказан, следующее кажется, что я иду в нужном направлении?

Feature: Check for the presence of a summary file
  In order to verify all orders were sent through MQ from the mainframe
  a summary file must be found to determine the expected orders.

  Scenario: A summary file has not been sent
    Given a summary file does not exist
    When I check for the existence of a file
    Then I should sleep for 5 minutes

  Scenario: A summary file has been sent
    Given a summary file does exist
    When I check for the existence of a file
    Then I should validate the summary file

Feature: Validate the summary file
  In order to process a summary file
  summary file must be valid

  Scenario: A valid summary file exists
    Given a valid summary file
    When I validate the summary file
    Then I should upload the order details to the order details DB.

  Scenario: An invalid summary file exists
    Given a invalid summary file
    When I validate the summary file
    Then I should log the errors encountered
    And email the erroneous file to the analyst email group

Повторите что, снова заменив сводку порядком. Именно это я придумал.

5
задан Phil Langeberg 22 June 2010 в 15:05
поделиться

3 ответа

Вы сбиваетесь с пути думая, что: «... у вас не может быть одной части без множества других частей ...»

Разделение историй - это навык. Это требует практики, и может быть трудно добиться успеха. На этой странице объясняется концепция и даются ссылки на ресурсы о разделении историй.

Вот одна из ваших идей, с которыми у вас возникли проблемы с разделением:

Как бизнес-аналитик, обеспечивающий обработку всех заказов клиентов Когда пользователь отправляет электронный заказ, а информация о маршруте или бухгалтерском учете не подтверждается Я хочу, чтобы недействительный учет и информация о маршрутизации вводится в журнал и отправляется по электронной почте вместе с файлом заказа, прикрепленным к группе пользователей бизнес-аналитика. если проблема не связана с тем, что не удалось связаться с базой данных для поиска информации о клиенте из-за проблем с сетью, введите в журнал «не удалось связаться с базой данных для поиска информации о клиенте из-за сетевых проблем» и отправить электронное письмо с сообщением об ошибке на адрес список рассылки системного аналитика.

Я вижу как минимум 4 истории в этом абзаце:

  1. Как BA, во время сбоя ввода заказа из-за неверной учетной записи и информации о маршруте, я хочу, чтобы информация об учетной записи и маршрутизации отправлялась по электронной почте группе BA вместе с файлом заказа, чтобы что кто-то знает, чтобы получить правильную информацию и повторно ввести заказ.

  2. Как BA, во время сбоя при вводе заказа из-за недействительной информации об учетной записи и маршрутизации, я хочу, чтобы информация об учетной записи и маршрутизации вводилась в журнал, чтобы у e была постоянная запись с недействительной информацией.

  3. Как BA, во время сбоя ввода заказа из-за «не удается подключиться к базе данных», я хочу, чтобы сообщение об ошибке «не удалось подключиться к базе данных для поиска информации о клиенте из-за проблем с сетью» отправлено по электронной почте в список SA, чтобы эта база данных / проблемы с сетью могут быть проанализированы и улучшены.

  4. Как BA, во время сбоя при вводе заказа из-за «не удается подключиться к базе данных», я хочу, чтобы сообщение об ошибке «не удалось подключиться к базе данных для поиска информации о клиенте из-за проблем с сетью», записанное в журнал, чтобы у нас было постоянный учет проблем с базой данных / сетью.

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

6
ответ дан 13 December 2019 в 19:21
поделиться

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

Я начну с вашего второго рассказа о пользователе, которого, надеюсь, будет достаточно:

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

Я бы начал с разбивки этого на две пользовательские истории:

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

2) Как системный аналитик, наблюдающий за системой, я хочу получать уведомление по электронной почте, чтобы я мог с большей вероятностью своевременно решать проблемы.

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

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

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

Начните думать о классах, которые будут делать эти вещи, отключите интерфейсы и напишите несколько тестов.

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

3
ответ дан 13 December 2019 в 19:21
поделиться

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

Разбивка видений на функции, истории, сценарии и код:

http://www.infoq.com/articles/pulling-power

Разделение историй:

http://lizkeogh.com/2008/09/11/splitting-up-stories/

Обработка технических историй (ведение журнала и т. д.):

http://lizkeogh.com/2008/09/10/feature-injection-and-handling-technical-stories/

Любые отзывы приветствуются.

2
ответ дан 13 December 2019 в 19:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: