Введение контрольной работы
Написать введение, равно как и заключение, к контрольной работе – это тяжкий труд. Эти структурные части должны быть выполнены безукоризненно, потому что именно их гарантированно прочитает преподаватель.
Требования к введению контрольной работы
В отличие от курсовой или дипломной, требования к контрольной работе не такие строгие. Нет четких правил, что должно быть во введении. Главное, чтобы оно подводило преподавателя к основной части вашего исследования.
Среднее введение типичной контрольной занимает половину страницы А4. Оно не должно быть большим. В основном, то, что будет в вашем введении, зависит от предмета и темы. Например, если вы пишете работу по узкоспециальной теме, то во введении уместно дать определения всем терминам.
Введение пишут научным языком, как и основную часть работы. В то же время оно дает больше свободы – в нем можно привести какие-то примеры из жизни, цитаты из художественных произведений.
Оформление стандартное: 14 шрифт Times New Roman, полуторный интервал, отступ первой строки 1. 25 см. Хотя некоторые кафедры могут рекомендовать другие параметры (например, 12 шрифт и одинарный интервал).
Структура введения
Во введении контрольной можно выделить следующие части:
- Вступительное слово. Для начала нужно ввести читателя (в нашем случае – преподавателя) в курс дела. Напишите буквально несколько вводных предложений, общих по тематике.
Рисунок 1. Пример вступительного слова
- Актуальность темы. Дальше необходимо обосновать актуальность контрольной работы. Конечно, следуя логике, в данном типе отчетов странно писать про актуальность. Казалось бы, она заключается в том, что автор хочет получить хорошую оценку. Но университеты это не устраивает, поэтому постарайтесь придумать что-нибудь оригинальное.
Пример 1
Проще всего с контрольными в форме реферата, которые представляют собой ответ на один теоретический вопрос. В таком случае можно обосновать актуальность изучения именно этого вопроса.
Цель и задачи. Как и в других студенческих работах, в контрольной необходимо обозначить цель, которую стремитесь достичь, а также задачи, с помощью которых вы хотите этого добиться. Задачи обычно соответствуют разделам работы.
Трудности с написанием Контрольной работы?
Эксперты Автор24 помогут! Оставь название работы и мы предложим лучшего эксперта для твоей темы
Привет! Рады, что ты нашел нужное методическое пособие
Для копирования текста подпишись на Telegram bot. Удобный поиск по учебным материалам в твоем телефоне
Подписаться и скачать статью
Включи камеру на своем телефоне и наведи на qr-код. Edu24_bot откроется на устройстве
Привет! Рады, что ты нашел нужное методическое пособие
Подписчики нашего бота Edu24_bot получают методичку прямо в телеграмм! Просто перейди по ссылке ниже
Скачать статью
Включи камеру на своем телефоне и наведи на qr-код. Edu24_bot откроется на устройстве
Введение контрольной работы, пример написания
- Главная
- Блог
- Контрольная работа
- Контрольная работа: введение
Дата: август 29, 2021 11:00
Просмотров: 407
Для чего нужно введение
Введение – вступительная часть работы. В ней коротко раскрывается тема исследования, цели и задачи теоретической и практической части, коротко описывается, что нужно доказать, с какой целью, а также какие методы исследования использовались.
Основные правила
- Вступление должно быть четким и лаконичным. Использование научно-публицистического стиля вызовет доверие преподавателя.
- Краткость: объем — не более одной-двух страниц.
- Формулируя цель и задачи, не употребляйте местоимение «я». Стиль приветствуется такой: «Основные задачи нашей работы заключаются…»
- Это уместно, так как любая работа выполняется с участием научного руководителя.
- Начинайте работу с основной части, где сразу понятно, как раскрывать тему и о чем писать. Когда она будет готова, с введением можно легко справиться.
Структура введения:
- актуальность изучаемой темы;
- цели и задачи;
- дополнительные сведения.
Актуальность темы контрольной работы можно подчеркнуть, ответив на вопросы о сфере деятельности, области знания, историческом событии, какими учеными и как обозначена тема. Важно подчеркнуть степень изученности темы, насколько она обсуждается научным сообществом, есть ли публикации в прессе, на ТВ.
Пример:
«Актуальность выбранной темы определяется тем, что в последнее десятилетие в ученом мире все чаще обсуждается вопросы биологического равновесия планеты, нарушения устойчивости человеческого сообщества. Все чаще эту тему поднимают журналисты, представители обществ защиты природы, обсуждая угрозу, нависшую над биосферой планеты».
Уместно будет привести высказывания конкретных ученых, сделать ссылки на их работы.
Работа может быть обобщением материалов в историческом аспекте на заданную тему. Тогда целью будет систематизация всего изученного материала.
Пример: выявить наиболее эффективные приемы исследовательских методов в археологической практике.
Исходя из цели, формулируют задачи, т. е. прописывают последовательность действий по осуществлению цели.
Пример:
- изучить источники, раскрывающие методы исследования;
- классифицировать методы по видам и способам;
- обосновать наиболее эффективные;
- доказать, почему эти приемы дают наибольшие результаты.
Перечень задач будет зависеть от вида исследуемых объектов или предметов. Задачи должны соответствовать главам основной части, т.е., в каждой главе должно быть четко прописано решение одной задачи.
В дополнительных сведениях указываются объект и предмет изучения, что будет изучаться и каким способом. Объектом будет процесс или явление, которое составит основу изучения. Предметом считается часть объекта, который студент научно объясняет или доказывает.
Пример:
Объект исследования: биологическое равновесие в биосфере.
Предмет: результаты проведенных исследований и мнения ученых по данной теме.
В конце введения необходимо написать, что в работе были использованы труды ученых по данной тематике и данные статистики или научных публикаций, без перечисления источников.
Пример введения к контрольной работе
Тестирование 101: Введение в тестирование
Программирование — это написание кода для решения проблем. Программная инженерия — это практика использования структурированного процесса для решения проблем. Как инженеры, мы хотим иметь кодовую базу, которую можно изменять, расширять и рефакторить по мере необходимости. Тесты гарантируют, что наша программа работает так, как задумано, и что изменения в кодовой базе не нарушают существующую функциональность.
На моей последней работе я работал со старшим инженером над созданием серверной части на основе микросервисов для замены существующего монолита Django. Это был новый проект, и нас поощряли пробовать что-то новое. Я читал «Тестирование Python с помощью pytest» и убедил старшего инженера позволить мне использовать pytest в нашем проекте. Это было случайностью, поскольку заставило меня взять на себя инициативу в написании начального набора тестов, которые мы использовали в качестве шаблона для всех наших сервисов.
Этот опыт укрепил принципы, изложенные в книге «Прагматичный программист». Речь идет о том, чтобы быть прагматичным в , что мы тестируем, , как мы тестируем , и , когда мы тестируем ; мы должны использовать инструменты и методы, которые позволяют нам максимально эффективно тестировать наш код. Тестирование должно быть простым и свободным от барьеров; как только тестирование станет рутинной работой, программисты перестанут этим заниматься… и вот как снижается качество программного обеспечения.
Мы боимся копаться в коде, потому что либо тестов нет, либо существующие тесты настолько ненадежны, что нам приходится переписывать тесты по мере написания кода. Это не то, чем занимается программная инженерия. Тест должен разрешать рефакторинг, а не мешать нам вносить изменения в кодовую базу. Мы должны тратить время на написание бизнес-логики, а не возиться с тестами.
Тестирование — это фольклор в том смысле, что лучшие практики и методы передаются от программиста к программисту при работе над проектами в составе команды. Если вы новичок в отрасли и пытаетесь вникнуть в тестирование, вам будет сложно понять, с чего начать. Такое ощущение, что есть много противоречивых советов, и это потому, что они есть. Тестирование самоуверенно, в большей степени, чем любая другая дисциплина разработки программного обеспечения. Люди всегда спорят о том, что тестировать, как тестировать и особенно когда проверять.
Это первая статья из серии, в которой подробно описывается ход моих мыслей о том, как я добавляю тесты в кодовую базу. В этом посте я подробно расскажу о мире тестирования, чтобы у нас был общий словарь для будущих постов.
Содержание
- Что такое тестирование
- Преимущества тестирования Черный ящик
- против белого ящика
- Тестовая пирамида
- Структурирующие тесты
- Что тестировать
- Когда писать тесты
- Заключение
Что такое тестирование
Когда мы пишем код, нам нужно запустить его, чтобы убедиться, что он делает то, что мы от него ожидаем. Тесты — это контракт с нашим кодом: учитывая значение, мы ожидаем, что будет возвращен определенный результат.
Запуск тестов можно рассматривать как механизм обратной связи, который информирует нас о том, работает ли наша программа должным образом:
Хотя прохождение тестов не может доказать отсутствие ошибок, они информируют нас о том, что наш код работает так, как определено тестом. Напротив, неудачный тест указывает на то, что что-то не так. Нам нужно понять, почему наш тест не удался, чтобы мы могли модифицировать код и/или тесты по мере необходимости.
Свойства тестов
1. Быстро
Тесты дают нам уверенность в том, что наш код работает так, как задумано. Более медленная петля обратной связи препятствует развитию, поскольку нам требуется больше времени, чтобы выяснить, были ли наши изменения правильными. Если наш рабочий процесс страдает от медленных тестов, мы не будем запускать их так часто. Это приведет к проблемам в дальнейшем.
2. Детерминированные
Тесты должны быть детерминированными, т. е. одни и те же входные данные всегда будут приводить к одним и тем же результатам. Если тесты недетерминированы, мы должны найти способ учитывать случайное поведение внутри наших тестов.
Хотя в производстве определенно есть недетерминированный код (например, машинное обучение и ИИ), мы должны попытаться сделать весь наш невероятностный код как можно более детерминированным. Нет смысла выполнять дополнительную работу, если этого не требует наша программа.
3. Автоматизировано
Мы можем убедиться, что наша программа работает, запустив ее. Это может быть ручной запуск команды в REPL или обновление веб-страницы; в обоих случаях мы смотрим, делает ли наша программа то, что она должна делать. Хотя ручное тестирование подходит для небольших проектов, оно становится неуправляемым по мере усложнения нашего проекта.
Автоматизировав наш набор тестов, мы можем быстро проверить, работает ли наша программа по запросу. Некоторые разработчики даже запускают свои тесты для запуска при сохранении файла.
Формальное определение
Давайте рассмотрим некоторые определения, чтобы у нас был общий словарь.
Тестируемая система (SUT) — это объект, который в настоящее время тестируется. Это может быть строка кода, метод или целая программа.
Критерии приемки относится к выполняемой нами проверке, которая позволяет нам принимать вывод из системы. Специфичность и диапазон критериев приемлемости зависят от того, что мы тестируем: медицинское устройство и аэрокосмическая промышленность требуют, чтобы тесты были конкретными, поскольку в них намного меньше места для ошибок.
Если Amazon дает плохие рекомендации, это не конец света. Если IBM Watson предложит неправильную операцию, это может быть опасно для жизни.
Тестирование относится к процессу ввода входных данных в нашу тестируемую систему и проверки выходных данных на соответствие нашим критериям приемлемости:
- Если вывод в порядке, наш тест пройден.
- Если выходные данные не в порядке, наш тест не пройден, и мы должны выполнить отладку.
Будем надеяться, что сбой теста предоставит нам достаточно контекстной информации, чтобы понять, где искать.
Преимущества тестирования
Хорошо продуманная стратегия тестирования в сочетании с подробными примерами тестирования обеспечивает следующие преимущества:
Уверенное изменение кода и модули. Это означает, что изменение одной строки может привести к неожиданной поломке нашей программы. Тесты дают нам уверенность в нашем коде. Запустив наши тесты после того, как мы изменили наш код, мы можем подтвердить, что наши изменения не нарушили существующую функциональность, определенную нашими тестами.
Напротив, модификация базы кода без тестов является сложной задачей. Нет никакого способа узнать, работает ли что-то, как задумано. Мы программируем на месте наших штанов, что является довольно рискованным предложением.
Раннее выявление ошибок
Ошибки стоят денег. Насколько многое зависит от того, когда вы их найдете.
Исправление ошибок становится тем дороже, чем дальше вы находитесь в жизненном цикле разработки программного обеспечения (SDLC). True Cost of a Software Bug исследует эту проблему.
Улучшение дизайна системы
Это немного спорно, но я думаю, что написание кода с учетом тестов улучшает дизайн системы. Тщательный набор тестов показывает, что разработчик действительно глубоко задумался над проблемой. Написание тестов заставляет вас использовать собственный API; мы надеемся, что это приведет к лучшему интерфейсу.
Все проекты ограничены во времени, и довольно легко выработать привычку использовать ярлыки, увеличивающие связь между модулями, что приводит к сложным взаимозависимостям. Мы должны уметь решать проблемы с помощью спагетти-кода.
Знание того, что мы должны тестировать наш код, заставляет нас писать модульный код. Если что-то неуклюже для тестирования, может быть лучший интерфейс, который мы можем реализовать. Время, потраченное на написание тестов, заставляет нас быть внимательными; мы делаем глубокий вдох, прежде чем посмотреть на проблему с точки зрения пользователя.
Как только вы напишете тестируемый код, используя такие шаблоны, как внедрение зависимостей, вы увидите, как добавление структуры упрощает проверку того, что наш код делает то, что мы от него ожидаем.
«Черный ящик» против «белого ящика»
Тесты можно разделить на две широкие категории: тестирование «черного ящика» и тестирование «белого ящика».
Тестирование методом «черного ящика» относится к методам тестирования, при которых тестер не может видеть внутреннюю работу тестируемого объекта.
Тестирование методом «белого ящика» — это метод, при котором тестер может увидеть внутреннюю работу тестируемого объекта.
Как разработчики, мы проводим тестирование белого ящика. Мы написали код внутри коробки и знаем, как его тщательно протестировать.
Это не означает, что нет необходимости в тестировании методом «черного ящика», нам все равно нужно, чтобы кто-то выполнял тестирование на более высоком уровне; близость к коду может привести к слепым пятнам в наших тестах.Пирамида тестирования
Пирамида автоматизированного тестирования содержит рекомендации по структурированию нашей стратегии тестирования. В нем говорится, что мы должны написать много быстрых и дешевых модульных тестов и небольшое количество медленных и дорогих сквозных тестов.
Тестовая пирамида не является жестким и быстрым правилом, но она дает хорошее место, чтобы начать думать о стратегии тестирования. Хорошее эмпирическое правило — писать столько тестов на каждом уровне, сколько вам нужно, чтобы быть уверенным в своей системе. Мы должны писать тесты по мере того, как мы пишем код, повторяя стратегию тестирования, которая работает для проекта, над которым мы работаем.
Модульные тесты
Модульные тесты — это низкоуровневые тесты, направленные на тестирование определенной части нашей системы. Они дешевы в написании и быстро работают. Сбои теста должны предоставлять достаточно контекстной информации, чтобы точно определить источник ошибки. Эти тесты обычно пишутся разработчиками на этапе реализации жизненного цикла разработки программного обеспечения (SDLC).
Модульные тесты должны быть независимыми и изолированными; взаимодействие с внешними компонентами увеличивает объем наших тестов и время, необходимое для запуска тестов. Как мы увидим в следующем посте, замена зависимостей дублирующими тестами приводит к быстрому запуску детерминированных тестов.
Насколько большим должен быть наш модульный тест? Как и все остальное в программировании, это зависит от того, что мы пытаемся сделать. Мышление с точки зрения единицы поведения позволяет нам писать тесты вокруг логических блоков кода.
The Test Pyramid рекомендует использовать множество модульных тестов в нашем наборе тестов. Эти тесты дают нам уверенность в том, что наша программа работает так, как ожидалось. Написание нового кода или изменение существующего кода может потребовать от нас переписать некоторые из наших тестов. Это стандартная практика, наш набор тестов растет вместе с нашей кодовой базой.
Постарайтесь не забывать о растущей сложности набора тестов. Помните, что код , который проверяет наш производственный код, также является производственным кодом . Потратьте время на рефакторинг ваших тестов, чтобы убедиться, что они эффективны и действенны.
Пример модульного теста
Предположим, у нас есть следующая функция, которая берет список слов и возвращает наиболее часто встречающееся слово и количество вхождений этого слова:
def find_top_word(words) # Возвращает самые распространенные слова и вхождения word_counter = Счетчик (слов) вернуть word_counter.most_common(1)[0]
Мы можем протестировать эту функцию, создав список, запустив функцию find_top_word
над этим списком и сравнив результаты функции с ожидаемым значением:
def test_find_top_word(): слова = ["фу", "бар", "летучая мышь", "баз", "фу", "баз", "фу"] результат = найти_верхнее_слово(слова) утверждать результат[0] == "foo" утверждать результат[1] == 3
Если бы мы когда-нибудь захотели изменить реализацию find_top_words
, мы могли бы сделать это без страха. Наш тест гарантирует, что функциональность find_top_word
не может быть изменено без сбоя теста.
Интеграционные тесты
В каждом сложном приложении есть внутренние и внешние компоненты, работающие вместе, чтобы сделать что-то интересное. В отличие от модульных тестов, которые сосредоточены на отдельных компонентах, интеграционные тесты объединяют различные части системы и тестируют их вместе как группу. Интеграционное тестирование также может относиться к тестированию на границах службы нашего приложения, то есть когда оно выходит в базу данных, файловую систему или внешний API.
Эти тесты обычно пишутся разработчиками, но это не обязательно. По определению, интеграционные тесты шире по объему и занимают больше времени, чем модульные тесты. Это означает, что сбои в тестах требуют некоторого расследования: мы знаем, что один из компонентов нашего теста не работает, но необходимо найти точное место сбоя. Это контрастирует с модульными тестами, которые меньше по объему и точно указывают, где что-то пошло не так.
Мы должны попытаться запустить интеграционные тесты в рабочей среде; это сводит к минимуму вероятность того, что тесты не пройдут из-за различий в конфигурации.
Пример интеграционного теста
Предположим, у нас есть следующая функция, которая принимает URL-адрес и кортеж из (слово, вхождение)
. Наша функция создает записи и сохраняет их в базу данных:
def save_to_db(url, top_word): запись = TopWord() запись.url = URL запись.слово = верхнее_слово[0] record.num_occurrences = верхнее_слово[1] db.session.add(запись) db.session.commit() обратная запись
Мы тестируем эту функцию, передавая известную информацию; функция должна сохранить введенную нами информацию в базу данных. Наш тестовый код извлекает только что сохраненную запись из базы данных и подтверждает, что ее поля соответствуют входным данным, которые мы передали.
определение test_save_to_db(): URL-адрес = "http://test_url.com" most_common_word_details = ("Питон", 42) word = save_to_db(url, most_common_word_details) вставленная_запись = TopWord. query.get(word.id) утверждать вставленная_запись.url == "http://test_url.com" утверждать insert_record.word == "Python" утверждать вставленная_запись.num_occurrences == 42
Обратите внимание на то, как мы проводим это тестирование вручную, чтобы убедиться, что все работает должным образом. Автоматизация этого теста избавляет нас от необходимости многократно проверять эту функциональность каждый раз, когда мы вносим изменения в код.
End-to-End
Сквозные тесты проверяют, соответствует ли система нашим определенным бизнес-требованиям. Обычный тест состоит в том, чтобы проследить путь через систему таким же образом, как и пользователь. Например, мы можем протестировать новый рабочий процесс пользователя: имитировать создание учетной записи, «щелчок» по ссылке в электронном письме для активации, вход в систему в первый раз и взаимодействие с модальным всплывающим окном учебного веб-приложения.
Мы можем проводить сквозные тесты через наш пользовательский интерфейс (UI), используя инструмент автоматизации браузера, такой как Selenium. Это создает зависимость между нашим пользовательским интерфейсом и нашими тестами, что делает наши тесты хрупкими: изменение внешнего интерфейса требует от нас изменения тестов. Это не является устойчивым, так как либо наш интерфейс станет статичным, либо наши тесты не будут выполняться.
Лучшее решение — протестировать подкожный слой, то есть слой непосредственно под нашим пользовательским интерфейсом. Для веб-приложения это будет тестирование REST API, как отправка JSON, так и получение JSON.
Наши подкожные тесты — это наши контракты с нашим интерфейсом; они могут использоваться нашими внешними разработчиками в качестве спецификации REST API. Такие инструменты, как swagger-meqa, созданные на основе спецификации OpenAPI, могут помочь нам автоматизировать этот процесс. Мы также могли бы использовать полнофункциональные инструменты, такие как Postman, для тестирования, отладки и проверки нашего API.
Сквозные тесты считаются черным ящиком, так как нам не нужно ничего знать о реализации, чтобы проводить тестирование. Это также означает, что сбои тестов не указывают на то, что пошло не так; нам нужно будет использовать журналы, чтобы помочь нам отследить ошибку и диагностировать сбой системы.
Пример сквозного теста
Здесь мы используем тестовый клиент Flask для запуска подкожного тестирования нашего REST API. За кулисами происходит множество вещей, и результат, который мы получаем (код состояния HTTP), позволяет нам узнать, что тест либо пройден, либо не пройден.
определение test_end_to_end(): клиент = приложение.test_client() тело = {"url": "https://www.python.org"} ответ = client.post("/top-word", json=body) утверждать response.status_code == HTTPStatus.OK
Ресурсы
- Мартин Фаулер Wiki: TestPyramid | Модульный тест | Интеграционный тест | Эндтоэндтест
- Блог тестирования Google: просто скажите «нет» большему количеству сквозных тестов
- Automation Panda: пирамида тестирования
Структурные тесты
Каждый тестовый набор можно разделить на следующие этапы:
- настройка тестируемой системы (SUT) в среде, требуемой тестовым набором (предварительные условия)
- выполнение действия, которое мы хотим протестировать на SUT
- проверка того, произошел ли ожидаемый результат (постусловия)
- демонтирует SUT и вернет среду в состояние, которое мы нашли в .
Для структурирования тестов широко используются две схемы: Arrange-Act-Assert и Given-When-Then.
Arrange-Act-Assert (AAA)
Шаблон AAA является абстракцией для разделения различных частей наших тестов:
- Arrange все необходимые предварительные условия
- Акт о СУТ
- Утверждение , что наши пост-условия выполнены
Arrange-Act-Assert Пример
def test_find_top_word(): # Договариваться слова = ["фу", "бар", "летучая мышь", "баз", "фу", "баз", "фу"] # Действовать результат = найти_верхнее_слово(слова) # Утверждать утверждать результат[0] == "foo" утверждать результат[1] == 3
Четкое разделение между фазами позволяет нам увидеть, не пытается ли наш метод тестирования проверить слишком много разных вещей одновременно. Arrange-Act-Assert — это шаблон, который я использую при написании тестов.
Given-When-Then (GWT)
GWT предоставляет полезную абстракцию для разделения различных фаз нашего теста:
- Учитывая набор предварительных условий
- При выполняем действие на ТСУ
- Тогда наши пост-условия должны быть такими
GWT широко используется в разработке, управляемой поведением (BDD).
Пример «Дано-Когда-Тогда»
def test_find_top_word(): # Дан список слов слова = ["фу", "бар", "летучая мышь", "баз", "фу", "баз", "фу"] # Когда мы запускаем функцию над списком результат = найти_верхнее_слово(слова) # Тогда мы должны увидеть, что `foo` встречается 3 раза утверждать результат[0] == "foo" утверждать результат[1] == 3
Ресурсы
- Джерард Месарош: Четырехэтапный тест
- Мартин Фаулер Wiki: GivenWhenThen
- C2 Wiki: Arrange Act Assert
- Джеймс Кук: Шаблон Arrange Act Assert для разработчиков Python
- Automation Panda: управляемый поведением Python
Что тестировать
Чтобы доказать, что наша программа верна, мы должны протестировать ее на каждой мыслимой комбинации входных значений. Этот тип исчерпывающего тестирования непрактичен, поэтому нам нужно использовать стратегии тестирования, которые позволяют нам выбирать тестовые случаи, в которых ошибки наиболее вероятны.
Опытные разработчики могут сочетать написание кода для решения бизнес-задач с написанием тестов для обеспечения правильности и предотвращения регрессии. Поиск этого баланса и знание того, что тестировать, может показаться больше искусством, чем наукой. К счастью, есть несколько практических правил, которым мы можем следовать, чтобы наше тестирование было тщательным.
Функциональные требования
Мы хотим убедиться, что все соответствующие требования выполнены. Наши тестовые примеры должны быть достаточно подробными, чтобы проверять бизнес-требования. Нет смысла что-то строить, если оно не соответствует указанным вами критериям.
Тестирование базового пути
Мы должны проверить каждое утверждение хотя бы один раз. Если в операторе есть условное выражение ( if
или while
), мы должны изменить наше тестирование, чтобы убедиться, что мы проверяем все ветви условного выражения. Например, если у нас есть следующий код:
, если x > 18: # оператор1 Элиф 18 >= х >= 35: # заявление2 еще: # заявление3
Чтобы убедиться, что мы выполнили все ветки приведенного выше условного оператора, нам нужно написать следующие тесты:
-
х < 18
-
18 <= х <= 35
-
х > 35
Эквивалентное разбиение
Два тестовых примера, которые приводят к одному и тому же результату, называются эквивалентными. Нам требуется только один из тестовых случаев, чтобы покрыть этот класс ошибок.
Граничный анализ
"В компьютерных науках есть две сложные проблемы: недействительность кеша, присвоение имен и ошибки несоответствия 1."
Это одна из старейших шуток в программировании, но в ней много правды, мы часто путаемся, нужно ли нам <
или <=
. Вот почему мы всегда должны проверять граничные условия. В следующем примере:
, если x > 18: # оператор1 еще: # заявление2
Чтобы убедиться, что мы тщательно проверяем граничные условия приведенного выше фрагмента кода, у нас должны быть тестовые примеры для x=17
, x=18
и х=19
. Имейте в виду, что написание тестовых случаев становится более сложным, если наша граница имеет составные условия.
Это отличное руководство по тестированию граничных условий.
Классы неверных данных
Это относится к любому из следующих случаев:
- Слишком мало данных (или нет данных)
- Слишком много данных
- Неверные данные
- Неверный размер данных
- Неинициализированные данные
Тестирование потока данных
Основное внимание уделяется отслеживанию потока управления программой с упором на изучение последовательности событий, связанных со статусом объектов данных. Например, мы получим ошибку, если попытаемся получить доступ к удаленной переменной. Мы можем использовать тестирование потока данных, чтобы придумать дополнительные тестовые случаи для переменных, которые не были проверены другими тестами.
Предположение об ошибке
Прошлый опыт дает представление о частях нашей кодовой базы, которые могут привести к ошибкам. Ведение записи о предыдущих ошибках может повысить вероятность того, что вы не совершите ту же ошибку снова в будущем.
Резюме
Выяснение того, что тестировать, и эффективное выполнение этого – вот что я имею в виду, когда говорю Искусство тестирования разработчиков . Единственный способ стать лучше в тестировании — это писать тесты, придумывать лучшие стратегии тестирования и изучать различные методы тестирования. Как и в разработке программного обеспечения, чем больше вы о чем-то знаете, тем лучше вы в этом разбираетесь.
Когда писать тесты
Хотя существует много интересных дискуссий о том, когда писать тесты, я чувствую, что это отвлекает от сути тестирования. Не имеет значения , когда вы пишете тесты, важно , что вы пишете тесты.
Если вы заинтересованы в изучении этой темы, я рекомендую следующие ссылки:
- Создатель RubyOnRails Дэвид Хайнемайер Ханссон (DHH) критикует TDD на RailsConf 2014
- Умер ли TDD? обсуждение с DHH, Мартином Фаулером и Кентом Беком
- TDD: академический обзор Теда М. Янга
Заключение
В этом посте мы получили широкое введение в мир тестирования. Теперь, когда мы все находимся на одной странице, мы можем более подробно изучить тестирование в следующих постах.
Дополнительные ресурсы
- Завершение кода Глава 22: Тестирование разработчика
- Простота кода: философия тестирования
- Кэти Хафф: Тестирование Python и непрерывная интеграция
- Тестовый и кодовый подкаст
Введение в t-тесты
Опубликован в 31 января 2020 г. к Ребекка Беванс. Отредактировано 19 декабря 2022 г.
A t тест — это статистический тест, который используется для сравнения средних значений двух групп. Он часто используется при проверке гипотез, чтобы определить, действительно ли процесс или лечение влияет на интересующую популяцию или две группы отличаются друг от друга.
t тестовый примерВы хотите узнать, различается ли средняя длина лепестков цветков ириса в зависимости от их вида. Вы найдете два разных вида ирисов, растущих в саду, и отмерите по 25 лепестков каждого вида. Вы можете проверить разницу между этими двумя группами, используя тест t и нулевую и альтернативную гипотезы.- Нулевая гипотеза ( H 0 ) состоит в том, что истинная разница между средними значениями этих групп равна нулю.
- Альтернативная гипотеза ( H a ) заключается в том, что истинная разница отлична от нуля.
Содержание
- Когда использовать t-тест
- Какой тип t-теста мне следует использовать?
- Выполнение t-теста
- Интерпретация результатов теста
- Представление результатов t-теста
- Часто задаваемые вопросы о t-тесте
Когда использовать тест
tКритерий t можно использовать только при сравнении средних значений двух групп (так называемое попарное сравнение). Если вы хотите сравнить более двух групп или выполнить несколько попарных сравнений, используйте тест ANOVA или апостериорный тест.
Тест t является параметрическим тестом различий, что означает, что он делает те же предположения о ваших данных, что и другие параметрические тесты. Тест t предполагает ваши данные:
- являются независимыми
- (приблизительно) нормально распределены
- имеют одинаковую величину дисперсии в каждой сравниваемой группе (так называемая однородность дисперсии)
Если ваши данные не соответствуют этим предположениям, вы можете попробовать непараметрическую альтернативу t , например критерий знакового ранга Уилкоксона для данных с неравными дисперсиями.
Какой тип теста
t следует использовать?При выборе теста t вам необходимо учитывать две вещи: относятся ли сравниваемые группы к одной популяции или к двум разным популяциям, и хотите ли вы проверить разницу в определенном направлении.
Одновыборочный, двухвыборочный или парный тест
t ?- Если группы происходят из одной популяции (например, измерение до и после экспериментального лечения), выполните парный тест t . Это внутрисубъектный дизайн.
- Если группы происходят из двух разных популяций (например, двух разных видов или людей из двух разных городов), выполните двухвыборочный тест t (он же независимый t тест ). Это межсубъектный план.
- Если одна группа сравнивается со стандартным значением (например, сравнивается кислотность жидкости с нейтральным pH 7), выполните однообразный t тест .
Односторонний или двусторонний
t тест?- Если вас интересует только то, отличаются ли две совокупности друг от друга, выполните двусторонний t тест .
- Если вы хотите узнать, больше или меньше одно среднее значение генеральной совокупности, чем другое, выполните односторонний t тест.
- Ваши наблюдения получены из двух отдельных популяций (отдельных видов), поэтому вы выполняете тест t с двумя выборками.
- Вас не волнует направление разницы, важно только, есть ли разница, поэтому вы решили использовать двусторонний тест t .
Получение отзывов о языке, структуре и форматировании
Профессиональные редакторы вычитывают и редактируют вашу статью, уделяя особое внимание:
- Академический стиль
- Расплывчатые предложения
- Грамматика
- Согласованность стиля
См. пример
Выполнение теста
tТест t оценивает истинную разницу между двумя средними группами, используя отношение разницы средних групп к объединенной стандартной ошибке обеих групп. Вы можете рассчитать его вручную, используя формулу, или использовать программное обеспечение для статистического анализа.
T формула тестаФормула для двухвыборочного теста t (также известного как критерий Стьюдента) показана ниже.
В этой формуле t — значение t , x 1 и x 2 — среднее значение двух сравниваемых групп, s 29047 ошибка две группы, а n 1 и n 2 — количество наблюдений в каждой из групп.
Большее значение t показывает, что разница между средними значениями группы больше, чем объединенная стандартная ошибка, что указывает на более значительную разницу между группами.
Вы можете сравнить вычисленное значение t со значениями в таблице критических значений (например, таблице Стьюдента t ), чтобы определить, превышает ли ваше значение t ожидаемое случайно. Если это так, вы можете отвергнуть нулевую гипотезу и сделать вывод, что две группы на самом деле различны.
Функция тестирования T в статистическом ПОБольшинство статистических программ (R, SPSS и т. д.) включают функцию тестирования t . Эта встроенная функция возьмет ваши необработанные данные и вычислит значение t . Затем он сравнивает его с критическим значением и вычисляет p -значение. Таким образом, вы можете быстро увидеть, отличаются ли ваши группы статистически.
Сравнивая длину цветочных лепестков, вы решаете выполнить свой 9-й шаг.0362 t тест с использованием R. Код выглядит так:
t.test(Petal.Length ~ Species, data = flower.data)Загрузите набор данных для самостоятельной практики.
Пример набора данных
Интерпретация результатов теста
Если вы выполните тест t для своей гипотезы цветка в R, вы получите следующий результат:
На выходе:
- Объяснение того, что сравнивается, называемое данными в выходной таблице.
- Значение t : -33,719. Обратите внимание, что это отрицательно; это отлично! В большинстве случаев нас интересует только абсолютное значение разницы или расстояние от 0. Неважно, в каком направлении.
- степени свободы : 30.196. Степени свободы связаны с размером вашей выборки и показывают, сколько «свободных» точек данных доступно в вашем тесте для проведения сравнений. Чем больше степеней свободы, тем лучше будет работать ваш статистический тест.
- Значение p : 2.2e-16 (т.е. 2.2 с 15 нулями впереди). Это описывает вероятность того, что вы случайно увидите такое большое значение t .
- Формулировка альтернативной гипотезы ( H a ). В этом тесте H a разница не 0.
- 95% доверительный интервал . Это диапазон чисел, в пределах которого истинная разница средних будет равна 9.5% времени. Это может быть изменено с 95%, если вы хотите увеличить или уменьшить интервал, но 95% используется очень часто.
- означает длину лепестков для каждой группы.
Представление результатов теста
tПри сообщении результатов испытаний t наиболее важными значениями, которые необходимо включить, являются t значение , p значение и степени свободы для теста. Это сообщит вашей аудитории, является ли разница между двумя группами статистически значимой (т. е. маловероятно, что это произошло случайно).
Вы также можете включить сводную статистику для сравниваемых групп, а именно среднее значение и стандартное отклонение. В R код для вычисления среднего значения и стандартного отклонения от данных выглядит так:
flower.data %>%
group_by(Species) %>%
summary(mean_length = mean(Petal.Length),
sd_length = sd(Лепесток.Длина))
В нашем примере вы должны сообщить результаты следующим образом:
Разница в длине лепестков между видами ирисов 1 ( M = 1,46; SD = 0,206) и видами ирисов 2 ( M = 5,54; SD = 0,569) была значимой ( t (30) = - 33,7190; р < 2,2е-16).Часто задаваемые вопросы о t-тестах
- Что измеряет t-тест?
Критерий Стьюдента измеряет разницу средних групповых значений, деленную на объединенную стандартную ошибку двух средних групповых значений.
Таким образом, он вычисляет число (значение t), иллюстрирующее величину различия между двумя сравниваемыми средними группами, и оценивает вероятность того, что это различие существует чисто случайно (значение p).
- Какой t-тест следует использовать?
Ваш выбор t-критерия зависит от того, изучаете ли вы одну группу или две группы, а также от того, интересует ли вас направление различия в групповых средних.
Если вы изучаете одну группу, используйте парный t-критерий , чтобы сравнить среднее значение группы с течением времени или после вмешательства, или используйте одновыборочный t-критерий , чтобы сравнить среднее значение группы со стандартным значением. Если вы изучаете две группы, используйте двухвыборочный t-критерий .
Если вы хотите узнать только, существует ли разница, используйте двусторонний тест . Если вы хотите узнать, является ли среднее значение одной группы больше или меньше другого, используйте левосторонний или правосторонний односторонний тест .
- В чем разница между одновыборочным t-тестом и парным t-тестом?
А Одновыборочный t-критерий используется для сравнения отдельной совокупности со стандартным значением (например, чтобы определить, отличается ли средняя продолжительность жизни в конкретном городе от средней по стране).
Парный t-критерий используется для сравнения одной группы населения до и после некоторого экспериментального вмешательства или в два различных момента времени (например, измерение успеваемости учащихся по тесту до и после изучения материала).
- Могу ли я использовать t-критерий для измерения различий между несколькими группами?
Стьюдентный критерий не следует использовать для измерения различий между более чем двумя группами, поскольку структура ошибки для t-теста будет недооценивать фактическую ошибку при сравнении многих групп.
Если вы хотите сравнить средние значения сразу нескольких групп, лучше всего использовать другой статистический тест, такой как ANOVA или апостериорный тест.
Процитировать эту статью Scribbr
Если вы хотите процитировать этот источник, вы можете скопировать и вставить цитату или нажать кнопку «Цитировать эту статью Scribbr», чтобы автоматически добавить цитату в наш бесплатный генератор цитирования.