Постусловие продукционного правила предполагает формулирова-
ние вывода о ПОК (дефекте) с номером 337.
Пример дефекта кода, заключающегося в нарушении объектной
модели.
Рассмотрим дефект кода CWE-581, который состоит в на-
рушении объектной модели. Дефект заключается в том, что в про-
грамме определен лишь один метод Equals или один метод Hashcode
(Object Model Violation: Just One of Equals and Hashcode Defined). Это
обусловлено тем, что в языке Java от объектов ожидается несколько
постоянных свойств, связанных с проверкой их идентичности. Одно
из таких свойств — идентичные объекты должны иметь одинаковые
хеши. Другими словами, должна выполняться следующая проверка:
ifa.equals
(
b
) ==
truethena.hashCode
() ==
b.hashCode
()
.
Определение только одного из этих методов приводит к тому, что
идентичные объекты перестают быть равными, и, наоборот, в некото-
рых случаях разные объекты становятся идентичными. Это может при-
вести к ошибкам работы с коллекциями (Collections), картами (Maps)
и наборами (Sets).
Описание эвристического алгоритма выявления дефекта следую-
щее:
1) поиск в классах переопределения метода Equals;
2) поиск переопределения метода Hashсode;
3) выдача предупреждения о возможном дефекте кода CWE-581 в
случае наличия только одного из них.
Продукционная модель эвристического правила имеет вид
R
1
=
< s
j
∈
S
;
s
j
∈
M
obj
∧
t
obj
(
s
j
) = finally;
(
f
inside
(
s
j
)
∩
M
info
∩ {
equals
,
hashCode
}
)
6
=
∅
→
AP
(
s
j
, L
); ;
P
1
(581
,
3)
> .
Пример дефекта кода, заключающегося в некорректном возврате
значения.
Рассмотрим дефект кода CWE-584, когда оператор возврата
в блоке Finally (Return Inside Finally Block). Суть дефекта — оператор
возврата в блоке Finally отбрасывает все исключения, сгенерирован-
ные в блоке Try, тем самым не будет проведена обработка внештатных
ситуаций, в том числе связанных и с механизмами безопасности.
Описание эвристики выявления дефекта приведено ниже:
1) поиск блоков Finally;
2) aнализ тела блока на наличие операторов возврата.
Продукционная модель CWE-584 может быть следующей:
n
R
1
=
< s
j
∈
M
func
;
t
obj
(
s
j
) =
=
0
f inally
0
;
I
ret
∈
f
inside
(
s
j
)
→
AP
(
s
j
, L
);
P
1
(584
,
2)
> .
106 ISSN 0236-3933. Вестник МГТУ им. Н.Э. Баумана. Сер. “Приборостроение”. 2016. № 1