Отделение интерфейса от реализации

Поскольку некоторые классы могут использовать другие классы, тестирование отдельного класса часто распространяется на связанные с ним.

Для большинства популярных языков программирования высокого уровня существуют инструменты и библиотеки модульного тестирования. Некоторые из них:

Для Java и Groovy:

· JUnit JUnit.org

· TestNG testNG.org

· JavaTESK UniTESK.ru

Для C:

· CUnit cunit

· CTESK UniTESK.ru

Интеграционное тестирование

Интеграционное тестирование - это тестирование части системы, состоящей из двух и более модулей.

Цель- поиск дефектов, связанных с ошибками в реализации и интерпретации интерфейсного взаимодействия между модулями.

Интеграционное тестирование в качестве входных данных использует модули, над которыми было проведено модульное тестирование, группирует их в более крупные множества, выполняет тесты, определённые в плане тестирования для этих множеств, и представляет их в качестве выходных данных и входных для последующего системного тестирования.

С технологической точки зрения интеграционное тестирование является количественным развитием модульного, поскольку так же, как и модульное тестирование, оперирует интерфейсами модулей и подсистем и требует создания тестового окружения, включая заглушки (Stub) на месте отсутствующих модулей.

Основная разница между модульным и интеграционным тестированием состоит в целях, то есть в типах обнаруживаемых дефектов, которые, в свою очередь, определяют стратегию выбора входных данных и методов анализа. В частности, на уровне интеграционного тестирования часто применяются методы, связанные с покрытием интерфейсов, например, вызовы функций или методов, или анализ использования интерфейсных объектов таких, как глобальные ресурсы, средства коммуникаций, предоставляемые операционной системой.

Существует несколько методов проведения интеграционного тестирования:

1) Монолитный, характеризующийся одновременным объединением всех модулей в тестируемый комплекс.

2) Инкрементальный, характеризующийся пошаговым (помодульным) наращиванием комплекса программ с пошаговым тестированием собираемого комплекса.

В инкрементальном методе выделяют две стратегии добавления модулей:

А) «Сверху вниз» и соответствующее ему восходящее тестирование.

Б) «Снизу вверх» и соответственно нисходящее тестирование

Особенности нисходящего тестирования заключаются в следующем: организация среды для исполняемой очередности вызовов оттестированными модулями тестируемых модулей, постоянная разработка и использование заглушек, организация приоритетного тестирования модулей, содержащих операции обмена с окружением, или модулей, критичных для тестируемого алгоритма.

Особенности восходящего тестирования заключаются в организации порядка сборки и перехода к тестированию модулей, соответствующему порядку их реализации.

Билет 16

Регрессионное тестирование

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

Главная проблема регрессионноготестирования - выбор между полным и частичным перетестированием и пополнением тестовых наборов.

Регрессионное тестирование включает new bug-fix — проверка исправления вновь найденного дефекта, old bug-fix — проверка, что исправленный ранее и верифицированный дефект не воспроизводится в системе снова, а также side-effect — проверка того, что не нарушилась работоспособность работающей ранее функциональности, если её код мог быть затронут при исправлении некоторых дефектов в другой функциональности.

Поскольку регрессионное тестирование представляет собой повторное проведение цикла обычного тестирования, виды регрессионного тестирования совпадают с видами обычного тестирования. Можно говорить, например, о модульном регрессионном тестировании или о функциональном регрессионном тестировании.

Регрессионное тестирование является неотъемлемой частью экстремального программирования. В этой методологии проектная документация заменяется на расширяемое, повторяемое и автоматизированное тестирование всего программного пакета на каждой стадии процесса разработки программного обеспечения.

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

Билет 17

Модели открытых систем

Открытая система - это система, которая состоит из компонентов, взаимодействующих друг с другом через стандартные интерфейсы.

Сетевая модель OSI (англ. open systems interconnection basic reference model — базовая эталонная модель взаимодействия открытых систем) — сетевая модель стека сетевых протоколов OSI/ISO.

Семиуровневая модель взаимодействия открытых систем (Open SystemsInterconnection, OSI), предложенная Международной организацией по стандартизации. Модель ISO/ OSI предполагает, что все сетевые приложения можно подразделить на семь уровней, для каждого из которых созданы свои стандарты и общие модели. В результате задача сетевого взаимодействия делиться на меньшие и более легкие задачи, обеспечивается совместимость между продуктами разных производителей и упрощается разработка приложений за счёт создания отдельных уровней и использования уже существующих реализаций. Отделение интерфейса от реализации - student2.ru

Физический уровень

