Главная - Литература

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 [167] 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294

Номер теста Описание теста

1 Тест требует, чтобы истинное значение выражения memployeef ID

IgovemmentRetirementWithheld < MAX GOVT RETIREMENT было первым с истинной стороны границы. Иначе говоря, мы должны присвоить элементу т етр1оуее[ ID jgovemmentRetirementWithheld значение MAX GOVT RETIREMENT - 1.Ддя этого годится уже имеющийся тест 1.

3 Тест требует, чтобы ложное значение выражения memployeef ID ]. go

vemmentRetirementWithheld < MAX GOVT RETIREMENT было первым с ложной стороны границы. Таким образом, элементу memployeef ID JgovemmentRetirementWithheld нужно присвоить значение MAX GOVT RETIREMENT + /. Для этого вполне подойдет тест 3-

10 Дополнительный тест нужен для смой границы, когда memployee

[ ID JgovemmentRetirementWithheld = MAX GOVT RETIREMENT

Сложные граничные условия

Анализ граничных условий можно проводить также в отношении минимального и максимального допустимых значений. В нашем примере ими могли бы быть минимальные или максимальные значения переменных grossPay, companyRetirement или personalRetirement, но из-за того, что эти значения вычисляются вне области видимости метода, их тестирование мы обсуждать не будем.

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

В текущем примере вы могли бы проверить, что происходит с денежными суммами, которые представлены переменными totalWithholdings, totalGovernmentRetirement и totalRetirement, если каждый член большой группы имеет крупную зарплату - скажем, каждый из программистов зарабатывает по 250 ООО долларов (надежда умирает последней!). Для этого нужен еще один тест:

Номер теста Описание теста

11 Большая группа высокооплачиваемых сотрудников (конкретные пока-

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

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

Номер теста Описание теста

12 Группа из 10 сотрудников, не получающих зарплату.

Классы плохих данных

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



недостаток данных (или их отсутствие);

избыток данных;

неверный вид данных (некорректные данные);

неверный размер данных;

неинициализированные данные.

Некоторые из этих случаев уже покрыты имеющимися тестами. Так, «недостаток данных» охватывается тестами 2 и 12, а для «неверного размера данных» тесты придумать трудно. И все же рассмотрение классов плохих данных позволяет создать еще несколько тестов:

Номер теста Описание теста

13 Массив из 100 000 000 сотрудников. Тестирование на предмет избытка данных. Конечно, объем данных, который следует считать избыточным, зависит от конкретной системы.

14 Отрицательная зарплата. Неверный вид данных.

15 Отрицательное число сотрудников. Неверный вид данных.

Классы хороших данных

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

номинальные случаи: средние, ожидаемые значения;

минимальная нормальная конфигурация;

максимальная нормальная конфигурация;

совместимость со старыми данными.

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

Номер теста Описание теста

16 Группа из 1 сотрудника. Тестирование минимальной нормальной

конфигурации.

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



печать электронной таблицы, имеющей «максимальный размер», заявленный в рекламных материалах. В случае текстового процессора - сохранение документа максимального рекомендованного размера. У нас максимальная нормальная конфигурация определяется максимальным нормальным числом сотрудников. Если бы оно равнялось 500, вы добавили бы в набор такой тест:

Номер теста Описание теста

17 Группа из 500 сотрудников. Тестирование максимальной нормальной

конфигурации.

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

Используйте тесты, позволяющие легко проверить результаты вручную

Допустим, вы пишете тест для проверки расчета зарплаты; вам нужно ввести зарплату, и один из способов сделать это - ввести числа, которые попадаются под руку. Попробуем:

1239078382346

Отлично. Это довольно большая зарплата - более триллиона долларов, но если ее «обрезать», можно получить что-то более реалистичное: скажем, 90 783,82 доллара.

Теперь предположим, что этот тест успешен, т. е. указывает на ошибку. Как узнать, что вы обнаружили ошибку? Ну, вы можете вычислить правильный результат вручную и сравнить его с результатом, полученным на самом деле. Однако если в вычислениях фигурируют такие неприятные числа, как 90 783,82 доллара, вероятность допустить ошибку в вычислениях не менее высока, чем вероятность обнаружения ошибки в программе. С другой стороны, удобные круглые числа вроде 20 ООО долларов делают вычисления сущим пустяком. Нули легко набирать, а умножение на 2 большинство программистов способны выполнять в уме.

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

22.4. Типичные ошибки

Главная идея этого раздела в том, что для достижения максимальной эффективности тестирования мы должны как можно больше знать о нашем враге - ошибках.



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 [167] 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294



0.003