Умение считать покрытие функциональности тестовыми сценариями

Test Coverage in Software Testing - What exactly is test coverage?In software testing, test coverage is defined as a statistic that indicates the quantity of testing completed by a collection of tests. It will entail obtaining information about which sections of a program are executed when the test

What exactly is test coverage?

In software testing, test coverage is defined as a statistic that indicates the quantity of testing completed by a collection of tests. It will entail obtaining information about which sections of a program are executed when the test suite is performed in order to establish whether conditional statement branches have been taken.

It is a way for making sure that your tests are testing your code or how much of your code you exercised by running the test.

Code Coverage and Test Coverage

Code coverage and test coverage are frequently mistaken. Even while the basic concepts are the same, they are not the same.

  • Code Coverage refers to unit testing procedures that must target all parts of the code at least once and are performed by developers.

  • Test Coverage, on the other hand, entails testing every requirement at least once and is clearly the responsibility of the QA team.

What truly counts as a covered need is determined by each team’s perspective.

Some teams, for example, consider a requirement covered if it has at least one test case against it. It is occasionally covered if at least one team member is assigned to it. Alternatively, if all of the test cases connected with it are run.

If there are 10 requirements and 100 tests are written, we call this appropriate testing coverage at the design level if the 100 tests target all of the 10 criteria and do not leave any out.

When just 80 of the prepared tests are performed and only 6 of the requirements are targeted. Despite the fact that 80 percent of testing has been completed, we claim that four standards have not been met. This is coverage data at the execution level.

When only 90 tests related to 8 requirements have testers assigned to them and the remainder do not, we say the test assignment coverage is 80%. (8 out of 10 requirements).

It is also critical to know when to compute coverage.

If you do this too early in the process, you will see a lot of gaps since items are still missing. As a result, it is typically recommended to wait until the Last Build, often known as the Final Regression Build. This ensures that the Tests run for the supplied Requirements are correctly covered.

What is the purpose of Test Coverage?

  • Identifying the region of a requirement that is not covered by a collection of test cases

  • It aids in the creation of new test cases in order to enhance coverage.

  • Developing a quantifiable metric of test coverage as an indirect technique of quality control

  • Identifying useless test scenarios that do not contribute to increased coverage

How is Test Coverage Achievable?

  • Test coverage may be achieved by the use of static review techniques such as peer reviews, inspections, and walkthroughs.

  • By converting ad hoc flaws into executable test cases

  • Test coverage may be done at the code or unit test level by using automated code coverage or unit test coverage technologies.

  • Functional test coverage may be accomplished with the assistance of appropriate test management technologies.

Advantages of Test Coverage

  • It can ensure the test’s quality.

  • It can aid in determining whether parts of the code were actually modified for release or repair.

  • It can aid in identifying untested pathways in your application.

  • Prevent the spread of flaws.

  • Time, scope, and cost may all be managed.

  • Prevention of defects at an early point of the project’s lifetime

  • It can determine all of the application’s decision points and pathways, allowing you to enhance test coverage.

  • Gaps in requirements, test cases, and problems at the unit and code levels may be easily identified.

How should a good Test Coverage technique be implemented?

Everything revolves around awareness −

  • First and foremost, the QA team must understand the scope of the project and the status of the design activities. They will be notified if further tests are introduced in this manner. You might utilize an RTM to do this, as is common practice.

  • Second, look into the resource assignment and test execution procedures to ensure that everything is tested as quickly as feasible.

How can you ensure that everything has been tested?

  • Every tester should be knowledgeable of the requirements as well as the testing procedures.

  • Prioritize your needs and direct your efforts where it is most required.

  • Be aware of how a particular release differs from prior ones so that you may more precisely identify important needs and focus on maximum positive coverage

  • Modify Test Automation

  • Use test management tools to ensure that you are constantly up to date.

  • Assignment of intelligent work- Concentrate your finest personnel on important tasks and allow new testers to explore more from a different viewpoint.

  • Keeping a checklist for all jobs and other activities

  • Interact more with your Dev/Scrum/BA teams to have a better understanding of the application’s behavior.

  • Maintain a record of all your build cycles and fixes.

  • Be aware of how a particular release differs from prior ones so that you may more precisely identify important needs and focus on maximum positive coverage.

  • Use test management tools to ensure that you are constantly up to date.

  • Assignment of intelligent work- Concentrate your finest personnel on important tasks and allow new testers to explore more from a different viewpoint.

  • Keeping a checklist for all jobs and other activities

  • Interact more with your Dev/Scrum/BA teams to have a better understanding of the application’s behavior.

  • Maintain a record of all your build cycles and fixes.

Areas and techniques for efficient testing that are critical

  • Resource jumbling − Distribute duties among your team members. This improves engagement while preventing information focus.

  • Compatibility coverage − Ensure that you are aware of and include the various browsers and systems while testing your application.

  • Ownership − Hold testers accountable and give them complete autonomy (with monitoring and assistance, of course) over the module/task they are working on. This fosters responsibility and allows them to experiment with new approaches rather than sticking to the tried-and-true.

  • Deadlines − Knowing the release deadlines before the testing process begins aids inefficient planning.

  • Communication − Keep in touch with the development and other teams in between release cycles to stay up to date on what’s going on.

  • Maintain an RTM − Serves as a good derivative to stakeholders or clients, allowing the release schedule to be confirmed.

Test Coverage Calculation Formula

To determine test coverage, follow the methods outlined below −

  • Step 1 − The total number of lines of code in the program quality you are assessing.

  • Step 2 −The total amount of lines of code that all test cases are presently executing.

You must now multiply (X divided by Y) by 100. This computation yields your test coverage percentage.

As an example −

If you have 500 lines of code in a system component and 50 lines run across all current test cases, your test coverage is −

10% = (50 / 500) * 100

Product coverage – Which parts of the product did you examine?

Yes, while measuring testing coverage in terms of product, the primary topic to focus on is — which sections of the product have you tested and which remain untested?

  • Example #1 − If you’re testing a «knife,» don’t worry about whether or not it slices the vegetables/fruits properly. Other factors to consider are the user’s ability to handle it comfortably.

  • Example #2 − Checking relevant features is a requirement if you are evaluating an application called «notepad.» Other considerations include: the application responding properly while using other applications at the same time, the application not crashing when the user tries to do something unusual, the user receiving proper warning/error messages, the user being able to understand and use the application easily, and the availability of help content when needed. You cannot say that the application’s testing coverage is comprehensive unless you investigate the aforementioned scenarios.

Risk Coverage – What risks have you checked for?

