— Chyby neslučitelné se získáním zápočtu —
|
P001 |
Nezpochybnitelně prokázané plagiátorství |
Student beze vší pochybnosti odevzdal program,
který vznikl funkčně nepodstatnou úpravou programu
jiného studenta nebo veřejně dostupného na Internetu.
Plagiátorství bylo prokázáno kontrolním systémem,
vizuální kontrolou nebo cílenými dotazy ke struktuře
zdrojového kódu. |
-70 |
P002 |
Rušení činnosti automatického odevzdávacího a kontrolního systému |
Program svojí činností záměrně narušuje správnou
funkci automatického odevzdávacího a kontrolního
systému na serveru amos.fav.zcu.cz, případně úmyslně
poškozuje práce ostatních studentů (také tím, že
server úmyslně přetěžuje). |
-70 |
P003 |
Program pouze předstírá požadovanou činnost |
Program neobsahuje algoritmy řešící zadaný problém, pouze předstírá
požadovanou činnost, např. výpisem řešení pro jeden konkrétní příklad
vstupu. |
-70 |
P004* |
Program nevykonává zadanou činnost |
Program žádným způsobem neřeší zadaný problém.
Zajištění jeho správné činnosti by vyžadovalo zásadní
a rozsáhlé úpravy zdrojového kódu, které však nebyly
autorem provedeny. |
-70 |
— Velmi závažné chyby —
|
P101 |
Podezření z plagiátorství |
Program se nápadně podobá dílu jiného studenta nebo programu,
který je k dispozici na Internetu. Autor se dostaví osobně k pohovoru. |
(osobně) |
P102* |
Systematické neuvolňování paměti |
Nikde v programu se neuvolňuje alokovaná paměť. Autor nezná
základní vlastnosti jazyka C a mylně předpokládá přítomnost
Garbage Collectoru. |
-20 |
— Závažné chyby —
|
P201 |
Chybí dokumentační komentáře |
V hlavičkových souborech nejsou u prototypů funkcí a definic
datových typů zapsány dokumentační komentáře (pro nástroj Doxygen
nebo podobný). Chybou je také umístit tyto komentáře jen do
.c souborů (protože ty mohou být při
případné distribuci knihovny přeložené do binární podoby). |
-10 |
P202 |
Neadekvátně dlouhý běh programu |
Program pracuje sice správně, ale tak dlouho, že je zřejmé,
že byl zvolen naprosto nevhodný algoritmus řešení problému. |
-10 |
P203 |
Nevhodná nebo nedostatečná dekompozice programu |
Program není vhodně rozdělen do funkcí a samostatných
překladových modulů. Program je příliš monolitický. Není dodržena koncepce
"Single Responsibility Principle", tzn. že každý překladový modul (resp. i funkce)
se stará pouze o jednu dedikovanou konkrétní část funkcionality programu –
jednoduše řečeno modul či funkce se nemá starat o několik věcí najednou.
|
-10 |
P204 |
Nesprávné použití pointerů |
V programu se vyskytují konstrukce, kde je nesprávně
použitý pointer, tj. pokusy o alokaci/uvolnění statických
oblastí paměti, zbytečné sekvence získávání adresy a
dereference, ztráta reference dynamické proměnné, apod. |
-8 |
P205 |
Nevhodný algoritmus |
V programu se objevuje nevhodný (většinou příliš složitý)
postup řešení nějakého dílčího problému. Při řádném provedení
analýzy problému by autor takový přístup jistě nepoužil. |
-8 |
P206 |
Nestandardní či potenciálně nebezpečné konstrukce |
V programu se objevují konstrukce, které sice nejsou
vyloženě syntakticky chybné, ale program komplikují,
znepřehledňují, případně činí ještě méně bezpečným,
než už beztak program v jazyce C je. Jedná se například
o bezdůvodné či příliš složité přetypovávání (např. konverze
ne/znaménkových celočíselných typů, která může vést
k přetečení, typicky size_t a int),
bezdůvodné narušování typové kontroly, úmyslné využívání
chyb a nedostatků překladače, apod. |
-8 |
P207 |
Výkonný kód v headeru |
V headeru (souboru .h) se
vyskytuje výkonný kód programu, tj. těla funkcí či deklarační
příkazy, nikoliv pouze definice a prototypy. |
-10 |
P208 |
Vkládání výkonného kódu namísto headeru |
Pomocí makra preprocesoru #include
je vložen zdrojový text s výkonným kódem, tj. soubor
.c. |
-10 |
P209* |
Syntaktická chyba |
Ve zdrojovém kódu programu se vyskytuje syntaktická chyba,
která znemožňuje překlad. Autor programu, odevzdaného v tomto
stavu, ignoruje nejen varování, ale i chybová hlášení překladače
– taková praxe je zcela nepřijatelná. |
-10 |
P210 |
Významová chyba |
Ve zdrojovém kódu programu se vyskytuje konstrukce, která
je sice syntakticky správně, a proto jí překladač neindikuje
jako chybu, ale která má jiný význam, než autor programu
zamýšlel. |
-8 |
P211 |
Neošetřené argumenty programu |
Program nijak neověřuje počet a/nebo správnost zadaných
argumentů na příkazové řádce. Pokud jsou to např. soubory,
pokouší se je otevírat, aniž by se přesvědčil, zda existují,
apod. |
-8 |
P212 |
Neošetřené argumenty funkce |
Po vstupu do podprogramu se nijak neověřuje, zda hodnoty
předaných argumentů jsou smysluplné a lze s nimi provádět následné
operace uvnitř podprogramu. |
-8 |
P213 |
Úmyslné využívání vedlejších efektů funkcí |
Funkce programu modifikuje globální proměnné, které jí nebyly
předány jako parametry odkazem (prostřednictvím ukazatele), tedy vytváří tzv.
vedlejší efekt (side effect). |
-8 |
— Méně závažné chyby —
|
P301 |
Magická čísla |
V programu se vyskytují přímo zapsané číselné konstanty nejasného
původu a účelu. Často slouží jako "opravné koeficienty" nesprávného
výpočtu. Nejsou definovány na jediném místě ve zdrojovém kódu (např.
pomocí příkazu preprocesoru #define nebo
deklaračního modifikátoru const). |
-5 |
P302 |
Zcela chybějící* nebo nesprávně napsaný Makefile |
Makefile chybí úplně nebo není funkční,
případně je závislý na použitém vývojovém či operačním prostředí. Pravidla
jsou zapsaná tak, že při změně jediného zdrojového souboru je nutné překládat
celý zdrojový kód projektu (tj. např. jediné dlouhé pravidlo pro výsledný
spustitelný soubor, které má v závislostech všechny zdrojové soubory). |
-5 |
P303 |
Nesystematický zápis jazyka |
Stejné konstrukce jsou zapsány pokaždé trochu jinak (např.
if(i > 10) ... oproti
if␣(i > 10) ...),
program není zapsán jednotným programátorským stylem. Např. také
když jsou víceslovné identifikátory někde psány stylem camelCase
a někde s podtržítky (mojeFunkce vs
moje_funkce). |
-4 |
P304 |
Používání nesrozumitelných zkratkovitých konstrukcí |
V programu se objevují např. operátory in-/dekrementace
v přiřazovacích příkazech, operátor postupného vyhodnocení
(čárka), vícenásobně zanořený ternární rozhodovací operátor, apod. |
-5 |
P305 |
Obtížně čitelný zdrojový kód |
Program je zapsán tak, že je jeho čtení velmi obtížné.
Zdrojový kód je nepřehledný a neuspořádaný. |
-5 |
P306 |
Málo komentářů |
V programu se vyskytují komenáře jen velmi zřídka –
složité a nejasné konstrukce nejsou komentovány nebo jsou komentovány
nedostatčně nebo jen někdy. |
-5 |
P307 |
Nevhodné pojmenování identifikátorů |
Identifikátory v programu jsou nesrozumitelné – není z nich
jasné, co daná proměnná nebo struktura znamená – nebo zavádějící
(jejich význam je jiný, než naznačuje název), případně jsou to přímo
nesmysly. |
-5 |
P308 |
Málo obecný algoritmus |
Použitý algoritmus sice nějak problém řeší, ale není dostatečně
obecný. V případě např. většího množství dat by selhal (typicky je
tato chyba indikována v případě, že se pracuje s daty, u nichž
nelze predikovat velikost, a přitom je použit statický přístup). |
-5 |
P309 |
Program není multiplatformní |
Zatímco v některém z operačních prostředí, použitých k testování,
funguje program bez závad, v ostatních tomu tak není. |
-5 |
P310 |
Nadužívání globálních proměnných |
V programu jsou zbytečně deklarovány málo bezpečné globální proměnné, ačkoliv
by v dané situaci k zamýšlené činnosti bylo možné využít předávání lokálních proměnných
mezi volanými funkcemi jako jejich argumentů. |
-5 |
— Drobné chyby —
|
P401 |
Příliš "hustý" zápis zdrojového kódu |
Program je zapsán s nedostatečným množstvím mezer,
tabulátorů a odsazení. |
-2 |
P402 |
Bezdůvodné použití extern |
Modifikátor extern je použit v
situaci, kdy symbol není skutečně externí, tj. není připojen
linkerem z jiného přeloženého modulu (knihovny). |
-2 |
P403 |
Nekvalitní výstup |
Výstup práce je sice formálně správný, ale není
dostatečně kvalitní (např. není správně formátovaný, v hlášeních programu
jsou gramatické chyby, překlepy, apod., výsledné obrázky/grafy mají nízké
rozlišení, atp.). |
-2 |
P404 |
Nesrozumitelné komentáře |
Komentáře, které se v program vyskytují, jeho pochopení neusnadňují,
ale naopak komplikují. |
-2 |