Egzamin z Inżynierii Oprogramowania, rok II
grupa A
EGZAMIN Z INŻYNIERII OPROGRAMOWANIA, GRUPA A
Rok II, kierunek Informatyka, studia dzienne inżynierskie
CZĘŚĆ PIERWSZA – ZADANIA
Imię i nazwisko …..............................................................................
Nr albumu …..................
Zadanie 1. (3 punkty)
Poniżej podano graf PERT dla pewnego projektu. Wylicz czas oczekiwany realizacji całości.
Pod rysunkiem, w tabeli, podano czasy realizacji poszczególnych etapów.
Etap A
Etap B
Etap C
O
M
P
O
M
P
O
M
P
3
4
5
3
5
8
1
2
3
Zadanie 2. (1 punkt)
Znajdź błąd w poniższym programie i napisz, na czym on polega.
/*
------------------------plik ListaSortuj ca.cs
----------------*/
using
System;
namespace
zadanie_2
{
public
class
ListaSortująca
{
public
double
Wartość;
public
ListaSortująca Następny;
public
ListaSortująca (
double
Liczba, ListaSortująca Następnik)
{
Wartość = Liczba;
Następny = Następnik;
}
//
Koniec konstruktora
public
void
DopiszDoListy(
double
Liczba)
//
Dopisywanie do listy
{
ListaSortująca Pomocniczy;
Pomocniczy =
null
;
if
(Liczba >= Wartość)
//
Wtedy dopisujemy do końca listy
{
if
(Następny ==
null
)
{
-1/5-
A
B
C
夏
Egzamin z Inżynierii Oprogramowania, rok II
grupa A
Następny =
new
ListaSortująca(Liczba,
null
);
}
else
{
Następny.DopiszDoListy(Liczba);
}
}
else
//
W innym przypadku na początku listy.
{
Pomocniczy =
new
ListaSortująca(Wartość,Następny);
Wartość = Liczba;
Następny =
new
ListaSortująca(Pomocniczy.Wartość,Pomocniczy.Następny);
Pomocniczy =
null
;
}
//
Na początek listy
}
//
Koniec dopisywania
public
void
PrzepiszDoTablicy(
double
[] Tablica,
int
Indeks)
//
Przepisywanie do
tablicy
{
if
(Indeks < Tablica.Length)
{
Tablica[Indeks] = Wartość;
}
Indeks++;
if
(Następny !=
null
) Następny.PrzepiszDoTablicy(Tablica,Indeks);
}
//
Koniec przepisywania
}
//
Koniec klasy
}
/*
------------------------plik Main.cs
--------------------------*/
using
System;
namespace
zadanie_2
{
class
MainClass
{
public
static
void
Main (
string
[] args)
{
Random Generator;
ListaSortująca Lista;
double
[] Tablica;
double
[] TablicaS;
int
i;
int
N;
i =
0
;
N =
20
;
Generator =
new
Random();
Tablica =
new
double
[N];
TablicaS =
new
double
[N];
Lista =
null
;
for
(i=
0
;i<N;i++)
{
Tablica[i] =
100
* Generator.NextDouble();
Console.WriteLine(
"Tablica["
+ i.ToString() +
"] = "
+
Tablica[i].ToString());
}
Lista =
new
ListaSortująca(Tablica[
0
],
null
);
for
(i=
1
;i<N;i++) Lista.DopiszDoListy(Tablica[i]);
Lista.PrzepiszDoTablicy(TablicaS,
0
);
Console.WriteLine(
"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
);
for
(i=
0
;i<N;i++)
{
Console.WriteLine(
"TablicaS["
+ i.ToString() +
"] = "
+
TablicaS[i].ToString());
}
-2/5-
夏
Egzamin z Inżynierii Oprogramowania, rok II
grupa A
Lista =
null
;
//
Usunięcie listy po użyciu!
}
//
Koniec Main
}
//
Koniec klasy
}
Zadanie 3. (1 punkt)
Na podstawie podanego diagramu UML napisz kod szkieletowy w języku C#.
Zadanie 4. (3 punkty)
Dana jest metoda obliczająca powierzchnię prostokąta metodą Monte Carlo. Napisz test
jednostkowy dla tego fragmentu kodu.
using
System;
namespace
zadanie_4
{
public
class
prostokątMC
{
public
double
ObliczPowierzchnię(
double
a,
double
b)
{
double
PomocniczeA;
double
PomocniczeB;
Random Generator;
double
x;
double
y;
int
LiczbaRzutów;
int
LiczbaTrafień;
int
i;
double
wynik;
-3/5-
夏
Egzamin z Inżynierii Oprogramowania, rok II
grupa A
PomocniczeA =
2
* a;
PomocniczeB =
2
* b;
Generator =
new
Random();
x =
0
;
y =
0
;
wynik =
0
;
LiczbaRzutów =
100000
;
LiczbaTrafień =
0
;
i =
0
;
for
(i=
0
;i<LiczbaRzutów;i++)
{
x = PomocniczeA * Generator.NextDouble();
y = PomocniczeB * Generator.NextDouble();
if
((x < a) && (y < b)) LiczbaTrafień++;
}
//
Koniec rzucania
wynik = ((
double
)LiczbaTrafień/(
double
)LiczbaRzutów) * PomocniczeA *
PomocniczeB;
return
wynik;
}
//
Koniec obliczania powierzchni
}
}
Zadanie 5. (1 punkt)
Na podstawie kodu zamieszczonego poniżej, narysuj diagram klas UML.
using
System;
namespace
zadanie_5
{
public
class
Noga{
public
float
Długość;
public
string
Styl;
private
string
Materiał;
}
}
using
System;
namespace
zadanie_5
{
public
class
siedzisko{
public
float
szerokość;
public
float
długość;
}
}
using
System;
namespace
zadanie_5
{
public
class
Oparcie{
public
float
Wysokość;
public
float
szerokość;
public
string
Styl;
}
}
using
System;
namespace
zadanie_5
{
public
class
Krzesło{
public
Oparcie OparcieKrzesła;
public
siedzisko SiedziskoKrzesła;
public
Noga[] NogiKrzesła;
}
}
-4/5-
夏
Egzamin z Inżynierii Oprogramowania, rok II
grupa A
Zadanie 6. (1 punkt)
Oszacuj czas pisania kodu złożonego z 5000 linii, gdy programista pisze ze średnią
szybkością 8 linii na minutę z prawdopodobieństwem popełnienia błędu wynoszącym 0,1.
Czas podaj w dniach roboczych.
CZĘŚĆ DRUGA – TEORIA
Zadanie 1. (2 punkty)
Jakie jest przeznaczenie grafów PERT? Podaj krótki opis wierzchołka grafu i jego parametrów.
Zadanie 2. (2 punkty)
Co to jest diagram przypadków użycia? Podaj dwa główne symbole związane z tym diagramem
i krótko je opisz.
Zadanie 3. (2 punkty)
Na czym polega test akceptacyjny? Krótko opisz dwa z najczęściej stosowanych typów testu
akceptacyjnego, stosowanych dla dużych aplikacji.
Zadanie 4. (2 punkty)
Na czym polega metryka pokrycia bloków instrukcji? Napisz krótko, jakie wady i zalety posiada ta
metryka.
Zadanie 5. (2 punkty)
Co oznacza pojęcie niejednoznacznej specyfikacji? Podaj conajmniej jeden przykład.
Punktacja i ocena (część zadaniowa i teoretyczna jest oceniana oddzielnie). Ocena końcowa jest
średnią arytmetyczną z obydwu części, przy czym konieczne jest uzyskanie pozytywnej oceny
z części zadaniowej do zaliczenia egzaminu.
Punkty
Ocena
0 – 4,9
2.0
5 – 5,9
3,0
6 – 6,9
3,5
7 – 7,9
4,0
8 – 8,9
4,5
9 – 10
5,0
-5/5-
夏