Форум сайта python.su
py.user.nextЭто не надуманно, иначе не было бы такой большой области в IT, как тестирование. Которым занимаются специально обученные люди.
это надуманно;
py.user.nextЕсть такое понятие, как покрытие, его можно оценивать относительно чего-то(кода, требований), т.е. метрика получается. Когда ты берёшься писать тесты, ты можешь написать 5, а можешь 1000, а как понять что, тестов мало или уже много? Один человек может написать 1000 тестов, а другой всего 15, и его 15 тестов дадут покрытие лучше чем 1000 другого. Потому что он знал, какие тесты нужно составлять и когда нужно остановиться, тем самым он сэкономил время и уверен в покрытии. Тест-дизайн это техники придумывания тестов, которые помогают тебе составить минимальное количество тестов, которые обеспечивают максимальное покрытие.
есть, вообще, общие правила
py.user.nextюнит тесты Python это лишь инструмент, тесты всё равно придумывает человек
летом прошёл юнит-тесты в питоне наполовину
py.user.next
а вообще, сначала пишешь всё в одном тесте, проверяешь всё подряд; как написал, смотришь, как их можно сгруппировать, группируешь строки; как сгруппировал, разделяешь тест на отдельные тесты - так вырабатываешь свой стиль
py.user.nextРазделение тестирования по степени позитивности
я пока разделяю их на хороший ввод, плохой ввод
py.user.nextКак раз для этого и пишутся юнит-тесты. Чтобы подать на вход и посмотреть на выход
не, я не считаю, что для этого надо писать тест
py.user.nextНе надо, я особо не проверял, то что написал :) просто хотел написать
(у тебя там много букв и медленные проверки на исключения), хотя… может, написать?..
py.user.nextНу этого мы не знаем :) у bismigalis чётко реализовано, по крайней мере с виду.
а раз там есть диапазоны, то точно не к числам
py.user.nextСпасибо за совет :) там конечно можно без них обойтись
лучше исключения не юзай, они медленные и в данном случае без них можно обойтись
Офлайн
Budulianinне, это-то понятно, для очень больших проектов нужно это знать, а для обычных проектов (в пределать 100000 строк) можно этого и не знать
Это не надуманно, иначе не было бы такой большой области в IT, как тестирование. Которым занимаются специально обученные люди.
Budulianinтак понятие-то есть, вопрос, зачем оно ? что оно даёт ?
Есть такое понятие, как покрытие, его можно оценивать относительно чего-то(кода, требований), т.е. метрика получается.
Budulianinлучше 1000 мелких, чем 15 крупных
Один человек может написать 1000 тестов, а другой всего 15, и его 15 тестов дадут покрытие лучше чем 1000 другого.
Budulianinнаступает насыщение, ты пишешь, пишешь и на определённом моменте чувствуешь, что всё, закончилось
а как понять что, тестов мало или уже много?
Budulianinну, я и говорю, надо одну книжку прочитать и будешь знать всё это
Вообще сначала смотришь на требования, по ним создаёшь классы эквивалентности(конкретное количество зависит от желаемого покрытия), потом по ним пишешь тесты проходясь по каждому классу, хотя бы раз, и в итоге у тебя получается минимальный набор с хорошим покрытием.(для юнит-тестирования вполне достаточно)
Budulianinа для чего нужны тесты ? как раз для ускорения отладки
А отклонение фактического результата от ожидаемого, это просто определение бага.
Budulianinа я проверял, сначала тесты сделал, а потом написал реализацию
Не надо, я особо не проверял, то что написал :) просто хотел написать
Budulianinне, я ж написал там про отрицательные числа; но даже если он поправит, всё равно она для миллиарда элементов будет делать ещё миллиард элементов
Ну этого мы не знаем :) у bismigalis чётко реализовано, по крайней мере с виду.
Budulianinя просто сначала долго не понимал, зачем ты их вообще использовал, а потом стал смеяться, потому что это StopIteration, которое вообще не принято использовать напрямую - оно для того и сделано, чтобы внутри перебирающих конструкций распознавать конец итератора
Но когда их надо использовать их надо использовать, даже если они медленные
Отредактировано py.user.next (Окт. 28, 2013 23:27:32)
Офлайн
py.user.next
не, это-то понятно, для очень больших проектов нужно это знать, а для обычных проектов (в пределать 100000 строк) можно этого и не знать
py.user.nextЯ же написал - метрика. Если у тебя тесты обеспечивают покрытие в 100% , то остальные тесты избыточны.
так понятие-то есть, вопрос, зачем оно ? что оно даёт ?
py.user.next=) ну сиди, мучайся, пиши 1000 тестов, из которых каждый 3 одинаковый,
лучше 1000 мелких, чем 15 крупных
py.user.next
наступает насыщение, ты пишешь, пишешь и на определённом моменте чувствуешь, что всё, закончилось
ты же их не просто так пишешь, а чтобы результат получить (экономию времени и покрытие, как ты говоришь)
py.user.nextГде проходишь?
использовал схему индуктивного вычисления функции на пространстве последовательностей, которую сейчас прохожу
py.user.nextДля получения информации
а для чего нужны тесты ? как раз для ускорения отладки
py.user.nextЗнаю я
оно для того и сделано, чтобы внутри перебирающих конструкций распознавать конец итератора
Офлайн
py.user.nextа можно пример ввода-вывода, а то УМВР
у bismigalis'а не работает для отрицательных
py.user.nextэто так задумывалось :), а вообще да, надо в lazy стиле переписать
для миллиарда элементов будет делать ещё миллиард элементов
Офлайн
bismigalis
а можно пример ввода-вывода
[-4, -3, -2, -1] -> []
[-3, -1] -> ['-3']
[-1] -> []
Офлайн
да вижу, это когда последовательность заканчивается на -1
Офлайн
Budulianin“Программирование для математиков” Кушниренко. Лебедев.
Где проходишь?
Budulianinне, ты, походу, не писал тесты, иначе понял бы, про что я
Ага, закончилось, закончилось время отведённое на работу и желание писать тесты.
Budulianinэто с чего это они одинаковые ?
ну сиди, мучайся, пиши 1000 тестов, из которых каждый 3 одинаковый,
Budulianinа нафиг она нужна, не задумывался ?
Для получения информации
Budulianinзачем ? если там можно 15 сделать, я сделаю 15
А мог бы просто 15 правильных сделать, которые будут больше ошибок отлавливать чем 1000 тех.
Budulianinих в любом случае делать надо, если можешь
Если качество повыше нужно, то тесты делать надо.
Офлайн
py.user.next
не, ты, походу, не писал тесты, иначе понял бы, про что я
py.user.next
речь про то, что 15 монолитных тестов хуже, чем 1000 мелких, занимающих тот же объём проверки
py.user.nextСмешно. Она нужна, чтобы проанализировать её.
а нафиг она нужна, не задумывался ?
py.user.nextА как ты поймёшь со своим интуитивным методом, что там достаточно 15 тестов? Ты Ванга ? :)
зачем ? если там можно 15 сделать, я сделаю 15
py.user.nextНет, у меня есть правило - обеспечить тестами хорошее покрытие, на основании этого я пишу применяя различные техники
я думаю, у тебя есть какое-то правило типа “сначала настрочить, а потом думать, а нужна ли половина этого”, я уже несколько лет как ушёл с этого уровня
py.user.nextНадо. Я имел в виду тесты не от балды, а с учётом покрытия.
их в любом случае делать надо,
Отредактировано Budulianin (Окт. 29, 2013 13:50:16)
Офлайн
from itertools import tee, izip_longest, imap lst = [-3, -2, -1] lst.sort() def pairwise(iterable): a, b = tee(iterable) next(b, None) return izip_longest(a, b, fillvalue=None) def seq_to_list(iterable): tmp = [] for item, nextitem in pairwise(iterable): tmp.append(item) if nextitem is None or nextitem - item != 1: yield tmp tmp = [] def as_interval(lst): if len(lst) > 1: return "{}:{}".format(lst[0], lst[-1]) else: return str(lst[0]) print ', '.join(imap(as_interval, seq_to_list(lst)))
Офлайн
bismigalis
Для последовательностей из двух элементов тоже будет промежуток выдавать
Фикс :)
def as_interval(lst): if len(lst) > 2: return "{}:{}".format(lst[0], lst[-1]) elif len(lst) == 2: return ', '.join( [str(lst[0]), str(lst[1])] ) else: return str(lst[0]) print ', '.join(imap(as_interval, seq_to_list(lst)))
Отредактировано Budulianin (Окт. 29, 2013 15:24:41)
Офлайн