Another component of having comprehensive testing coverage is risk coverage. You cannot label a product or application as «tested» until you have also tested the related hazards. Coverage of related hazards is a critical component of total testing coverage.

  • Example #1 − What would your reaction be if, when testing an airplane, a tester told you that he/she had completely examined the internal system of the airplane and that it was operating properly, but that only the flying capacity of the airplane had not been covered during testing? That is, after all, what risk coverage entails. Identifying risks specific to the application/product and properly testing it is always a smart approach.

  • Example #2 − While testing an e-commerce site, the tester assessed every effective feature but failed to account for the potential of a huge number of consumers accessing the website at the same time, which proved to be a major error on Super OFFER day.

Coverage of requirements – What requirements have you tested for?

If a product or application is well-developed but does not meet the needs of the client, it is useless. Product coverage is just as essential as requirement coverage during testing.

  • Example #1 − You requested the tailor to sew your dress and add those peacock blue display buttons on the neckline since you were excited about the family gathering. While stitching the garment, the tailor decided that putting those buttons on the neckline would be unappealing, so he embroidered a golden border instead. Certainly, on the trial day, the dissatisfied customer yelled at the tailor for not adhering to the specifications.

  • Example #2 − While testing a chat application, the tester took care of all the important points, such as multiple users chatting in a group, two users chatting independently, all types of emoticons available, updates sent to the user immediately, and so on, but forgot to look at the requirement document, which clearly stated that when two users chat independently, the video call option should be enabled. The client advertised the chat program as allowing calling while two people talk independently. You can picture what would have happened to the chat application if this had occurred.

Cons

Because there are no tools to automate most of the activities in the test coverage manual. As a result, it requires a significant amount of time to assess the requirements and develop test cases.

Test coverage allows you to count features and then compare them to many tests. However, there is always room for blunders in judgment.

What exactly is test coverage?

In software testing, test coverage is defined as a statistic that indicates the quantity of testing completed by a collection of tests. It will entail obtaining information about which sections of a program are executed when the test suite is performed in order to establish whether conditional statement branches have been taken.

It is a way for making sure that your tests are testing your code or how much of your code you exercised by running the test.

Code Coverage and Test Coverage

Code coverage and test coverage are frequently mistaken. Even while the basic concepts are the same, they are not the same.

  • Code Coverage refers to unit testing procedures that must target all parts of the code at least once and are performed by developers.

  • Test Coverage, on the other hand, entails testing every requirement at least once and is clearly the responsibility of the QA team.

What truly counts as a covered need is determined by each team’s perspective.

Some teams, for example, consider a requirement covered if it has at least one test case against it. It is occasionally covered if at least one team member is assigned to it. Alternatively, if all of the test cases connected with it are run.

If there are 10 requirements and 100 tests are written, we call this appropriate testing coverage at the design level if the 100 tests target all of the 10 criteria and do not leave any out.

When just 80 of the prepared tests are performed and only 6 of the requirements are targeted. Despite the fact that 80 percent of testing has been completed, we claim that four standards have not been met. This is coverage data at the execution level.

When only 90 tests related to 8 requirements have testers assigned to them and the remainder do not, we say the test assignment coverage is 80%. (8 out of 10 requirements).

It is also critical to know when to compute coverage.

If you do this too early in the process, you will see a lot of gaps since items are still missing. As a result, it is typically recommended to wait until the Last Build, often known as the Final Regression Build. This ensures that the Tests run for the supplied Requirements are correctly covered.

What is the purpose of Test Coverage?

  • Identifying the region of a requirement that is not covered by a collection of test cases

  • It aids in the creation of new test cases in order to enhance coverage.

  • Developing a quantifiable metric of test coverage as an indirect technique of quality control

  • Identifying useless test scenarios that do not contribute to increased coverage

How is Test Coverage Achievable?

  • Test coverage may be achieved by the use of static review techniques such as peer reviews, inspections, and walkthroughs.

  • By converting ad hoc flaws into executable test cases

  • Test coverage may be done at the code or unit test level by using automated code coverage or unit test coverage technologies.

  • Functional test coverage may be accomplished with the assistance of appropriate test management technologies.

Advantages of Test Coverage

  • It can ensure the test’s quality.

  • It can aid in determining whether parts of the code were actually modified for release or repair.

  • It can aid in identifying untested pathways in your application.

  • Prevent the spread of flaws.

  • Time, scope, and cost may all be managed.

  • Prevention of defects at an early point of the project’s lifetime

  • It can determine all of the application’s decision points and pathways, allowing you to enhance test coverage.

  • Gaps in requirements, test cases, and problems at the unit and code levels may be easily identified.

How should a good Test Coverage technique be implemented?

Everything revolves around awareness −

  • First and foremost, the QA team must understand the scope of the project and the status of the design activities. They will be notified if further tests are introduced in this manner. You might utilize an RTM to do this, as is common practice.

  • Second, look into the resource assignment and test execution procedures to ensure that everything is tested as quickly as feasible.

How can you ensure that everything has been tested?

  • Every tester should be knowledgeable of the requirements as well as the testing procedures.

  • Prioritize your needs and direct your efforts where it is most required.

  • Be aware of how a particular release differs from prior ones so that you may more precisely identify important needs and focus on maximum positive coverage

  • Modify Test Automation

  • Use test management tools to ensure that you are constantly up to date.

  • Assignment of intelligent work- Concentrate your finest personnel on important tasks and allow new testers to explore more from a different viewpoint.

  • Keeping a checklist for all jobs and other activities

  • Interact more with your Dev/Scrum/BA teams to have a better understanding of the application’s behavior.

  • Maintain a record of all your build cycles and fixes.

  • Be aware of how a particular release differs from prior ones so that you may more precisely identify important needs and focus on maximum positive coverage.

  • Use test management tools to ensure that you are constantly up to date.

  • Assignment of intelligent work- Concentrate your finest personnel on important tasks and allow new testers to explore more from a different viewpoint.

  • Keeping a checklist for all jobs and other activities

  • Interact more with your Dev/Scrum/BA teams to have a better understanding of the application’s behavior.

  • Maintain a record of all your build cycles and fixes.

Areas and techniques for efficient testing that are critical

  • Resource jumbling − Distribute duties among your team members. This improves engagement while preventing information focus.

  • Compatibility coverage − Ensure that you are aware of and include the various browsers and systems while testing your application.

  • Ownership − Hold testers accountable and give them complete autonomy (with monitoring and assistance, of course) over the module/task they are working on. This fosters responsibility and allows them to experiment with new approaches rather than sticking to the tried-and-true.

  • Deadlines − Knowing the release deadlines before the testing process begins aids inefficient planning.

  • Communication − Keep in touch with the development and other teams in between release cycles to stay up to date on what’s going on.

  • Maintain an RTM − Serves as a good derivative to stakeholders or clients, allowing the release schedule to be confirmed.

