Хобрук: Ваш путь к мастерству в программировании

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

ОБНОВЛЕНИЕ: я ищу способ вычисления данных для всех пограничных случаев моего алгоритма (или произвольного алгоритма, если на то пошло).
Что я пробовал до сих пор просто думает о том, какие могут быть пограничные случаи + создание некоторых «случайных» данных, но я не знаю, как я могу быть более уверенным, что не пропустил что-то, что настоящие пользователи могут испортить..< /я>

Я хочу проверить, не пропустил ли я что-то важное в своем алгоритме, и я не знаю, как сгенерировать тестовые данные, чтобы охватить все возможные ситуации:

Задача состоит в том, чтобы сообщить снимки данных для каждого Event_Date, но сделать отдельную строку для правок, которые могут относиться к следующим Event_Date — см. Группу 2) на входе и выходе < strong>иллюстрация данных:

иллюстрация входных и выходных данных

Мой алгоритм:

  1. составить список event_date и вычислить для них next_event_date
  2. присоединяем результаты к main_audit_table и вычисляем самые большие transaction_id для каждого снимка (группы 1-4 на моем рисунке) - сгруппированные по id, event_date и по 2 параметрам в зависимости от того, верно ли transaction_date < next_event_date или нет
  3. присоедините main_audit_table к результатам, чтобы получить другие данные из того же transaction_id
  4. присоедините costs_audit_table к результатам - используйте самое большое transaction_id, которое меньше transaction_id из результата

Мои вопросы:

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

Мой код (который нужно протестировать):

select
    snapshots.id,
    snapshots.event_date,
    main.event,
    main.transaction_date as last_change,
    costs.costs as costs_2012
  from (
    --snapshots that return correct transaction ids grouped by event_date
    select
      main_grp.id,
      main_grp.event_date,
      max(main_grp.transaction_id) main_transaction_id,
      max(costs_grp.transaction_id) costs_transaction_id
    from main_audit_table main_grp
    join (
      --list of all event_dates and their next_event_dates
      select
        id,
        event_date,
        coalesce(lead(event_date) over (partition by id order by event_date),
                 '1.1.2099') next_event_date
      from main_audit_table
      group by main_grp.id, main_grp.event_date
    ) list on list.id = main_grp.id and list.event_date = main_grp.event_date
    left join costs_audit_table costs_grp
      on costs_grp.id = main_grp.id and
         costs_grp.year = 2012 and
         costs_grp.transaction_id <= main_grp.transaction_id
    group by
      main_grp.id,
      main_grp.event_date,
      case when main_grp.transaction_date < list.next_event_date
           then 1
           else 0 end
  ) snapshots
  join main_audit_table main
    on main.id = snapshots.id and
       main.transaction_id = snapshots.main_transaction_id
  left join costs_audit_table costs
    on costs.id = snapshots.id and
       costs.transaction_id = snapshots.costs_transaction_id

  • Можете ли вы пояснить, как моделируются эти данные и как вам удалось назначить эти группы? 25.04.2012
  • @Kodra, что касается модели - это таблицы аудита IBM Tivoli Service Request Manager (a_workorder с десятками настраиваемых полей) + настраиваемые таблицы аудита - без актуальной документации, и мои навыки обратного проектирования такие же хорошо как у тебя.. 25.04.2012
  • @Kodra групповое задание должно быть понятно из пункта 2 моего алгоритма - если нет, скажите, что именно непонятно, чтобы я мог перефразировать, спасибо 25.04.2012
  • Вы действительно храните даты в виде строк или это представление даты по умолчанию в вашей системе (1.1.2099)? 25.04.2012
  • @ X-Zero это так, но я думаю, что буду использовать DATE(TIMESTAMP_FORMAT()) в производственном коде, спасибо 25.04.2012

Ответы:


1

Общие табличные выражения (CTE) — это не только хороший способ скрыть сложность и уменьшить дублирование более длинных фрагментов SQL, но и простой способ представления тестовых данных, как если бы они были взяты из постоянной таблицы. По крайней мере, CTE сосредоточат внимание на основных компонентах вашего запроса вверху, что позволит вам ссылаться на них по их меткам в остальной части оператора. В поваренной книге SQL DB2 Грэма Бирчалла (хорошо поддерживаемая бесплатная электронная книга) примеры этого и других расширенных шаблонов SQL. Джо Селко — еще один хороший источник идей о том, как заставить SQL делать за вас больше тяжелой работы.

25.04.2012
  • +1 за отличный совет, но на самом деле у меня нет проблем с вставкой данных в реальные таблицы - как я могу вычислить крайние случаи, которые необходимо проверить? (я могу сгенерировать много случайных данных и пропустить случай, который произведут реальные пользователи) знаете ли вы какую-нибудь технику для этого? 26.04.2012
  • Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

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

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

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..


    © 2024 hobruk.ru, Хобрук: Ваш путь к мастерству в программировании