Pull to refresh

Comments 13

За время проекта два раза поменяли команду и заказчика.

Подскажите, как можно и команду, и заказчика?

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

Ради интереса - эту статью какая-то продвинутая gpt-3 сеть сгенерировала?

Нет, но такая тоже скоро будет. ChatGPT пишет хорошо, хотя и ошибается.

А почему у предмета Sulfuras качество 80, если по условиям оно не может быть выше 50?

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

Your work needs to be completed by Friday, February 18, 2011 08:00:00 AM PST.

Just for clarification, an item can never have its Quality increase above 50, however "Sulfuras" is a legendary item and as such its Quality is 80 and it never alters.

Дополнил текст статьи.

Первопричиной низкого time2market являлось то, что команда не владела практикой coding kata, о которой я подробно расскажу в данной статье

Так и не увидел в этой статье подробного рассказа (или хотя бы общего описания, чего уж там) о практике coding kata. И частности, о том как эта практика помогает с time2market. Собственно, даже и самого определения этого самого time2market.

@vmihaylov, мне кажется, что в тесте test_backstage_passes_increase_quality_by_3_if_5_to_1_days_left
ошибка. Там после выполнения метода не меняется sell_in с 5 на 4.
А ещё имя следующей функции (теста) точно такое же.

В ItemEntity.__init__ непонятно зачем нужно name = item.name, когда проще сразу написать self.name = item.name, а в конце вместо name.startswith, написать self.name.startswith.

Конструкции вида self.quality = self.quality + 1 тоже непонятно - зачем? Есть же self.quality += 1.

Если не считать эти моменты, которые скорее являются опечатками со стороны автора и придирками с моей стороны, то статья мне показалась очень интересной.

Евгений, спасибо большое за комментарий и найденную ошибку в тесте. Я перепроверю и вернусь. Скорее всего, первый вариант метода (с ошибкой) не исполняется вовсе - специфика python.

Поправил. Когда python встречает два метода с одним названием, он оставляет вторую реализацию. Изменение названия метода решило проблему.

А если бы писалось в IDE, то она бы подсветила "задвоение" функции. А что насчёт двух других моментов, о которых я написал?

Спасибо за разбор задачи.

Про финальное покрытие не написали, а это та редкая задача, которая позволяет достичь 100% покрытия. Полное покрытие кончено не значит, что всё проверили.

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


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

def decrease_quality(self): super().decrease_quality()


Мне с тестами проще смотреть последовательностями, ну и конечно генератор тестов. Черновой код примерно такой:




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

Sign up to leave a comment.