Test Coverage Calculation Formula

To determine test coverage, follow the methods outlined below −

  • Step 1 − The total number of lines of code in the program quality you are assessing.

  • Step 2 −The total amount of lines of code that all test cases are presently executing.

You must now multiply (X divided by Y) by 100. This computation yields your test coverage percentage.

As an example −

If you have 500 lines of code in a system component and 50 lines run across all current test cases, your test coverage is −

10% = (50 / 500) * 100

Product coverage – Which parts of the product did you examine?

Yes, while measuring testing coverage in terms of product, the primary topic to focus on is — which sections of the product have you tested and which remain untested?

  • Example #1 − If you’re testing a «knife,» don’t worry about whether or not it slices the vegetables/fruits properly. Other factors to consider are the user’s ability to handle it comfortably.

  • Example #2 − Checking relevant features is a requirement if you are evaluating an application called «notepad.» Other considerations include: the application responding properly while using other applications at the same time, the application not crashing when the user tries to do something unusual, the user receiving proper warning/error messages, the user being able to understand and use the application easily, and the availability of help content when needed. You cannot say that the application’s testing coverage is comprehensive unless you investigate the aforementioned scenarios.

Risk Coverage – What risks have you checked for?

Another component of having comprehensive testing coverage is risk coverage. You cannot label a product or application as «tested» until you have also tested the related hazards. Coverage of related hazards is a critical component of total testing coverage.

  • Example #1 − What would your reaction be if, when testing an airplane, a tester told you that he/she had completely examined the internal system of the airplane and that it was operating properly, but that only the flying capacity of the airplane had not been covered during testing? That is, after all, what risk coverage entails. Identifying risks specific to the application/product and properly testing it is always a smart approach.

  • Example #2 − While testing an e-commerce site, the tester assessed every effective feature but failed to account for the potential of a huge number of consumers accessing the website at the same time, which proved to be a major error on Super OFFER day.

Coverage of requirements – What requirements have you tested for?

If a product or application is well-developed but does not meet the needs of the client, it is useless. Product coverage is just as essential as requirement coverage during testing.

  • Example #1 − You requested the tailor to sew your dress and add those peacock blue display buttons on the neckline since you were excited about the family gathering. While stitching the garment, the tailor decided that putting those buttons on the neckline would be unappealing, so he embroidered a golden border instead. Certainly, on the trial day, the dissatisfied customer yelled at the tailor for not adhering to the specifications.

  • Example #2 − While testing a chat application, the tester took care of all the important points, such as multiple users chatting in a group, two users chatting independently, all types of emoticons available, updates sent to the user immediately, and so on, but forgot to look at the requirement document, which clearly stated that when two users chat independently, the video call option should be enabled. The client advertised the chat program as allowing calling while two people talk independently. You can picture what would have happened to the chat application if this had occurred.

Cons

Because there are no tools to automate most of the activities in the test coverage manual. As a result, it requires a significant amount of time to assess the requirements and develop test cases.

Test coverage allows you to count features and then compare them to many tests. However, there is always room for blunders in judgment.

Для того чтобы понять достаточно ли
разработано тестов, необходимо

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

Структурное: степень покрытия тестами
структуры – кода, подсистемы или
компонентов — в системе, предназначенной
для тестирования.

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

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

  1. Разработка общих алгоритмов тестирования

3.1. Тестовые сценарии и их выполнение

Test
Case
(пер. с англ. «Тестовый случай») –
последовательность шагов, которые
необходимо выполнить.

Test Suite
(пер. с англ. «Тестовый набор») – набор
логически связанных тестовых сценариев
[14].

Алгоритм тестирования — это набор Tast
Case
, другими словами Test Suite. Ниже
представлены таблицы разбитые по
выработанным критериям тестирования,
каждая из которых содержит обобщенный
набор Test Case.

  • Функциональность.

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

Таблица
2 – Тестовые сценарии функциональности

Название

Описание проверки

Ожидание на
выходе

Идентификация

1.Вход
в систему с различными данными.

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

3.Истечение
срока действия пароля или лицензии.

1.Корректный
вход/не вход в систему.

2.Доступность/недоступность
тех или иных ресурсов системы.

3.Предупреждение
об истечение каких-либо временных
данных.

Информационные
печатные модули

1.Доступ
к информации.

2.Отображение
информации.

3.Переходы
между информационными блоками.

4.Работа
всех подключаемых технологий: флеш,
Ajax, JS и т.д.

1.Возможность
просматривать информацию в соответствии
с правами доступа пользователя.

2.Правильное
отображение, кодировки, языки и т.д.

3.Возможность
перехода между всеми разрешенными
правами информационными блоками.

4.Корректное
отображение всех технологий, или
использование заглушек.

Продолжение
таблицы 2

Название

Описание проверки

Ожидание на
выходе

Информационные
видео модули

1.Доступ
к информации.

2.Отображение
информации.

3.Возможность
замены видео- информации.

1.Возможность
просматривать информацию в соответствии
с правами доступа пользователя.

2.Варианты
использования проигрывателей или
использование встроенного проигрывателя.

3.Проверка
использования альтернативных вариантов
замены видео-модуля.

Модули
проверки знаний.

1.Подключения
к тестам или другим модулям проверки
знаний.

2.Прохождение
тестов.

3.Проверка
результатов тестов.

4.Временные
и количественные характеристики.

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

2.Варинты
навигации по тестам, варианты ответов
и их изменение и т.д.

3.Отображение
результатов теста, проверка подсказок
или возможность перепроверки знаний.

4.Ограничения
по времени и количествам прохождения
теста.

Действия
с информацией.

1.Загрузка
данных на ПК.

2.Копирование
информации.

1.Проверка
возможности/невозможности загрузки
данных на ПК.

2.Возможность,невозможность
реализации копирования информации.

Продолжение
таблицы 2

Название

Описание проверки

Ожидание на
выходе

Соответствие
требованиям.

1.
Соотнесение требований и функционала.

1.
Проверка однозначного и полного
выполнения всех начальных требований.

  • Нагрузка.

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

Таблица
3 – Тестовые сценарии нагрузочного
тестирования

Название

Описание проверки

Ожидание на выходе

Нагрузки
подключений.

1.Подключение
от 0-50 пользователей.

