Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 28, 2013 22:59:04

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

сокращение последовательности в строке, re

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
лучше исключения не юзай, они медленные и в данном случае без них можно обойтись
Спасибо за совет :) там конечно можно без них обойтись

Но когда их надо использовать их надо использовать, даже если они медленные

.



Офлайн

#2 Окт. 28, 2013 23:25:14

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

сокращение последовательности в строке, re

Budulianin
Это не надуманно, иначе не было бы такой большой области в IT, как тестирование. Которым занимаются специально обученные люди.
не, это-то понятно, для очень больших проектов нужно это знать, а для обычных проектов (в пределать 100000 строк) можно этого и не знать

Budulianin
Есть такое понятие, как покрытие, его можно оценивать относительно чего-то(кода, требований), т.е. метрика получается.
так понятие-то есть, вопрос, зачем оно ? что оно даёт ?

Budulianin
Один человек может написать 1000 тестов, а другой всего 15, и его 15 тестов дадут покрытие лучше чем 1000 другого.
лучше 1000 мелких, чем 15 крупных

Budulianin
а как понять что, тестов мало или уже много?
наступает насыщение, ты пишешь, пишешь и на определённом моменте чувствуешь, что всё, закончилось
ты же их не просто так пишешь, а чтобы результат получить (экономию времени и покрытие, как ты говоришь)

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

Budulianin
А отклонение фактического результата от ожидаемого, это просто определение бага.
а для чего нужны тесты ? как раз для ускорения отладки

Budulianin
Не надо, я особо не проверял, то что написал :) просто хотел написать
а я проверял, сначала тесты сделал, а потом написал реализацию
а реализацию вчера придумал в уме (использовал схему индуктивного вычисления функции на пространстве последовательностей, которую сейчас прохожу)

Budulianin
Ну этого мы не знаем :) у bismigalis чётко реализовано, по крайней мере с виду.
не, я ж написал там про отрицательные числа; но даже если он поправит, всё равно она для миллиарда элементов будет делать ещё миллиард элементов

Budulianin
Но когда их надо использовать их надо использовать, даже если они медленные
я просто сначала долго не понимал, зачем ты их вообще использовал, а потом стал смеяться, потому что это StopIteration, которое вообще не принято использовать напрямую - оно для того и сделано, чтобы внутри перебирающих конструкций распознавать конец итератора



Отредактировано py.user.next (Окт. 28, 2013 23:27:32)

Офлайн

#3 Окт. 29, 2013 08:59:52

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

сокращение последовательности в строке, re

py.user.next
не, это-то понятно, для очень больших проектов нужно это знать, а для обычных проектов (в пределать 100000 строк) можно этого и не знать

От размера проекта это не зависит. В большом проекте могут использоваться те же функции, которые тоже надо покрывать такими же тестами. Скорее это зависит от значимости проекта. Если качество повыше нужно, то тесты делать надо.

py.user.next
так понятие-то есть, вопрос, зачем оно ? что оно даёт ?
Я же написал - метрика. Если у тебя тесты обеспечивают покрытие в 100% , то остальные тесты избыточны.

py.user.next
лучше 1000 мелких, чем 15 крупных
=) ну сиди, мучайся, пиши 1000 тестов, из которых каждый 3 одинаковый,
А мог бы просто 15 правильных сделать, которые будут больше ошибок отлавливать чем 1000 тех.

py.user.next
наступает насыщение, ты пишешь, пишешь и на определённом моменте чувствуешь, что всё, закончилось
ты же их не просто так пишешь, а чтобы результат получить (экономию времени и покрытие, как ты говоришь)

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

py.user.next
использовал схему индуктивного вычисления функции на пространстве последовательностей, которую сейчас прохожу
Где проходишь?

py.user.next
а для чего нужны тесты ? как раз для ускорения отладки
Для получения информации

