Advertisement
Keyzio

Untitled

Nov 18th, 2012
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.26 KB | None | 0 0
  1. Úkolem je realizovat funkci, která bude počítat pravděpodobnost porušení SLA nedokonale otestovaným programem.
  2.  
  3. Předpokládejme, že firma vyvíjí webovou službu. Důsledkem nepořádného testování však není dostatečně odladěná. Protože ale vývoj již stál moc peněz, CEO a CIO se dohodl, že se produkt začnou prodávat zákazníkům. Protože se jedná o produkt z kategorie "enterprise", dodává se produkt se SLA (Service Level Agreement). Tedy, pokud produkt nesplňuje určité dohodnuté míry spolehlivosti a kvality, je zákazník oprávněn účtovat smluvní penále. Analýzou chování webové služby vývojáři zjistili, že z tot požadavků zaslaných během jednoho dne je jich službou nesprávně zpracováno err. Předpokládejme, že SLA stanoví, že zákazník během jednoho dne zašle cli požadavků a že je akceptovatelných cliMax chyb. Pokud je chyb více, SLA je vyhodnocená jako nesplněná (a zákazník má nárok uplatnit smluvní pokutu).
  4.  
  5. Vaším úkolem je realizovat funkci, která ze zadaných parametrů tot, err, cli a cliMax vypočte pravděpodobnost, že SLA bude splněna. Pozor: nejedná se o celý program, ale pouze o jeho část. Požadovaná funkce má rozhraní:
  6.  
  7. int ratioSla ( int tot, int err, int cli, int cliMax, double * r );
  8. tot
  9. je celkový počet požadavků na službu během jednoho dne,
  10. err
  11. je celkový počet chybných odpovědí služby,
  12. cli
  13. je celkový počet požadavků zákazníka zaslaných během jednoho dne,
  14. cliMax
  15. je ve SLA uvedený nejvyšší akceptovatelný počet nesprávných odpovědí pro daného zákazníka,
  16. r
  17. je výstupní parametr, do kterého funkce uloží desetinné číslo - vypočtenou pravděpodobnost splnění SLA (v rozmezí 0.01.0),
  18. návratová hodnota
  19. funkce vrátí hodnotu 1 pro úspěch, hodnotu 0 pro neúspěch. Za neúspěch je považováno, pokud jsou funkci předané nesmyslné parametry (záporná čísla, počet chyb vyšší než počet požadavků, ...). Pokud je funkce zavolaná s nesprávnými parametry, funkce nebude nic počítat, nebude nastavovat výstupní parametr a vrátí hodnotu 0.
  20. Odevzdávejte zdrojový soubor s implementací funkce ratioSla. Odevzdávaný soubor musí obsahovat implementaci této funkce, s rozhraním (parametry), které odpovídají předpisu nahoře. Dále ve zdrojovém souboru musí být další Vaše funkce, které z funkce ratioSla voláte. V odevzdávaném zdrojovém souboru by naopak neměly být zbytečnosti (pozůstatky vývoje a ladění), vkládání hlavičkových souborů ani funkce main - toto je již obsaženo v testovacím prostředí. Pro usnadnění vývoje a odevzdávání (abyste nemuseli před každým odevzdáním ručně odstraňovat funkci main a vkládání hlaviček) použijte šablonu níže. Všimněte si, že funkce main a vkládání hlavičkových souborů je v bloku podmíněného překladu, tedy jsou testovacím prostředím přeskočeny.
  21. #ifndef __PROGTEST__
  22. #include <stdio.h>
  23. #include <stdlib.h>
  24. #include <math.h>
  25. #endif /* __PROGTEST__ */
  26.  
  27. /* pripadne Vase pomocne funkce */
  28.  
  29. int ratioSla ( int tot, int err, int cli, int cliMax, double * r )
  30.  {  
  31.    /* implementace */
  32.  }
  33.  
  34. #ifndef __PROGTEST__
  35. int main ( int argc, char * argv [] )
  36.  {
  37.    /* Vase testy */
  38.  }
  39. #endif /* __PROGTEST__ */
  40. Vaše funkce je testovaná v omezeném prostředí. Omezena je doba běhu i dostupná paměť. Konkrétní omezení je zřejmé z výpisu testování referenčního řešení. V této jednoduché úloze by se ale ani paměťové ani časové omezení nemělo uplatnit.
  41.  
  42. Ukázka použití funkce:
  43.  
  44. double x;
  45. int res;
  46.  
  47. res = ratioSla ( 20, 5, 5, 1, &x );
  48. /* res = 1, x = 0.633901 */
  49.  
  50. res = ratioSla ( 20, 3, 7, 2, &x );
  51. /* res = 1, x = 0.969298 */
  52.  
  53. res = ratioSla ( 20, 18, 4, 0, &x );
  54. /* res = 1, x = 0.000000 */
  55.  
  56. res = ratioSla ( 8, 0, 3, 1, &x );
  57. /* res = 1, x = 1.000000 */
  58.  
  59. res = ratioSla ( -3, 0, 2, 0, &x );
  60. /* res = 0, x = N/A */
  61.  
  62. res = ratioSla ( 5, 6, 2, 0, &x );
  63. /* res = 0, x = N/A */
  64. Nápověda:
  65. Pravděpodobnost vypočtete pomocí kombinatoriky - spočtete, kolika způsoby může zákazník nakombinovat odpovědi SLA vyhovující a odpovědi SLA nevyhovující.
  66. Při implementaci se Vám bude hodit více pomocných funkcí (např. pro výpočet kombinací).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement