Aa | Aa |
Коллекции загружаются
#Айтишное
Айтишники, вопрос, на каком этапе работы с кодом вы выполняете тестирование (если выполняете)? Чем пользуетесь? Я вставляю тесты прямо в код, исполняются во время компиляции, если неудачно, то прерывают компиляцию выдавая сообщение о ошибке. 22 октября 2015
|
только живыми! :)
(я не пишу код, я его заказываю :) ) 1 |
Ластро
|
|
Однако.
1 |
Ластро
|
|
А что, кто-то тестирует мёртвыми?
1 |
Al Lastor
есть полностью отбитые, после тестов продукт ставится еще хуже, чем был |
Ластро
|
|
Каким образом наличие тестов может ухудшить работу программы O_o
|
Al Lastor
Это если часть кода работает только на грязных хаках, а тест-кейсы заставляют эти хаки вычистить. |
Ластро
|
|
uncleroot, значит настало время рефакторинга...
1 |
Ластро
|
|
Я очень долго тестил из интерпретатора, подавал на вход функций значения и смотрел выходы. Потом мне это надоело, и родилась малюсенькая функция.
Вот такая. unitTest :: IO () -> Q [Dec] unitTest b = runIO b >> pure [] Она принимает на вход действие и выполняет его В МОМЕНТ КОМПИЛЯЦИИ, ну и по желанию, в случае нахождения ошибки либо просто пишешь в консоль/файл/etc (putStrLn/hPutStrLn), либо если что серьёзное просто останавливаешь компиляцию (error). Для использования смотри Template Haskell |
Ластро
|
|
unitTest = do { when (testF1 3) $ error "1"; when (testF2 "string") $ error "2"}
|
Ластро
|
|
Но если душа желает, можно использовать менее самопальный вариант из какой либо библиотечки отсюда, мне честно говоря было банально лень. Тем более что велосипед весьма миниатюрен ;)
|
Ластро
|
|
По поводу дебага, основной метод которого я придерживаюсь: сделать типизацию максимально жёсткой. Мой девиз:"Ошибки должен искать компилятор".
|
> Айтишники, вопрос, на каком этапе работы с кодом вы выполняете тестирование (если выполняете)? Чем пользуетесь?
Test Driven Development for the win. Тестирую код до написания кода. |
Ластро
|
|
Но ненаписанный код заведомо не пройдёт тестирование! Или я чего-то не понимаю?
|
Ластро
|
|
А всё, до меня дошло как народ умудряется писать без строгой типизации... извращение однако.
|
Al Lastor
Принцип Red-Green-Refactor. Напиши тест, который проваливается. Напиши код так, чтобы тест перестал проваливаться. Отрефактори код, чтобы он стал красивым. |
Ластро
|
|
Блин, мне это что-то напоминает.
Напиши типы на входе и на выходе которым должна удовлетворять функция, если порядок аргументов значим, перепиши тип так, чтобы его нарушение стало невозможным. Напиши функцию удовлетворяющую этому типу. Произведи обобщение предыдущего кода с учётом нового. 1 |
ДНИЩE--ЫЫЫЫ
|
|
извращенец
|
Ластро
|
|
Нисколько. Обычно к написанию типов(для функций), я приступаю тогда, когда не могу собрать функцию. В остальных случаях есть команда i в интерпретаторе(пусть компьютер пашет за меня и выведет типы сам). Первый этап зачастую выпадает. А типизацию более жесткой/надёжной можно сделать и после.
|
Ластро
|
|
Mikie, на каком этапе проблемы, скомпилировать код или заставить работать скомпилированный?
|
Ластро
|
|
Mikie если лень отлаживать попробуй усилить типизацию.
Про типизацию Если нет, http://eax.me/haskell-debug-trace/ |