Физический уровень описывает физические свойства (например, электромеханические характеристики) среды и сигналов, переносящих информацию. Это физические характеристики кабелей и разъемов, уровни напряжений и электрического сопротивления и.т.д.

Канальный уровень

Канальный уровень обеспечивает перенос данных по физической среде. Он поделен на два подуровня: управления логическим каналами управления доступом к среде. Такое деление позволяет одному уровнюLLC использовать различные реализации уровня MAC.

Сетевой уровень

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

Транспортный уровень

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

Сеансовый уровень

Сеансовый уровень обеспечивает установление и разрыв сеансов, и управление ими. Сеанс – это логическое соединение между двумя конечными пунктами. Наилучший пример этой модели – телефонный звонок. Сеансовый уровень следит также за очередностью передачи данных. Представительный уровень

Представительный уровень позволяет двум стекам протоколов «договариваться» о синтаксисе (представлении) передаваемых друг другу данных. Поскольку гарантий одинакового представления информации нет, то этот уровень при необходимости переводит данные из одного вида в другой.

Прикладной уровень

Прикладной уровень – высший в модели ISO/ OSI. На этом уровне выполняться конкретные приложения, которые пользуются услугами представительного уровня (и косвенно – всех остальных). Это может быть обмен электронной почтой, пересылка файлов и любое другое сетевое приложение.

Билет 18

Математическая культура и сборочное программирование

Сборочное программирование - технология программирования, при которой программа собирается посредством повторного использования уже известных фрагментов программ. Этот термин введен в 1978 г.

Сборка может осуществляться вручную или быть задана на некотором языке сборки, или извлечена полуавтоматическим образом из спецификации задачи.

Сборочное программирование - технология программирования, при которой программа собирается посредством повторного использования уже известных фрагментов программ.

Сборка может осуществляться вручную или быть задана на некотором языке сборки, или извлечена полуавтоматическим образом из спецификации задачи. В статье [Цейтин 1990] изложены основные направления для создания техники сборочного программирования.

* Выработка стиля программирования, соответствующего принятым принципам модульности.

* Повышение эффективности межмодульных интерфейсов; важность аппаратной поддержки модульности.

* Ведение большой базы программных модулей; решение проблемы идентификации модулей и проверки пригодности по описанию интерфейса. Модули должны стать “программными кирпичиками’, из которых строится программа.

Сборочное программирование тесно связано с методом повторного использования кода, причем как исходного, так и бинарного. Выделяют несколько разновидностей технологических подходов сборочного программирования, которые в значительной степени определяются базисной методологией.

* Модульное сборочное программирование. Этот подход был исторически первым и базировался на процедурах и функциях методологии структурного императивного программирования.

* Объектно-ориентированное сборочное программирование. Подход базируется на методологии объектно-ориентированного программирования и предполагает распространение библиотек классов в виде исходного кода и упаковку классов в динамически компонуемую библиотеку.

* Компонентное сборочное программирование. Основные идеи подхода — распространение классов в бинарном виде и предоставление доступа к методам класса через строго определенные интерфейсы, что позволяет снять проблему несовместимости компиляторов и обеспечивает смену версий классов без перекомпиляции использующих их приложений. Существуют конкретные технологические подходы, поддерживающие компонент сборочное программирование — СОМ (DСОМ, СОМ+), СОRВА, .Net.

* Аспектно-ориентированное сборочное программирование. Концепция компонента в этом случае дополняется концепцией аспекта — варианта реализации критичных по эффективности процедур. аспектно-ориентироное сборочное программирование заключается в сборке полнофункциональных приложений из многоаспектных компонентов, инкапсулирующих различные варианты реализации.

Билет 19

Введение в программирование на кластерах и графических процессорах, CUDA

"Кластерное программирование" – программирование с использованием понятия «кластера» - подмножества будущего текста программы и соответствующих инструментальных средств по созданию этих кластеров, сборке и компоновке их в готовые исходные тексты программы в привычном текстовом формате или преобразованию их непосредственно в исполняемый машинный код.

Каждый кластер размещается для простоты в отдельной таблице, в данном случае – таблице системы управления базой данных (СУБД) MS Access 2010. В таблице размещаются фрагменты будущего исходного текста программы. Один кластер содержит один или несколько фрагментов текста, объединённых одной мыслью, идеей по внесению изменений или дополнений в тело программы (и других кластеров). Чаще всего это идея по разработке и включению (вкраплению) в программу новой функции или улучшения, расширения возможностей или детализации существующей функции.

Кластер должен решать задачу «наделения» программы новой функцией от начала и до конца, пусть даже и не во всех деталях, например, если надо, решать такие вопросы, как объявление файлов и переменных, обнуление данных, открытие файлов, чтение файлов внутри цикла, вычисления и другие операторы, вывод результатов, закрытие файлов и т.д.