2.Подключение
от 50-200 пользователей.

3.Поключение
от 200-1000.

4.Подключение
свыше 1000.

Среднестатистическая
система обязана корректно работать
в диапазоне от 0-200 такой нагрузки.

Не
выдерживание каких-либо нагрузок
должна корректно предупреждать об
этом пользователей.

Поведение
при пиковых нагрузках.

1.Количество
пользователей достигло предела.

2.Падение
сервера.

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

2.Обработка
вариантов падение сервера.

Продолжение
таблицы 3

Название

Описание проверки

Ожидание на выходе

Транзакции.

1.Большое
число подключений с посылом каких-либо
данных.

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

  • Обработка
    дат и времени.

Правильная обработка всех математических
составляющих электронных курсов таблица
4.

Таблица
4 – Тестовые сценарии по обработке дат
и времени

Название

Описание проверки

Ожидание на выходе

Работа
с временем.

1.Временные
ограничения на выполнение.

2.Формат
представления времени.

3.Различные
часовые пояса.

1.Проверка
выполнения временных ограничений на
подключения или их отсутствие.

2.Единый
формат представление времени.

3.Использование
электронных курсов в различных странах.
Отображение времени.

Продолжение
таблицы 4

Название

Описание проверки

Ожидание на выходе

Работа
с математическими данными.

1.Математические
действия.

2.Использования
различных вариантов ввода мат. операций.

3.Использование
различных типов данных.

1.Правильная
реализация всех математических
действий, если того требует система.

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

3.Проверка
на обработку различного представления
данных (нпрм.: «.» или «,»).

  • Качество
    данных.

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

Таблица
5 – Тестовые сценарии по качеству данных

Название

Описание проверки

Ожидание на выходе

Целостность
информации.

1.Переходы
между модулями информации.

1.Проверка
отображения всех модулей без пропадания
кусков.

Логическое
окончание.

1.Проверка
всех модулей информации на правильно
завершение.

1.
Логическое завершение предоставляемых
данных.

Продолжение
таблицы 5

Название

Описание проверки

Ожидание на выходе

Правдивость
информации.

Зависит
от предоставляемых курсов.

Проверяется
на этапе сбора требований. Информация
должна быть взята из проверенных
источников и тщательно проанализирована.

Сохранность
данных.

1.Экстренное
сохранение информации.

2.Варианты
сохранения результатов.

3.Варианты
отгрузки данных с сервера.

4.Постоянное
сохранение изменений.

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

2.Варианты
самоличного сохранения информации.

3.Варианты
загрузки предыдущих сохранений/откаты.

4.Проверка
наличия периодического сохранения
информации системой.

  • Локализация.

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

Таблица
6 – Тестовые сценарии локализации

Название

Описание проверки

Ожидание на выходе

Кроссбраузерность.

1.Использование
различных браузеров.

2.Использование
различных версий поддерживаемого
браузера.

1.Проверка
работоспособности во всех заявленных
браузерах.

2.Использование
различных версий поддерживаемых
браузерах.

Обработка
страниц.

1.Поддержка
кодировки.

2.Языковая
составляющая.

1.
Корректное отображение информации.

2.Поддержка
языковых стандартов.

Новая
версия курса.

1.Обновление
версионности электронных курсов.

1.Корректная
работа каждой версии во всех заявленных
браузерах.

Поддержка
на различном ПО.

1.
Варианты используемго ПО.

1.
Проверка на различных машинах: Linux,
Windows, Mac.

  • Безопасность.

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

  • Документирование.

Документирование сложных систем
происходит еще с этапа сбора требований.

Таблица
7 – Тестовые сценарии по документированию

Название

Описание проверки

Ожидание на выходе

Требования.

1.Требования
системы.

2.Проверка
соответствия.

1.
Проверка правильности требований к
ОС и другим средствам и условиям.

2. Проверка
соответствия требований продукта и
требований к системе.

Подсказки.

1.Проход
электронных курсах с использованием
подсказок системы.

1. Проверка
всех подсказок, которые сопровождают
пользователя по всему курсу.

  • Удобство
    использования.

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

Таблица
8 – Тестовые сценарии по Usability

Название

Описание проверки

Ожидание на выходе

Единообразие.

1.
Проход по всем модулям.

1.
Проверка стилистического единообразие
элементов электронных курсов: кнопок,
скроллов, меню, картинок и т.д.

Продолжение
таблицы 8

Название

Описание проверки

Ожидание на выходе

Навигация.

1.Навигация
в пределах одного модуля.

2.Навигация
вне модуля.

1.
Проверка всех вариантов передвижения
по модулю. Понимание и ясность.

2. Переход
в другие модули и обратно.

Пригодность
к использованию.

С учетом
особенностей целевой аудитории.

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

Понимание.

1.
Обратная связь.

1.
Пользователь всегда должен понимать:
где он находится, куда он может
двигаться, где посмотреть подсказку,
каких действий ждет от него система
т.д.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Тест-анализ и тест дизайн

latest update of the page: 17-01-2023, 21:53 UTC

Тест-анализ

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

Такая информация нужна для составления тест-кейсов.

Исполняющему роль тест-аналитика необходимо (в общем случае):

  1. Знать, кто является причастными сторонами (т.н. стейкхолдерами): кто владелец проекта, владелец продукта, заказчики/клиенты, исполнители работ по проектированию, разработке, тестированию и сопровождению системы.

    Ибо крайне важно понимать, кто будет поставщиком информации (например, архитекторы, аналитики, разработчики, админы/девопс), а кто будет потребителем наших информационных артефактов (например, проектные/продуктовые менеджеры и тестировщики).
  2. Держать в голове для каких целей создан Продукт/Система, кто и каким образом будет его использовать.
  3. Выяснять суть реализации (общесистемной или конкретного инкремента): какова архитектура, какие компоненты дорабатываются.
  4. Определять необходимое и возможное тестовое покрытие (что будем тестировать и на какую «глубину»), необходимые виды тестирования.
  5. (опционально) Определить риски тестирования. Они способны серьёзно повлиять на оценку сроков тестирования.
  6. (опционально) Составить Матрицу трассировки требований

Тестовое покрытие

Тестовое покрытие = покрытие тестами требований к продукту/системе, выраженное в численном либо процентном соотношении. Тестовое покрытие является одной из основных метрик качества продукта.

Иногда под тестовым покрытием имеют в виду покрытие критериев приёмки, покрытие кода. Кто-то считает покрытие только автотестами.

