Рассмотрим следующий класс:
class Xyz {
public int count;
public void numZero (int[] x) {
// Effects: if x == null throw NullPointerException
// else return the number of occurrences of 0 in x
int count = 0;
for (int i = 1; i < x.length; i++) //we have a bug here
{
if (x[i] == 0)
{
count++;
}
}
this.count = count;
}
}
Я пытаюсь понять, что на самом деле означают Fault
, Error
и Failure
.
Ошибка
Из того, что я понял, Fault
в этом контексте было бы ошибкой в написанной логике кода.Таким образом, в этом случае Fault
будет означать, что код инструктирует компьютер начать итерацию по всем элементам v
с начальным индексом 1 вместо ожидаемого 0.
Ошибка
При запуске вышеупомянутого метода мы всегда получаем Error
, но только один раз (когда v.length == 0
), так как мы действительно хотим перебрать все элементы x
, но так как мы начинаем сi = 1
, это на самом деле не происходит.
С пустым вектором в качестве ввода, поскольку мы не вводим for loop
, поэтому наш неверный код не запускается, а это означает, что Ошибка не возникает, и все происходит, как и должно быть в теории.
Сбой
Поскольку наш код имеет Fault
, который во время выполнения почти всегда проявляется в Error
, у нас будет Failure
только тогда, когда мы эффективно увидим неправильный вывод.
Если предположить, что Error
действительно произошло в моей программе, у нас будет Отказ, только если он каким-то образом виден внешнему миру.То есть, если бы я private int count
;вместо public int count;
у меня никогда не было бы ошибки в моем классе (конечно, это был бы самый бесполезный класс!).Это правильно?
Все ли я сказал правильно или я в чем-то ошибаюсь?
Спасибо