Графические технологии исторически первыми использовались для программирования ГПУ (графический процессор). С появлением низкоуровневых средств программирования графические технологии отошли на второй план. Сейчас они используются в приложениях, где высокая производительность требуется именно для решения графических задач, а также в приложениях, где требуется высокий уровень совместимости. К таким приложениям относятся:

Обработка изображений и видео;

Визуальные эффекты в компьютерных играх;

Программирование графического интерфейса пользователя.

Графическая технология программирования включает в себя интерфейс программирования трехмерной графики и язык написания шейдеров. В настоящее время существует два интерфейса программирования трехмерной графики: OpenGL и DirectX. Любой современный шейдерный язык представляет собой C-подобный язык программирования, из которого исключены указатели и добавлены специфические для ГПУ типы данных и операции.

CUDA (англ. Compute Unified Device Architecture) — программно-аппаратная архитектура параллельных вычислений, которая позволяет существенно увеличить вычислительную производительность благодаря использованию графических процессоров фирмы Nvidia.

CUDA SDK позволяет программистам реализовывать на специальном упрощённом диалекте языка программирования Си алгоритмы, выполнимые на графических процессорах Nvidia, и включать специальные функции в текст программы на Си. Архитектура CUDA даёт разработчику возможность по своему усмотрению организовывать доступ к набору инструкций графического ускорителя и управлять его памятью.

Билет 20

Основы HTML и Latex

HTML (от англ. HyperTextMarkupLanguage — «язык гипертекстовой разметки») — стандартный язык разметки документов во Всемирной паутине. Большинство веб-страниц содержат описание разметки на языке HTML (или XHTML). Язык HTML интерпретируется браузерами; полученный в результате интерпретации форматированный текст отображается на экране монитора компьютера или мобильного устройства.

HTML-документ — это обычный текстовый документ, может быть создан как в обычном текстовом редакторе (Блокнот), так и в специализированном, с подсветкой кода(Notepad++). HTML-документ имеет расширение.html.

Язык HTML является приложением SGML (стандартного обобщённого языка разметки) и соответствует международному стандарту ISO 8879.

Во всемирной паутине HTML-страницы, как правило, передаются браузерам от сервера по протоколам HTTP или HTTPS, в виде простого текста или с использованием шифрования.

HTML — теговый язык разметки документов. Любой документ на языке HTML представляет собой набор элементов, причём начало и конец каждого элемента обозначается специальными пометками — тегами. Элементы могут быть пустыми, то есть не содержащими никакого текста и других данных (например, тег перевода строки <br>).Ит.д

Основные понятия:
Элемент - это конструкция языка HTML, содержащая какие-то данные, например:
<B>текст</B> - это элемент, в котором можно выделить три части:

  • <B> - открывающий тег (англ. tag);
  • текст - содержимое элемента (в данном примере, текст);
  • </B> - закрывающий тег;

Элементы могут содержать какие-то параметры, называемые атрибутами, которые содержатся в открывающем теге, например: <BODY bgcolor="blue" text="yellow">

LaTeX – это система набора текста, основанная на специальном скриптовом языке программирования. Латех не так прост и интуитивно понятен, как, например, Microsoft Word, но, потратив один раз время на его изучение, вы будете настолько удивлены результатом, что никакими вордами вы в дальнейшем пользоваться не будете.

Дело в том, что латех уже давно является стандартом де-факто при наборе научных статей, курсовых и дипломных работ, технических спецификаций, учебников и т. д. Главным преимуществом латеха является абсолютно одинаковый внешний вид готовых страниц во всех операционных системах и непревзойденное до сих пор качество полиграфических текстов и математических формул. Кроме этого, скриптовый язык латеха – это универсальный язык для обмена формулами. Математики из разных стран легко понимают друг друга, если пишут формулы на этом языке.

Во многих математических пакетах, например, Maple, Mathematica, Maxima возможен экспорт документов в формат *.tex. Для представления формул в Википедии также используется TeX-нотация. Язык ТеХ (читается как «тех»), который используется в латехе, был придуман в 70- е годы прошлого века американским математиком и программистом Дональдом Кнутом. В 1994-м вышла первая версия издательской системы LaTeX, основанная на ТеХ, которая значительно упрощала и ускоряла работу с ним. Но стоит отметить, что все возможности были заложены в ТеХ изначально, таким образом, возможно программировать и на чистом ТеХе и получать такой же результат. Как видите, профессиональная система для набора текстов существовала еще до Microsoft Office, но ее популярность не такая высокая, так как у нас она используется в основном среди научных работников.

Наши рекомендации