Статья опубликована в рамках: Научного журнала «Студенческий» № 14(226)
Рубрика журнала: Информационные технологии
Скачать книгу(-и): скачать журнал часть 1, скачать журнал часть 2, скачать журнал часть 3, скачать журнал часть 4, скачать журнал часть 5
АНАЛИЗ ДЕФЕКТОВ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ И МЕТОДОВ ИХ ОБНАРУЖЕНИЯ
АННОТАЦИЯ
В статье рассмотрены основные виды дефектов программного обеспечения (далее – ПО), встречающиеся как на стадии разработки, так и в процессе эксплуатации программного продукта. Рассмотрены причины их возникновения и последствия влияния, в случае несвоевременного обнаружения. Дефекты систематизированы на основные виды по источнику появления, по степени их влияния на работоспособность ПО, по приоритетности исправления. С целью устранения дефектов ПО представлен обзор методов их выявления и приведена соответствующая классификация. В качестве наиболее перспективного метода обнаружения дефектов ПО рекомендован метод машинного обучения.
ABSTRACT
The article discusses the main types of software defects that occur both at the development stage and during the operation of a software product. The reasons for their occurrence and the consequences of their influence, in case of untimely detection, are considered. Defects are systematized into main types according to the source of occurrence, according to the degree of their impact on the performance of the software, according to the priority of correction. In order to eliminate software defects, an overview of methods for their detection is presented and the corresponding classification is given. Machine learning is recommended as the most promising method for detecting software defects.
Ключевые слова: дефект, машинное обучение, обнаружение, методы.
Keywords: defect, machine learning, detection, methods.
Одной из актуальных проблем разработки и внедрения ПО является наличие дефектов, то есть ошибок в коде программы, приводящих к снижению качества продукции. Причинами появления дефектов могут стать некачественная организация процесса разработки ПО, недостаточная квалификация и опыт разработчиков, недостаточность ресурсов на разработку. Затраты на выявление и устранение дефектов могут составлять до 80% от общей стоимости ПО [1]. При этом чем раньше будет обнаружен дефект, тем меньше ущерба будет нанесено разработчику и эксплуатанту ПО.
Существует множество техник и технологий для определения дефектов: начиная от ручных средств, заканчивая автоматизированным тестированием ПО. Однако, чем больше объем исходного кода, тем больше трудозатрат необходимо для поддержания качества программной системы, при этом ресурсов может не хватать. В данном случае решением могут стать методы машинного обучения, которые на основе ранее написанного кода позволят дать вероятностную оценку нахождения дефекта в том или ином месте программы.
Согласно стандартному глоссарию терминов и определений, используемых в тестировании ПО, дефект – это изъян в компоненте или системе, который может привести компонент или систему к невозможности выполнить требуемую функцию [2]. Другими словами, дефект – это отклонение от первоначальных бизнес-требований, логическая ошибка в исходном коде программы. Дефект не оказывает влияния на функционирование ПО до тех пор, пока он не будет обнаружен при эксплуатации программы. Это может привести к тому, что продукт не будет удовлетворять потребностям пользователя, а также к отказам компонента или системы. Последствия программной ошибки для пользователя могут быть серьезны. Например, дефект может поставить под угрозу бизнес-репутацию, государственную безопасность, бизнес или безопасность пользователей или окружающую среду [3].
Выделяют три вида дефектов: программные, технические, архитектурные.
- Программные ошибки – возникают из-за несовершенства исходного кода конечного продукта.
- Технические дефекты – сводятся к доступу тех или иных функций готового решения или его дизайна.
- Архитектурные ошибки – это ошибки, вызванные внешними факторами, которые заранее не были учтены при проектировании решения, вследствие чего приложение демонстрирует результат работы, отличный от ожидаемого [4].
Также с точки зрения степени влияния на работоспособность ПО можно выделить пять видов.
- Блокирующий дефект (англ. blocker) – ошибка, которая приводит программу в нерабочее состояние.
- Критический дефект (англ. critical), приводящий некоторый ключевой функционал в нерабочее состояние, существенное отклонение от бизнес-логики, неправильная реализация требуемых функций и т.д.
- Серьезная ошибка (англ. major), свидетельствующая об отклонении от бизнес-логики или нарушающая работу программы (не имеет критического воздействия на приложение).
- Незначительный дефект (англ. minor), не нарушающий функционал тестируемого приложения, но который является несоответствием ожидаемому результату.
- Тривиальный дефект (англ. trivial), не имеющий влияние на функционал или работу программы, но который может быть обнаружен визуально.
Помимо этого, по приоритетности исправления дефекты могут быть с высоким, средним и низким приоритетом.
- С высоким приоритетом (англ. high) – должен быть исправлен как можно быстрее, т.к. критически влияет на работоспособность программы.
- Со средним приоритетом (англ. medium) – дефект должен быть обязательно исправлен, но он не оказывает критическое воздействие на работу.
- С низким приоритетом (англ. low) – ошибка должна быть исправлена, но не имеет критического влияния на программу и устранение может быть отложено [5].
На рисунке 1 представлена классификация дефектов на основе приведенного описания.
Рисунок 1. Классификация дефектов ПО
Основными причинами возникновения дефектов являются:
- сложность реализации задачи;
- сжатые сроки разработки;
- несовершенство документации;
- изменение требований;
- недостаточная квалификация и опыт разработчиков;
- неправильная организация процесса разработки [4].
Дефекты в программе могут быть обнаружены не сразу и при этом иметь отрицательное влияние на процесс ее использования. При позднем обнаружении дефектов снижаются качество и надежность ПО, увеличиваются затраты на его переработку, проявляются негативные последствия. Своевременное выявление и исправление дефектов играют большую роль в жизненном цикле ПО, помогает улучшить качество разрабатываемых систем [6].
Для выявления дефектов ПО используются различные методы, которые делятся на три категории.
- Статические методы – методы, при которых ПО тестируется без какого-либо выполнения программы (системы). При этом программные продукты проверяются вручную или с помощью различных средств автоматизации.
- Динамические методы – в данных методах ПО тестируется путем выполнения программы. С помощью этого метода можно обнаружить различные типы дефектов:
- функциональные – возникают, когда функции системы работают не в соответствии со спецификацией. Данные дефекты находятся благодаря функциональному тестированию, которое подразделяется на:
- модульное – используется для тестирования отдельно взятого модуля программы (помогает разработчикам узнать, правильно ли работает каждый блок кода в изоляции от остальных);
- интеграционное – позволяет убедиться, что при взаимодействии интегрированные блоки работают без ошибок;
- системное – программное обеспечение тестируется как единое целое, проверяется функциональность, безопасность и переносимость;
- регрессионное – проверка ранее протестированной программы, позволяющая убедиться, что внесенные изменения не повлекли за собой появления дефектов в той части программы, которая не менялась;
- приемочное – комплексное тестирование, необходимое для определения уровня готовности системы к последующей эксплуатации;
- дымовое (англ. smoke) – проверка программного обеспечения на стабильность и наличие явных ошибок [7];
- нефункциональные – соответственно затрагивают нефункциональные аспекты приложения, могут повлиять на производительность, удобство использования и т.д.
3. Эксплуатационные методы – методы, при которых дефект обнаруживается пользователями, клиентами или контролирующим персоналом, то есть в результате сбоя.
На рисунке 2 представлена классификация рассматриваемых методов. Все методы важны и необходимы в процессе управления дефектам. При их объединении достигается наиболее качественный результат, за счет чего повышается производительность ПО. На ранней стадии наиболее эффективными методами являются статические. Они позволяют снизить затраты, необходимые для исправления дефектов, и сводят к минимуму их влияние [6].
Рисунок 2. Классификация методов для обнаружения дефектов ПО
Список литературы:
- Викторов, Д.С. Методика статического анализа для поиска дефектов естественной семантики программных объектов и ее программная реализация на базе инфраструктуры компилятора LLVM и фронтенда Clang [Текст] / Д.С. Викторов, Е.Н. Жидков, Р.Е. Жидков // Журнал Сибирского федерального университета. – 2018. – С. 801-810.
- International Software Testing Qualifications Board. Стандартный глоссарий терминов, используемых в тестировании программного обеспечения. Версия 2.3 (от 9 июля 2014 года) [Текст] / ред. пер. Александр Александров. – С. 17.
- ГОСТ Р 56920 – 2016. Системная и программная инженерия. Тестирование программного обеспечения. Часть 1. Понятия и определения. – М.: Стандартинформ, 2016. – С. 9.
- Юхименко, Н.В. Обзор методов прогнозирования дефектов программного обеспечения [Текст] / Н.В. Юхименко, Ю.С. Белов // Программные продукты, системы и алгоритмы. – 2019. – №1 – С. 2.
- QR Solutions. List of Defects in Software Testing | Severity & Priority in Testing [Электронный ресурс]: Режим доступа URL: https://qrsolutions.com.au/defects-in-software-testing/ (Дата обращения: 10.11.2022).
- GeeksforGeeks. Techniques to Identify Defects [Электронный ресурс]: Режим доступа URL: https://www.geeksforgeeks.org/techniques-to-identify-defects/ (Дата обращения: 10.11.2022).
- Logrocon Software Engineering. Что такое тестирование программного обеспечения? Определение, основы и типы [Электронный ресурс]: Режим доступа URL: https://logrocon.ru/news/testing_is (Дата обращения: 11.11.2022).
Оставить комментарий