py.user.next
оно для того и сделано, чтобы внутри перебирающих конструкций распознавать конец итератора
Знаю я



Офлайн

#4 Окт. 29, 2013 11:41:18

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

сокращение последовательности в строке, re

py.user.next
у bismigalis'а не работает для отрицательных
а можно пример ввода-вывода, а то УМВР


py.user.next
для миллиарда элементов будет делать ещё миллиард элементов
это так задумывалось :), а вообще да, надо в lazy стиле переписать

Офлайн

#5 Окт. 29, 2013 11:57:34

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

сокращение последовательности в строке, re

bismigalis
а можно пример ввода-вывода
[-4, -3, -2, -1] -> []
[-3, -1] -> ['-3']
[-1] -> []



Офлайн

#6 Окт. 29, 2013 12:06:54

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

сокращение последовательности в строке, re

да вижу, это когда последовательность заканчивается на -1

Офлайн

#7 Окт. 29, 2013 12:18:46

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

сокращение последовательности в строке, re

Budulianin
Где проходишь?
“Программирование для математиков” Кушниренко. Лебедев.

Budulianin
Ага, закончилось, закончилось время отведённое на работу и желание писать тесты.
не, ты, походу, не писал тесты, иначе понял бы, про что я

Budulianin
ну сиди, мучайся, пиши 1000 тестов, из которых каждый 3 одинаковый,
это с чего это они одинаковые ?
речь про то, что 15 монолитных тестов хуже, чем 1000 мелких, занимающих тот же объём проверки
если ты захочешь отменить какой-то тест, ты просто не сможешь этого сделать, потому что вместе с ним отменятся ещё и остальные проверки

Budulianin
Для получения информации
а нафиг она нужна, не задумывался ?

Budulianin
А мог бы просто 15 правильных сделать, которые будут больше ошибок отлавливать чем 1000 тех.
зачем ? если там можно 15 сделать, я сделаю 15
я думаю, у тебя есть какое-то правило типа “сначала настрочить, а потом думать, а нужна ли половина этого”, я уже несколько лет как ушёл с этого уровня

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



Офлайн

#8 Окт. 29, 2013 12:42:39

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

сокращение последовательности в строке, re

py.user.next
не, ты, походу, не писал тесты, иначе понял бы, про что я

Угу, “не писал”, но знаю что такое тесты и тест-дизайн

py.user.next
речь про то, что 15 монолитных тестов хуже, чем 1000 мелких, занимающих тот же объём проверки

Ты не понимаешь, что если достаточно 15 тестов, то 985 лишние ? А если лишние, то ты потратил время в пустую. Трата время в пустую это хорошо? При том, что с твоим подходом ты так и не будешь знать, всё ли ты проверил этими 1000 тестами или нет.

Если можно составить всего 15 тестов, которых будет достаточно, то среди 1000 будут те, которые проверяют одни и те же требования, т.е. они одинаковые.

py.user.next
а нафиг она нужна, не задумывался ?
Смешно. Она нужна, чтобы проанализировать её.

py.user.next
зачем ? если там можно 15 сделать, я сделаю 15
А как ты поймёшь со своим интуитивным методом, что там достаточно 15 тестов? Ты Ванга ? :)

py.user.next
я думаю, у тебя есть какое-то правило типа “сначала настрочить, а потом думать, а нужна ли половина этого”, я уже несколько лет как ушёл с этого уровня
Нет, у меня есть правило - обеспечить тестами хорошее покрытие, на основании этого я пишу применяя различные техники

py.user.next
их в любом случае делать надо,
Надо. Я имел в виду тесты не от балды, а с учётом покрытия.



Отредактировано Budulianin (Окт. 29, 2013 13:50:16)

Офлайн

#9 Окт. 29, 2013 13:07:24

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

сокращение последовательности в строке, re

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)))

Офлайн

#10 Окт. 29, 2013 15:19:26

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

сокращение последовательности в строке, re

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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version