22 июля 2021, 09:47
961 просмотр
Если вы работаете в области финансов и банкинга, то наверняка много внимания уделяете безопасности и стабильности программных продуктов. Всестороннее тестирование ПО в этой сфере ― неотъемлемый элемент на всех этапах жизненного цикла разработки, который помогает заботиться о клиентах и их конфиденциальных данных.
По данным Мирового отчёта по качеству (World Quality Report, WQR) 2020-2021, около 66% банков покрывают тестами всю функциональность цифрового решения, ведь QA позволяет занять лидирующие позиции на рынке. Но главное ― удержать их. Предлагаем детально рассмотреть 3 ключевых правила и 3 типичные ошибки при тестировании ПО в финансовой области.
3 ОШИБКИ, КОТОРЫЕ СНИЖАЮТ ЭФФЕКТИВНОСТЬ QA
Добиться абсолютного качества программного продукта невозможно, а вот максимально приблизиться к нему ― реально. Фундаментом результативной QA-стратегии станет определение типовых ошибок и избавление от них.
Ошибка 1. Сокращение тестового покрытия для ускорения QA-процессов
Чтобы быстрее выйти на рынок, компании часто сокращают затраты на разработку, тестирование или вовсе отказываются от QA. Как показывает практика, подобный подход приносит краткосрочные преимущества и негативно влияет на качество кода.
Чтобы убедиться в стабильной и надёжной работе ПО, стоит проверять все функциональности финтех-продукта, их взаимосвязи и различные интеграции со сторонними системами. При обратном сценарии незамеченными остаются критические дефекты, блокирующие работу приложения после релиза.
Помимо тестирования производительности, в последнее время важное место занимает безопасность, ведь используемое в банках и страховых компаниях ПО наиболее уязвимо перед атаками киберпреступников.
Возросшее из-за пандемии число онлайн-транзакций дало хакерам больше возможностей для незаконного получения конфиденциальных данных пользователей и организаций. Некоторые банки отметили увеличение кибератак в 4,5 раза по сравнению с 2019 годом. А утечка информации вследствие преступной активности стала второй по актуальности угрозой для представителей финансового сектора. Это отметили 71% опрошенных по результатам исследования 2021 года «Защита от DDoS-атак в банках», поэтому не стоит отказываться от тестирования безопасности.
Ошибка 2. Ложная оптимизация при автоматизации тестирования
Внедрение автотестов служит проверенным методом сокращения предрелизного периода. Но без необходимого опыта и точной стратегии для QA-команды автоматизация тестирования может стать импровизацией.
К примеру, изменения в функциональности могут замедлить QA-процессы даже при максимальном объёме автотестов, ведь алгоритмы проверок нужно постоянно пересматривать, как и код автотестов. В свою очередь, недостаток автоматизации тоже не сэкономит время, ведь эффективность мануального тестирования при сохранении численности команды останется на прежнем уровне или снизится.
Ошибка 3. Недостаточное внимание к UX
Хотя портативные устройства стали неотъемлемой частью жизни пользователей, некоторые компании пренебрегают мобильным тестированием и оценивают качество только веб-версий. Представьте, что генеральный директор крупной сети магазинов зайдёт в приложение, чтобы отправить денежный перевод, но неинтуитивный интерфейс замедлит проведение данной операции. Это послужит причиной снижения его лояльности как клиента.
Частой ошибкой мобильных проверок является использование исключительно эмуляторов и симуляторов вместо реальных устройств. Подобная имитация не позволит выявить все критические дефекты ПО.
Давайте же разберёмся, как можно избежать подобных ошибок и улучшить QA-процесс.
3 ПРАВИЛА ПРОДУКТИВНОГО ТЕСТИРОВАНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ В ФИНТЕХ
Для существенного ускорения при выходе на рынок в долгосрочной перспективе стоит включить новые подходы и технологии в стратегию по обеспечению качества.
Правило 1. Внедряйте автоматизацию тестирования с умом
Оптимальным решением является сбалансированный подход к внедрению автоматизированного тестирования для тех функциональностей, которые регулярно проверяются тестировщиками, но не меняются кардинально в течение нескольких недель.
Это ускоряет QA-процессы и помогает выявлять ошибки быстрее, чем при ручном тестировании. Чтобы получить максимум пользы, компании внедряют искусственный интеллект, машинное обучение и прочие инновации в процессы автоматизации тестирования. На старте это потребует дополнительных усилий, но подобное сочетание выглядит многообещающе с точки зрения результатов для бизнеса. На изображении ниже вы можете оценить три основных аспекта переосмысления решения по автоматизации тестирования.
Источник: Мировой отчёт по качеству 2020-2021
Читайте продолжение статьи по ссылке: https://www.a1qa.ru/blog/dos-and-donts-in-bfsi-testing/
Подписывайтесь на наши новостные
рассылки,
а также на каналы
Telegram
,
Vkontakte
,
Яндекс.Дзен
чтобы первым быть в курсе главных новостей Retail.ru.
Добавьте «Retail.ru» в свои источники в
Яндекс.Новости
Уровень сложности
Средний
Время на прочтение
5 мин
Количество просмотров 6.7K
1. Недостаточное покрытие
Иногда из-за нашей лени, невнимательности или чего-либо ещё получается неполный охват тестами всех важных сценариев, крайних случаев и потенциальных ошибок. Представим, что у нас есть очень простой класс Calculator, который умеет делать сложение:
public int Add(int a, int b)
{
return a + b;
}
Порой, когда на работе заставляют чтобы код сопровождался юнит-тестами, может получиться класс, содержащий всего один тест:
[Test]
public void Add_WhenCalled_ReturnsSum()
{
// Arrange
var a = 40;
var b = 2;
var calculator = new Calculator();
// Act
var result = calculator.Add(a,b);
// Assert
Assert.AreEqual(42, result);
}
Тестирует ли код выше метод Add? Да, тестирует и даже гарантирует правильность сложения чисел 40 и 2. Однако, ни отрицательные числа, ни большие числа, сумма которых выходит за пределы размера int, ни сложение с нулем здесь не проверены.
Как сделать правильно?
Ещё до написания кода желательно вместе с аналитиком/тестировщиком/другими разработчиками обсудить все возможные корнер-кейсы (крайние случаи) и то, как код должен реагировать при встрече с ними.
2. Переизбыток тестов
В противоположность к первому пункту можно увлечься и насоздавать много излишних тестов для тривиального или простого кода, что приведет к увеличению нагрузки на поддержку и замедлению выполнения тестов.
[Test]
public void Add_WithFortyAndTwo_ReturnsFortyTwo()
{
// ...
}
[Test]
public void Add_WithOneAndOne_ReturnsTwo()
{
// ...
}
[Test]
public void Add_WithTenAndTen_ReturnsTwenty()
{
// ...
}
[Test]
public void Add_WithZeroFirst_ReturnsSum()
{
// ...
}
[Test]
public void Add_WithZeroSecond_ReturnsSum()
{
// ...
}
Как сделать правильно?
Совет по составлению списка проверок с другими людьми здесь так же актуален. Плюс, порой можно воспользоваться передачей параметров в тестовый метод, что сокращает размер файла с тестами и их чтение. Еще более продвинутый вариант — использовать генераторы данных, например, Bogus. Ну и самый хардкорный вариант — использование pairwise testing.
3. Нетестируемый код
После работы в Лаборатории Касперского, где код обкладывался кучами разных тестов, я наиболее явно ощутил весь смысл слова «тестопригодность», когда встретил код, который мне пришлось несколько дней рефакторить, чтобы добавить для него юнит-тесты. Один из примеров как сделать код нетестопригодным — использовать другие классы напрямую.
public class Calculator
{
private readonly ILogger _logger;
public Calculator()
{
_logger = new Logger();
}
public int Add(int a, int b)
{
_logger.Log("Add method called.");
return a + b;
}
}
Ну и соответственно, чтобы сделать его тестопригодным, надо сделать инверсию зависимости, а если по-русски, то заменить зависимость от класса на зависимость от интерфейса:
public class Calculator
{
private readonly ILogger _logger;
public Calculator(ILogger logger)
{
_logger = logger;
}
public int Add(int a, int b)
{
_logger.Log("Add method called.");
return a + b;
}
}
Как сделать правильно?
Не завязываться на конкретные реализации и как можно скорее убирать такие связи, если они есть — станет легче не только писать тесты, но и просто поддерживать код.
4. Игнорирование или пропуск тестов
Если бы сам не столкнулся с подобным в нескольких компаниях, то мне бы и в голову не пришло, что тесты можно (а порой даже нужно) игнорировать.
Как сделать правильно?
Назначить ответственного человека, либо самому следить за тем, чтобы игнорированием тестов не злоупотребляли, а использовали только когда необходимо. Например, когда идет крупномасштабное внедрение изменений — обновление кодстайла, сторонней или своей библиотеки.
5. Тестирование реализации
Довольно стандартная ловушка для новичков в юнит-тестировании — написать сначала нужный код и потом на основе этого кода писать тесты. Причем тесты пишутся так, чтобы покрыть логику этого написанного кода. Проблема такого подхода — то, что не было написано, не будет и протестировано. Например, если при добавлении в класс Calculator метода Divide мы не учтем в коде проверку деления на ноль, то и при написании тестов по уже существующему коду вероятность написать тест деления на ноль исчезающе мала.
Как сделать правильно?
Вспоминаем совет к первым двум пунктам — составлять тест-кейсы ДО написания кода и опираться в них на требуемую бизнес-логику, а не на уже реализованную функциональность. Хотя, сразу оговорюсь, что для написания тестов к уже существующему коду, по которому никаких зафиксированных бизнес-требований нет и никто их не знает/не помнит, подход на основе реализации вполне подходит. Но только для целей регрессионного тестирования.
6. Хрупкие тесты
Предположим, что мы написали класс А, который реализует необходимую нам бизнес-логику. Затем, в процессе рефакторинга, мы вынесли из класса А два вспомогательных класса — В и С. Нужно ли писать тесты на все три класса? Конечно, это зависит от логики, которая была вынесена во вспомогательные классы и того, будет ли она использоваться где-то ещё помимо класса А, однако, в 99% случаев писать тесты на классы В и С не нужно.
Как сделать правильно?
Рискуя набить оскомину, повторюсь, надо тестировать не написанный код, а бизнес-логику, которая реализуется этим кодом.
7. Отсутствие организации тестов
Видел я и такие проекты, гды пытались внедрить юнит-тесты, однако, все они лежали в корне тестового проекта и было тяжело разобраться есть ли уже нужные тебе тесты или нет. И вместо того, чтобы разбираться в этом бардаке и искать нужный класс, люди просто создавали ещё один, куда писали свои тесты. Хаос в таком случае только увеличивался.
Как сделать правильно?
Надо договориться о том, как будут организованы тесты в вашей компании/команде. Один из наиболее простых и распостраненных подходов — полностью копировать структуру основного проекта, добавляя постфикс «Tests». То есть, если был проект CalculationSolution и в нем был путь Calculations/Calculators/, по которому лежал файл Calculator.cs, для которого мы хотим добавить юнит-тесты, то юнит-тесты должны быть в проекте CalculationSolution.Tests по пути Calculations/Calculators/CalculatorTests.cs.
8. Божественные тесты
Как в процессе программирования может появиться god object — класс, который делает все и вся, так и при написании тестов могут получаться тесты, в которых проверяется не что-то одно, а сразу штук 10 разных аспектов. Да, такая «денормализация» тестов порой имеет место быть в end-to-end, UI или интеграционных тестах в целях экономии ресурсов (в т.ч. времени выполнения), однако, юнит-тесты должны проходить очень быстро и нет смысла усложнять себе разбор упавших тестов ради экономии пары миллисекунд.
Как сделать правильно?
Следить за тем, чтобы один тест тестировал только один аспект бизнес-логики.
9. Недостаточная обработка ошибок
Соблазн протестировать happy path и, возможно, парочку самых простых в тестировании ошибок может привести к тому, что непойманные на этапе автоматизированного тестирования ошибки приведут к проблемам в продакшн среде и цена этой ошибки будет намного выше. Отличие этого пункта от первого в том, что, если в первом пункте было наглядно видно маленькое количество тестов, их практически не было, то здесь тесты уже есть и их даже может быть много, однако, они могут быть направлены на количество, а не на качество.
Как сделать правильно?
Опять же, составлять список тестов заранее, плюс, можно добавить в чеклист ревьюера пункт о том, что все тест-кейсы должны быть реализованы.
10. Смешивание юнит-тестов с другими видами тестов
Как я писал выше, юнит-тесты обычно проходят очень быстро, так как не требуют сложной подготовки, подтягивания зависимостей и прочего. Остальные виды тестов уже несколько более продвинутые и более ресурсоемкие. Поэтому смешивание всех тестов в одну кучу является не очень хорошим вариантом.
Как сделать правильно?
Правильным будет разделять мух от котлет. Сделать это можно, например, разнеся тесты по разным проектам или используя идентифицирующие атрибуты. Далее с помощью этих атрибутов можно настроить так, чтобы ни один коммит не попадал ни в одну ветку до тех пор, пока все юнит-тесты, связанные с этим кодом, не пройдут успешно. Также, можно выделить под разные виды тестов разные виртуальные машины и/или стратегии запуска этих тестов.
Статья подготовлена в рамках набора на специализацию C# Developer. Узнать подробнее о специализации.
Software testing is the process of testing and verifying that a software product or application is doing what it is supposed to do. The benefits of testing include preventing distractions, reducing development costs, and improving performance. There are many different types of software testing, each with specific goals and strategies. Some of them are below:
- Acceptance Testing: Ensuring that the whole system works as intended.
- Integration Testing: Ensuring that software components or functions work together.
- Unit Testing: To ensure that each software unit is operating as expected. The unit is a testable component of the application.
- Functional Testing: Evaluating activities by imitating business conditions, based on operational requirements. Checking the black box is a common way to confirm tasks.
- Performance Testing: A test of how the software works under various operating loads. Load testing, for example, is used to assess performance under real-life load conditions.
- Re-Testing: To test whether new features are broken or degraded. Hygiene checks can be used to verify menus, functions, and commands at the highest level when there is no time for a full reversal test.
What is a Bug?
A malfunction in the software/system is an error that may cause components or the system to fail to perform its required functions. In other words, if an error is encountered during the test it can cause malfunction. For example, incorrect data description, statements, input data, design, etc.
Reasons Why Bugs Occur?
1. Lack of Communication: This is a key factor contributing to the development of software bug fixes. Thus, a lack of clarity in communication can lead to misunderstandings of what the software should or should not do. In many cases, the customer may not fully understand how the product should ultimately work. This is especially true if the software is designed for a completely new product. Such situations often lead to many misinterpretations from both sides.
2. Repeated Definitions Required: Constantly changing software requirements creates confusion and pressure in both software development and testing teams. Usually, adding a new feature or deleting an existing feature can be linked to other modules or software components. Observing such problems causes software interruptions.
3. Policy Framework Does Not Exist: Also, debugging a software component/software component may appear in a different or similar component. Lack of foresight can cause serious problems and increase the number of distractions. This is one of the biggest problems because of what interruptions occur as engineers are often under pressure related to timelines; constantly changing needs, increasing the number of distractions, etc. Addition, Design and redesign, UI integration, module integration, database management all add to the complexity of the software and the system as a whole.
4. Performance Errors: Significant problems with software design and architecture can cause problems for systems. Improved software tends to make mistakes as programmers can also make mistakes. As a test tester, data/announcement reference errors, control flow errors, parameter errors, input/output errors, etc.
5. Lots of Recycling: Resetting resources, redoing or discarding a finished work, changes in hardware/software requirements may also affect the software. Assigning a new developer to a project in the middle of nowhere can cause software interruptions. This can happen if proper coding standards are not followed, incorrect coding, inaccurate data transfer, etc. Discarding part of existing code may leave traces on other parts of the software; Ignoring or deleting that code may cause software interruptions. In addition, critical bugs can occur especially with large projects, as it becomes difficult to pinpoint the location of the problem.
Life Cycle of a Bug in Software Testing
Below are the steps in the lifecycle of the bug in software testing:
- Open: The editor begins the process of analyzing bugs here, where possible, and works to fix them. If the editor thinks the error is not enough, the error for some reason can be transferred to the next four regions, Reject or No, i.e. Repeat.
- New: This is the first stage of the distortion of distractions in the life cycle of the disorder. In the later stages of the bug’s life cycle, confirmation and testing are performed on these bugs when a new feature is discovered.
- Shared: The engineering team has been provided with a new bug fixer recently built at this level. This will be sent to the designer by the project leader or team manager.
- Pending Review: When fixing an error, the designer will give the inspector an error check and the feature status will remain pending ‘review’ until the tester is working on the error check.
- Fixed: If the Developer completes the debugging task by making the necessary changes, the feature status can be called “Fixed.”
- Confirmed: If the tester had no problem with the feature after the designer was given the feature on the test device and thought that if it was properly adjusted, the feature status was given “verified”.
- Open again / Reopen: If there is still an error, the editor will then be instructed to check and the feature status will be re-opened.
- Closed: If the error is not present, the tester changes the status of the feature to ‘Off’.
- Check Again: The inspector then begins the process of reviewing the error to check that the error has been corrected by the engineer as required.
- Repeat: If the engineer is considering a factor similar to another factor. If the developer considers a feature similar to another feature, or if the definition of malfunction coincides with any other malfunction, the status of the feature is changed by the developer to ‘duplicate’.
Few more stages to add here are:
- Rejected: If a feature can be considered a real factor the developer will mean “Rejected” developer.
- Duplicate: If the engineer finds a feature similar to any other feature or if the concept of the malfunction is similar to any other feature the status of the feature is changed to ‘Duplicate’ by the developer.
- Postponed: If the developer feels that the feature is not very important and can be corrected in the next release, however, in that case, he can change the status of the feature such as ‘Postponed’.
- Not a Bug: If the feature does not affect the performance of the application, the corrupt state is changed to “Not a Bug”.
Fig 1.1 Diagram of Bug Life Cycle
Bug Report
- Defect/ Bug Name: A short headline describing the defect. It should be specific and accurate.
- Defect/Bug ID: Unique identification number for the defect.
- Defect Description: Detailed description of the bug including the information of the module in which it was detected. It contains a detailed summary including the severity, priority, expected results vs actual output, etc.
- Severity: This describes the impact of the defect on the application under test.
- Priority: This is related to how urgent it is to fix the defect. Priority can be High/ Medium/ Low based on the impact urgency at which the defect should be fixed.
- Reported By: Name/ ID of the tester who reported the bug.
- Reported On: Date when the defect is raised.
- Steps: These include detailed steps along with the screenshots with which the developer can reproduce the same defect.
- Status: New/ Open/ Active
- Fixed By: Name/ ID of the developer who fixed the defect.
- Data Closed: Date when the defect is closed.
Factors to be Considered while Reporting a Bug:
- The whole team should clearly understand the different conditions of the trauma before starting research on the life cycle of the disability.
- To prevent future confusion, a flawed life cycle should be well documented.
- Make sure everyone who has any work related to the Default Life Cycle understands his or her best results work very clearly.
- Everyone who changes the status quo should be aware of the situation which should provide sufficient information about the nature of the feature and the reason for it so that everyone working on that feature can easily see the reason for that feature.
- A feature tracking tool should be carefully handled in the course of a defective life cycle work to ensure consistency between errors.
Bug Tracking Tools
Below are some of the bug tracking tools–
1. KATALON TESTOPS: Katalon TestOps is a free, powerful orchestration platform that helps with your process of tracking bugs. TestOps provides testing teams and DevOps teams with a clear, linked picture of their testing, resources, and locations to launch the right test, in the right place, at the right time.
Features:
- Applies to Cloud, Desktop: Window and Linux program.
- Compatible with almost all test frames available: Jasmine, JUnit, Pytest, Mocha, etc .; CI / CD tools: Jenkins, CircleCI, and management platforms: Jira, Slack.
- Track real-time data for error correction, and for accuracy.
- Live and complete performance test reports to determine the cause of any problems.
- Plan well with Smart Scheduling to prepare for the test cycle while maintaining high quality.
- Rate release readiness to improve release confidence.
- Improve collaboration and enhance transparency with comments, dashboards, KPI tracking, possible details – all in one place.
2. KUALITEE: Collection of specific results and analysis with solid failure analysis in any framework. The Kualitee is for development and QA teams look beyond the allocation and tracking of bugs. It allows you to build high-quality software using tiny bugs, fast QA cycles, and better control of your build. The comprehensive suite combines all the functions of a good error management tool and has a test case and flow of test work built into it seamlessly. You would not need to combine and match different tools; instead, you can manage all your tests in one place.
Features:
- Create, assign, and track errors.
- Tracing between disability, needs, and testing.
- Easy-to-use errors, test cases, and test cycles.
- Custom permissions, fields, and reporting.
- Interactive and informative dashboard.
- Integration of external companies and REST API.
- An intuitive and easy-to-use interface.
3. QA Coverage: QACoverage is the place to go for successfully managing all your testing processes so that you can produce high-quality and trouble-free products. It has a disability control module that will allow you to manage errors from the first diagnostic phase until closed. The error tracking process can be customized and tailored to the needs of each client. In addition to negative tracking, QACoverage has the ability to track risks, issues, enhancements, suggestions, and recommendations. It also has full capabilities for complex test management solutions that include needs management, test case design, test case issuance, and reporting.
Features:
- Control the overall workflow of a variety of Tickets including risk, issues, tasks, and development management.
- Produce complete metrics to identify the causes and levels of difficulty.
- Support a variety of information that supports the feature with email attachments.
- Create and set up a workflow for enhanced test visibility with automatic notifications.
- Photo reports based on difficulty, importance, type of malfunction, disability category, expected correction date, and much more.
4. BUG HERD: BugHerd is an easy way to track bugs, collect and manage webpage responses. Your team and customers search for feedback on web pages, so they can find the exact problem. BugHerd also scans the information you need to replicate and resolve bugs quickly, such as browser, CSS selector data, operating system, and screenshot. Distractions and feedback, as well as technical information, are submitted to the Kanban Style Task Board, where distractions can be assigned and managed until they are eliminated. BugHerd can also integrate with your existing project management tools, helping to keep your team on the same page with bug fixes.
Software testing is the process of testing and verifying that a software product or application is doing what it is supposed to do. The benefits of testing include preventing distractions, reducing development costs, and improving performance. There are many different types of software testing, each with specific goals and strategies. Some of them are below:
- Acceptance Testing: Ensuring that the whole system works as intended.
- Integration Testing: Ensuring that software components or functions work together.
- Unit Testing: To ensure that each software unit is operating as expected. The unit is a testable component of the application.
- Functional Testing: Evaluating activities by imitating business conditions, based on operational requirements. Checking the black box is a common way to confirm tasks.
- Performance Testing: A test of how the software works under various operating loads. Load testing, for example, is used to assess performance under real-life load conditions.
- Re-Testing: To test whether new features are broken or degraded. Hygiene checks can be used to verify menus, functions, and commands at the highest level when there is no time for a full reversal test.
What is a Bug?
A malfunction in the software/system is an error that may cause components or the system to fail to perform its required functions. In other words, if an error is encountered during the test it can cause malfunction. For example, incorrect data description, statements, input data, design, etc.
Reasons Why Bugs Occur?
1. Lack of Communication: This is a key factor contributing to the development of software bug fixes. Thus, a lack of clarity in communication can lead to misunderstandings of what the software should or should not do. In many cases, the customer may not fully understand how the product should ultimately work. This is especially true if the software is designed for a completely new product. Such situations often lead to many misinterpretations from both sides.
2. Repeated Definitions Required: Constantly changing software requirements creates confusion and pressure in both software development and testing teams. Usually, adding a new feature or deleting an existing feature can be linked to other modules or software components. Observing such problems causes software interruptions.
3. Policy Framework Does Not Exist: Also, debugging a software component/software component may appear in a different or similar component. Lack of foresight can cause serious problems and increase the number of distractions. This is one of the biggest problems because of what interruptions occur as engineers are often under pressure related to timelines; constantly changing needs, increasing the number of distractions, etc. Addition, Design and redesign, UI integration, module integration, database management all add to the complexity of the software and the system as a whole.
4. Performance Errors: Significant problems with software design and architecture can cause problems for systems. Improved software tends to make mistakes as programmers can also make mistakes. As a test tester, data/announcement reference errors, control flow errors, parameter errors, input/output errors, etc.
5. Lots of Recycling: Resetting resources, redoing or discarding a finished work, changes in hardware/software requirements may also affect the software. Assigning a new developer to a project in the middle of nowhere can cause software interruptions. This can happen if proper coding standards are not followed, incorrect coding, inaccurate data transfer, etc. Discarding part of existing code may leave traces on other parts of the software; Ignoring or deleting that code may cause software interruptions. In addition, critical bugs can occur especially with large projects, as it becomes difficult to pinpoint the location of the problem.
Life Cycle of a Bug in Software Testing
Below are the steps in the lifecycle of the bug in software testing:
- Open: The editor begins the process of analyzing bugs here, where possible, and works to fix them. If the editor thinks the error is not enough, the error for some reason can be transferred to the next four regions, Reject or No, i.e. Repeat.
- New: This is the first stage of the distortion of distractions in the life cycle of the disorder. In the later stages of the bug’s life cycle, confirmation and testing are performed on these bugs when a new feature is discovered.
- Shared: The engineering team has been provided with a new bug fixer recently built at this level. This will be sent to the designer by the project leader or team manager.
- Pending Review: When fixing an error, the designer will give the inspector an error check and the feature status will remain pending ‘review’ until the tester is working on the error check.
- Fixed: If the Developer completes the debugging task by making the necessary changes, the feature status can be called “Fixed.”
- Confirmed: If the tester had no problem with the feature after the designer was given the feature on the test device and thought that if it was properly adjusted, the feature status was given “verified”.
- Open again / Reopen: If there is still an error, the editor will then be instructed to check and the feature status will be re-opened.
- Closed: If the error is not present, the tester changes the status of the feature to ‘Off’.
- Check Again: The inspector then begins the process of reviewing the error to check that the error has been corrected by the engineer as required.
- Repeat: If the engineer is considering a factor similar to another factor. If the developer considers a feature similar to another feature, or if the definition of malfunction coincides with any other malfunction, the status of the feature is changed by the developer to ‘duplicate’.
Few more stages to add here are:
- Rejected: If a feature can be considered a real factor the developer will mean “Rejected” developer.
- Duplicate: If the engineer finds a feature similar to any other feature or if the concept of the malfunction is similar to any other feature the status of the feature is changed to ‘Duplicate’ by the developer.
- Postponed: If the developer feels that the feature is not very important and can be corrected in the next release, however, in that case, he can change the status of the feature such as ‘Postponed’.
- Not a Bug: If the feature does not affect the performance of the application, the corrupt state is changed to “Not a Bug”.
Fig 1.1 Diagram of Bug Life Cycle
Bug Report
- Defect/ Bug Name: A short headline describing the defect. It should be specific and accurate.
- Defect/Bug ID: Unique identification number for the defect.
- Defect Description: Detailed description of the bug including the information of the module in which it was detected. It contains a detailed summary including the severity, priority, expected results vs actual output, etc.
- Severity: This describes the impact of the defect on the application under test.
- Priority: This is related to how urgent it is to fix the defect. Priority can be High/ Medium/ Low based on the impact urgency at which the defect should be fixed.
- Reported By: Name/ ID of the tester who reported the bug.
- Reported On: Date when the defect is raised.
- Steps: These include detailed steps along with the screenshots with which the developer can reproduce the same defect.
- Status: New/ Open/ Active
- Fixed By: Name/ ID of the developer who fixed the defect.
- Data Closed: Date when the defect is closed.
Factors to be Considered while Reporting a Bug:
- The whole team should clearly understand the different conditions of the trauma before starting research on the life cycle of the disability.
- To prevent future confusion, a flawed life cycle should be well documented.
- Make sure everyone who has any work related to the Default Life Cycle understands his or her best results work very clearly.
- Everyone who changes the status quo should be aware of the situation which should provide sufficient information about the nature of the feature and the reason for it so that everyone working on that feature can easily see the reason for that feature.
- A feature tracking tool should be carefully handled in the course of a defective life cycle work to ensure consistency between errors.
Bug Tracking Tools
Below are some of the bug tracking tools–
1. KATALON TESTOPS: Katalon TestOps is a free, powerful orchestration platform that helps with your process of tracking bugs. TestOps provides testing teams and DevOps teams with a clear, linked picture of their testing, resources, and locations to launch the right test, in the right place, at the right time.
Features:
- Applies to Cloud, Desktop: Window and Linux program.
- Compatible with almost all test frames available: Jasmine, JUnit, Pytest, Mocha, etc .; CI / CD tools: Jenkins, CircleCI, and management platforms: Jira, Slack.
- Track real-time data for error correction, and for accuracy.
- Live and complete performance test reports to determine the cause of any problems.
- Plan well with Smart Scheduling to prepare for the test cycle while maintaining high quality.
- Rate release readiness to improve release confidence.
- Improve collaboration and enhance transparency with comments, dashboards, KPI tracking, possible details – all in one place.
2. KUALITEE: Collection of specific results and analysis with solid failure analysis in any framework. The Kualitee is for development and QA teams look beyond the allocation and tracking of bugs. It allows you to build high-quality software using tiny bugs, fast QA cycles, and better control of your build. The comprehensive suite combines all the functions of a good error management tool and has a test case and flow of test work built into it seamlessly. You would not need to combine and match different tools; instead, you can manage all your tests in one place.
Features:
- Create, assign, and track errors.
- Tracing between disability, needs, and testing.
- Easy-to-use errors, test cases, and test cycles.
- Custom permissions, fields, and reporting.
- Interactive and informative dashboard.
- Integration of external companies and REST API.
- An intuitive and easy-to-use interface.
3. QA Coverage: QACoverage is the place to go for successfully managing all your testing processes so that you can produce high-quality and trouble-free products. It has a disability control module that will allow you to manage errors from the first diagnostic phase until closed. The error tracking process can be customized and tailored to the needs of each client. In addition to negative tracking, QACoverage has the ability to track risks, issues, enhancements, suggestions, and recommendations. It also has full capabilities for complex test management solutions that include needs management, test case design, test case issuance, and reporting.
Features:
- Control the overall workflow of a variety of Tickets including risk, issues, tasks, and development management.
- Produce complete metrics to identify the causes and levels of difficulty.
- Support a variety of information that supports the feature with email attachments.
- Create and set up a workflow for enhanced test visibility with automatic notifications.
- Photo reports based on difficulty, importance, type of malfunction, disability category, expected correction date, and much more.
4. BUG HERD: BugHerd is an easy way to track bugs, collect and manage webpage responses. Your team and customers search for feedback on web pages, so they can find the exact problem. BugHerd also scans the information you need to replicate and resolve bugs quickly, such as browser, CSS selector data, operating system, and screenshot. Distractions and feedback, as well as technical information, are submitted to the Kanban Style Task Board, where distractions can be assigned and managed until they are eliminated. BugHerd can also integrate with your existing project management tools, helping to keep your team on the same page with bug fixes.
Дефекты программного обеспечения можно обнаружить на каждом этапе разработки и тестирования продукта. Чтобы гарантировать исправление наиболее серьезных дефектов программного обеспечения, тестировщикам важно иметь хорошее представление о различных типах дефектов, которые могут возникнуть.
В этой статье мы обсудим самые распространенные типы ПО дефекты и способы их выявления.
Что такое дефект?
Дефект программного обеспечения — это ошибка, изъян, сбой или неисправность в компьютерной программе, из-за которой она выдает неправильный или неожиданный результат или ведет себя непреднамеренным образом. Программная ошибка возникает, когда фактические результаты не совпадают с ожидаемыми. Разработчики и программисты иногда допускают ошибки, которые создают ошибки, называемые дефектами. Большинство ошибок возникает из-за ошибок, которые допускают разработчики или программисты.
Обязательно прочтите: Разница между дефектом, ошибкой, ошибкой и сбоем
Типы программных ошибок при тестировании программного обеспечения
Существует множество различных типов дефектов программного обеспечения, и тестировщикам важно знать наиболее распространенные из них, чтобы они могут эффективно тестировать их.
Ошибки программного обеспечения подразделяются на три типа:
- Дефекты программного обеспечения по своей природе
- Дефекты программного обеспечения по их приоритету
- Дефекты программного обеспечения по их серьезности
Обычно мы можем видеть приоритет и серьезность классификаторов в большинстве инструментов отслеживания ошибок. Если мы настроим классификатор в соответствии с характером ошибки, а также приоритетом и серьезностью, это поможет легко управлять распределением обязанностей по исправлению ошибок соответствующим командам.
#1. Дефекты программного обеспечения по своей природе
Ошибки в программном обеспечении имеют широкий спектр природы, каждая из которых имеет свой собственный набор симптомов. Несмотря на то, что таких багов много, сталкиваться с ними можно не часто. Вот наиболее распространенные ошибки программного обеспечения, классифицированные по характеру, с которыми вы, скорее всего, столкнетесь при тестировании программного обеспечения.
#1. Функциональные ошибки
Как следует из названия, функциональные ошибки — это те, которые вызывают сбои в работе программного обеспечения. Хорошим примером этого может служить кнопка, при нажатии на которую должно открываться новое окно, но вместо этого ничего не происходит.
Функциональные ошибки можно исправить, выполнив функциональное тестирование.
#2. Ошибки на уровне модуля
Ошибки на уровне модуля — это дефекты, связанные с функциональностью отдельного программного модуля. Программный модуль — это наименьшая тестируемая часть приложения. Примеры программных модулей включают классы, методы и процедуры. Ошибки на уровне подразделения могут существенно повлиять на общее качество программного обеспечения.
Ошибки на уровне модуля можно исправить, выполнив модульное тестирование.
#3. Ошибки уровня интеграции
Ошибки уровня интеграции — это дефекты, возникающие при объединении двух или более программных модулей. Эти дефекты может быть трудно найти и исправить, потому что они часто требуют координации между несколькими командами. Однако они могут оказать существенное влияние на общее качество программного обеспечения.
Ошибки интеграции можно исправить, выполнив интеграционное тестирование.
#4. Дефекты юзабилити
Ошибки юзабилити — это дефекты, влияющие на работу пользователя с программным обеспечением и затрудняющие его использование. Дефект юзабилити — это дефект пользовательского опыта программного обеспечения, который затрудняет его использование. Ошибки юзабилити — это такие ошибки, как если веб-сайт сложен для доступа или обойти, или процесс регистрации сложен для прохождения.
Во время тестирования удобства использования тестировщики программного обеспечения проверяют приложения на соответствие требованиям пользователей и Руководству по доступности веб-контента (WCAG) для выявления таких проблем. Однако они могут оказать существенное влияние на общее качество программного обеспечения.
Ошибки, связанные с удобством использования, можно исправить, выполнив тестирование удобства использования.
#5. Дефекты производительности
Ошибки производительности — это дефекты, влияющие на производительность программного обеспечения. Это может включать в себя такие вещи, как скорость программного обеспечения, объем используемой памяти или количество потребляемых ресурсов. Ошибки уровня производительности сложно отследить и исправить, поскольку они могут быть вызваны рядом различных факторов.
Ошибки юзабилити можно исправить, выполнив тестирование производительности.
#6. Дефекты безопасности
Ошибки безопасности — это тип дефекта программного обеспечения, который может иметь серьезные последствия, если его не устранить. Эти дефекты могут позволить злоумышленникам получить доступ к конфиденциальным данным или системам или даже позволить им получить контроль над уязвимым программным обеспечением. Таким образом, очень важно, чтобы ошибкам уровня безопасности уделялось первоочередное внимание и устранялись как можно скорее.
Ошибки безопасности можно исправить, выполнив тестирование безопасности.
#7. Дефекты совместимости
Дефекты совместимости — это те ошибки, которые возникают, когда приложение несовместимо с оборудованием, на котором оно работает, или с другим программным обеспечением, с которым оно должно взаимодействовать. Несовместимость программного и аппаратного обеспечения может привести к сбоям, потере данных и другому непредсказуемому поведению. Тестировщики должны знать о проблемах совместимости и проводить соответствующие тесты. Программное приложение, имеющее проблемы с совместимостью, не работает последовательно на различных видах оборудования, операционных системах, веб-браузерах и устройствах при подключении к определенным программам или работе в определенных сетевых условиях.
Ошибки совместимости можно исправить, выполнение тестирования совместимости.
#8. Синтаксические ошибки
Синтаксические ошибки являются самым основным типом дефекта. Они возникают, когда код нарушает правила языка программирования. Например, использование неправильной пунктуации или забывание закрыть скобку может привести к синтаксической ошибке. Синтаксические ошибки обычно мешают запуску кода, поэтому их относительно легко обнаружить и исправить.
#9. Логические ошибки
Логические ошибки — это дефекты, из-за которых программа выдает неправильные результаты. Эти ошибки может быть трудно найти и исправить, потому что они часто не приводят к каким-либо видимым ошибкам. Логические ошибки могут возникать в любом типе программного обеспечения, но они особенно распространены в приложениях, требующих сложных вычислений или принятия решений.
Общие симптомы логических ошибок включают:
- Неверные результаты или выходные данные
- Неожиданное поведение
- Сбой или зависание программного обеспечения
Чтобы найти и исправить логические ошибки, тестировщикам необходимо иметь четкое представление о коде программы и о том, как она должна работать. Часто лучший способ найти такие ошибки — использовать инструменты отладки или пошаговое выполнение, чтобы отслеживать выполнение программы и видеть, где что-то идет не так.
#2. Дефекты программного обеспечения по степени серьезности
Уровень серьезности присваивается дефекту по его влиянию. В результате серьезность проблемы отражает степень ее влияния на функциональность или работу программного продукта. Дефекты серьезности классифицируются как критические, серьезные, средние и незначительные в зависимости от степени серьезности.
#1. Критические дефекты
Критический дефект — это программная ошибка, имеющая серьезные или катастрофические последствия для работы приложения. Критические дефекты могут привести к сбою, зависанию или некорректной работе приложения. Они также могут привести к потере данных или уязвимостям в системе безопасности. Разработчики и тестировщики часто придают первостепенное значение критическим дефектам, поскольку их необходимо исправить как можно скорее.
#2. Серьезные дефекты
Серьезный дефект — это программная ошибка, существенно влияющая на работу приложения. Серьезные дефекты могут привести к замедлению работы приложения или другому неожиданному поведению. Они также могут привести к потере данных или уязвимостям в системе безопасности. Разработчики и тестировщики часто придают первостепенное значение серьезным дефектам, поскольку их необходимо исправить как можно скорее.
#3. Незначительные дефекты
Незначительный дефект — это программная ошибка, которая оказывает небольшое или незначительное влияние на работу приложения. Незначительные дефекты могут привести к тому, что приложение будет работать немного медленнее или демонстрировать другое неожиданное поведение. Разработчики и тестировщики часто не придают незначительным дефектам приоритет, потому что их можно исправить позже.
#4. Тривиальные дефекты
Тривиальный дефект – это программная ошибка, не влияющая на работу приложения. Тривиальные дефекты могут привести к тому, что приложение отобразит сообщение об ошибке или проявит другое неожиданное поведение. Разработчики и тестировщики часто присваивают тривиальным дефектам самый низкий приоритет, потому что они могут быть исправлены позже.
#3. Дефекты программного обеспечения по приоритету
#1. Дефекты с низким приоритетом
Дефекты с низким приоритетом, как правило, не оказывают серьезного влияния на работу программного обеспечения и могут быть отложены для исправления в следующей версии или выпуске. В эту категорию попадают косметические ошибки, такие как орфографические ошибки, неправильное выравнивание и т. д.
#2. Дефекты со средним приоритетом
Дефекты со средним приоритетом — это ошибки, которые могут быть исправлены после предстоящего выпуска или в следующем выпуске. Приложение, возвращающее ожидаемый результат, которое, однако, неправильно форматируется в конкретном браузере, является примером дефекта со средним приоритетом.
#3. Дефекты с высоким приоритетом
Как следует из названия, дефекты с высоким приоритетом — это те, которые сильно влияют на функционирование программного обеспечения. В большинстве случаев эти дефекты необходимо исправлять немедленно, так как они могут привести к серьезным нарушениям нормального рабочего процесса. Дефекты с высоким приоритетом обычно классифицируются как непреодолимые, так как они могут помешать пользователю продолжить выполнение поставленной задачи.
Некоторые распространенные примеры дефектов с высоким приоритетом включают:
- Дефекты, из-за которых приложение не работает. сбой
- Дефекты, препятствующие выполнению задачи пользователем
- Дефекты, приводящие к потере или повреждению данных
- Дефекты, раскрывающие конфиденциальную информацию неавторизованным пользователям
- Дефекты, делающие возможным несанкционированный доступ к системе
- Дефекты, приводящие к потере функциональности
- Дефекты, приводящие к неправильным результатам или неточным данным
- Дефекты, вызывающие проблемы с производительностью, такие как чрезмерное использование памяти или медленное время отклика
#4. Срочные дефекты
Срочные дефекты — это дефекты, которые необходимо устранить в течение 24 часов после сообщения о них. В эту категорию попадают дефекты со статусом критической серьезности. Однако дефекты с низким уровнем серьезности также могут быть классифицированы как высокоприоритетные. Например, опечатка в названии компании на домашней странице приложения не оказывает технического влияния на программное обеспечение, но оказывает существенное влияние на бизнес, поэтому считается срочной.
#4. Дополнительные дефекты
#1. Отсутствующие дефекты
Отсутствующие дефекты возникают из-за требований, которые не были включены в продукт. Они также считаются несоответствиями спецификации проекта и обычно негативно сказываются на пользовательском опыте или качестве программного обеспечения.
#2. Неправильные дефекты
Неправильные дефекты — это те дефекты, которые удовлетворяют требованиям, но не должным образом. Это означает, что хотя функциональность достигается в соответствии с требованиями, но не соответствует ожиданиям пользователя.
#3. Дефекты регрессии
Дефект регрессии возникает, когда изменение кода вызывает непреднамеренное воздействие на независимую часть программного обеспечения.
Часто задаваемые вопросы — Типы программных ошибок< /h2>
Почему так важна правильная классификация дефектов?
Правильная классификация дефектов важна, поскольку она помогает эффективно использовать ресурсы и управлять ими, правильно приоритизировать дефекты и поддерживать качество программного продукта.
Команды тестирования программного обеспечения в различных организациях используют различные инструменты отслеживания дефектов, такие как Jira, для отслеживания дефектов и управления ими. Несмотря на то, что в этих инструментах есть несколько вариантов классификации дефектов по умолчанию, они не всегда могут наилучшим образом соответствовать конкретным потребностям организации.
Следовательно, важно сначала определить и понять типы дефектов программного обеспечения, которые наиболее важны для организации, а затем соответствующим образом настроить инструмент управления дефектами.
Правильная классификация дефектов также гарантирует, что команда разработчиков сможет сосредоточиться на критических дефектах и исправить их до того, как они повлияют на конечных пользователей.
Кроме того, это также помогает определить потенциальные области улучшения в процессе разработки программного обеспечения, что может помочь предотвратить появление подобных дефектов в будущих выпусках.
Таким образом, отслеживание и устранение дефектов программного обеспечения может показаться утомительной и трудоемкой задачей. , правильное выполнение может существенно повлиять на качество конечного продукта.
Как найти лежащие в основе ошибки программного обеспечения?
Определение основной причины программной ошибки может быть сложной задачей даже для опытных разработчиков. Чтобы найти лежащие в основе программные ошибки, тестировщики должны применять систематический подход. В этот процесс входят различные этапы:
1) Репликация. Первым этапом является воспроизведение ошибки. Это включает в себя попытку воспроизвести тот же набор шагов, в котором возникла ошибка. Это поможет проверить, является ли ошибка реальной или нет.
2) Изоляция. После того, как ошибка воспроизведена, следующим шагом будет попытка ее изоляции. Это включает в себя выяснение того, что именно вызывает ошибку. Для этого тестировщики должны задать себе несколько вопросов, например:
– Какие входные данные вызывают ошибку?
– При каких различных условиях возникает ошибка?
– Каковы различные способы проявления ошибки?
3) Анализ: после Изолируя ошибку, следующим шагом будет ее анализ. Это включает в себя понимание того, почему возникает ошибка. Тестировщики должны задать себе несколько вопросов, таких как:
– Какова основная причина ошибки?
– Какими способами можно исправить ошибку?
– Какое исправление было бы наиболее эффективным? эффективно?
4) Отчет. После анализа ошибки следующим шагом является сообщение о ней. Это включает в себя создание отчета об ошибке, который включает всю соответствующую информацию об ошибке. Отчет должен быть четким и кратким, чтобы разработчики могли его легко понять.
5) Проверка. После сообщения об ошибке следующим шагом является проверка того, была ли она исправлена. Это включает в себя повторное тестирование программного обеспечения, чтобы убедиться, что ошибка все еще существует. Если ошибка исправлена, то тестер может подтвердить это и закрыть отчет об ошибке. Если ошибка все еще существует, тестировщик может повторно открыть отчет об ошибке.
Заключение
В индустрии программного обеспечения дефекты — неизбежная реальность. Однако благодаря тщательному анализу и пониманию их характера, серьезности и приоритета дефектами можно управлять, чтобы свести к минимуму их влияние на конечный продукт.
Задавая правильные вопросы и применяя правильные методы, тестировщики могут помочь обеспечить чтобы дефекты обнаруживались и исправлялись как можно раньше в процессе разработки.
TAG: qa
Автор: Артём Ваулин
Если вы действительно радеете за результат, то обязательно постарайтесь привлечь к тестированию требований и ваших разработчиков, если самостоятельно они этого не делают, ошибочно полагая, что всем связанным с тестирование должны заниматься вы (т.е. тестировщики), а всем, связанным с требованиями, — консультанты и аналитики. Проанализировав требования с точки зрения внутренний архитектуры системы (программы) и кода, разработчики могут дать множество ценных советов и замечаний относительно того, что в требованиях написано не так или чего там не хватает.
Странное название?
Обычно TOP-ы круглочисленные (Fortuna 500, Русская 10-ка и т.д.)?
Почему именно 13? Не потому ли, что по общепринятому мнению (программисты часто считают свое мнение — общепринятым) тестировщики приносят одни несчастья?
Думаю, что примерно такие вопросы за долю секунды промелькнут в ваших головах, когда вы увидели название этого эссе.
Все намного проще…
Именно столько пометок (13 штук) я сделал в своем блокноте во время подготовки к совещанию с группой тестирования, на котором я хотел выступить с вопросом о том, какие недочеты и промахи в своей работе допускают тестировщики и какие проблемы имеются в организации нашего процесса тестирования.
Сразу же хочу оговориться, что данные рекомендации выработаны на основе одного конкретного процесса тестирования, которого придерживается созданная мной группа тестирования. Но я также не исключаю, что любой практикующий тестировщик, руководитель тестировщиков и т.д. сможет вынести нечто полезное из нашего опыта.
Для лучшего восприятия и наибольшей запоминаемости, я постарался сгруппировать свои 13 рекомендаций в несколько обобщенных категорий и расставить их по приоритету, начиная, по моему мнению, с самого важного. Получилось следующее:
- Требования
- Тест-кейсы
- Управление ошибками
- Документирование
- Взаимодействие
Внутри каждой категории я обозначу и постараюсь объяснить каждую пометку из тех, которые я набросал в своем блокноте во время подготовки.
Требования
1. Требования необходимо тестировать
Речь здесь идет о тестировании требований всех уровней и видов: бизнес-требования, пользовательские требования, системные требования, функциональные требования, нефункциональные требования, требований производительности, требования удобства использования и т.д.
Мало того, что их надо тестировать. Тестировать требования необходимо на самых ранних этапах и/или стадиях процесса разработки (думаю, что Америки я не открыл). Начинать тестировать требования надо сразу, как только у вас появилась уникальная возможность получить к ним доступ, несмотря на то, где и в каком виде они находятся — в электронном виде, размещенные на общедоступном ресурсе, высланные вам по электронной почте или только что сформировавшиеся в голове консультанта/аналитика и еще не получившие формального отражения.
Если вы действительно радеете за результат, то обязательно постарайтесь привлечь к тестированию требований и ваших разработчиков, если самостоятельно они этого не делают, ошибочно полагая, что всем связанным с тестирование должны заниматься вы (т.е. тестировщики), а всем, связанным с требованиями, — консультанты и аналитики. Проанализировав требования с точки зрения внутренний архитектуры системы (программы) и кода, разработчики могут дать множество ценных советов и замечаний относительно того, что в требованиях написано не так или чего там не хватает.
Последствиями либо отсутствия тестирования требований вообще, либо откладывания тестирования требований до лучших времен или тезиса «все их недостатки выявятся в процессе разработки и тестирования» являются:
- выявление серьезных ошибок проектирования непосредственно перед выпуском релиза, что приводит к необходимости серьезных доработок, как требований, так и кода (я уже не говорю о доработке тест-кейсов, тестовых данных и повторном тестировании). Естественно, все это приводит к срыву сроков, авральной работе (по ночам и/или выходным) и прочим негативным вещам, которых можно было бы избежать своевременным тестированием требований;
- перекладывание всей ответственности и вины за случившееся на создателей требований, что по меньшей мере, не оздоровляет отношения между участниками разработки. Наверное, многие сталкивались с позицией программистов, аналогичной этим: «Не было написано, поэтому и не сделал», «Как написано, так и сделал», «Писать надо лучше» и т.п.
Несмотря на важность тестирования требований программистами, речь здесь идет прежде всего о тестировщиках, которые громко кричат, что консультант Пупкин здесь не написал то, здесь недодумал это, тут не понятно, а в следующем абзаце вообще чушь полную написал, которая никак не состыкуется с тем, что было написано и сделано до этого. Честь бы и хвала была такому тестировщику, если бы кричал он об этом не за день до выкладки релиза, а в первый день работы над данной функциональностью.
В заключении заметки о тестировании требований еще раз осмелюсь повторить критерии качества требований к программному обеспечению:
- Корректность
- Недвусмысленность (однозначность)
- Полнота
- Непротиворечивость (совместимость)
- Упорядоченность (ранжированность по важности и стабильности)
- Проверяемость (тестируемость или тестопригодность)
- Модифицируемость
- Трассируемость (прослеживаемость)
- Понятность
Тест- кейсы
Для лучшего понимания раздела, посвященного тест-кейсам, приведу здесь определение этих самых тест-кейсов, которое предлагает энциклопедия Wikipedia (прошу прощения за мой вольный перевод).
Тест-кейс (тестовый случай, test case) — это набор условий и/или переменных, с помощью которых тестировщик будет определять насколько полно тестируемое приложение удовлетворяет предъявляемому к нему требованию. Для того, чтобы убедиться, что требование полностью удовлетворяется, может понадобиться несколько тест-кейсов. Для полного тестирования всех требований, предъявляемых к приложению, должен быть создан/выполнен по меньшей мере один тест-кейс для каждого требования. Если требование имеет дочерние требования, то для каждого такого дочернего требования должен быть создан/выполнен также по крайней мере один тест-кейс. Некоторые методологии (например, RUP) рекомендуют создавать по меньшей мере два тест-кейса для каждого требования. Один из них должен выполнять позитивное тестирование, другой — негативное.
Если приложение создается без формальных требований, то тест-кейсы пишутся основываясь на обычном поведении программ схожего класса (на так называемых оракулах — но это уже совсем другая история).
Что формально характеризует написанный тест-кейс? Наличие известного ввода (входные данные) и ожидаемого результата, который достигается после выполнения теста. Входные данные называются предусловиями теста, а ожидаемый результат — постусловиями теста.
Написанные тест-кейсы часто объединяются в тестовые наборы (test suite).
Комбинации тест-кейсов наиболее часто используются в приемочном тестировании. Приемочное тестирование выполняется группой конечных пользователей, клиентов (или как в нашем случае, группой разработчиков — об этом позже), чтобы убедиться, что разработанная система удовлетворяет их требованиям. Приемочное тестирования обычно характеризуется включением в него позитивных тест-кейсов, которые определяют удачный путь выполнения приложения.
2. Тест-кейсы необходимо писать по требованиям
Начну здесь, пожалуй, с того, что же такое тестирование и какой программный продукт (систему) мы можем назвать качественным. Надеюсь, что дальше станет понятно, почему я начинаю с определения очевидных вещей.
Одним из определений качественного продукта (не обязательного программного) является то, на сколько данный продукт удовлетворяет предъявляемым к нему требованиям. Исходя из такого подхода к качественному продукту, можно дать следующее определение тестированию. Тестирование — это процесс проверки соответствия продукта предъявляемым к нему требованиям. Т.е. в процессе тестирования программного продукта мы определяем соответствует ли то, что написали программисты, тому, что написали консультанты и аналитики (формализовав требования и пожелания Заказчика).
Данное определение ни в коем случае не претендует на полноту и описывает процесс тестирования только с одной стороны. С той стороны, которая повернута к требованиям. Именно поэтому не стоит расценивать все, что будет написано дальше, как исчерпывающую инструкцию по написанию тест-кейсов.
Отталкиваясь от приведенного мной выше определения через призму рассматриваемой проблемы с тест-кейсами, можно заключить, что тест-кейсы, по своей сути направленные на проверку требований, должны писаться исходя из предъявляемых к продукту требований и никак иначе.
Что же делают наиболее изобретательные тестировщики? При написании тест-кейсов они пытаются заручиться поддержкой программистов, а если еще точнее, то они пытаются как можно быстрей получить готовую реализацию продукта и писать все тест-кейсы, опираясь на реализованный продукт, т.к. это по их мнению объективно проще и понятней. Это крайне неправильно!
В этом случае получается, что в процессе тестирования проверяется соответствие разработанного продукта разработанному продукту (вот такой каламбурчик). Сами можете представить себе, что из этого получается.
Поэтому, резюмирую все описанное выше — базисом для подготовки тест-кейсов должны быть требования (в том или ином виде), а ни в коем случае не готовый продукт.
3. Тест-кейсы должны не повторять требования, а проверять их
Лень… Она является как источником великих прорывов и открытий, так и причиной, которая делает бессмысленной проделанную работу, проведенного впустую времени. Осмысленность любому начинанию, любой работе придает результат (желательно, конечно, положительный), ради которого эта работа задумывалась и выполнялась.
Тоже самое можно сказать и о тест-кейсах. Смыслом написания/выполнения тест-кейсов является проверка того, насколько тестируемое приложение удовлетворяет предъявляемому к нему требованию. Результатом выполнения тест-кейса должны стать его прохождение или провал, что подтвердит соответствие реализации требованию или нет (кстати, для тестировщика любой исход является положительным, правда, в случае провала тест-кейса — более приятным :)).
Что я имею в виду, когда пишу, что тесты должны не повторять требования, а проверять их?
Поясню на простых (естественно, выдуманных, чтобы читатели не краснели, при виде своих собственных творений) примерах.
Есть одно из функциональных требований к системе, для которого необходимо написать тест-кейсы: Значение в поле «Сумма» должно рассчитываться как сумма значений из полей «A» и «B».
Тест-кейс, написанный ленивым тестировщиком:
…
Действия:
Ввести значения в поля «A» и «B».
Ожидаемый результат:
Значение в поле «Сумма» должно рассчитываться как сумма значений из полей «А» и «B». (Иногда еще также в графе с ожидаемым результатом встречаются такие «шедевры» как: См. в ТЗ, в соответствии с ТЗ, наблюдаем ожидаемые значения и т.п.).
…
Тест-кейс, написанный неленивым тестировщиком:
…
Действия:
1. В поле «А» ввести значение 2
2. В поле «B» ввести значение 3
3. Нажать на кнопку «Рассчитать»
Ожидаемый результат:
В поле «Сумма» отобразилось значение 5
…
Чем второй тест-кейс лучше первого?
Первый тест-кейс является всего лишь повторением написанного требования. Во-первых, он не направлен на проверку этого требования, а во-вторых, зачем еще раз дублировать то, что уже написано, — тратить время впустую.
Далее, если речь идет о приемочных тест-кейсах, которые должны обязательно выполнить разработчики перед тем, чтобы передать версию на тестирование, то здесь в случае с первым тест-кейсом вообще все плохо. Т.е. реакция разработчика на такой тест-кейс такова (сужу по своему собственному опыту): «Я же и так все делал по требованиям, поэтому должно все работать, как я и сделал. Тем более я когда-то проверял, что 2 + 2 = 4». И разработчик со спокойной совестью ставит Pass и переходит к следующему тест-кейсу (который наверняка будет таким же неоднозначным :)).
Приведенный пример с суммированием, конечно же, очень примитивен для простоты понимания, но на практике часто приходится сталкиваться с тем, что менее очевидные вещи, чем A + B, описываются в тест-кейсах аналогичным образом и не приносят ожидаемого результата, т.е. проверки какого — либо требования. И в силу этого, после выкладки тестовой версии кажущиеся на первый взгляд очевидными (позитивные) тесты проваливаются.
Здесь суть еще заключается в том, что кроме того, что тест-кейсы должны проверять требования, а не повторять их, очень важным является следующий момент: тест-кейсы должны быть однозначными, т.е. должны быть составлены и сформулированы таким образом, чтобы они не допускали двусмысленного толкования, а однозначно понимались всеми участниками.
4. Написание приемочных тест-кейсов (по определенным правилам)
В предыдущих заметках я уже упоминал о приемочных тестах, которые подготавливают тестировщики для принятия на тестирование очередной тестовой версии приложения.
Проясню немного ситуацию. На проекте сложилась классическая ситуация, описанная еще когда-то господином Канером, когда с появлением выделенного тестирования разработчики расслабляются и абсолютно перестают тестировать свои бесценные творения. Доходит даже до того, что написав что-то (или исправив очередную ошибку в коде) они даже не удосуживаются посмотреть, что же в результате их писательства получилось, а с легкой руки передают на тестирование. Спасибо, что хоть привычка компилировать еще сохранилась!
Для пресечения такой ситуации было перепробовано множество различных способов и методов, начиная с дружеского разъяснения, проведения обучающих семинаров, написания чек-листов и памяток для разработчиков и заканчивая различными степенями наказания (насколько позволяет корпоративная культура), но ничего не помогало. Поэтому было решено подготавливать некоторые наборы приемочных тест-кейсов для разработчиков, которые они в обязательном порядке должны прогонять на системе для разработке перед выкладкой тестовой версии. Обязательным условием выкладки тестовой версии является 100% Pass приемочных тест-кейсов. После выкладки тестовой версии тестировщики начинают свою работу с повторного прогона того же самого приемочного набора для проверки того, что разработчики действительно выполнили все тест-кейсы (а не просто проставили отметки). Я здесь не вдаюсь в технические детали всей этой процедуры. По результатам такой проверки тестировщиками происходит разбор полетов, после которого кто-то получает прянички, а кто-то кнуты.
Результат улучшился — разработчики стали в некоторой степени контролировать свои деяния, но сами понимаете, появились другие проблемы, о которых я и хотел здесь написать, — как написать приемочные тест-кейсы, чтобы они были понятны разработчикам, и чтобы они смогли прогнать их на своей системе для разработки, данные на которой, как правило сильно отличаются от тестовых.
Парочку таких правил я уже написал в предыдущем пункте: тест-кейсы (в том числе и приемочные) должны проверять требования, а не повторять их и тест-кейсы должны быть однозначными, т.е. максимально одинаково пониматься как тестировщиками, так и разработчиками. Здесь о другом.
1. Первое и, на мой взгляд, самое главное — при написании тест-кейсов (а особенно приемочных) тестировщик должен осознать, что данные тест-кейсы предназначены не для него самого, а для другого человека. И писать их, соответственно, необходимо максимально подробно и максимально понятно даже не для посвященного в бизнес-логику приложения человека.
2. Существует два варианта подготовки приемочных тест-кейсов: первый — после подготовки набора тест-кейсов для полного тестирования выбрать из него тест-кейсы для приемочного тестирования, которые покрывают основной (положительный) путь работы приложения; второй — специально подготовить набор только приемочных тест-кейсов.
Однозначно сказать, какой вариант предпочтительней, не возможно. Все очень сильно зависит от ситуации и от тестируемой функциональности. Одно могу сказать совершенно точно (это и есть следующее правило) — тест-кейсы должны быть составлены таким образом, чтобы они не зависели от тех данных, от тех ситуаций, объектов и т.п., которыми тестировщик оперирует на тестовой системе. Т.е. все необходимые данные, объекты и т.д., необходимые для прогона приемочного тест-кейса, должны быть подготовлены самими разработчиками. Как этого добиться? Написать вспомогательные тест-кейсы (либо же написать вспомогательные действия в том же самом приемочном тест-кейсе), которые позволят сделать все предварительные приготовления для основного тест-кейса. В приемочных тестах для разработчиков нельзя ссылаться на какие-то объекты с тестовой системы. Сами понимаете, разработчик просто может не найти их и, в лучшем случае, постарается разобраться в ситуации, а в худшем — напишет комментарий к этому тест-кейсу и поставит Blocked.
3. Еще один очень важный момент, который приводит в замешательство разработчиков, которые прогоняют приемочные тест-кейсы, и не способствует их качественному выполнению. Кстати, этот пунктик относится не только к приемочным тест-кейсам, а к правилам написания тест-кейсов вообще.
Сокращенно звучит он так — один тест-кейс — одна проверка.
Как реагировать на следующий тест-кейс?
…
Steps
1. Действие 1
2. Действие 2
3. Действие 3
4. Действие 4
Expected Results
1. Результат 1
2. Результат 2
3. Результат 3
4. Результат 4
…
Каждому номеру действия необходимо сопоставлять соответствующий номер ожидаемого результата? Или же после выполнения полностью всех действий мы получим результат, состоящий из четырех пунктов? А может быть как — то еще?
Здесь же встает еще и другой вопрос — какой статус выставлять для тест-кейса, если либо часть действий выполнилась, а часть нет, либо в результате успешного выполнения всех действий часть ожидаемых результатов появилась, а часть нет?
И это не голая теория, а реальные вопросы, которые мне задают разработчики, которые выполняют таким образом составленные тест-кейсы.
Поэтому, чтобы избежать таких ситуаций, необходимо писать тест-кейсы таким образом, чтобы они содержали только одну проверку. Не путать с требованиями. Т.к. чтобы проверить одно требование, может понадобиться несколько проверок, а, следовательно, несколько тест-кейсов.
5. Своевременность отметок о прохождении/сбое тест-кейсов
Если все (или почти все) мировое сообщество тестировщиков использует в своих тест-кейсах отметку о прохождении/сбое этих самых тест-кейсов, то, как минимум, необходимо задуматься о том, что они проставляются не просто так, а с какой-то определенной целью (цель, естественно, у каждого своя).
В нашем случае цель проста — в любой момент времени отслеживать текущую ситуацию по процессу выполнения тест-кейсов:
- процент выполнения от общего запланированного количества;
- количество успешно пройденных тест-кейсов;
- количество проваленных тест-кейсов;
- и другие производные от них метрики.
Чтобы получать объективную информацию, необходимо, чтобы в каждый момент времени данные о выполнении тест-кейсов были актуальными. Для этого необходимо, чтобы сразу же после прогона тест-кейса тестировщик проставлял соответствующую отметку.
Чаще всего тестировщики не проставляют отметки сразу же, откладывая на потом, когда полностью закончат тестирование. Какие я вижу минусы в этом подходе:
Нет оперативной информации о том, на каком этапе в данный момент находится тестирование и, следовательно, совершенно не понятно укладывается тестирование в отведенные сроки или необходимы корректирующие действия.
Выполнив 125 тест-кейсов тестировщик вряд ли точно вспомнит, какие тест-кейсы прошли успешно, а какие нет.
Тестировщику придется потратить дополнительное время для того, чтобы восстановить в памяти, что было некоторое время назад и, самое главное, чтобы проставить все эти статусы (а если тест-кейсов будет несколько тысяч, а процесс тестирования будет занимать несколько месяцев, сколько же времени понадобиться на приведение статусов к актуальному виду?). И даже если тестировщику это удастся, то данная информация к тому времени утратит свою ценность.
Поэтому давайте делать все в свое время! Как говорится: «Дорога ложка к обеду».
В таком случае, как менеджер тестов, что вы будете делать?
А) Согласиться с командой тестирования, что это дефект
Б) Менеджер теста берет на себя роль судьи, чтобы решить, является ли проблема дефектом или нет
В) договориться с командой разработчиков, что не является дефектом
Для разрешения конфликта, вы (менеджер проекта) берете на себя роль судьи, который решает, является ли проблема продукта дефектом или нет.
Категории ошибок
Классификация дефектов помогает разработчикам программного обеспечения определять приоритеты своих задач и в первую очередь устранить те дефекты, которые больше прочих угрожают работоспособности продукта.
Критический – дефект должен быть устранены немедленно, иначе это может привести к большим потерям для продукта
Например: функция входа на сайт не работает должным образом.
Вход в систему является одной из основных функций банковского сайта, если эта функция не работает, это серьезные ошибки.
Высокий – дефект негативно влияет на основные функции продукта
Например: производительность сайта слишком низкая.
Средний – дефект вносит минимальные отклонения от требований к к продукту
Например: не корректно отображается интерфейс на мобильных устройствах.
Низкий – минимальное не функциональное влияние на продукт
Например: некоторые ссылки не работают.
Решение
После того, как дефекты приняты и классифицированы, вы можете выполнить следующие шаги, чтобы исправить их.
- Назначение: проблемы отправлены разработчику или другому техническому специалисту для исправления и изменило статус на отвечающий.
- График устранения: сторона разработчика берет на себя ответственность на этом этапе, они создадут график для устранения этих дефектов в зависимости от их приоритета.
- Исправление: пока группа разработчиков устраняет дефекты, диспетчер тестов отслеживает процесс устранения проблем, исходя из графика.
- Сообщить о решении: получите отчет об устранении бага от разработчиков, когда дефекты устранены.
Верификация
После того, как команда разработчиков исправила дефект и сообщила об этом, команда тестирования проверяет, действительно ли устранены все заявленные дефекты.
Закрытие
После устранения и проверки дефекта его статус меняется на закрытый. Если он не устранен, вы отправляете уведомление в отдел разработки, чтобы они проверили дефект еще раз.
Составление отчетов
Далее вы должны сообщить правлению текущую ситуацию с дефектами, чтобы получить от них обратную связь. Они должно видеть и понимать процесс управления дефектами, чтобы поддержать вас в случае необходимости.
Как измерить и оценить качество выполнения теста?
Это вопрос, который хочет знать каждый менеджер в тестировании. Есть 2 параметра, которые вы можете рассмотреть следующим образом…
В приведенном выше сценарии можно рассчитать коэффициент отклонения брака (DRR), равный 20/84 = 0,238 (23,8%).
Другой пример: предположительно, в продукте всего 64 дефекта, но ваша группа по тестированию обнаружила только 44 дефекта, т.е. они пропустили 20 дефектов. Следовательно, можно рассчитать коэффициент утечки дефектов (DLR), равный 20/64 = 0,312 (31,2%).
Вывод, качество выполнения теста оценивается по следующим двум параметрам.
Defect reject ratio (DRR) – 23,8%
Defect leakage ratio (DLR) – 31,2%
Чем меньше значение DRR и DLR, тем, соответственно, лучше качество тестирования. Какой диапазон коэффициентов является приемлемым? Этот диапазон может быть определен и принят за основу в проекте исходя из целей, или вы можете ссылаться на показатели аналогичных проектов.
В рассматриваемом нами проекте рекомендуемое значение показателей качества тестирования должно составлять 5 ~ 10%. Это означает, что качество выполнения теста низкое.
Чтобы уменьшить эти коэффициенты:
- Улучшите навыки тестирования участников проекта.
- Тратьте больше времени на выполнение тестов и на просмотр результатов.
22 июля 2021, 09:47
778 просмотров
Если вы работаете в области финансов и банкинга, то наверняка много внимания уделяете безопасности и стабильности программных продуктов. Всестороннее тестирование ПО в этой сфере ― неотъемлемый элемент на всех этапах жизненного цикла разработки, который помогает заботиться о клиентах и их конфиденциальных данных.
По данным Мирового отчёта по качеству (World Quality Report, WQR) 2020-2021, около 66% банков покрывают тестами всю функциональность цифрового решения, ведь QA позволяет занять лидирующие позиции на рынке. Но главное ― удержать их. Предлагаем детально рассмотреть 3 ключевых правила и 3 типичные ошибки при тестировании ПО в финансовой области.
3 ОШИБКИ, КОТОРЫЕ СНИЖАЮТ ЭФФЕКТИВНОСТЬ QA
Добиться абсолютного качества программного продукта невозможно, а вот максимально приблизиться к нему ― реально. Фундаментом результативной QA-стратегии станет определение типовых ошибок и избавление от них.
Ошибка 1. Сокращение тестового покрытия для ускорения QA-процессов
Чтобы быстрее выйти на рынок, компании часто сокращают затраты на разработку, тестирование или вовсе отказываются от QA. Как показывает практика, подобный подход приносит краткосрочные преимущества и негативно влияет на качество кода.
Чтобы убедиться в стабильной и надёжной работе ПО, стоит проверять все функциональности финтех-продукта, их взаимосвязи и различные интеграции со сторонними системами. При обратном сценарии незамеченными остаются критические дефекты, блокирующие работу приложения после релиза.
Помимо тестирования производительности, в последнее время важное место занимает безопасность, ведь используемое в банках и страховых компаниях ПО наиболее уязвимо перед атаками киберпреступников.
Возросшее из-за пандемии число онлайн-транзакций дало хакерам больше возможностей для незаконного получения конфиденциальных данных пользователей и организаций. Некоторые банки отметили увеличение кибератак в 4,5 раза по сравнению с 2019 годом. А утечка информации вследствие преступной активности стала второй по актуальности угрозой для представителей финансового сектора. Это отметили 71% опрошенных по результатам исследования 2021 года «Защита от DDoS-атак в банках», поэтому не стоит отказываться от тестирования безопасности.
Ошибка 2. Ложная оптимизация при автоматизации тестирования
Внедрение автотестов служит проверенным методом сокращения предрелизного периода. Но без необходимого опыта и точной стратегии для QA-команды автоматизация тестирования может стать импровизацией.
К примеру, изменения в функциональности могут замедлить QA-процессы даже при максимальном объёме автотестов, ведь алгоритмы проверок нужно постоянно пересматривать, как и код автотестов. В свою очередь, недостаток автоматизации тоже не сэкономит время, ведь эффективность мануального тестирования при сохранении численности команды останется на прежнем уровне или снизится.
Ошибка 3. Недостаточное внимание к UX
Хотя портативные устройства стали неотъемлемой частью жизни пользователей, некоторые компании пренебрегают мобильным тестированием и оценивают качество только веб-версий. Представьте, что генеральный директор крупной сети магазинов зайдёт в приложение, чтобы отправить денежный перевод, но неинтуитивный интерфейс замедлит проведение данной операции. Это послужит причиной снижения его лояльности как клиента.
Частой ошибкой мобильных проверок является использование исключительно эмуляторов и симуляторов вместо реальных устройств. Подобная имитация не позволит выявить все критические дефекты ПО.
Давайте же разберёмся, как можно избежать подобных ошибок и улучшить QA-процесс.
3 ПРАВИЛА ПРОДУКТИВНОГО ТЕСТИРОВАНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ В ФИНТЕХ
Для существенного ускорения при выходе на рынок в долгосрочной перспективе стоит включить новые подходы и технологии в стратегию по обеспечению качества.
Правило 1. Внедряйте автоматизацию тестирования с умом
Оптимальным решением является сбалансированный подход к внедрению автоматизированного тестирования для тех функциональностей, которые регулярно проверяются тестировщиками, но не меняются кардинально в течение нескольких недель.
Это ускоряет QA-процессы и помогает выявлять ошибки быстрее, чем при ручном тестировании. Чтобы получить максимум пользы, компании внедряют искусственный интеллект, машинное обучение и прочие инновации в процессы автоматизации тестирования. На старте это потребует дополнительных усилий, но подобное сочетание выглядит многообещающе с точки зрения результатов для бизнеса. На изображении ниже вы можете оценить три основных аспекта переосмысления решения по автоматизации тестирования.
Источник: Мировой отчёт по качеству 2020-2021
Читайте продолжение статьи по ссылке: https://www.a1qa.ru/blog/dos-and-donts-in-bfsi-testing/
Подписывайтесь на наши новостные
рассылки,
а также на каналы
Telegram
,
Vkontakte
,
Яндекс.Дзен
чтобы первым быть в курсе главных новостей Retail.ru.
Добавьте «Retail.ru» в свои источники в
Яндекс.Новости
-
Классификация ошибок
Задача любого
тестировщика заключается в нахождении
наибольшего количества ошибок, поэтому
он должен хорошо знать наиболее часто
допускаемые ошибки и уметь находить их
за минимально короткий период времени.
Остальные ошибки, которые не являются
типовыми, обнаруживаются только тщательно
созданными наборами тестов. Однако из
этого не следует, что для типовых ошибок
не нужно составлять тесты.
Для классификации
ошибок мы должны определить термин
«ошибка».
Ошибка – это
расхождение между вычисленным, наблюдаемым
и истинным, заданным или теоретически
правильным значением.
Итак, по времени
появления ошибки можно разделить на
три вида:
– структурные ошибки
набора;
– ошибки компиляции;
– ошибки периода
выполнения.
Структурные
ошибки
возникают непосредственно при наборе
программы. К данному типу ошибок относятся
такие как: несоответствие числа
открывающих скобок числу закрывающих,
отсутствие парного оператора (например,
try
без catch).
Ошибки
компиляции
возникают из-за ошибок в тексте кода.
Они включают ошибки в синтаксисе,
неверное использование конструкции
языка (оператор else
в операторе for
и т. п.), использование несуществующих
объектов или свойств, методов у объектов,
употребление синтаксических знаков и
т. п.
Ошибки
периода выполнения
возникают, когда программа выполняется
и компилятор (или операционная система,
виртуальная машина) обнаруживает, что
оператор делает попытку выполнить
недопустимое или невозможное действие.
Например, деление на ноль.
Если проанализировать
все типы ошибок согласно первой
классификации, то можно прийти к
заключению, что при тестировании
приходится иметь дело с ошибками периода
выполнения, так как первые два типа
ошибок определяются на этапе кодирования.
В теоретической
информатике программные ошибки
классифицируют по степени нарушения
логики на:
– синтаксические;
–семантические;
– прагматические.
Синтаксические
ошибки
заключаются в нарушении правописания
или пунктуации в записи выражений,
операторов и т. п., т. е. в нарушении
грамматических правил языка. В качестве
примеров синтаксических ошибок можно
назвать:
– пропуск необходимого
знака пунктуации;
– несогласованность
скобок;
– пропуск нужных
скобок;
– неверное написание
зарезервированных слов;
– отсутствие описания
массива.
Все ошибки данного
типа обнаруживаются компилятором.
Семантические
ошибки
заключаются в нарушении порядка
операторов, параметров функций и
употреблении выражений. Например,
параметры у функции add
(на языке Java)
в следующем выражении указаны в
неправильном порядке:
GregorianCalendar.add(1,
Calendar.MONTH).
Параметр, указывающий
изменяемое поле (в примере – месяц),
должен идти первым. Семантические ошибки
также обнаруживаются компилятором.
Надо отметить, что некоторые исследователи
относят семантические ошибки к следующей
группе ошибок.
Прагматические
ошибки (или
логические) заключаются в неправильной
логике алгоритма, нарушении смысла
вычислений и т. п. Они являются самыми
сложными и крайне трудно обнаруживаются.
Компилятор может выявить только следствие
прагматической ошибки.
Таким образом, после
рассмотрения двух классификаций ошибок
можно прийти к выводу, что на этапе
тестирования ищутся прагматические
ошибки периода выполнения, так как
остальные выявляются в процессе
программирования.
На этом можно было
бы закончить рассмотрение классификаций,
но с течением времени накапливался опыт
обнаружения ошибок и сами ошибки,
некоторые из которых образуют характерные
группы, которые могут тоже служить
характерной классификацией.
Ошибка
адресации
– ошибка, состоящая в неправильной
адресации данных (например, выход за
пределы участка памяти).
Ошибка
ввода-вывода
– ошибка, возникающая в процессе обмена
данными между устройствами памяти,
внешними устройствами.
Ошибка
вычисления
– ошибка, возникающая при выполнении
арифметических операций (например,
разнотипные данные, деление на нуль и
др.).
Ошибка
интерфейса
– программная ошибка, вызванная
несовпадением характеристик фактических
и формальных параметров (как правило,
семантическая ошибка периода компиляции,
но может быть и логической ошибкой
периода выполнения).
Ошибка
обращения к данным
– ошибка, возникающая при обращении
программы к данным (например, выход
индекса за пределы массива, не
инициализированные значения переменных
и др.).
Ошибка
описания данных
– ошибка, допущенная в ходе описания
данных.[2]
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
Kevin J. Clancy
Peter C. Krieg
На удивление большое количество новых продуктов и услуг терпят провал, в основном потому, что они не были должным образом протестированы перед запуском. Знание того, как избежать некоторых наиболее распространенных ошибок в тестировании концепций и маркетинговых планов, поможет компаниям обеспечить своим продуктам долгую и счастливую жизнь на рынке.
При просмотре в понедельник отчета об игре, прошедшей в воскресенье, любой фанат может указать на ошибки квотербека, и что тот мог сделать лучше, чтобы использовать ошибки другой команды. Точно так же, после того как новый продукт провалился, любой хоть немного разбирающийся в предмете маркетолог обычно может указать на ошибки компании.
Посмотрим на Cottonelle Fresh Rollwipes, «первый и единственный в Америке рулон увлажненной туалетной бумаги». Компания Kimberly-Clark объявила об этом «прорыве» в январе 2001 года. Согласно пресс-релизу, «это самая революционная инновация в данной категории с тех пор, как туалетная бумага впервые появилась в виде рулона в 1890 году».
Корпорация была уверена, что рынок для продукта существует. Ее маркетинговое исследование показало, что 63% американцев экспериментировали с мокрым «методом очистки», а каждый четвертый ежедневно использует влажные салфетки. Большинство используют детские салфетки, но те не могут использовать антисептические препараты. Kimberly-Clark продавала коробки с листами увлаженной туалетной бумаги много лет, и рост продаж этого товара убедил компанию инвестировать в более удобный механизм доставки.
Она разработала многоразовый пластиковый контейнер, который можно повесить на обычный держатель туалетной бумаги, к которому одновременно крепятся и обычный рулон сухой бумаги и влажный Fresh Rollwipes. Контейнер с четырьмя рулонами стоил $8.99; четыре новых рулона –$3.99. Kimberly-Clark, которая уверяет, что потратила $100 миллионов на проект, защитила продукт и контейнер при помощи 30 патентов.
В январе 2001 года корпорация заявила, что американский рынок туалетной бумаги – $4.8 миллиарда в год. В Kimberly-Clark ожидали, что в первый же год продажи Fresh Rollwipes достигнут, по меньшей мере, $150 миллионов и еще $500 миллионов – в последующие шесть лет. Более того, эти продажи расширят весь рынок туалетной бумаги, потому что влажная бумага скорее дополняет сухую, а не заменяет ее.
Но к октябрю, спустя 10 месяцев, Kimberly-Clark в плохих продажах начала винить слабую экономику. Согласно данным Information Resources Inc., продажи Cottonelle Fresh Rollwipes вышли на уровень примерно трети от запланированных $150 миллионов. Однако по нашему опыту, если потребители заинтересовались продуктом, слабая экономика не может столь сильно сказаться на продажах. Что-то не так было с маркетингом Kimberly-Clark, и в апреле 2002 года The Wall Street Journal сообщила о некоторых из ошибок компании.
Преждевременное объявление о начале. Хотя Kimberly-Clark начала рекламную и PR кампании в январе, она была не готова поставлять продукт в магазины до июля. Это как топить дом летом в надежде, что он сохранит тепло зимой. Поздняя поставка производственного оборудования стала причиной «большей части» задержки, но к июлю большинство покупателей уже забыли о товаре. «Я знаю, что что-то об этом слышал, но не помню то ли это была реклама, то ли какой-то комик шутил по этому поводу», — говорит Роб Алмонд, который закупает бумажные товары для Richfield Nursing Center, Вирджиния.
Неэффективная реклама. Учитывая то, что Kimberly-Clark пыталась продвигать преимущества продукта, о котором лишь немногие люди могут говорить без смущения, компания в своей рекламе так внятно и не объяснила, что именно делает продукт. Реклама, которая стоила $35 миллионов, содержала слоган «иногда лучше, когда мокро» и показывала со спины людей, плескающихся в воде. Печатная реклама крупным планом демонстрировала сзади борца сумо. Аналитики критиковали рекламу за то, что она внятно не описывает продукт и не создает спрос. Плюс к этому Kimberly-Clark запустила общенациональную кампанию при том, что (a) продукта еще не было в продаже и (б) когда он, наконец, появился, его продавали только в некоторых южных штатах.
Если когда-то и был продукт идеально подходящий для раздачи образцов, это был именно тот случай. Но Rollwipes не производили в небольших упаковках, что означает отсутствие бесплатных образцов. Вместо этого Kimberly-Clark запланировала передвижной туалетный тур с остановками в людных местах, где все желающие могли его попробовать. Тур был запланирован на середину сентября 2001 года, и был отложен после событий 11 сентября.
Еще одна проблема была с дизайном продукта. В отличие от бумаги в обычных коробках, которую излишне скромные потребители могут спрятать под раковиной, пластиковый бежевый контейнер Rollwipes был виден сразу же. Он крепился к обычному держателю туалетной бумаги, но размером был с два рулона, поставленных друг на друга. Не в каждой ванной есть столько места, и не каждый потребитель хочет постоянно иметь перед глазами бежевый пластик.
Через полтора года после того, как Kimberly-Clark объявила о запуске, Fresh Rollwipes присутствовали только на одном региональном рынке, а продажи шли так плохо, что финансовой отдачи почти не наблюдалось.
Стоимость провала
Хотя маркетологи могут получить пользу от понедельничного разбора игры квотербека, это не повышает чьи-то шансы произвести успешный запуск нового продукта или услуги или предотвратить бесполезные траты миллионов или даже миллиардов долларов.
Представители отрасли обычно заявляют, что успешными являются от 80% до 90% новых продуктов, однако недавнее исследование Nielsen BASES и Ernst & Young показало, что в США терпят неудачу до 95% новых потребительских продуктов, а в Европе – до 90%. По данным исследований, которые мы проводим в Copernicus, успеха добиваются не более 10% всех новых продуктов и услуг. Под успешными понимаются те, которые присутствуют на рынке через три года и являются прибыльными. Это происходит и с потребительскими товарами, и с финансовыми услугами, и товарами длительного спроса, и телекоммуникационными услугами, и лекарствами.
А неудачи обходятся компаниям в огромные суммы денег. Точно их можно подсчитать, взяв среднюю стоимость разработки нового продукта и умножив ее на количество неудач.
Эдвард Огиба, президент Group EFO Limited, консалтинговой компании, пишет, что вывод нового общенационального брэнда обычно обходится в более чем $20 миллионов.
Редактор New Product News пишет: «общенациональный запуск действительного нового безалкогольного напитка стоит примерно $100 миллионов, а запуск нового вкуса мороженого только в Миннеаполисе обходится в $10,000. Бесполезные «средние» затраты на запуск нового продукта лежат где-то в середине». Он добавляет, что при помощи медиа экспертов журналы создали «идеальный» маркетинговый план для серьезного нового продукта, включающий общенациональную рекламу, продвижение среди потребителей и торговое продвижение. Общие расходы на него составляют примерно $54 миллиона и не включают разработку самого продукта, упаковки, обучение продавцов или затраты на управление брэндом.
Менеджер по маркетинговым исследованиям из Best Foods Division компании CPC International недавно рассказал нам, что по самым консервативным оценкам каждый год производители тратят на маркетинг провалившихся новых продуктов от $9 до $14 миллиардов, а по нашему мнению, так и много больше.
А теперь сравните эти оценки затрат на разработку и запуск с удивительным анализом, проведенным несколько лет назад SAMI/Burke, который показал, что менее 200 продуктов из нескольких тысяч, запущенных в течение последних 10 лет, достигли уровня продаж в $15 миллионов, и продажи лишь нескольких из них превысили $100 миллионов. Очень немногие новые продукты и услуги могут похвастаться положительным возвратом на инвестиции.
Но не обязательно, чтобы всегда было именно так. Повысить шансы на успех, можно избегая главных маркетинговых ошибок. Для этого требуется новый способ формирования идей для новых продуктов, тестирования концепций, тестирования продукта и услуги с точки зрения готовности потребителей ее принять, тестирования рекламы и продвижения, и наконец проверки всего маркетингового плана. В этой статье мы остановимся на двух возможных причинах неудачи: проверке концепции и сбоях в маркетинговых планах.
Тестирование концепции, которая не достигает цели
Новые идеи для продуктов и услуг появляются отовсюду. Они приходят в голову посреди ночи. Или у компании появляется возможность купить лицензию или права на что-то из другой страны (например, Hаagen-Daz добился потрясающего успеха с мороженым dulce de leche, появившимся в Южной Америке; или Red Bull – с энергетическим напитком из Таиланда). Или в фирме действительно возникли идеи новых продуктов в результате интервью, фокус-групп или наблюдений за потребителями, за которыми последовал мозговой штурм.
В какой-то момент идея превращается в концепцию, часто описываемую одним – двумя параграфами, иногда сопровождаемую названием и ценой. И если маркетолог умен, эта концепция проверяется на потенциальных покупателях в данной категории. В конце концов, зачем тратить ценные время и доллары на разработку продукта, который потребители не хотят покупать?
Проверка концепции, как она сегодня чаще всего проводится, сопряжена однако с множеством проблем. Почти каждый маркетолог проводил хотя бы одну (если не сто), и все же такие проверки поднимают больше вопросов, чем они дают ответов. Мы слышим, как маркетинговые руководители задают вопросы, такие как, «а 14% в верхней ячейке («почти наверняка купят») – это хорошо?» Или они говорят «Мы проанализировали три варианта цены. Как каждый из них может получить 10% в верхней ячейке? Может нам придумать четвертый вариант?» Или «Если мы поменяем цену, насколько повысится доля тех, кто попробует продукт? До 30% дойти может?» Традиционные виды тестирования концепций сопровождаются проблемами, которые мы перечислили ниже:
Ограничения по выборке . Маркетологи заключают контракты с исследовательскими компаниями, которые обычно используют небольшие (75 – 150 человек) нерепрезентативные опросы мужчин и женщин, прогуливающихся в магазинах и готовых ответить на вопросы. Более того, они часто используют не более трех первых попавшихся торговых центра для каждого исследования.
Сбор данных . Проверка концепций по телефону или через интернет также имеет недостатки. По телефону интервьюер читает описание концепции. Поскольку люди забывают первое предложение, прежде чем дослушали до конца второе, исследователи максимально сокращают концепции, иногда умещая их в одно предложение. Упрощенная концепция затем дополняется шкалой с небольшим количеством вариантов ответов (чтобы уменьшить разброс), которая затем будет использована в личных интервью или интернет опросах. По телефону же респондент должен запомнить все варианты ответов и выдать номер.
Интернет предоставляет больше визуальных возможностей, но может быть столь же опасен, как и телефон. Многие маркетологи не понимают, что есть два основных метода сбора данных через сеть: базы данных и панели. По мнению Грега МакМаона, старшего вице-президента международной исследовательской фирмы Synovate, важно провести четкую границу между двумя методами: «Только исследовательские фирмы, имеющие настоящие интернет панели, поддерживают подробную демографическую (и другую) информацию об их членах и сверяют ее с данными переписи населения. Без этого баланса существует очень высокий риск, что результаты исследования не измерят то, что должны были измерить, и что им будет не доставать последовательности». Средний отклик на интернет опросы менее 1%, что делает из него не очень достоверный источник информации о потенциале новых продуктов.
Альтернативные возможности . Немногие маркетологи способны эффективно задать вопрос «что если?», касающийся различных характеристик и выгод концепции. Например, страховая компания, рассматривающая концепцию нового продукта автострахования, может задаться вопросом «Что если мы предоставим льготный доступ в авторемонт? Что если за небольшую плату возьмем на себя весь процесс регистрации? А бесплатно?»
Незнание издержек . Согласно нашему опыту, менеджеры по маркетингу редко знают постоянные и переменные «производственные» и маркетинговые издержки нового продукта или услуги. И уж точно они никогда не передают такую информацию людям, проводящим исследование. Но, не зная издержек, менеджер не может оценить прибыльность.
Ограниченные модели. Наконец, лишь некоторые исследовательские компании могут предложить действенную модель маркетингового микса, в которую они могут закладывать результаты концепций, чтобы предсказать продажи и прибыльность. Исследователи представляют результаты концепций маркетологам, как будто те являются самодостаточными частями информации сами по себе: «Эта получила 33% в двух верхних ячейках, обойдя контрольную концепцию почти два к одному». Это мило, но будет ли она продаваться? А если будет, станет ли приносить прибыль? В ответ пустой взгляд исследователя.
Быстрая починка
Хорошая новость заключается в том, что компании могут справиться с большинством этих проблем при помощи традиционного тестирования, но с некоторыми модификациями:
Укрупните выборку . Проинструктируйте исследователей, чтобы они использовали более крупную и репрезентативную выборку потенциальных покупателей (от 300 до 500) в большем числе торговых точек. Это должны быть серьезные респонденты, набранные через случайный выбор телефонных номеров, а затем приглашенные в специальное место, а не первые встречные в торговом центре, согласные остановиться на минутку.
Правильно сочетайте телефон и интернет . Отправьте описание концепции и шкалу оценки респонденту до телефонного звонка. Проведите несколько индивидуальных интервью, чтобы скорректировать результаты интернет опроса. Удостоверьтесь, что исследовательская компания использует интернет панель.
Полные описания . Представьте опрашиваемым полное описание концепции, вместе с названием, позиционированием, упаковкой, характеристиками и ценой (мы не перестаем удивляться, как часто исследователи игнорируют цену). Представьте концепцию в контексте конкуренции, т.е. какие конкурирующие продукты продаются на рынке и по каким ценам. Чем более точно тестирование отражает реальность, тем более точным будет прогноз. Большинство проверок концепций игнорируют конкурентное окружение.
Измеряйте прибыльность . Пусть потребители оценят концепцию с точки зрения прибыльности. Мы выяснили в ходе множества экспериментов, что шкала с 11 оценками наиболее полно предсказывает реальное поведение, особенно для сложных продуктов.
Но даже эта шкала завышает реальные покупки. Люди ведут себя не так, как говорят. Во-первых, исследование предполагает 100% осведомленность и 100% дистрибуцию, другими словами, все знают о продукте и могут легко его найти, чего никогда не происходит в реальности. И даже учитывая это, проблемы с завышенными ожиданиями остаются.
Мы плотно изучили соотношение между ответами людей по шкале с 11 градациями и реальным покупательским поведением (среди людей, осведомленных о продукте или услуге, и имеющих возможность совершить покупку) для множества компаний в потребительских и В2В категориях. Обычно не более 75% людей, заявивших, что обязательно купят продукт, действительно его покупают. Цифра снижается по мере снижения намерения купить, но соотношение сохраняется. Это ведет к необходимости ряда поправок для каждого уровня вовлеченности и конвертирует рейтинги опросника в оценку вероятного поведения.
Поправки зависят от уровня «вовлеченности» потребителей (или корпоративных покупателей) в категорию. Чем выше вовлеченность, тем больше мы верим в то, что люди говорят, и тем ниже потребность в поправке на преувеличение. Можно не говорить, что учитывая вероятность покупки и вовлеченность, возможно дать довольно точную оценку реального уровня продаж (процента потребителей, которые совершат хотя бы одну покупку).
Хотя традиционные методы тестирования остаются наиболее распространенным способом тестирования концепций новых продуктов, традиционные методы не означают ipso facto наилучшего подхода. Цель традиционного теста – найти концепцию продукта, обладающую наивысшим уровнем привлекательности для покупателей, но они часто не соответствуют тому, что действительно нужно компании.
Доводка нового продукта/услуги при помощи компьютера – альтернатива традиционным методам. Она начинается с модифицированного множественного анализа с целью выбора компромиссного решения, при котором используется или конжойнт – анализ, или методология моделирования выбора. Эти подходы предлагают несколько продвинутых характеристик: они прогнозируют реальное поведение и продажи для нескольких альтернативных концепций; используют алгоритм нелинейной оптимизации, чтобы выделить наиболее прибыльные концепции; позволяют маркетологам проигрывать «что если» сценарии; и предлагают руководство по таргетированию и позиционированию.
Проблемы с тестовыми рынками
После того, как концепция выбрана, отточена и готова к запуску, следующий шаг для большинства маркетологов – тестовый рынок. Но, как и в случае с традиционными методами тестирования концепций, традиционные тестовые рынки также ведут к проблемам. Часто компания выбирает тестовый рынок, потому что им легко управлять, или потому что ритейлер на этом рынке готов к сотрудничеству. Не выбираются рынки, которые наиболее точно соответствуют целям, которые компания хотела бы достичь.
У работы с традиционными тестовыми рынками есть четыре основных недостатка. Во-первых, они дорого стоят. Они могут обойтись «всего» в $3 миллиона, но обычно больше. Затраты включают исследования, СМИ и усилия организации по контролю и проверке тестирования. Во-вторых, они занимают много времени. Ждать год, полтора или два, чтобы получить результаты, в сегодняшнем конкурентном окружении не представляется возможным.
Третья проблема заключается в том, что конкуренты могут саботировать результаты. Даже небольшие усилия с их стороны могут значительно затруднить возможности компании по оценке результатов. В то же время конкуренты могут разработать схожий продукт или услугу.
Наконец традиционные тестовые рынки обычно не сообщают маркетологам то, что тем требуется знать. И хотя провал продукта на тестовом рынке это не то же самое, что провал на национальном уровне, часто трудно определить причины этого провала. Что-то не так с воплощением идеи или с самой идеей? С маркетинговой программой или реакцией конкурентов? Какая часть маркетинговой программы не сработала? Может ли компания сделать что-то, чтобы превратить небольшой провал в большой успех? И наоборот, если тест был успешным, может ли произойти что-то, что снизит его прибыльность в будущем?
Симуляция тестового рынка (STM) – одновременно и альтернатива, и дополнение к традиционным методам. Существующие системы STM улавливают все важные компоненты маркетингового микса и оценивают эффект любого маркетингового плана на осведомленность о продукте, первые и последующие покупки, долю рынка, прибыльность и многое другое. Эти STM проверяют любой план, даже разработанный конкурентами. Маркетолог вносит подробности плана в компьютерную программу, а модель прогнозирует, что случится в реальном мире на каждом этапе, месяц за месяцем.
Сделайте что-нибудь новое
Если вы делаете только то, что уже делали, то и получите вы то, что уже получали. Большинству компаний мало что удавалось сделать для обеспечения успеха новых продуктов или услуг в последние пару десятков лет. Компаниям требуется что-то новое.
Все больше компаний увлекаются идеями гарвардских профессоров по экономике Джона МакАртура и Джеффри Сакса, которые заявили: «Инновация – это не просто нашлепка тщеславия на экономическом двигателе страны. По вкладу в рост, она превосходит и накопление капитала и распределение ресурсов».
Сегодня самое время для компаний использовать компьютерные технологии и симуляции тестовых рынков, чтобы повысить эффективность маркетинговых программ для новых продуктов и услуг. Технологии помогут маркетологам найти наилучшие концепции продуктов и услуг и разработать маркетинговый план, который приведет к росту спроса и увеличению прибыли.
Дефекты программного обеспечения можно обнаружить на каждом этапе разработки и тестирования продукта. Чтобы гарантировать исправление наиболее серьезных дефектов программного обеспечения, тестировщикам важно иметь хорошее представление о различных типах дефектов, которые могут возникнуть.
В этой статье мы обсудим самые распространенные типы ПО дефекты и способы их выявления.
Что такое дефект?
Дефект программного обеспечения — это ошибка, изъян, сбой или неисправность в компьютерной программе, из-за которой она выдает неправильный или неожиданный результат или ведет себя непреднамеренным образом. Программная ошибка возникает, когда фактические результаты не совпадают с ожидаемыми. Разработчики и программисты иногда допускают ошибки, которые создают ошибки, называемые дефектами. Большинство ошибок возникает из-за ошибок, которые допускают разработчики или программисты.
Обязательно прочтите: Разница между дефектом, ошибкой, ошибкой и сбоем
Типы программных ошибок при тестировании программного обеспечения
Существует множество различных типов дефектов программного обеспечения, и тестировщикам важно знать наиболее распространенные из них, чтобы они могут эффективно тестировать их.
Ошибки программного обеспечения подразделяются на три типа:
- Дефекты программного обеспечения по своей природе
- Дефекты программного обеспечения по их приоритету
- Дефекты программного обеспечения по их серьезности
Обычно мы можем видеть приоритет и серьезность классификаторов в большинстве инструментов отслеживания ошибок. Если мы настроим классификатор в соответствии с характером ошибки, а также приоритетом и серьезностью, это поможет легко управлять распределением обязанностей по исправлению ошибок соответствующим командам.
#1. Дефекты программного обеспечения по своей природе
Ошибки в программном обеспечении имеют широкий спектр природы, каждая из которых имеет свой собственный набор симптомов. Несмотря на то, что таких багов много, сталкиваться с ними можно не часто. Вот наиболее распространенные ошибки программного обеспечения, классифицированные по характеру, с которыми вы, скорее всего, столкнетесь при тестировании программного обеспечения.
#1. Функциональные ошибки
Как следует из названия, функциональные ошибки — это те, которые вызывают сбои в работе программного обеспечения. Хорошим примером этого может служить кнопка, при нажатии на которую должно открываться новое окно, но вместо этого ничего не происходит.
Функциональные ошибки можно исправить, выполнив функциональное тестирование.
#2. Ошибки на уровне модуля
Ошибки на уровне модуля — это дефекты, связанные с функциональностью отдельного программного модуля. Программный модуль — это наименьшая тестируемая часть приложения. Примеры программных модулей включают классы, методы и процедуры. Ошибки на уровне подразделения могут существенно повлиять на общее качество программного обеспечения.
Ошибки на уровне модуля можно исправить, выполнив модульное тестирование.
#3. Ошибки уровня интеграции
Ошибки уровня интеграции — это дефекты, возникающие при объединении двух или более программных модулей. Эти дефекты может быть трудно найти и исправить, потому что они часто требуют координации между несколькими командами. Однако они могут оказать существенное влияние на общее качество программного обеспечения.
Ошибки интеграции можно исправить, выполнив интеграционное тестирование.
#4. Дефекты юзабилити
Ошибки юзабилити — это дефекты, влияющие на работу пользователя с программным обеспечением и затрудняющие его использование. Дефект юзабилити — это дефект пользовательского опыта программного обеспечения, который затрудняет его использование. Ошибки юзабилити — это такие ошибки, как если веб-сайт сложен для доступа или обойти, или процесс регистрации сложен для прохождения.
Во время тестирования удобства использования тестировщики программного обеспечения проверяют приложения на соответствие требованиям пользователей и Руководству по доступности веб-контента (WCAG) для выявления таких проблем. Однако они могут оказать существенное влияние на общее качество программного обеспечения.
Ошибки, связанные с удобством использования, можно исправить, выполнив тестирование удобства использования.
#5. Дефекты производительности
Ошибки производительности — это дефекты, влияющие на производительность программного обеспечения. Это может включать в себя такие вещи, как скорость программного обеспечения, объем используемой памяти или количество потребляемых ресурсов. Ошибки уровня производительности сложно отследить и исправить, поскольку они могут быть вызваны рядом различных факторов.
Ошибки юзабилити можно исправить, выполнив тестирование производительности.
#6. Дефекты безопасности
Ошибки безопасности — это тип дефекта программного обеспечения, который может иметь серьезные последствия, если его не устранить. Эти дефекты могут позволить злоумышленникам получить доступ к конфиденциальным данным или системам или даже позволить им получить контроль над уязвимым программным обеспечением. Таким образом, очень важно, чтобы ошибкам уровня безопасности уделялось первоочередное внимание и устранялись как можно скорее.
Ошибки безопасности можно исправить, выполнив тестирование безопасности.
#7. Дефекты совместимости
Дефекты совместимости — это те ошибки, которые возникают, когда приложение несовместимо с оборудованием, на котором оно работает, или с другим программным обеспечением, с которым оно должно взаимодействовать. Несовместимость программного и аппаратного обеспечения может привести к сбоям, потере данных и другому непредсказуемому поведению. Тестировщики должны знать о проблемах совместимости и проводить соответствующие тесты. Программное приложение, имеющее проблемы с совместимостью, не работает последовательно на различных видах оборудования, операционных системах, веб-браузерах и устройствах при подключении к определенным программам или работе в определенных сетевых условиях.
Ошибки совместимости можно исправить, выполнение тестирования совместимости.
#8. Синтаксические ошибки
Синтаксические ошибки являются самым основным типом дефекта. Они возникают, когда код нарушает правила языка программирования. Например, использование неправильной пунктуации или забывание закрыть скобку может привести к синтаксической ошибке. Синтаксические ошибки обычно мешают запуску кода, поэтому их относительно легко обнаружить и исправить.
#9. Логические ошибки
Логические ошибки — это дефекты, из-за которых программа выдает неправильные результаты. Эти ошибки может быть трудно найти и исправить, потому что они часто не приводят к каким-либо видимым ошибкам. Логические ошибки могут возникать в любом типе программного обеспечения, но они особенно распространены в приложениях, требующих сложных вычислений или принятия решений.
Общие симптомы логических ошибок включают:
- Неверные результаты или выходные данные
- Неожиданное поведение
- Сбой или зависание программного обеспечения
Чтобы найти и исправить логические ошибки, тестировщикам необходимо иметь четкое представление о коде программы и о том, как она должна работать. Часто лучший способ найти такие ошибки — использовать инструменты отладки или пошаговое выполнение, чтобы отслеживать выполнение программы и видеть, где что-то идет не так.
#2. Дефекты программного обеспечения по степени серьезности
Уровень серьезности присваивается дефекту по его влиянию. В результате серьезность проблемы отражает степень ее влияния на функциональность или работу программного продукта. Дефекты серьезности классифицируются как критические, серьезные, средние и незначительные в зависимости от степени серьезности.
#1. Критические дефекты
Критический дефект — это программная ошибка, имеющая серьезные или катастрофические последствия для работы приложения. Критические дефекты могут привести к сбою, зависанию или некорректной работе приложения. Они также могут привести к потере данных или уязвимостям в системе безопасности. Разработчики и тестировщики часто придают первостепенное значение критическим дефектам, поскольку их необходимо исправить как можно скорее.
#2. Серьезные дефекты
Серьезный дефект — это программная ошибка, существенно влияющая на работу приложения. Серьезные дефекты могут привести к замедлению работы приложения или другому неожиданному поведению. Они также могут привести к потере данных или уязвимостям в системе безопасности. Разработчики и тестировщики часто придают первостепенное значение серьезным дефектам, поскольку их необходимо исправить как можно скорее.
#3. Незначительные дефекты
Незначительный дефект — это программная ошибка, которая оказывает небольшое или незначительное влияние на работу приложения. Незначительные дефекты могут привести к тому, что приложение будет работать немного медленнее или демонстрировать другое неожиданное поведение. Разработчики и тестировщики часто не придают незначительным дефектам приоритет, потому что их можно исправить позже.
#4. Тривиальные дефекты
Тривиальный дефект – это программная ошибка, не влияющая на работу приложения. Тривиальные дефекты могут привести к тому, что приложение отобразит сообщение об ошибке или проявит другое неожиданное поведение. Разработчики и тестировщики часто присваивают тривиальным дефектам самый низкий приоритет, потому что они могут быть исправлены позже.
#3. Дефекты программного обеспечения по приоритету
#1. Дефекты с низким приоритетом
Дефекты с низким приоритетом, как правило, не оказывают серьезного влияния на работу программного обеспечения и могут быть отложены для исправления в следующей версии или выпуске. В эту категорию попадают косметические ошибки, такие как орфографические ошибки, неправильное выравнивание и т. д.
#2. Дефекты со средним приоритетом
Дефекты со средним приоритетом — это ошибки, которые могут быть исправлены после предстоящего выпуска или в следующем выпуске. Приложение, возвращающее ожидаемый результат, которое, однако, неправильно форматируется в конкретном браузере, является примером дефекта со средним приоритетом.
#3. Дефекты с высоким приоритетом
Как следует из названия, дефекты с высоким приоритетом — это те, которые сильно влияют на функционирование программного обеспечения. В большинстве случаев эти дефекты необходимо исправлять немедленно, так как они могут привести к серьезным нарушениям нормального рабочего процесса. Дефекты с высоким приоритетом обычно классифицируются как непреодолимые, так как они могут помешать пользователю продолжить выполнение поставленной задачи.
Некоторые распространенные примеры дефектов с высоким приоритетом включают:
- Дефекты, из-за которых приложение не работает. сбой
- Дефекты, препятствующие выполнению задачи пользователем
- Дефекты, приводящие к потере или повреждению данных
- Дефекты, раскрывающие конфиденциальную информацию неавторизованным пользователям
- Дефекты, делающие возможным несанкционированный доступ к системе
- Дефекты, приводящие к потере функциональности
- Дефекты, приводящие к неправильным результатам или неточным данным
- Дефекты, вызывающие проблемы с производительностью, такие как чрезмерное использование памяти или медленное время отклика
#4. Срочные дефекты
Срочные дефекты — это дефекты, которые необходимо устранить в течение 24 часов после сообщения о них. В эту категорию попадают дефекты со статусом критической серьезности. Однако дефекты с низким уровнем серьезности также могут быть классифицированы как высокоприоритетные. Например, опечатка в названии компании на домашней странице приложения не оказывает технического влияния на программное обеспечение, но оказывает существенное влияние на бизнес, поэтому считается срочной.
#4. Дополнительные дефекты
#1. Отсутствующие дефекты
Отсутствующие дефекты возникают из-за требований, которые не были включены в продукт. Они также считаются несоответствиями спецификации проекта и обычно негативно сказываются на пользовательском опыте или качестве программного обеспечения.
#2. Неправильные дефекты
Неправильные дефекты — это те дефекты, которые удовлетворяют требованиям, но не должным образом. Это означает, что хотя функциональность достигается в соответствии с требованиями, но не соответствует ожиданиям пользователя.
#3. Дефекты регрессии
Дефект регрессии возникает, когда изменение кода вызывает непреднамеренное воздействие на независимую часть программного обеспечения.
Часто задаваемые вопросы — Типы программных ошибок< /h2>
Почему так важна правильная классификация дефектов?
Правильная классификация дефектов важна, поскольку она помогает эффективно использовать ресурсы и управлять ими, правильно приоритизировать дефекты и поддерживать качество программного продукта.
Команды тестирования программного обеспечения в различных организациях используют различные инструменты отслеживания дефектов, такие как Jira, для отслеживания дефектов и управления ими. Несмотря на то, что в этих инструментах есть несколько вариантов классификации дефектов по умолчанию, они не всегда могут наилучшим образом соответствовать конкретным потребностям организации.
Следовательно, важно сначала определить и понять типы дефектов программного обеспечения, которые наиболее важны для организации, а затем соответствующим образом настроить инструмент управления дефектами.
Правильная классификация дефектов также гарантирует, что команда разработчиков сможет сосредоточиться на критических дефектах и исправить их до того, как они повлияют на конечных пользователей.
Кроме того, это также помогает определить потенциальные области улучшения в процессе разработки программного обеспечения, что может помочь предотвратить появление подобных дефектов в будущих выпусках.
Таким образом, отслеживание и устранение дефектов программного обеспечения может показаться утомительной и трудоемкой задачей. , правильное выполнение может существенно повлиять на качество конечного продукта.
Как найти лежащие в основе ошибки программного обеспечения?
Определение основной причины программной ошибки может быть сложной задачей даже для опытных разработчиков. Чтобы найти лежащие в основе программные ошибки, тестировщики должны применять систематический подход. В этот процесс входят различные этапы:
1) Репликация. Первым этапом является воспроизведение ошибки. Это включает в себя попытку воспроизвести тот же набор шагов, в котором возникла ошибка. Это поможет проверить, является ли ошибка реальной или нет.
2) Изоляция. После того, как ошибка воспроизведена, следующим шагом будет попытка ее изоляции. Это включает в себя выяснение того, что именно вызывает ошибку. Для этого тестировщики должны задать себе несколько вопросов, например:
– Какие входные данные вызывают ошибку?
– При каких различных условиях возникает ошибка?
– Каковы различные способы проявления ошибки?
3) Анализ: после Изолируя ошибку, следующим шагом будет ее анализ. Это включает в себя понимание того, почему возникает ошибка. Тестировщики должны задать себе несколько вопросов, таких как:
– Какова основная причина ошибки?
– Какими способами можно исправить ошибку?
– Какое исправление было бы наиболее эффективным? эффективно?
4) Отчет. После анализа ошибки следующим шагом является сообщение о ней. Это включает в себя создание отчета об ошибке, который включает всю соответствующую информацию об ошибке. Отчет должен быть четким и кратким, чтобы разработчики могли его легко понять.
5) Проверка. После сообщения об ошибке следующим шагом является проверка того, была ли она исправлена. Это включает в себя повторное тестирование программного обеспечения, чтобы убедиться, что ошибка все еще существует. Если ошибка исправлена, то тестер может подтвердить это и закрыть отчет об ошибке. Если ошибка все еще существует, тестировщик может повторно открыть отчет об ошибке.
Заключение
В индустрии программного обеспечения дефекты — неизбежная реальность. Однако благодаря тщательному анализу и пониманию их характера, серьезности и приоритета дефектами можно управлять, чтобы свести к минимуму их влияние на конечный продукт.
Задавая правильные вопросы и применяя правильные методы, тестировщики могут помочь обеспечить чтобы дефекты обнаруживались и исправлялись как можно раньше в процессе разработки.
TAG: qa
В процессе обучения людей, которые только начинают свой путь в профессии QA, я регулярно сталкиваюсь с тем, что многие допускают однотипные ошибки.
Хочу разобрать некоторые из них и дать рекомендации, как их избежать.
В первую очередь поговорим об оформлении дефектов. Поскольку это самый распространенный артефакт процесса тестирования, правильно оформлять баги необходимо уметь всем тестировщикам. Вы можете обойтись даже без тест-кейсов, но без дефектов не обойтись никак.
1. Неинформативные названия дефектов
О том, как следует и как не следует писать заголовки дефектов, написано уже немало, тем не менее начинающие продолжают наступать на те же грабли.
Популярная рекомендация заключается в том, что заголовок дефекта должен отвечать на три вопроса, совпадающих с названием известной интеллектуальной игры: «Что? Где? Когда?«. Совершенно верная рекомендация, почему же возникают сложности в ее применении?
Итак, первое, что следует понимать о заголовке дефекта: он должен описывать суть проблемы. Чаще всего при помощи предложения, построенного по правилам английского, русского (или другого вашего рабочего) языка. Вспомним грамматику. Что такое предложение?
«Предложение — это единица языка, которая представляет собой грамматически организованное соединение слов, обладающее смысловой законченностью.»
В целом краткое описание (summary) дефекта должно отвечать на вопрос: «Что не так?» или, другими словами, «А проблема-то в чем?». В самом названии должно содержаться достаточно информации, чтобы можно было составить представление об этом, прочитав только заголовок. Именно для того, чтобы это было понятно хотя бы приблизительно, как раз и необходимо в названии ответить на эти три подвопроса:
- «Что?» — как минимум должно быть описано то самое поведение программы, которое мы считаем некорректным, несоответствующим требованиям/стандартам/ожиданиям. Грубо говоря, это симптом.
- «Где?» — в какой части продукта или системы (в каком модуле, на какой странице, с какой фичей)? Назовем это локацией.
- «Когда?» — то есть при каких условиях воспроизводится дефект. Это триггер.
Рассмотрим некоторые примеры названий дефектов с точки зрения того, дают ли они нам представление о сущности проблемы.
«Incorrect Site Search».
О чем нам это говорит? Можно понять только то, что дефект связан с определенным функционалом, а именно с поиском по сайту. Это ответ на вопрос «Где?». Но что именно не так с поиском? В чем заключается некорректное поведение? Загадка. При каких условиях воспроизводится дефект? Тоже загадка.
Другое summary того же бага: «The result of the action of the empty site search».
Уже теплее… Можно понять, с каким функционалом связан дефект и даже каковы условия его воспроизведения. Но о том, что именно происходит не так — ни слова. «Просто the result» — какой-то результат, без всякой конкретики… А ведь это самое вкусное!
Чтобы понять, в чем проблема, нужно прочитать описание полностью, да еще и попробовать воспроизвести. При пустом поисковом запросе перед списком товаров появляется секция с названиями категорий, и в ней одна картинка слишком большая, что нарушает UI. Кратко в summary это можно описать так:
«After empty search request too large image is shown in “category-view” div».
К этому багу нужно приложить скриншот, конечно.
И вот еще один пример:
«comment».
Да, даже и так бывает… Одно слово, намекающее на область функционала.
Вот так было бы понятнее:
«Fatal error:463 on attempt to post review at product description page».
«broken layout».
Здесь описан симптом, некое некорректное поведение, так что такое описание можно считать ответом (хотя и очень приблизительным) на вопрос «Что (происходит)?». Но где именно это происходит? На какой-то конкретной странице? На любой странице? Непонятно. А что надо сделать, чтобы «верстка поползла»? Ни одного намека.
Правильное краткое описание этого же бага:
“On 150% zoom images at all pages are superimposed”.
И еще пример:
«Регистрация с невалидным адресом электронной почты«.
Возможно, название подошло бы для тест-кейса. Понятно, с какой фичей связан дефект (регистрация), известен и триггер — «невалидный эмэйл» (конечно, важно уточнить в подробном описании: «невалидный» — это какой?). Но баг-то в чем?
Более корректно было описать так:
«Возможна регистрация с невалидным адресом электронной почты».
Или
«При регистрации не происходит валидация адреса электронной почты».
Несколько подсказок, как написать хорошее summary для дефекта
Коротко, но не слишком.
Не забываем, что summary — это все-таки краткое описание, так что писать небольшое эссе на тему в этом поле тоже не стоит. В большинстве случаев вам хватит примерно 7-10 слов (не считая предлогов). Но не стоит вдаваться в другую крайность — 1-3 словами вы не сможете описать ситуацию достаточно ясно.
Избавляйтесь от слов-паразитов , не лейте воду.
Вот пример: «The opening of each new image when viewed on a new tab» .
Многабукаф, а в итоге описан только симптом, и то невнятно.
А суть здесь в том, что каждая картинка при клике на нее открывается в новой вкладке, что, разумеется, неудобно и не соответствует разумным ожиданиям пользователя. Это можно сказать короче и точнее: «On click each image opens in a new tab».
Еще бы уточнить, в каком разделе сайта это происходит (точно не во всех), и было бы вообще отлично.
Еще пример:
«На сайте зайдя в раздел покупок, выдаетcя ошибка при попытке оставить отзыв».
«Подъезжая к сией станции… у меня слетела шляпа». Не умея использовать деепричастные обороты, не стоит этого делать. И вообще лучше избегать громоздких конструкций.
«На сайте» — просто ни о чем. Все дефекты, которые заводят в этом проекте, касаются именно этого сайта, так зачем повторять это в названии дефекта?
Сокращаем:
«Ошибка при попытке оставить отзыв в разделе покупок» — кстати, какая? Неплохо бы обозначить ее хоть как-то — класс, код… Полный текст сообщения об ошибке, конечно, приводить в summary бага необязательно.
Создание багов с непонятными названиями приводит к сложностям для самих же тестировщиков. Перед созданием дефекта нужно поискать в баг-трэкинговой системе, чтобы убедиться, что это не дубликат. И здесь нам как раз будут полезны краткие, ясные и однозначные названия дефектов.
2. Отсутствие ожидаемых результатов
Когда тестировщик заносит дефект, конечно, у него/нее обычно есть какое-то представление о том, как должно быть правильно. Но вот загвоздка — разработчики, как и все остальные люди, не обладают телепатией! И если ожидаемые результаты не описаны явно, то всегда есть вероятность, что возникнет непонимание.
Кроме того, есть и другой риск. Разработчик может сделать собственные выводы о том, как же должно быть правильно, затем «исправить» и отправить на верификацию. Тут начнутся споры: «Исправлено!» — «Не исправлено!» — «Но вот же, здесь поменяли!» — «Так вообще не это было нужно!». В итоге — потрачено время, силы, нервы нескольких людей…
Гораздо проще сразу объяснить, какого результата вы ожидаете. Даже если кажется, что это очевидно и всем понятно и так. Один из законов Мэрфи гласит: «Всё, что может быть понято неправильно, будет понято неправильно.» Особенно начинающим тестировщикам советую ввести это в привычку: всегда прописывать ожидаемые результаты явно. (Еще лучше, если вы можете подкрепить это ссылкой на конкретное требование.)
3. Невнятные шаги воспроизведения
Как бы банально это ни звучало, шаги лучше описывать пошагово. Одна строчка — один шаг. Можно нумеровать, можно не нумеровать, это по желанию. Но не стоит писать одним длинным абзацем, нагромождая when, while, which, then и тому подобное. Глядя на такое длинное и сложное предложение, воспроизвести дефект очень сложно. Даже простую ситуацию можно запутать, описав ее, например, так:
«When purchasing products, when you press a button to buy, pop-up window, which when pressed to continue shopping, throws on the orders page»
Эту ситуацию можно было бы описать так:
“Continue shopping” button redirects to “Orders” page”
Разумеется, эта кнопка не должна перекидывать на страницу заказа, покупатель должен оставаться там же, где и был, чтобы, собственно, продолжать покупки. Эти детали уже можно описать в Description.
4. Скриншот вместо фактического результата
Добавлять скриншоты к дефектам, особенно описывающим проблемы пользовательского интерфейса, конечно, очень полезно. Но! Скриншот не заменяет внятного текстового описания.
«Фактический результат: «Запрос не прошел валидацию (см. скриншот)»
Вот так не стоит делать. Исходя из своего опыта, точно могу сказать, что ситуации, когда фактический результат – что-то неописуемое словами, крайне редка. Да, случались в моей практике и такие баги, что приходилось снимать видео, чтобы нормально проиллюстрировать, что происходит. Но это было буквально пару раз за 10 лет. Практически всегда можно объяснить ситуацию человеческим языком. Если с этим возникают сложности, то, возможно, вы не до конца понимаете происходящее. Скриншот – источник дополнительной информации.
Между прочим, в этом случае скриншот был по каким-то причинам утрачен, и разобраться, что за баг уже просто нереально.
Кстати, иногда и сам скриншот нуждается в доработке, особенно когда интерфейс сложный. Бывает, приходится долго всматриваться в скриншот, чтобы понять, а где же баг. Нарисуйте стрелку, обведите кружочком или подчеркните, чтобы было сразу очевидно, в каком месте проявляется дефект. Иногда стоит просто отрезать лишнее и оставить только то, что полезно для иллюстрации бага.
Вообще тестирование можно рассматривать как информационный сервис: наша задача дать ясную и объективную информацию о качестве продукта. Найти баг – мало, нужно еще уметь правильно его описать. Поэтому тестировщикам необходимо уметь излагать свои мысли логично, понятно, последовательно, без лишних слов, и в то же время точно.
Устраняем ошибки, повышая свою квалификацию на курсах.
Продолжение следует…
Курсы по тестированию ПО.