Тестовое покрытие говорит о добротности тестирования, о степени доверия к производимому продукту, о наличие и масштабах «белых пятен», где выше риск пропуска ошибок.

Процесс определения покрытия кратко картинкой:

Как определить тестовое покрытие

скачать схему в формате diagrams.net (бывший draw.io)

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

Теперь надо определиться с объёмом тестирования и видами тестирования.

Проводим логическую декомпозицию Системы, определяя:

  1. сущности (задействованные чаще всего, самые важные), связи сущностей, модель их статусов/состояний, возможные действия с сущностями (CRUD, фильтрация, сортировка, поиск, экспорт, импорт, валидация, парсинг, копирование).
  2. бизнес-процессы, use cases (user scenarios, system scenarios), проходящие в продукте.
  3. входящую и исходящую интеграции, каким способом она происходит (ETL, RPC, REST API, file, MQ и т.д.) и с чем.
  4. ролевая модель — какие роли с какими правами; на какие бизнес-процессы, use cases и на работу с какими сущностями она распространяется.
  5. UI как те или иные виды экранных форм в web-, desktop-, mobile-приложении. Или даже TUI.
  6. CLI (command-line interface) и возможные команды приложению посредством командной строки.
  7. Варианты конфигурации приложения.

Теперь прикидываем какими видами тестирования с какими тест-сценариями это счастье можно покрыть:

Вид тестирования Примеры тестов
Функциональное позитивное (в т.ч. безопасности)
  1. Тесты на основе уже определённых и описанных системными и бизнес-аналитиками критериев приёмки функций/свойств Системы;
  2. Позитивные проверки всего и вся:

    • E2E-тесты по бизнес-процессам, use case, user story
    • тесты на корректную работу системы с сущностями (данными)
    • UI-тесты

      • состояние и содержимое UI-элементов на странице
      • логика отображения и поведения UI-элементов
      • маски на полях, допустимая длина вводимых данных
    • (все вышеперечисленные) тесты в различных браузерах (если приложение кросс-браузерно)
    • API-тесты (не забывая проверять соблюдение SLA)
    • интеграционные тесты, если в скоуп входит несколько Систем (сервисов). Часто совмещаются с API-тестами.
    • (все вышеперечисленные) тесты в различном окружении (если приложение кросс-платформенно)
    • тесты на команды приложению в CLI (при наличии такого интерфейса)
  3. Позитивные тесты безопасности:

    • возможность получения токенов, ключей, сертификатов в предусмотренных условиях с корректными запросами
    • E2E и UI-тесты под предусмотренными ролевой моделью ролями, работа с формами и сущностями (данными)
Функциональное негативное (в т.ч. безопасности)
  1. Тесты на основе уже определённых и описанных системными и бизнес-аналитиками критериев приёмки функций/свойств;
  2. попытка «скормить» данные не предусмотренного типа, не того который ожидается
  3. попытка «скормить» данные не в той структуре (не в том формате), которая ожидается
  4. попытка работать с несуществующими сущностями
  5. попытка работать с удалёнными сущностями
  6. попытка совершить переход сущности в состояние, не предусмотренное к достижению из текущего состояния
  7. попытка совершить переход сущности из текущего состояния в это же (проверяем что не совершается «лишних» действий, не появляются дубликаты данных, не происходит перезапись данных и т.п.)
  8. негативные тесты на безопасности:

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

  1. нагрузочное тестирование
  2. стресс-тестирование
  3. тестирование стабильности или надёжности
  4. тестирование выносливости
  5. объёмное тестирование
  6. тестирование установки
  7. тестирование удобства пользования
  8. тестирование на отказ и восстановление
  9. тестирование конфигураций
  10. тестирование совместимости
  11. тестирование безопасности
  1. Тесты на основе уже определённых и описанных системными и бизнес-аналитиками критериев приёмки
  2. обычные нагрузочные тесты, стресс-тесты, тесты на отказоустойчивость и т.п.
  3. обычные тесты на корректную работу (запуск) в различных предусмотренных конфигурациях
  4. обычные тесты на корректный запуск приложения в различном environment и ОС
  5. обычные тесты на установку приложения с соблюдением SLA
  6. симуляция недоступности БД в процессе работы
  7. симуляция потери данных в процессе работы (удаление файлов, сущностей в БД)
  8. симуляция потери доступа к транспорту
  9. симуляция недоступности необходимых для работы портов и ресурсов
  10. симуляция стопора в очереди в транспорте (недоступность Kafka/RabbitMQ, снижение пропускной способности)
  11. используются ли в межсервисном взаимодействии нужные протоколы, сертификаты, шифрование
  12. корректно ли замаскированы данные в БД

В итоге получаем своего рода наброски (drafts) тест-кейсов, которые дальше уже далее потребуется детализировать по шагам.

Уже становится ПРИМЕРНО виден объём возможного тестирования, можно ПРИМЕРНО прикинуть сколько времени займёт как тест-дизайн по этим черновикам (детализация тест-кейсов), так и время прохождения всех этих тестов.

Заодно можно прикинуть какие из этих тест-кейсов целесообразно пустить потом в автоматизацию.

Трассировка требований и тест-кейсов

Матрица трассируемости требований (Requirement Traceability Matrix) = двумерная таблица, содержащая соответствие требований (user/business requirements, software requirements) и подготовленных тест-кейсов (test cases).

Основное её предназначение в отображении степени покрытия требований тест-кейсами.

Матрица может включать в себя параметры в зависимости от ваших нужд на проекте

  • ID Бизнес-Требования (BR, Business Requirement) или Бизнес Варианта Использования (Business Use Case);
  • суть Бизнес-Требования;
  • (опционально) приоритет Бизнес-Требования;
  • (опционально) приёмочный критерий Требования (acceptance criteria);
  • (опционально) ID Функционального требования (FR, functional requirement) из Спецификации к Требованиям ПО (SRS) или ID Варианта Использования (UC, Use Case);
  • (опционально) описание Функционального требования или Варианта Использования;
  • ID тестового артефакта (Тест-кейса);
  • (опционально) ожидаемый результат Тест-кейса (expected result);
  • (опционально) номер Задачи на разработку из таск-трекера + её описание;
  • (опционально) логический блок / модуль, к которому принадлежит Задача/Требование;

Примеры Матриц Трассировки:

  • # Block of feature Issue for development Acceptance criteria Priority Test-case
    1 Create Creating User should be able to create new document High Test #1: Create document
    2 User should not be able to create new document, if he has role = «Reviewer» High Test #14: Reviewer should not be able to create new doc
    3 Print Document printing User should be able to print a document High Test #2: Print a document
    4 .doc, .pdf, .docx, .rtf formats of a document should be able to be printed High Test #4: Check-list for doc formats
    N Low / Medium / High link to TC
  • Пример Матрицы Трассировки номер 1

    (скачать таблицу в формате XLSX)

