Тестирование — важнейшая составляющая любой технологии программирования. Ведущие фирмы-разработчики тратят до 50% средств всего проекта именно на тестирование ПО.
Даже в очень простых программах существуют ошибки, осложняющие жизнь пользователя. Например, в статье Задача «Суммирование чисел». Пример решения были рассмотрены ситуации, когда вроде бы правильная с точки зрения «здравого смысла» программа дает неверный результат. Простейшая классификация ошибок приведена в статье Типичные ошибки программирования, где кроме синтаксических ошибок, раздражающих начинающих программистов и абсолютно не интересных пользователю ваших программ (догадались почему?), наиболее опасными являются логические ошибки и ошибки типа Run-time. Рассмотрим еще один короткий пример.
Допустим, вам нужно написать метод нахождения площади S треугольника по трем сторонам (a, b, c). Вспомнив формулу Герона (известную, правда, еще Архимеду):
где p — полупериметр треугольника, .
вы сразу напишете метод:
static double geron(double a, double b, double c) { double p = (a + b + c) / 2; return Math.Sqrt(p * (p - a) * (p - b) * (p - c)); }
Добавьте ввод и вывод данных и запустите программу, например со сторонами (3, 4, 5). Это, кстати, тоже один из прямоугольных треугольников Герона, его площадь равна 6.
Предположим, что пользователь не слишком силен в геометрии, и при вводе сторон треугольника будет вводить разные числа и, даже может быть, и не числа. Занесем варианты тестов в таблицу, где a, b, c — входные данные, ожидаемый результат — это ответ, который мы хотели бы получить от нашей программы, последний столбец — результат выполнения программы .
Номер теста | a | b | с | Площадь — ожидаемый результат | Площадь — фактический результат |
1 | 3 | 4 | 5 | 6 | 6 |
2 | 1 | 1 | 1 | 0,433 | 0,433 |
3 | -1 | -1 | -1 | треугольник не существует | 0,433 |
4 | -1 | -1 | 1 | треугольник не существует | 0,433 |
5 | -1 | 1 | 1 | треугольник не существует | 0,433 |
6 | 1 | 1 | 0 | треугольник не существует | 0 |
7 | 1 | 2 | 4 | треугольник не существует | NaN |
8 | a | 1 | 1 | Неверные данные | Необработанное исключение: «Входная строка имеет неверный формат» |
Из 8 тестов совпадение имеется только для первых двух. Конечно, ввод нулевых и отрицательных сторон со стороны пользователя маловероятен, но возможен. В тесте 7 ответ может его и смутить, он не обязан знать, что NaN — это No a Number (результат извлечения квадратного корня из отрицательного числа). Тест 8 указывает вам, что необходима проверка вводимых данных, являются ли они числами, смотрите статью Свойства. Пример «Ввод целого числа в заданном диапазоне».
Учитывая результаты тестирования, вам следует добавить проверки:
1) являются ли исходные данные числами;
2) все ли стороны больше нуля;
3) не нарушается ли правило треугольника — сумма любых двух сторон больше третьей стороны.
Проверку условий 2 и 3 следует внести в код метода geron( ).
Рекомендую познакомиться с общими принципами технологии тестирования и практическими рекомендациями.
NEW: Наш Чат, в котором вы можете обсудить любые вопросы, идеи, поделиться опытом или связаться с администраторами.