Печатная машинка. печатная машинка. Разработка игры Печатная машинка
Скачать 1.04 Mb.
|
Министерство образования и науки российской федерации Федеральное государственное автономное образовательное учреждение высшего образования Национальныйисследовательский ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ «МИСиС» НОВОТРОИЦКИЙ ФИЛИАЛ Кафедра электроэнергетики и электротехники Курсовая работа по дисциплине: «Технология программирования» на тему: «Разработка игры «Печатная машинка» Выполнил: студент группы БПИ-18з Дементьева Е.В. Проверил: Василенко М. Новотроицк, 2021 СодержаниеВведение 5 1 Теоретическая часть 6 1.1Краткая характеристика языка С# 6 Язык программирования C# разработан для создания множества приложений, работающих в среде .NET Framework. C# несложный язык программирования, является объектно-ориентирован и типобезопасным. Благодаря большому количеству новшеств язык C# позволяет быстро разрабатывать программные продукты, при этом сохраняя наглядность и элегантность, которые характерны для всех родственных С-языкам программирования. Visual C# — это реализация языка C# корпорацией Майкрософт. Поддержка Visual C# в Visual Studio обеспечивается полнофункциональным редактором кода, компилятором, шаблонами проектов, конструкторами, мастерами кода, мощного и удобного отладчика и многих других средств. Библиотека классов .NET Framework предоставляет доступ ко многим службам операционной системы и к другим нужным классам, что существенно облегчает и ускоряет разработку программного продукта. 6 2.2 Компилирование и сборка кода 16 Сборка проекта – это компиляция исходного кода программы и выполнение действий, необходимых для создания исполняемого файла. В разных языках программирования предусмотрены разные операции сборки, а для простых веб-сайтов сборка не выполняется совсем. Независимо от типа проекта меню «Сборка» стандартное расположение команд компиляции и других действий для создания окончательного действующего программного продукта. Чтобы скомпилировать и запустить код программы одним нажатием клавиши, необходимо нажать F5. Все компиляторы можно настроить через IDE среду. Панель инструментов сборки позволяет указать, следует ли создавать отладочную версию программы с включёнными символами и дополнительной проверкой на наличие ошибок для поддержки точек останова и пошагового режима отладчика или релиз сборки, которая должна получиться. На странице свойств проекта можно настроить дополнительные параметры сборки и многие другие параметры. Для настройки параметров сборки нужно нажать правой кнопкой мыши узел проекта в обозревателе решений и выбирать пункт «Свойства». По мимо этого, сборку можно выполнить из командной строки. Выходные данные сборки, включая сообщения об ошибках или успешном выполнении, отображаются в окне вывода. Окно «Список ошибок» отображает подробные сведения об ошибках сборки. 16 2.3 Отладка кода 17 Современный отладчик Visual Studio позволяет выполнять отладку кода в локальном проекте, на удалённом устройстве или в эмуляторе устройств, таких как Android или Windows Phone. Можно просматривать код с шагом в один оператор, проверяя значения переменных, пошагово выполнять многопоточные приложения, а также задать точки останова, которые срабатывают только при выполнении указанного условия. Это всё можно настроить в самом редакторе кода. Сам отладчик имеет ряд окон, в которых можно просматривать локальные переменные, стек вызовов и другие аспекты среды выполнения и выполнять операции с ними. Эти окна доступны из меню «Отладка». Окно интерпретации позволяет ввести выражение и сразу увидеть его результат. IntelliTrace регистрирует все вызовы методов и другие события в работающей программе .NET и может помочь быстро найти источник проблемы. 17 3 Практическая часть 18 3.1 Проектирование игры «Печатная машинка» 18 Список использованных источников 27 Введение 3 1 Теоретическая часть 4 1.1 Краткая характеристика C# 4 1.2 Типы данных в языке C# 4 1.3 Переменные в C# 5 1.4 Объявление переменных………………………………………………………….6 1.5 Операторы языка C#.......………………………………………………………….7 1.6 Циклы……………………………………………………………………………..10 2 Интегрированная среда разработки Visual Studio 2017 14 2.1 Элементы Winows Forms и классы C# 17 2.2 Компилирование и сборка кода Ошибка! Закладка не определена. 2.3 Отладка кода Ошибка! Закладка не определена. 3 Практическая часть…………………………………………………………………….17 3.1 Проектирование игры «Печатная машинка» Ошибка! Закладка не определена. 4 Тестирование…………………………………………………………………………...23 4.1 Черный ящик Ошибка! Закладка не определена. 4.2 Стеклянный (белый) ящик………………………………………………………26 Введение Объектно-ориентированное, или объектное, программирование (ООП)- парадигма программирования, в которой основными концепциями являются понятия объектов и классов. Данная концепция в настоящее время является ведущей в области программирования. Количество прикладных языков программирования, реализующих объектно-ориентированную парадигму, является наибольшим по отношению к другим парадигмам. Данный подход реализован в таких языках программирования как С, C++, Object Pascal, Java, С# и другие. C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе операторов явного и неявного приведения типа), делегаты, атрибуты, события, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения, комментарии в формате XML. В настоящее время, С# является одним из наиболее динамично развивающихся языков программирования. Целью данной курсовой работы является разработка программы с использованием принципов объектно-ориентированного программирования на языке высокого уровня С# средствами Microsoft Visual Studio 2017. 1 Теоретическая частьКраткая характеристика языка С#Типы данных в языке С # Данные, которыми оперируют человек и компьютер, существуют в какой-либо форме: числа, текст, графика, звук, видео. В компьютере эти данные хранятся в определенном виде – в двоичных кодах. Так о дно число может кодироваться 1, 2, 4, 8 и более байтами, текст рассматривается как набор символов (1 или 2 байта каждый). Каждый тип данных должен обрабатываться по своим правилам. Типы данных имеют особое значение в C#, потому что это строго типизированный язык. Все операции подвергаются строгому контролю со стороны компилятора на соответствие типов, причем недопустимые операции не компилируются. Следовательно, контроль типов позволяет исключить ошибки и повысить надежность программ. Для обеспечения контроля типов все переменные, выражения и значения должны принадлежать к определенному типу. Такого понятия, как «бестиповая» переменная, в данном языке программирования вообще не существует. Более того, тип значения определяет те операции, которые разрешается выполнять над ним. Операция, разрешенная для одного типа данных, может оказаться недопустимой для другого. В C# имеются две общие категориивстроенных типов данных: типызначений (value type) и ссылочные типы (reference type). Их классификация приведена на рисунке 1. Рисунок 1- Типы данных. Понятие «встроенные типы данных» означает, что для определения переменной выбранного типа вам достаточно указать одно из ключевых слов, указанных в прямоугольниках, и через пробел идентификатор переменной, завершив запись «;», например: double d; string s; Переменные в С # В программировании появились переменные, предназначенные для размещения данных. Любая переменная должна быть объявлена (присвоено имя - идентификатор) и инциализирована (задано какое-либо значение, принадлежащее к определенному типу). Допускается динамическая инициализация переменных (в процессе выполнения кода программы). Возможно использование неявно типизированных переменных. Идентификатор - это имя сущности в коде. Существует стандарт именования идентификаторов, который следует использовать в коде. Идентификатор может: начинаться с символа «_»;содержать заглавные и строчные буквы в формате Unicode; регистр имеет значение. Идентификатор не может: начинаться с цифры; начинаться с символа, если это ключевое слово; содержать более 511 символов. Объявление переменных Шаблон объявления переменной в C# выглядит следующим образом: Тип Данных Идентификатор; Например: int k1; System.Int32 _counter; Int32 счетчик; Все три переменных: k1, _counter, счетчик являются переменными одного типа, занимают в памяти 4 байта. Использование символов Юникода в написании идентификаторов разрешает использование букв национальных алфавитов, включая русский. Объявить можно переменную любого типа. Важно подчеркнуть, что возможности переменной определяются ее типом. Например, переменную типа bool нельзя использовать для хранения числовых значений с плавающей точкой. Кроме того, тип переменной нельзя изменять в течение срока ее существования. В частности, переменную типа int нельзя преобразовать в переменную типа char. Все переменные в C# должны быть объявлены до их применения. Это нужно для того, чтобы уведомить компилятор о типе данных, хранящихся в переменной, прежде чем он попытается правильно скомпилировать любой оператор, в котором используется переменная. Это позволяет также осуществлять строгий контроль типов в C#. 1.5 Операторы языка С # C# предоставляет ряд операторов. Многие из них поддерживаются встроенными типами и позволяют выполнять базовые операции со значениями этих типов. На рисунке 2 представлены арифметические операторы. Рисунок 2 – Арифметические операторы Операторы +, –, * и / действуют так, как предполагает их обозначение. Их можно применять к любому встроенному числовому типу данных. В операторе отношения , показано на рисунке 3, термин «отношение» означает взаимосвязь, которая может существовать между двумя значениями (больше, равно, …), а термин «логический» в логическом операторе , показано на рисунке 4,- взаимосвязь между логическими значениями «истина» и «ложь». Поскольку операторы отношения дают истинные или ложные результаты, то они нередко применяются вместе с логическими операторами. Рисунок 3 – Операторы отношения Рисунок 4- Логические операторы Результатом выполнения оператора отношения или логического оператора является логическое значение типа bool. В целом, объекты можно сравнивать на равенство или неравенство, используя операторы отношения == и !=. А операторы сравнения <, >, <= или >= могут применяться только к тем типам данных, которые поддерживают отношение порядка. Следовательно, операторы отношения можно применять ко всем числовым типам данных. Но значения типа bool могут сравниваться только на равенство или неравенство, поскольку истинные (true) и ложные (false) значения не упорядочиваются. В структурном программировании базовыми являются три структуры: последовательность, ветвление и цикл. Условные операторы позволяют выполнять ветвление, чтобы не выполнялась каждая строка кода, как она следует в программе. В языке C# — два типа условных операторов: двойного выбора (if) и множественного выбора (switch). Оператор if. Для организации условного ветвления язык C# унаследовал от С и С++ конструкцию if (условие) оператор (операторы) else оператор (операторы); Если по каждому из условий нужно выполнить более одного оператора, эти операторы должны быть объединены в блок с помощью фигурных скобок {…}. В отличие от языков С и С++, в C# условный оператор if может работать только с булевскими выражениями, но не с произвольными значениями вроде -1 и 0. В операторе if могут проверяться сложные логические выражения, и он может содержать операторы else, внутри которых могут вставлены другие операторы if (вложенность операторов). Вторым оператором выбора в C# является оператор switch, который обеспечивает множественное ветвление программы. Следовательно, этот оператор позволяет сделать выбор среди нескольких альтернативных вариантов дальнейшего выполнения программы. Несмотря на то что многонаправленная проверка может быть организована с помощью последовательного ряда вложенных операторов if, во многих случаях более эффективным оказывается применение именно оператора switch. Значение выражения последовательно сравнивается с константами выбора из заданного списка. Как только будет обнаружено совпадение с одним из условий выбора, выполняется последовательность операторов, связанных с этим условием. Выражение в операторе switch должно быть целочисленного типа (char, byte, short или int), перечислимого (enum) или же строкового (string). А выражения других типов, например с плавающей точкой, в операторе switch не допускаются. Зачастую выражение, управляющее оператором switch, просто сводится к одной переменной. Кроме того, константы выбора должны иметь тип, совместимый с типом выражения. В одном операторе switch не допускается наличие двух одинаковых по значению констант выбора. 1.6 Циклы В C# имеются четыре различных вида циклов (for, while, do…while и foreach), позволяющие выполнять блок кода повторно до тех пор, пока удовлетворяется определенное условие. Цикл for в C# предоставляет механизм итерации, в котором определенное условие проверяется перед выполнением каждой итерации. Синтаксис этого оператора показан ниже: for (инициализатор; условие; итератор) оператор (операторы); Инициализатор - это выражение, вычисляемое перед первым выполнением тела цикла (обычно инициализация локальной переменной в качестве счетчика цикла). Инициализация, как правило, представлена оператором присваивания, задающим первоначальное значение переменной, которая исполняет роль счетчика и управляет циклом; Условие - это выражение, проверяемое перед каждой новой итерацией цикла (должно возвращать true, чтобы была выполнена следующая итерация); Итератор – это выражение, вычисляемое после каждой итерации (обычно приращение значения счетчика цикла). Обратите внимание на то, что эти три основные части оператора цикла for должны быть разделены точкой с запятой. Выполнение цикла for будет продолжаться до тех пор, пока проверка условия дает истинный результат. Как только эта проверка даст ложный результат, цикл завершится, а выполнение программы будет продолжено с оператора, следующего после цикла for. Подобно for, while также является циклом с предварительной проверкой. Синтаксис его аналогичен, но циклы while включают только одно выражение: while (условие) оператор (операторы); где оператор — это единственный оператор или же блок операторов, а условие означает конкретное условие управления циклом и может быть любым логическим выражением. В этом цикле оператор выполняется до тех пор, пока условие истинно. Как только условие становится ложным, управление программой передается строке кода, следующей непосредственно после цикла. Как и в цикле for, в цикле while проверяется условное выражение, указываемое в самом начале цикла. Это означает, что код в теле цикла может вообще не выполняться, а также избавляет от необходимости выполнять отдельную проверку перед самим циклом. Цикл do…while (делай — пока) в C# — это версия while с постпроверкой условия. Это значит, что условие цикла проверяется после выполнения тела цикла. Следовательно, циклы do…while удобны в тех ситуациях, когда блок операторов должен быть выполнен как минимум однажды. Ниже приведена общая форма оператора цикла do-while: do {операторы;} while (условие) Цикл do-while выполняется до тех пор, пока условное выражение истинно. Цикл foreach служит для циклического обращения к элементам коллекции (см. далее), представляющей собой группу объектов. В C# определено несколько видов коллекций, каждая из которых является массивом. Ниже приведена общая форма оператора цикла foreach: foreach (тип имя_переменной_цикла in коллекция) оператор; Здесь тип имя_переменной_цикла обозначает тип и имя переменной управления циклом, которая получает значение следующего элемента коллекции на каждом шаге выполнения цикла foreach. А коллекция обозначает циклически опрашиваемую коллекцию, которая здесь и далее представляет собой массив. Следовательно, тип переменной цикла должен соответствовать типу элемента массива. Кроме того, тип может обозначаться ключевым словом var. В этом случае компилятор определяет тип переменной цикла, исходя из типа элемента массива. Это может оказаться полезным для работы с определенного рода запросами. Но, как правило, тип указывается явным образом. Цикл foreach действует следующим образом. Когда цикл начинается, первый элемент массива выбирается и присваивается переменной цикла. На каждом последующем шаге итерации выбирается следующий элемент массива, который сохраняется в переменной цикла. Цикл завершается, когда все элементы массива окажутся выбранными. Цикл foreach позволяет проходить по каждому элементу коллекции (объект, представляющий список других объектов). Формально для того, чтобы нечто можно было рассматривать как коллекцию, это нечто должно поддерживать интерфейс IEnumerable. Примерами коллекций могут служить массивы C#, классы коллекций из пространства имен System.Collection, а также пользовательские классы коллекций. 2. Интегрированная среда разработки Visual Studio 2017 Microsoft Visual Studio 2017 — это набор инструментов для создания программного обеспечения, начиная с планирования до разработки пользовательского интерфейса, написания кода, тестирования, отладки, анализа качества кода и производительности, развёртывания на местах использования и сбора статистических данных по использованию программного продукта. Эти инструменты предназначены для максимально эффективной совместной работы, все они доступны в интегрированной среде разработки (IDE) Visual Studio. Visual Studio можно использовать для создания различных типов приложений, от простых приложений для магазина, игр для мобильных устройств до больших и сложных систем, обслуживающих предприятия и центры обработки данных. Visual Studio обеспечивает поддержку языков программирования C#, C и C++, JavaScript, F# и Visual Basic. Visual Studio хорошо работает и интегрируется со сторонними приложениями. Можно также самостоятельно расширить Visual Studio, создав индивидуальные инструменты для выполнения нужных задач. 2.1 Элементы Windows Forms и классы C# Для создания программного продукта мы будем использовать предоставляемый Visual Studio шаблон Windows Forms. В этом шаблоне осуществляется построение интерфейса пользователя, по средствам перетаскивания из панели элементов на форму различных визуальных компонентов, компонуя их как необходимо для разрабатываемого программного продукта, а также написание программного кода для обработки этого интерфейса. Рассмотрим некоторые визуальные элементы формы, которые потребуются нам для создания программного продукта. Для написания программного кода будем использовать C#, поэтому визуальные компоненты формы будут обеспечиваться классами языка C#. Визуальные компаунды формы по сути являются классами C#, как и сама форма. Form – класс представляющий окно или диалоговое окно, которое составляет пользовательский интерфейс программного продукта. Значение Form является представлением любого окна, отображаемого в программном продукте. Form класс может использоваться для создания стандартных, средства, не имеет границ и перемещаемых окон. Можно также использовать Form класса для создания модальные окна, например, диалоговое окно. Это основной элемент шаблона Windows Forms на котором строиться интерфейс программного продукта. StatusStrip представляет строку состояния, во многом аналогичную панели инструментов ToolStrip. Строка состояния предназначена для отображения текущей информации о состоянии работы приложения. При добавлении на форму StatusStrip автоматически размещается в нижней части окна приложения (как и в большинстве приложений). StatusStrip может содержать различные элементы. В режиме дизайнера мы можем добавить следующие типы элементов: -StatusLabel: метка для вывода текстовой информации. Представляет объект ToolStripLabel. -ProgressBar: индикатор прогресса. Представляет объект ToolStripProgressBar. ProgressBar – класс представляет элемент управления «индикатора выполнения» Windows. Элемент управления Progressbar визуально показывает ход выполнения длительной операции. Ход выполнения операции отображается одним из трёх стилей: Сегменты – число блоков увеличивается слева направо шагами. Непрерывная черта – заполняющая слева направо поле. Блок – прокручивает ProgressBar как бегущую строку. Компонент ListBox отображает список строк равной величины. Высота строк задается в свойстве ItemHeight. Полосы прокрутки автоматически становятся доступными, если все строки не помещаются в окне компонента. -ListBox не дает возможности пользователю редактировать список; -ListBox всегда имеет развернутый список; -ListBox допускает множественную отметку (выбор) строк. Компонент Timer используется для планирования некоторых команд через определенные промежутки времени. Для работы компонента необходимо в свойстве Interval указать время, по истечению которого будет повторяться последовательность действий, указанная в обработчике события OnTimer. После установки свойству Enabled значения True таймер будет активирован и указанные действия будут повторяться с заданной периодичностью. 2.2 Компилирование и сборка кода Сборка проекта – это компиляция исходного кода программы и выполнение действий, необходимых для создания исполняемого файла. В разных языках программирования предусмотрены разные операции сборки, а для простых веб-сайтов сборка не выполняется совсем. Независимо от типа проекта меню «Сборка» стандартное расположение команд компиляции и других действий для создания окончательного действующего программного продукта. Чтобы скомпилировать и запустить код программы одним нажатием клавиши, необходимо нажать F5. Все компиляторы можно настроить через IDE среду. Панель инструментов сборки позволяет указать, следует ли создавать отладочную версию программы с включёнными символами и дополнительной проверкой на наличие ошибок для поддержки точек останова и пошагового режима отладчика или релиз сборки, которая должна получиться. На странице свойств проекта можно настроить дополнительные параметры сборки и многие другие параметры. Для настройки параметров сборки нужно нажать правой кнопкой мыши узел проекта в обозревателе решений и выбирать пункт «Свойства». По мимо этого, сборку можно выполнить из командной строки. Выходные данные сборки, включая сообщения об ошибках или успешном выполнении, отображаются в окне вывода. Окно «Список ошибок» отображает подробные сведения об ошибках сборки. 2.3 Отладка кода Современный отладчик Visual Studio позволяет выполнять отладку кода в локальном проекте, на удалённом устройстве или в эмуляторе устройств, таких как Android или Windows Phone. Можно просматривать код с шагом в один оператор, проверяя значения переменных, пошагово выполнять многопоточные приложения, а также задать точки останова, которые срабатывают только при выполнении указанного условия. Это всё можно настроить в самом редакторе кода. Сам отладчик имеет ряд окон, в которых можно просматривать локальные переменные, стек вызовов и другие аспекты среды выполнения и выполнять операции с ними. Эти окна доступны из меню «Отладка». Окно интерпретации позволяет ввести выражение и сразу увидеть его результат. IntelliTrace регистрирует все вызовы методов и другие события в работающей программе .NET и может помочь быстро найти источник проблемы. 3 Практическая часть 3.1 Проектирование игры «Печатная машинка» В форме будут появляться случайные буквы. Если игрок вводит буквы правильно, они исчезают — уровень растет и буквы появляются все чаще. Если вся форма заполнена буквами игра окончена. Создаем WinForm проект назовем его WinFormApp17. 1) для свойств формы выставляем параметры, как указано на рисунке 5. Рисунок 5- Свойства формы. 2) Перетаскиваем на форму элемент ListBox, для этого элемента выставляем свойства как указано на рисунке 6. Dock=Fill; MultiColumn=True; Font Size=72 Рисунок 6- Свойства элемента ListBox 3) Теперь перетаскиваем на форму элемент Timer 4) Далее, двойным нажатием по элементу StatusStrip в панели элементов, добавим его к форме свойства. SizingGrip=False; 5) Добавляем в элемент StatusStrip 4 метки StatusLabel, рисунок 7. Рисунок 7- Элемент StatusLabel 6) Для 1 метки выставляем следующие св-ва: Name=correctLabel; Text=Correct: 0; 7) Для 2 метки выставляем след. св-ва: Name=missedLabel; Text=Missed: 0; 8) Для 3 метки выставляем след. св-ва: Name=totalLabel; Text=Total: 0; 9) Для 4 метки выставляем след. св-ва: Name=accuracyLabel; Text=Accuracy: 0%; 10) Теперь, добавляем в StatusStrip, еще один StatusLabel, для него след. св-ва: Spring:True; TextAlign: MiddleRight; Text: Difficulty; 11) Далее, добавляем в StatusStrip элемент ProgressBar, он находится там же где StatusLabel, его св-ву Name присваиваем значение difficultyProgressBar, а свойству Maximum=701 Теперь форма должна выглядеть так, как показано на рисунке 8. Рисунок 8- Form1 12) Теперь переходим к элементу Timer, выберите элемент timer1 и выставьте для него следующие св-ва: Interval:800; 13) Добавляем к проекту новый класс Stats, он нам понадобиться для статистики. 14) Нажимаем на элемент timer1 два раз левой кнопкой мыши, создается обработчик события Tick. Добавляем следующий код: public partial class Form1 : Form { //Добавляем экземпляр класса Random, он нам понадобиться для получения случайной буквы. Random random = new Random(); public Form1() { InitializeComponent(); timer1.Enabled = true; //Делаем таймер активным timer1.Start(); //Запускаем таймер } private void timer1_Tick(object sender, EventArgs e) { 14) Добавляем к проекту новый класс Stats, он нам понадобиться для статистики. 15) Добавляем в него следующий код:
16) Теперь, переходим обратно в класс Form1.cs и создаем в нем экземпляр класса Stats, как показано на рисунке 9 . Рисунок 9- Создание экземпляра класса Stats 17) Теперь нужно создать обработчик нажатия кнопки пользователем, для этого переходим в конструктор формы, выбираем форму и переходим в события, там ищем событие Key_Down, нажимаем на него 2 раза. 18) Внутри пишем следующий код:
19) Запускаем. Тестирование Тестирование программного кода – процесс выполнения программного кода, направленный на выявление существующих в нем дефектов. Под дефектом здесь понимается участок программного кода, выполнение которого при определенных условиях приводит к неожиданному поведению системы (т.е. поведению, не соответствующему требованиям). Неожиданное поведение системы может приводить к сбоям в ее работе и отказам, в этом случае говорят о существенных дефектах программного кода. Некоторые дефекты вызывают незначительные проблемы, не нарушающие процесс функционирования системы, но несколько затрудняющие работу с ней. В этом случае говорят о средних или малозначительных дефектах. Задача тестирования при таком подходе – определение условий, при которых проявляются дефекты системы и протоколирование этих условий. В задачи тестирования обычно не входит выявление конкретных дефектных участков программного кода и никогда не входит исправление дефектов – это задача отладки, которая выполняется по результатам тестирования системы. Цель применения процедуры тестирования программного кода – минимизация количества дефектов, в особенности существенных, в конечном продукте. Тестирование само по себе не может гарантировать полного отсутствия дефектов в программном коде системы. Однако, в сочетании с процессами верификации и валидации, направленными на устранение противоречивости и неполноты проектной документации (в частности – требований на систему), грамотно организованное тестирование дает гарантию того, что система удовлетворяет требованиям и ведет себя в соответствии с ними во всех предусмотренных ситуациях. Поскольку современные программные системы имеют весьма значительные размеры, при тестировании их программного кода используется метод функциональной декомпозиции. Система разбивается на отдельные модули (классы, пространства имен и т.п.), имеющие определенную требованиями функциональность и интерфейсы. После этого по отдельности тестируется каждый модуль – выполняется модульное тестирование. Затем выполняется сборка отдельных модулей в более крупные конфигурации – выполняется интеграционное тестирование, и наконец, тестируется система в целом – выполняется системное тестирование. В ходе модульного тестирования каждый модуль тестируется как на соответствие требованиям, так и на отсутствие проблемных участков программного кода, могущих вызвать отказы и сбои в работе системы. Как правило, модули не работают вне системы – они принимают данные от других модулей, перерабатывают их и передают дальше. Для того, чтобы с одной стороны, изолировать модуль от системы и исключить влияние потенциальных ошибок системы, а с другой стороны – обеспечить модуль всеми необходимыми данными, используется тестовое окружение. Задача тестового окружения – создать среду выполнения для модуля, эмулировать все внешние интерфейсы, к которым обращается модуль. Типичная процедура тестирования состоит в подготовке и выполнении тестовых примеров (также называемых просто тестами). Каждый тестовый пример проверяет одну «ситуацию» в поведении модуля и состоит из списка значений, передаваемых на вход модуля, описания запуска и выполнения переработки данных – тестового сценария, и списка значений, которые ожидаются на выходе модуля в случае его корректного поведения. Тестовые сценарии составляются таким образом, чтобы исключить обращения к внутренним данным модуля, все взаимодействие должно происходить только через его внешние интерфейсы. Выполнение тестового примера поддерживается тестовым окружением, которое включает в себя программную реализацию тестового сценария. Выполнение начинается с передачи модулю входных данных и запуска сценария. Реальные выходные данные, полученные от модуля в результате выполнения сценария сохраняются и сравниваются с ожидаемыми. В случае их совпадения тест считается пройденным, в противном случае – не пройденным. Каждый не пройденный тест указывает либо на дефект в тестируемом модуле, либо в тестовом окружении, либо в описании теста. Совокупность описаний тестовых примеров составляет тест-план – основной документ, определяющий процедуру тестирования программного модуля. 4.1 Черный ящик Тестирование по требованиям или тестирование "черного ящика" подразумевает неиспользование сведений о структуре исходного кода. Все тестовые примеры составляются только на основе требований, т.е. мы не видим, что находится внутри SUT и как оно работает. Единственное, что доступно - это то, что SUT должно делать, внешние эффекты поведения программного обеспечения. При тестировании "черного ящика" удобно использовать методы трех, пяти или семи точек. При тестировании по требованиям используется понятие "покрытие" требований тестами. Тест покрывает требования, если он полностью проверяет выполнение каждого отдельного требования. При этом возможны как случаи, когда для проверки одного требования необходимо несколько тестовых примеров, так и случаи, когда достаточно одного тестового примера для проверки нескольких требований. 4.2 Стеклянный (белый) ящик Тестирование по коду или тестирование "белого ящика" основывается на проверке кода SUT, когда в ходе выполнения SUT проверяется выполнение каждого блока кода. При тестировании "белого ящика" основная задача - это выполнение всего кода для проверки работоспособности всех его ветвей. При этом ставится задача покрытия кода тестами и рассматриваются разные уровни покрытия. Один из уровней покрытия (покрытие операторов) - это выполнение всех операторов, т.е. при выполнении всех тестовых примеров в итоге должны выполниться все операторы (не в каждом тестовом примере, а по результатам выполнения всех тестовых примеров). Список использованных источников 1. Баженова И.Ю. Языки программирования: Учебник для студентов учреждений высш. проф. образования / И.Ю. Баженова; Под ред. В.А. Сухомлин. — М.: ИЦ Академия, 2018. — 368 c. 2. Хейлсберг А. Язык программирования C#. Классика Computers Science / А. Хейлсберг, М. Торгерсен, С. Вилтамут. — СПб.: Питер, 2016. — 784 c. 3. Бьянкуцци Ф. Пионеры программирования. Диалоги с создателями наиболее популярных языков программирования / Ф. Бьянкуцци, Ш. Уорден. — СПб.: Символ-плюс, 2018. — 608 c. 4. Васильев А.Н. Программирование на C# для начинающих. Особенности языка / А.Н. Васильев. - М.: ЭКСМО, 2017. - 128 c. 5. Гуриков С.Р. Введение в программирование на языке Visual C#: Уч. пос / С.Р. Гуриков. - М.: Форум, 2013. - 448 c. 6. Рихтер Дж. CLR via C#. Программирование на платформе Microsoft .NET Framework 4.5 на языке C# / Дж. Рихтер. - СПб.: Питер, 2019. - 896 c. 7. Павловская Т.А. C#. Программирование на языке высокого уровня: Учебник для вузов / Т.А. Павловская. - СПб.: Питер, 2013. - 432 c. 8. Васильев А.Н. Программирование на C# для начинающих. Основные сведения / А.Н. Васильев. - М.: ЭКСМО, 2009. - 384 c. 9. Понамарев В. Программирование на C++/C# в Visual Studio.NET 2003 / В. Понамарев. - СПб.: BHV, 2004. - 352 c. |