Для каждого Бизнес-Требования будет одно или несколько Функциональных (Системных) Требований, его реализующих. Соответственно, каждое системное требование должно иметь критерии приёмки, которые должны быть покрыты тестами.

Пример рабочего процесса, в котором присутствует создание Матрицы Трассировки:

Пример рабочего процесса, в котором присутствует создание Матрицы Трассировки

скачать схему в формате diagrams.net (бывший draw.io)

Если вы используете таск-трекер Jira (и её плагины Zephyr Scale (Zephyr Squad) — Test Management for Jira) для тестовой документации и систему управления требованиями Сonfluence, то JIRA-таски и Confluence-страницы можно привязывать к тест-кейсам, в JIRA-тасках создавать связи с тестовыми прогонами, и такая трассируемость позволяет:

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

Соотношение привязки Требования и Тест-кейса может быть:

  • 1 к 1 (атомарное требование, которое покрывается одним тест-кейсом, данный тест-кейс покрывает только это требование);
  • 1 к n (требование, которое покрывается несколькими тест-кейсами, данные тест-кейсы покрывают только это требование);

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

Программные комплексы для управления требованиями:

  • (очень платное) IBM Rational DOORS
  • (платное)(есть trial на 14 дней) Cradle
  • (платное) DevProm Requirements. Один из функциональных блоков программного продукта Devprom ALM
  • (платный) плагин RMsis для Atlassian JIRA
  • (платный) плагин R4J для Atlassian JIRA

Риски качества

Риск качества (Quality risk) — потенциальный вид ошибки, способ поведения системы, при котором она, вероятно, не соответствует обоснованным ожиданиям качества системы, имеющимся у пользователя или заказчика. Это потенциальный, а не обязательный результат.

Общие категории рисков качества
Функциональность Проблемы, в результате которых не работают конкретные функции
Нагрузка, производительность, объём Проблемы обработки ожидаемых пиковых нагрузок при параллельной работе нескольких пользователей
Надёжность, стабильность работы Проблемы, при которых система слишком часто зависает или долго не восстанавливается
Перегрузки, обработка ошибок и восстановление Проблемы, возникающие ввиду превышения допустимых пиковых нагрузок или из-за обработки недопустимых условий (например, побочный эффект от сознательного внесения ошибок)
Обработка времени и дат Ошибки в математических действиях с датами и временем, в их форматировании, в планируемых событиях и других операциях, зависящих от времени
Качество данных Ошибки в обработке, извлечении и хранении данных
Производительность проблемы с временем завершения задач при ожидаемой нагрузке
Локализация проблемы, связанные с локализацией продукта, в том числе в обработке страницы символов, языковой поддержке, в использовании грамматики, словаря, а также в сообщениях об ошибках и файлах помощи
Безопасность проблемы в защите системы и охраняемых данных от мошеннического и злонамеренного использования
Установка/перенос ошибки, которые препятствуют поставке системы
Документирование ошибки в руководствах по установке и работе с системой для пользователей и системных администраторов

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

Риски тестирования

Основные риски тестирования:

  1. Проектные — связанные с коммуникациями участников команды, инфраструктурой:

    — изменение скоупа тестирования после проверки основных тест-кейсов

  2. Продуктовые — связанные только с тестируемыми функциями и тестовыми средам:

    — отсутствие тестовых зон с заданной конфигурацей (медленные БД, (не)обезличенные БД, отсутствие каких-то тестовых данных)

    — недопустимое время на ожидание подготовки тестовых зон со стороны Администраторов / DevOps

Тест дизайн

Проектирование тестов (test design) = процесс проектирования и создания тест-кейсов (тестовых случаев/сценариев/дел, case — юр. «дело»), в соответствии с определёнными ранее критериями качества, целями тестирования, критериями приёмки.

Тест-кейс

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

Этимология слова case восходит к юридиспруденции. Case — дело, случай.

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

assurance case

скачать схему в формате diagrams.net (бывший draw.io)

Исчерпывающий формат тест-кейса

  1. Название (subject)
  2. Описание (description) — что проверяем, некие важные подробности
  3. Трассировка (tracing) — ссылки на таск и страницу с требованиями к проверяемой тест-кейсом функциональности, юзкейс, юзерстори ссылки на бегрепорты по тест-кейсу
  4. Предусловия (preconditions), например:

    • Учётные записи и настройки ролей: имеется такая-то учётная запись, JWT, так-то настроена аутентификация и авторизация, учётной записи назначены такие-то права/роли.
    • Развёрнуто и настроено: развёрнуто A,B,C, перечисление критически важных для теста атрибутов конфигурации.

      Возможно, ссылка на репозиторий, регистр с контейнерами скрипты деплоя и инструкции при наличии
    • Данные: в Системах A,B,C (их БД) созданы такие-то экземпляры сущностей / имеются такие-то данные, которые понадобятся в процессе теста.
  5. «Тело» тест-кейса, обычно в виде таблицы такого вида:

    № п/п Действие Ожидаемый результат Результат
    1 Делаем вот это Видим вот это, это и это <успех / неудача, комментарий с подробностями фактического результата при неудаче>
    N

Методы разработки тестов

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

Причина / Следствие (Cause/Effect)

Простая проверка действий и их результата. Как правило, ввод комбинаций условий (Причин) для получения ответа от системы (Следствие).

Например, вы проверяете возможность добавлять клиента, используя определённую экранную форму. Пользователю необходимо заполнить несколько полей — «Имя», «Адрес», «Номер Телефона» — а затем нажать кнопку «Добавить». Это Причина. После нажатия кнопки «Добавить» система добавляет клиента в БД и показывает его номер на экране — это Следствие.

Примерный алгоритм:

  1. Выискиваем и связываем причины и следствия в спецификации
  2. Учитываем «невозможные» сочетания причин и следствий
  3. Составляем «таблицу решений», где в каждом столбце указана комбинация входов и выходов, т.е. каждый столбец это готовый тестовый сценарий
  4. Приоритизируем решения.

Тестирование смены состояний (State Transition Testing)

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

Пример:

Тестирование состояния сущностей</b> (State Transition Testing — STT)

скачать схему в формате diagrams.net (бывший draw.io)

Подробнее: Тестирование на основе диаграмм состояний сущности (2015).

Таблица решений (Decision Table Testing)

