halid-ux / SI_LAB2_186120

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Лабораториска вежба по Софтверско инженерство

Група на код: 6

Студент

Халид Веапоски

Индекс: 186120


Control Flow Graph

Alt text

ЛЕГЕНДА:

жолт јазел - for циклус
зелен јазел - предикатен јазел
црвено ребро - тек на програмата предизвикан од исклучок (Exception)

Цикломатска комплексност

Цикломатската комплексност на oвој код е 7 и истата ја добив на следниве начини:

  • CK = P + 1, каде P e бројот на предикатни јазли, a CK e цикломатската комплексност. CK = 6 + 1 = 7.
  • Според бројот на региони во Control Flow Graph-от, а бројот на региони на горенаведената слика на графот е 7.

Тест случаи според Every branch критериумот критериумот

Целта на Every Branch критериумот како што е познато е да се изминат сите гранки каде што имаме разгранување во кодот, а тоа разгранување во нашите случаи е предизвикано од исходите на логичките проверки (if).
Со цел да ги изминеме сите гранки треба да дефинираме такви тест случаи.
Нека секој тест случај претставува елемент од колекцијата (листа) anglesList
Да забележиме дека и самиот for циклус имплицитно претставува разгранување, бидејќи итерации се прават според бројот на елементи во листата anglesList, па доколку таа листа е празна нема да се влезе во телото на for циклусот, затоа во нашите тест случаи опфаќаме случај во кој anglesList е празна листа. А во сите други тест случаи имаме елементи во листата и for циклусот прави итерации, односно се извршува кодот во неговото тело.

Приказ и опис на тест случаите:

Тест случај Тек на програма поради влез од тест случај Дескриптивен опис на тек на програма поради влез од тест случај
300 -10' -10'' Oд 4. оди во 5, минути невалидни оди во 6 и се фрла исклучок. Валидни степени, невалидни минути, секундите не се ни проверуваат - агол не валиден.
300 20' 20'' Од 4. оди во 5, од 5 минути валидни па оди во 7, проверува секунди во 8, секунди валидни оди во 10, па оди во 11, додава резултат во листа Валидни степени, валидни минути, валидни секунди. - агол валиден се претвора во секунди и се додава во резултат.
300 20' -20'' Од 4. оди во 5, од 5 минути валидни па оди во 7, проверува секунди во 8, секунди невалидни оди во 9 фрла исклучок. Валидни степени, валидни минути, невалидни секунди - агол не валиден
360 00' 00'' Од 4. оди во 12, степени цели 360, оди во 13 за проверка на минути и секунди, валидни и оди во 14, додава резултат во листата со резултати. Валидни степени (цел круг), валидни минути, валидни секунди. - агол валиден се претвора во секунди и се додава во резултат.
360 01' 02'' Од 4. оди во 12, степени цели 360, оди во 13 - минути не валидни, оди во 15,16 и фрла исклучок. Валидни степени (цел круг), не валидни минути и секунди - агол невалиден (поголем од 360 не е агол)
500 20' 20'' Од 4. оди во 12. степените не се 360, оди во 17 - па во 18 да фрли исклучок. Невалидни степени, минути и секунди не се ни проверуваат - агол невалиден.
Од 2.2 0 < array.size() услов не исполнет, неможе да влезе во телото на циклусот оди во 19, ја враќа празната иницијализирана листа од 1. Празна листа со агли како влезен аргумент - не се прави ништо од телото на for циклусот, директно се враќа празната листа иницијализирана во 1 за резултатот

Тест случаи според Multiple condtition критериумот

Целта на Multiple condition критериумот како што е познато е при секој предикатен јазел да се испита дали се оди во сите негови насоки, односно во точната (on true branch) гранка, и неточната (on false branch).

За овие примери претпоставуваме дека секој тест случај е елемент на листата anglesList.


`if (deg >= 0 && deg < 360) //4`
Комбинација Можен тест случај Гранка
TT 100 10' 10'' 5
Fx -10 10' 10'' 12

TT - Бидејќи е AND мора двата литерали од изразот да се точни

Fx - Бидејќи е AND доволно е првиот литерал да не точен за целиот израз да се евалуира како неточен

Овој предикатен јазел ја проверува валидноста на степените во аголот, па затоа минутите и секундите се небитни.


if (min < 0 || min > 59) //5

Комбинација Можен тест случај Гранка
Tx 100 -10' 10'' 6
FF 100 10' 10'' 7

Во овој јазел се влегува само како последица на јазел 4, па затоа степените се валидни и се проверуваат минутите.

Тx - Доколку еден од литералите е точен, веднаш целосниот израз се евалуира како точен. Односно доколку еден од условите за минутите не е запазен тогаш, минутите не се валидни.

FF - Мора и двата литерали да се неточни за целиот израз да се евалуира за неточен


if (sec < 0 || sec > 59) //8

Комбинација Можен тест случај Гранка
Tx 100 10' -10'' 9
FF 100 10' 10'' 10

Тx - Доколку еден од литералите е точен, веднаш целосниот израз се евалуира како точен. Односно доколку еден од условите за минутите не е запазен тогаш, минутите не се валидни.

FF - Мора и двата литерали да се неточни за целиот израз да се евалуира за неточен

Во овој јазел се влегува само ако степените и минутите се валидни, па затоа само секундите се проверуваат


else if (deg == 360) //12

Комбинација Можен тест случај Гранка
T 360 00' 00'' 13
F 365 10' 10'' 17

Во овој јазел се влегува ако не е исполнет јазел 4, па се проверуваат дали аголот е цел круг (360 степени)

Предикатниот јазел содржи еден литерал, па истиот може да биде точен (Т) или неточен (F).


if (min == 0 && sec == 0) //13

Комбинација Можен тест случај Гранка
TT 360 00' 00'' 14
Fx 360 10' 00'' 15

За да се влезе во овој јазел мора јазел 12 да е точен, односно степените да се 360, па мора и минутите и секундите да се 0.

ТТ - Бидејќи е логичко И мора двата литерали од изразот да се точни за да се евалуира како точно, односно мора и минутите и секундите на аголот да се 0.

Fx - Доколку еден од литералите не е точен целиот предикатен јазел се евалуира како неточен.


i < angleList.size(); во for (int i = 0; i < angleList.size(); i++) //2.2

Комбинација Можен тест случај Гранка
T [100 10' 10''] 3
F [] 19

Oвој предикатен јазел е добиен имплицитно, како последица на for циклусот којшто започнува во јазелот 2. Односно во овој јазел се влегува при иницијализацијата во јазел 2.1 и се проерува дали i e помало од големината на anglesList ако како аргумент е проследно празна листа, тогаш воопшто не се влегува во for циклусот. Другиот случај кога се влегува во овој јазел е после секоја итерација, односно после инкрементот кој се јавува како последица на секоја итерација.


Објаснување на напишанте unit test-ови

Тестирање на случаите во кои имаме валидни агли и се прави нивно претворање во секунди:

arrayList : List result : List Опис
List.of(new Angle(360, 0, 0),new Angle(300, 20, 20)) List.of(360 * 3600, 3003600+2060+20) Валиден агол од 360 00' 00'' треба да се претвори во максималната вредност за секунди 1296000''. Aгол од 300 20' 20' e валиден и е (3003600+2060+20)''
List.of(new Angle(0,0,0)) List.of(0) Валиден агол од 0 00' 00'' e 0''
List.of() List.of() Празна листа со агли - празна листа со резултати (агли претворени во секунди)
List.of(new Angle(100, 10, 10)) List.of(360610) Претворање на произволен валиден агол

За генерирање на очекуваните резултати ја користиме формулата: (deg, min, sec) = (deg*3600 + min*60 + sec)"

Заклучок: претворањето на агол од (deg, min, sec) во (sec) е вадлино.

Tестирање на случаите во кои имаме невалидни агли (Exceptions)

Невалиден агол може да се добие на следниот начин Невалидни deg, Произволно min, Прозиволно sec Валидни deg, Невалидни min, Произволно sec Валидни deg, Валидни min, Невалидни sec

Па според ова ги имаме следните тест случаи:

arrayList : List Еxception Опис
List.of(new Angle(500,20,20)) thrown Фрлен RuntimeException
List.of(new Angle(300,-10,-10)) thrown Фрлен RuntimeException
List.of(new Angle(300,20,-20)) thrown Фрлен RuntimeException
List.of(new Angle(360,1,2)) thrown Фрлен RuntimeException

multipleCondition() ги опфаќа тест случаите според Multiple Condition критериумот.

testExceptions() и testConvertibleAngles() ги опфаќаат случаите според Every branch критериумот.

About


Languages

Language:Java 100.0%