Previous Page  9 / 14 Next Page
Information
Show Menu
Previous Page 9 / 14 Next Page
Page Background

Постусловие продукционного правила предполагает формулирова-

ние вывода о ПОК (дефекте) с номером 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