Способ компактного представления модели со сложной логикой. Устанавливает связь между условиями (входными параметрами) и результатом (действиями Системы). Определить/записать все условия. Просчитать возможное количество комбинаций условий. Заполнить комбинации. Записать действия. Убрать лишние комбинации.

Например:

Таблица решений (Decision Table Testing — DTT)

Чуть подробнее: Decision Table Testing: Learn with Example

Тестирование путей (Path Testing)

Часто под ним имеется в виду метод тестирования белого ящика Control Flow Testing (тестирование управляемого потока), в котором тест-кейсами покрываются все логические потоки ПО. Подробнее можно прочитать здесь:

  • Path Testing & Basis Path Testing with EXAMPLES
  • Control Flow Testing

Однако, его же можно использовать для покрытия тестами логики тестируемой системы, если у нас имеются BPMN-диаграммы и UML activity-диаграммы, описывающие процессы, проходящие в ней.

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

Очень упрощённо:

Path testing simple example

Посмотреть/послушать о такого рода применении метода можно здесь Где логика?! История тестирования одного микросервиса (Денис Кудряшов, Leroy Merlin, 2020), где докладчик скомбинировал этот метод с вышеупомянутой таблицей решений (Decision Table Testing).

Определение классов эквивалентности (Equivalence Partitioning)
и Анализ Граничных Значений (Boundary Value Analysis)

  • Если область определения параметра — диапазон каких-то упорядоченных данных, то имеет смысл выделение трёх т.н. классов эквивалентности: «слева» от диапазона (невалидные значения), «внутри» диапазона (валидные значения) и «справа» от диапазона (снова невалидные). При выделении классов нужно использовать включающие границы с целью однозначности и точности: одно и то же значение не может относиться к двум классам одновременно.

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

    Полученное разбиение можно «дробить» дальше. Например, множество латинских букв можно разбить на два подмножества: латинница в верхнем и нижнем регистре.

Пример:

Пример применения метода определения классов эквивалентности

Попарное тестирование (Pairwise Testing)

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

Пример оптимизации количества тестов этим методом:

Попарное тестирование (Pairwise Testing — PT)

Подробнее: ПОПАРНОЕ ТЕСТИРОВАНИЕ (PAIRWISE TESTING) (2018).

Предугадывание ошибки (Error Guessing)

Это когда тест-аналитик/тестировщик использует свои знания системы и способность к интерпретации спецификации на предмет того, чтобы «предугадать» при каких входных условиях система может выдать ошибку. Например, спецификация говорит: «здесь пользователь должен ввести код». Тест-аналитик выдвигает предположения: «Что, если я не введу код?», «Что, если я введу неправильный код?» и так далее. Это и есть предугадывание ошибки.

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

Тесно связано с понятием импакт-анализа.

Исчерпывающее тестирование (Exhaustive Testing)

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

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

В зависимости от степени доступа к коду системы можно выделить два типа функциональных испытаний:

⦁ тестирование black box (черный ящик) – проведение функционального тестирования без доступа к коду системы,
⦁ тестирование white box (белый ящик) – функциональное тестирование с доступом к коду системы.
Тестирование black box проводится без знания внутренних механизмов работы системы и опирается на внешние проявления ее работы. При этом тестировании проверяется поведение ПО при различных входных данных и внутреннем состоянии систем. В случае тестирования white box создаются тест-кейсы, основанные преимущественно на коде системы ПО. Также существует расширенный тип black-box тестирования, включающего в себя изучение кода, – так называемый grey box (серый ящик).

Ключевые преимущества

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

Основные этапы функционального тестирования

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

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

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

Направления функционального тестирования

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

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

Системное тестирование — Проверка соответствия ПО требованиям, заявленным в спецификации

Тестирование мобильных приложений — Выявление дефектов в работе графического интерфейса

Тестирование установки — Тестирование процесса инсталляции/деинсталляции программного обеспечения

Конфигурационное тестирование — Проверка работы ПО на различных программных и аппаратных окружениях.

Интеграционное тестирование — Тестирование взаимодействий между компонентами системы и между несколькими системами.

Smoke-тестирование — Короткий цикл тестов для выявления правильной работы основных функций приложения.

Тестирование документации — Проверка документов на соответствие принятым стандартам, а также соответствие определенным характеристикам

Обеспечение тестового покрытия — Оценка плотности покрытия системы тестами

Тестирование удобства использования — Определение степени удобства использования, понятности и привлекательности разрабатываемого продукта

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

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

Каждый раз при внесении изменений в систему, либо дополнения ее новым функционалом, существует

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

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

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

Ключевые преимущества

⦁ При регулярном проведении регрессионного тестирования — значительное сокращение количества дефектов в системе к моменту релиза.
⦁ Исключение деградации качества системы при росте функциональности.
⦁ Уменьшение вероятности критических ошибок в опытно-промышленной эксплуатации.

Основные этапы

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

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

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

Многие современные ИТ-системы взаимодействуют с другими системами и модулями, поэтому крайне

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

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

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

Ключевые преимущества

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

⦁ Предотвращение появления критичных ошибок в опытно-промышленной эксплуатации;
⦁ Снижение влияния человеческого фактора;
⦁ Экономия затрат на исправление дефектов.

Основные задачи

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

Способы проведения интеграционного тестирования подбираются в зависимости от интеграционных решений.

Этапы

⦁ Разработка тест-плана – руководства к действию для тестировщиков;
⦁ Формирование тестовых данных и создание тест-кейсов;
⦁ Реализация сценариев для запуска тест-кейсов;
⦁ Выполнение тест-кейсов и исправление ошибок;
⦁ Повторение цикла тестирования до успешной интеграции.

Тестирование безопасности

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

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

действиям: хакерским атакам, проникновению вирусам, попыткам доступа к корпоративной информации. Тестирование безопасности особенно актуально для web-приложений, приложений с важной коммерческой или персональной информацией, платежных систем, приложений, требующих целостности информации, социальных приложений, приложений с коммерческой лицензией. Зачастую для проверки безопасности

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

Ключевые преимущества

⦁ Тестирование безопасности снижает вероятность несанкционированного доступа к системе, краж информации  и потерь данных;
⦁ Клиенты получают объективную оценку уровня защищенности систем.

Основные задачи

⦁ Анализ архитектуры и построение  модели угроз и рисков
⦁ Определение критериев защищенности
⦁ Поиск уязвимостей в исходном коде
⦁ Fuzz тестирование
⦁ Тестирование на проникновение
⦁ Тестирование, основанное на рисках
⦁ Проведение нагрузочного тестирования

