You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: manuals/3/0__qa_equivalence_classes/article.md
+14-12Lines changed: 14 additions & 12 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,9 +1,11 @@
1
1
# Классы эквивалентности и граничные значения
2
2
3
-
Выделение =классов эквивалентности= и анализ =граничных значений= -- два базовых взаимно-дополняющих друг друга подхода для тестирования программ.
3
+
Выделение =классов эквивалентности= и анализ =граничных значений= -- два базовых взаимно дополняющие друг друга подхода к тестированию программ.
4
+
5
+
Давайте разберём их на примере следующей задачи.
4
6
5
7
> **Задача 1:**
6
-
Подготовить тестове данные для проверки правильности работы программы вычисления модуля целого числа. На вход программе поступает произвольное значение типа `int`.
8
+
Подготовить набор тестовых данных для проверки корректности работы программы вычисления модуля целого числа. На вход программе поступает произвольное значение типа `int`.
7
9
8
10
Листинг 1. Программа my_abs.c v.0.1
9
11
```c
@@ -48,13 +50,13 @@ int main(void)
48
50
Тест 2: 25
49
51
```
50
52
51
-
Собственно, уже даже этих тестов хватит, чтобы выявить проблему в нашей программе:
53
+
Уже этих тестов хватает, чтобы выявить проблему в нашей программе -- сценарий для положительных чисел работает неправильно.
52
54
53
55

54
56
55
-
Исправим нашу программу:
57
+
Исправим программу:
56
58
57
-
Листинг 1. Программа my_abs.c v.0.2
59
+
Листинг 2. Программа my_abs.c v.0.2
58
60
```c
59
61
#include <stdio.h>
60
62
@@ -77,12 +79,12 @@ int main(void)
77
79
}
78
80
```
79
81
80
-
Теперь программа будет корректно работать на первом наборе тестовых данных.
82
+
Теперь программа будет корректно работать на подготовленном ранее наборе тестовых данных.
81
83
82
84
83
-
###Анализ граничных значений
85
+
## Анализ граничных значений
84
86
85
-
Ошибки в программах очень часто возникают на границах между классами эквивалентности. Поэтому, помимо представителей классов стоит протестировать значения на самой границе и рядом с ней.
87
+
Ошибки в программах очень часто возникают на границах между классами эквивалентности. Поэтому, помимо представителей классов стоит проверить работу программы на самой границе и рядом с ней.
86
88
87
89
Очевидная граница для нашей задачи -- это значение `0`.
88
90
@@ -100,15 +102,15 @@ int main(void)
100
102
101
103
Чуть менее очевидными являются крайние значения, связанные с ограниченным объёмом типа `int`.
102
104
103
-
В моём компиляторе тип `int` занимает `4` байта, а потом минимальное и максимальное значения будут равны `-2147483648` и `2147483647`, соответственно.
105
+
В моём компиляторе тип `int` занимает `4` байта, а потому минимальное и максимальное значения будут равны `-2147483648` и `2147483647`, соответственно. О том, как вычислить эти занчения самостоятельно смотри первое практическое задание [здесь](https://youngcoder.ru/lessons/4/math_function) (другой вариант, где ничего вычислять не требуется, указан в конце урока).
104
106
105
107
Значит надо дополнить наш набор тестов значениями:
Значения `-2147483649` и `2147483648`, находящиеся с другой стороны границ, включать не требуется, т.к. по условию задачи на вход программе поступают лишь значения типа `int`.
109
111
110
112
111
-
Дополните тестовый набор указанными значениями и снова запустим проверку программы:
113
+
Дополним тестовый набор указанными значениями и проверим программу на новом тестовом наборе:
112
114
113
115
```
114
116
// Справа от теста указан результат проверки
@@ -127,7 +129,7 @@ int main(void)
127
129
Результат работы программ Листинг 2 на шестом тесте:
128
130

129
131
130
-
В рамках типа `int` исправить эту проблему не получится, т.к. число `2147483648` превосходит максимальное значение (`INT_MAX` из заголовочного файла `limits.h`), которое может храниться в переменной типа `int`. Поэтому этот случай придётся признать исключительным и аварийно завершить программу:
132
+
В рамках типа `int` исправить эту проблему не получится, т.к. число `2147483648` превосходит максимальное значение, которое может храниться в переменной типа `int`. Поэтому этот случай придётся признать исключительным и аварийно завершить программу:
**1.** Используя набор тестов, составленных на уроке, протестируйте работу библиотечной функции `abs(x)`.
3
+
4
+
**2.** Значения `INT_MAX` и `INT_MIN` заданые в заголовочном файле `limits.h`. Найдите его на своём компьютере и посмотрите, чему равны эти значения. Сравните результаты ваших вычислений с этими значениями. Если она не совпадают, значит вы где-то допустили ошибку.
0 commit comments