Proszę odpowiedzieć na poniższe pytania:
* Czym różni się metryka statyczna od dynamicznej?
* Podaj przykłady metryk statycznych
Proszę odpowiedzieć na poniższe pytania:
* Jakie aspekty oprogramowania można mierzyć (lub inaczej: jakie grupy metryk oprogramowania można wyznaczyć)?
* Podaj przykłady metryk dynamicznych (to nie jest podpowiedź do pierwszego punktu...)
Proszę odpowiedzieć na poniższe pytania:
* Czy (i ewentualnie jak) można mierzyć jakość testu?
* Podaj przykłady metryk kodu
Proszę odpowiedzieć na poniższe pytania:
* Czym różni się analiza statyczna od dynamicznej (w inżynierii oprogramowania)?
* Podaj przykłady analizy dynamicznej
Proszę odpowiedzieć na poniższe pytania:
* W jakim celu prowadzi się analizę aplikacji?
* Czy analiza statyczna ma przewagę nad dynamiczną?
Dana jest funkcja:
Item* Service::method(const Other& obj, bool x) {
if (obj.hasProperty() || x)
return obj.hasItem() ? obj.item() : nullptr;
if (obj.hasItem())
throw MalformedItem();
return Item::Default;
}
Ile przypadków testowych należy napisać, by uzyskać:
a) 100% pokrycia linii kodu
b) 100% pokrycia gałęzi kodu
Podaj wartości argumentów konieczne do uzyskania wspomnianych pokryć.
Dana jest funkcja:
Item* Service::method(const Other* obj, double b) {
if (obj != nullptr && obj->hasProperty())
return obj->hasItem() ? obj.item() : nullptr;
return this->itemCache->hasItem(b) ? this->itemCache->get(b) : Item::Default;
}
Ile przypadków testowych należy napisać, by uzyskać:
a) 100% pokrycia linii kodu
b) 100% pokrycia gałęzi kodu
Podaj wartości argumentów konieczne do uzyskania wspomnianych pokryć.
Dana jest funkcja:
std::shared_ptr<Item> Service::method(const Other* obj, double b) {
if (obj == nullptr || !obj->hasProperty())
return nullptr;
if (b > 100)
throw InvalidArgument(b);
return b > 5 ? Item::Default : std::make_shared<Item>(b);
}
Ile przypadków testowych należy napisać, by uzyskać:
a) 100% pokrycia linii kodu
b) 100% pokrycia gałęzi kodu
Podaj wartości argumentów konieczne do uzyskania wspomnianych pokryć.
Proszę odpowiedzieć na poniższe pytania:
* jak rozumieć pojęcie "metryka" w inżynierii oprogramowania?
* podaj przykłady metryk
Co jest nie tak z poniższym kodem?
// bardzo uproszczony fragment na kolokwium przykładowe
extern int x;
int fun(int a, int b, bool c) {
int tmp = a;
if (c) {
if (a > 5)
if (b < 6)
if (x > 500)
if (a > 6 && b < x << a || b + 5 >> x && tmp++)
return a;
return b;
} else {
return a + b;
}
}
Proszę opisać jak należałoby poprawić ten kod (jakie operacje i w jaki sposób wykonane)
Dana jest funkcja:
int fun(int a, int b) {
if (a < 5 || b > 10)
return a * b;
return a + b;
}
Ile przypadków testowych należy napisać, by uzyskać:
a) 100% pokrycia linii kodu
b) 100% pokrycia gałęzi kodu
Podaj wartości argumentów konieczne do uzyskania wspomnianych pokryć.
Co jest nie tak z poniższym kodem?
int Service::handler(const Request& r, Type t) {
// sprawdzamy, czy usługa działa
if (!(isConfigured() && registry->isEnabled(this) && subservice != nullptr && subservice->isConfigured() && subservice->isActive() && registry->isEnabled(subservice))
return -1;
if (!r.header.topic.items.contain(Request::Header::Type::Active))
return -2;
auto tmp = r.body.items[3].data;
if (tmp > 5) {
tmp = 15 * itemCount();
switch (t) {
case Type::Responding: return sendResponse(r, tmp);
case Type::Blocked: return -3;
default: return 0;
}
} else {
switch (t) {
case Type::Responding: return sendResponse(r, itemCount() - 2);
case Type::Blocked: return -3;
default: return 0;
}
}
return -4;
}
Proszę opisać jak należałoby poprawić ten kod (jakie operacje i w jaki sposób wykonane)
Co jest nie tak z poniższym kodem?
int Service::process(const Request& r, bool ignored) {
// sprawdzamy, czy usługa działa
if (isConfigured() && registry->isEnabled(this) && subservice != nullptr && subservice->isConfigured() && subservice->isActive() && registry->isEnabled(subservice))
{
if (!r.header.topic.items.contain(Request::Header::Type::Active))
return -2;
auto tmp = r.body.items[3].data;
if (tmp > 5) {
tmp = 15 * itemCount();
if (ignored)
throw IncorrectRequest(r);
tmp = sendResponse(r, tmp);
if (tmp != 0)
return tmp;
return 0;
} else {
if (ignored)
throw IncorrectRequest(r);
tmp = sendResponse(r, itemCount() - 2);
if (tmp != 0)
return tmp;
return 0;
}
}
else
{
return -4;
}
return -5;
}
Proszę opisać jak należałoby poprawić ten kod (jakie operacje i w jaki sposób wykonane)