Этапы

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

Smoke-тестирование

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

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

Ключевые преимущества

⦁ Выявление критичных ошибок в первые несколько часов (минут) после установки
⦁ Снижение рисков вывода некачественного продукта;
⦁ Минимизация рисков при интеграции систем;
⦁ Сокращение затрат на исправление дефектов;
⦁ Ускорение проверки за счет автоматизации.

Основные задачи

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

Системное тестирование

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

Системное тестирование предназначено для тестирования

готового ПО в том состоянии, в котором оно будет внедряться в опытно-промышленную эксплуатацию.

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

Ключевые преимущества

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

Основные задачи

⦁ Определение подхода к составлению тестовых сценариев
⦁ Создание плана и методики испытаний
⦁ Подготовка тестовых данных
⦁ Проведение тестирования
⦁ Выявление некорректного использования ресурсов

Этапы

⦁ Тестовый план
⦁ Разработка тестов
⦁ Подготовка тестовых данных
⦁ Тестовые прогоны – автоматизированные и обычные
⦁ Составление отчета
⦁ Регрессионое тестирование после исправления ошибок

Тестирование документации

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

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

Ключевые преимущества

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

Тестирование документации включает тестирование нескольких уровней документации:

⦁ Бизнес-требования
⦁ Функциональные требования
⦁ Техническое задание
⦁ Руководства пользователей

Тестирование мобильных приложений

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

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

Ключевые преимущества

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

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

Обеспечение тестового покрытия

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

Ключевые преимущества

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

Основные задачи

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

Тестирование установки

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

Ключевые преимущества

Тестирование установки  позволяет избежать таких проблем при установке ПО в промышленную среду, как:
⦁ Невозможность установить ПО
⦁ Потеря данных после установки новой версии
⦁ Невозможность откатиться до предыдущей версии

В результате экономия денег и времени, существенное облегчение работы администраторов.
Основные задачи

Тестирование инсталляции проводится согласно плану установки ПО. Проверяется установка, настройка, обновление, откат версии и удаление ПО на всех заявленных платформах.

Тестирование удобства использования

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

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

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

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

Основные задачи

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

В рамках данной задачи оценивается:

⦁ Сколько шагов нужно сделать для выполнения задачи?
⦁ Сколько времени требуется на выполнение задачи?
⦁ Сколько ошибок делает пользователь-новичок при выполнении задачи?
⦁ Какое впечатление осталось у пользователя от работы с программой?
⦁ Эмоции пользователя во время выполнения задачи.

Конфигурационное тестирование

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

Ключевые преимущества

⦁ Конфигурационное тестирование полностью имитирует фактическое использование системы.
⦁ Позволяет своевременно выявить системные ошибки ПО в работе под разными конфигурациями, и, таким образом, предотвратить проблемы при работе с ним.

Основные этапы конфигурационного тестирования

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

Аннотация: Семинар посвящен покрытию программного кода. Рассмотрены методы проверки покрытия, методы улучшения покрытия, покрытие по методу MC/DC. Обсуждаются отчеты о покрытии, различные их формы, анализ неполноты покрытия, влияние зависимостей тестовых примеров на полноту покрытия. Описан процесс сбора покрытия и генерации отчетов о покрытии в MVSTE

19.1. Проверка домашнего задания

Студенты приносят заполненные отчеты об ошибках для тех модулей, которые они тестировали на
«Тестовые примеры. Классы эквивалентности. Ручное тестирование в MVSTE»
. Преподаватель оценивает их тест-планы, тестовые модули и смотрит, удалось ли студентам найти все допущенные в методах ошибки.

19.2. Понятие покрытия

19.2.1. Покрытие программного кода

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

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

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

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

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

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

19.2.2. Уровни покрытия

19.2.2.1. По строкам программного кода (Statement Coverage)

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

Пример. В следующем фрагменте кода входными переменными являются prev и ShowMessage.

if (prev == "оператор" || prev == "унарный оператор")
{
    if (ShowMessage)
    {
        MessageBox.Show("Два подряд оператора на 
           " + i.ToString() + " символе."); 
    } 
    else 
    {
    	Log.Write("Два подряд оператора на " +
                   + i.ToString() + " символе.")
    }
    Program.res = 4;
    return "&Error 04 at " +
       + i.ToString();
}

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

1 2
prev оператор оператор
ShowMessage true false

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

Также проблемы этого метода покрытия можно увидеть и на примерах других управляющих структур. Например, проблемы возникают при проверке циклов do … while – при данном уровне покрытия достаточно выполнение цикла только один раз, при этом метод совершенно нечувствителен к логическим операторам || и &&.

Другой особенностью данного метода является зависимость уровня покрытия от структуры программного кода. На практике часто не требуется 100% покрытия программного кода, вместо этого устанавливается допустимый уровень покрытия, например 75%. Проблемы могут возникнуть при покрытии следующего фрагмента программного кода:

if (condition)
   MethodA();
else
   MethodB();

Если MethodA() содержит 99 операторов, а MethodB() — один оператор, то единственного тестового примера, устанавливающего condition в true, будет достаточно для достижения необходимого уровня покрытия. При этом аналогичный тестовый пример, устанавливающий значение condition в false, даст слишком низкий уровень покрытия.

19.2.2.2. По веткам условных операторов (Decision Coverage)

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

Также данный метод называют: branch coverage, all-edges coverage, basis path coverage, DC, C2, decision-decision-path.

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

Пример. Для покрытия предыдущего примера кода по ветвям потребуется уже три тестовых примера. Это связано с тем, что первый условный оператор if имеет неявную ветвь – пустую ветвь else. Для обеспечения покрытия по ветвям необходимо покрывать и пустые ветви.

1 2 3
prev оператор оператор операнд
ShowMessage true false true

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

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

if (condition1 && (condition2 || Method()))
    statement1;
else
    statement2;

полное покрытие по веткам может быть достигнуто при помощи двух тестовых примеров:

1 2
condition1 true false
condition2 true true/false

В обоих случаях не происходит вызова метода Method(), хотя покрытие данного участка кода будет полным. Для проверки вызова метода Method() необходимо добавить еще один тестовый пример (который, однако, не улучшает степени покрытия по веткам):

1 2 3
condition1 true false true
condition2 true true/false false

Понравилась статья? Поделить с друзьями:
  • Уолтер крейн праздник флоры
  • Урман экияте сценарий
  • Упанаяна индийский праздник
  • Умелые руки не знают скуки сценарий
  • Уол о5о норуот кэскилэ сценарий

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии