Файл: Отладка и тестирование программ: основные подходы и ограничения (Теоретические аспекты отладки и тестирования ПО).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 28.03.2023

Просмотров: 100

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Введение

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

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

Разберем немного подробней каждый этап и немного определимся с терминологией:

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

Тестирование программного обеспечения — это процесс исследования программного обеспечения, в результате которого достигаются две цели:

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

Основным международным стандартом, определяющим качество программного обеспечения является стандарт ISO/IEC 25010:2011 (International Organization for Standardization ISO/IEC 25010:2011 [сайт] URL: https://www.iso.org/standard/35733.html ), в Российской Федерации эту функцию выполняет ГОСТ Р ИСО/МЭК 25010-2015, а функцию стандартизации тестирования программного обеспечения ГОСТ Р 56920-2016 (Федеральное агентство по техническому регулированию и метрологии ГОСТ Р 56920-2016 [сайт] URL: http://protect.gost.ru/document.aspx?control=7&id=203397).

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

  1. Конечный поиск причин возникновения ошибки в программе
  2. Устранение возникновения причин найденных ошибок

От надежного функционирования определенных типов программного обеспечения может зависеть успех бизнеса – работы финансовых и промышленных компаний – или даже… человеческая жизнь. Поэтому на его самое тщательное проектирование, разработку и тестирование не жалеют ни времени, ни денег. (Тестирование программного обеспечения. Фундаментальные концепции менеджмента бизнес-приложений / Сэм Канер, Джек Фолк, Енг Кек Нгуен 2001. - 9с)


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

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

Теоретические аспекты отладки и тестирования ПО

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

Во вторую очередь мы рассмотрим средства и подходы к отладке программного обеспечения и рассмотрим теоретическую составляющую этой неотъемлемой части написания любого программного продукта.

1. Теория тестирования программного обеспечения

1.1 Критерии качества программного обеспечения

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

Так вот ответ на этот вопрос не так прост: качество программного обеспечения с точки зрения программиста и конечного пользователя сильно различается и несет в себе совсем различные критерии. Такие критерии делятся на два вида:

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

Рассмотрим же теперь свойства, которые так или иначе подпадают под ту или другую характеристику.

К внешним характеристикам программного обеспечения относятся:

Корректность — отсутствие или наличие неточностей в спецификации, проекте и конечной реализации системы

Практичность — легкость обучения использованию системы и ее применение на практике

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

Надежность — это свойство отвечает за выполнение программой возложенного на нее функционала в определенных заранее известных условиях; также в это понятие входит средний интервал времени между отказами программного обеспечения в выполнении своих функций.

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

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

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

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

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


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

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

И так, к внутренним характеристикам программного обеспечения относятся:

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

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

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

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

Удобочитаемость — свойство, определяющее то, на сколько легко читать код программы и насколько легко понять его принцип действия, особенно это касается детального уровня чтения кода (на уровне операторов).

Тестируемость — потенциал программы к ее блочному и системному тестированию и проверки соответствия заявленным требованиям.

(Совершенный код / Стив Макконнелл 2010. – 456-458 с)

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

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


Таблица взята из книги Совершенный код / Стив Макконнелл 2010. – 458 с.

Из данной таблицы видно, что связи организованны очень интересно и влияние не всегда оказывается очевидным образом. Например, повышая целостность программы, вы снижаете ее уровень эффективности или же акцентируя внимание на правильности программы, вы снизите ее живучесть. Эти связи обязательно надо учитывать при тестировании разрабатываемого программного обеспечения и вовремя корректировать силы, затрачиваемые на тот или иной критерий качества разрабатываемого продукта.

1.2 Методики проведения тестирования программного обеспечения

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

Первый метод тестирования, который мы рассмотрим, это Black-Box Testing (Functional) или же тестирование методом Черного Ящика (Функциональное тестирование). Основной принцип данного метода заключается в том, что тестирующий не имеет доступа к внутренним составляющим программы (коду и базам данных), к которым имеют доступ программисты и операторы баз данных, а имеет лишь доступ к тому функционалу управления, к которому имеет доступ обычный пользователь. Соответственно в таком режиме, тестирующий может лишь подавать какие-то данные на вход и анализировать информацию на выходе программы, в данной ситуации программа как будто и является тем самым магическим черным ящиком (с одной стороны в ящик что-то кладут, с другой забирают результат и анализируют принцип работы ящика). Такой метод тестирования хорош, когда надо проверить программу на соответствие заявленным функциональным требованиям, то есть способность программы решать поставленные пользователем задачи при определенных условиях.

Второй метод тестирования, это White-Box Testing (Structural) или же тестирование методом Белого Ящика (Структурное тестирование). Принцип этого метода полностью противоположен методу Черного Ящика и подразумевает, в первую очередь, анализ внутренних составляющих программного продукта. Данный метод может осуществляться только тестирующим со знанием используемого языка программирования и способного анализировать внутреннюю структуру программы. Тестирование методом Белого Ящика подразумевает, что тестирующий имеет полный доступ к коду и всем данным программы. Данная методика тестирования отлично подходит для внутреннего анализа и проверки и улучшения внутренних характеристик качества программного обеспечения.