Как зайти в Даркнет?!
25th January, 01:11
8
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
898
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
951
0
Очень долго работает Update запрос Oracle
27th January, 09:58
916
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
907
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
941
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1725
0
период по дням
25th October, 10:44
3957
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3722
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4614
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4382
0
Помогите пожалуйста решить задачи
24th November, 23:53
6087
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4352
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4398
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Когда/как часто я должен тестировать?
Как начинающий разработчик, который входит в ритм моего первого профессионального проекта, я стараюсь развить хорошие привычки как можно скорее. Однако я обнаружил, что часто забываю проверить, отложить его или выполнить целую кучу тестов в конце сборки вместо одного за раз.
Мой вопрос в том, в какой ритм вы хотели бы попасть при работе над большими проектами, и где тестирование вписывается в него.
Ну, если вы хотите следовать TDD ребята, прежде чем начать кодировать ;)
Я очень много в таком же положении, как вы. Я хочу больше заниматься тестированием, но в настоящее время я нахожусь в положении, когда мы работаем с "get the code out", а не с "get the code out right", что пугает меня до чертиков. Поэтому я медленно пытаюсь интегрировать процессы тестирования в свой цикл разработки.
В настоящее время я тестирую, как я кодирую, пытаясь перебить код, когда я его пишу . Мне действительно трудно войти в мышление TDD.. Это требует времени, но именно так я хотел бы работать..
EDIT:
Я подумал, что мне, вероятно, следует расширить это, это мой основной "working process"...
- Планируйте, что я хочу от кода, возможный дизайн объекта, что угодно.
- Создайте мой первый класс, добавьте огромный комментарий к верхнему контуру что такое мой "vision" для класса.
- Опишите основные сценарии тестирования.. Они будут в основном станьте модульными тестами.
- Создайте мой первый метод.. Также пишу короткий комментарий, объясняющий как это должно работать.
- Напишите автоматический тест, чтобы увидеть, если он делает то, что я ожидаю.
- Повторите шаги 4-6 для каждого метода (обратите внимание, что автоматические тесты находятся в огромном списке, который выполняется на F5).
- Затем я создаю несколько мясистых тестов для эмуляции класса в рабочей среде, очевидно, исправляя любые проблемы.
- Если после этого появятся какие-либо новые ошибки, я вернусь и напишу новый тест, убедитесь, что он не работает (это также служит proof-of-concept для ошибки), а затем исправьте его..
Надеюсь, это поможет.. Открыт для комментариев о том, как улучшить это, как я уже сказал, Это моя забота..
Сначала и часто. Если я создаю некоторые новые функции для системы, я буду искать, чтобы первоначально определить интерфейсы, а затем написать модульные тесты для этих интерфейсов. Чтобы решить, какие тесты писать, рассмотрите API интерфейса и функциональность, которую он предоставляет, достаньте ручку и бумагу и подумайте некоторое время о потенциальных условиях ошибки или способах доказать, что он выполняет правильную работу. Если это слишком сложно, то, скорее всего, ваш API недостаточно хорош. Что касается тестов, посмотрите, можно ли избежать написания тестов "integration", которые проверяют более одного конкретного объекта и сохраняют их как тест "unit".
Затем создайте реализацию по умолчанию вашего интерфейса (которая ничего не делает, возвращает значения мусора, но не создает исключений), подключите его к тестам, чтобы убедиться, что тесты не работают (это тесты, которые работают ваши тесты! :)). Затем запишите функциональность и повторно запустите тесты. Этот механизм не идеален, но он покроет множество простых ошибок в кодировании и предоставит вам возможность запустить новую функцию, не подключая ее ко всему приложению.
После этого вам нужно протестировать его в главном приложении с комбинацией существующих функций. Это то, где тестирование является более сложным и, если это возможно, должно быть частично передано на аутсорсинг хорошему тестеру QA, поскольку у них будет умение ломать вещи. Хотя это помогает, если у вас есть эти навыки тоже. Правильное тестирование-это навык, который вы должны подобрать, чтобы быть честным. Мой собственный опыт исходит из моих собственных наивных развертываний и последующих ошибок, о которых сообщили пользователи, когда они использовали его в гневе.
Сначала, когда это случилось со мной, я обнаружил, что это раздражает, что пользователь намеренно пытается сломать мое программное обеспечение, и я хотел пометить все "bugs" как "training issues". Однако, поразмыслив над этим, я понял, что это наша роль (как разработчиков), чтобы сделать приложение максимально простым и надежным для использования даже идиотами. Это наша роль, чтобы расширить возможности идиотов, и вот почему мы платим доллар. Идиотское обращение.
Чтобы эффективно проверить это, вы должны войти в образ мышления, пытаясь сломать все. Предположим, что мантия пользователя, который колотит кнопки и обычно пытается уничтожить ваше приложение странными и замечательными способами. Предположим, что если вы не найдете недостатков, то они будут обнаружены в производстве, чтобы ваши компании серьезно потеряли лицо. Возьмите на себя полную ответственность за все эти проблемы и прокляните себя, когда ошибка, за которую вы ответственны (или даже частично ответственны), обнаружена в производстве.
Если вы делаете большую часть из вышеперечисленного, то вы должны начать создавать гораздо более надежный код, однако это немного художественная форма и требует большого опыта, чтобы быть хорошим.
Я постоянно тестирую. После того, как я закончу даже цикл внутри функции, я запускаю программу и нажимаю точку останова в верхней части цикла, а затем запускаю ее. Это все просто для того, чтобы убедиться, что процесс делает именно то, что я хочу.
Затем, как только функция завершена, вы тестируете ее полностью. Вероятно, вы хотите установить точку останова непосредственно перед вызовом функции и проверить отладчик, чтобы убедиться, что он работает идеально.
Наверное, я бы сказал: "Test often."
Я только недавно добавил модульное тестирование в свой обычный рабочий поток, но я пишу модульные тесты:
- чтобы выразить требования для каждого нового модуля кода (сразу после написания интерфейса, но до написания реализации)
- каждый раз, когда я думаю "it had better ... by the time I'm done"
- когда что-то ломается, чтобы количественно определить ошибку и доказать, что я ее исправил
- когда я пишу код, который явно выделяет или освобождает память-я ненавижу охоту за утечками памяти...
Я запускаю тесты на большинстве сборок, и всегда перед запуском кода.
Начните с модульного тестирования. В частности, проверьте TDD, тестовая разработка. Концепция TDD заключается в том, что сначала вы пишете модульные тесты, а затем пишете свой код. Если тест не проходит, вы возвращаетесь и повторно работаете над своим кодом. Если он проходит, вы переходите к следующему.
Я использую гибридный подход к TDD. Мне не нравится писать тесты против ничего, поэтому я обычно сначала пишу часть кода,а затем помещаю модульные тесты. Это итеративный процесс, с которым вы никогда не закончите. Вы меняете код, запускаете тесты. Если есть какие-либо сбои, исправить и повторить.
Другой вид тестирования-это интеграционное тестирование, которое происходит позже в процессе и обычно может выполняться командой тестирования QA. В любом случае, интеграционное тестирование устраняет необходимость тестирования частей в целом. Это рабочий продукт, который вы занимаетесь тестированием. С этим сложнее иметь дело с b / c обычно это связано с наличием автоматизированных инструментов тестирования (например, Robot, например.).
Кроме того, взгляните на такой продукт, как CruiseControl.NET, чтобы выполнять непрерывные сборки. CC.NET-это хороший b / c он будет запускать ваши модульные тесты с каждой сборкой, немедленно уведомляя вас о любых сбоях.
Я обнаружил, что если я подожду до конца написания какой-то новой функции для тестирования, я забуду многие из крайних случаев, которые, как я думал, могут сломать эту функцию. Это нормально, если вы делаете что-то, чтобы учиться для себя, но в профессиональной среде я нахожу свой поток классической формой: красный, зеленый, рефакторинг.
Красный: напишите свой тест так, чтобы он не удался. Таким образом, вы знаете, что тест утверждает правильную переменную.
Зеленый: сделайте свой новый тест пройти самым простым способом. Если это означает жесткое кодирование, это нормально. Это отлично подходит для тех, кто просто хочет что-то работать сразу.
Рефакторинг: теперь, когда ваш тест проходит, вы можете вернуться и изменить свой код с уверенностью. Твое новое изменение сломало твой тест? Отлично, ваше изменение имело значение, которое вы не понимали, теперь ваш тест говорит вам.
Этот ритм заставил меня ускорить мое развитие с течением времени, потому что у меня в основном есть компилятор истории для всех вещей, которые я думал, что нужно проверить, чтобы функция работала! Это, в свою очередь, приводит ко многим другим преимуществам, которые я здесь не получу...
Много отличных ответов здесь!
Я стараюсь тестировать на самом низком уровне, что имеет смысл:
Если одно вычисление или условие является сложным или сложным, добавьте тестовый код во время его написания и убедитесь, что каждый фрагмент работает. Закомментируйте тестовый код, когда закончите, но оставьте его там, чтобы документировать, как вы тестировали алгоритм.
Проверьте каждую функцию.
- Упражнение каждой ветви по крайней мере один раз.
- Выполните граничные условия -входные значения, при которых код изменяет свое поведение - чтобы поймать ошибки "off by one".
- Проверьте различные комбинации допустимых и недопустимых входов.
- Ищите ситуации, которые могут нарушить код, и тестируйте их.
Протестируйте каждый модуль с той же стратегией, что и выше.
Проверьте тело кода в целом, чтобы убедиться, что компоненты взаимодействуют должным образом. Если вы были усердны в тестировании более низкого уровня, это по существу "confidence test", чтобы ничего не сломалось во время assembly.
Поскольку большая часть моего кода предназначена для встроенных устройств, я уделяю особое внимание надежности, взаимодействию между различными потоками, задачами и компонентами, а также неожиданному использованию ресурсов: памяти, CPU, пространства файловой системы и т. д.
В общем, чем раньше вы сталкиваетесь с ошибкой, тем легче ее изолировать, идентифицировать и исправить-и тем больше времени вы тратите на создание, а не гоняетесь за своим хвостом.*
**I знаете, -1 для безвозмездной ссылки на буфер-указатель!*