Очевидното: код.
Кодът трябва да покрива функционалността, описана в заданието. Също така трябва да се държи адекватно във всички случаи: грешен потребителски вход, грешки от околната среда, паднал таван. Под адекватно се има предвид следното: ако е възможно — нека работи правилно, а ако не е — да уведоми потребителя по подходящ начин защо не може да работи правилно.
Тестове
Хубаво ще е тестовете ви да покриват възможно най-голяма част от кода и разклоненията в него. Също така нека са поставени в отделни типове или дори пакети в зависимост от логичеката структура на проекта ви. Не забравяйте example тестовете, които демонстрират как се ползва вашият проект и при нужда benchmark тестове.
Игри и друг GUI intensive софтуер
Когато сте избрали да пишете неща, наподобяващи игри — или каквито и да е други проекти, изискващи сериозно GUI — постарайте се да "откачите" основния си код максимално много от рисуването/графиката/GUI-то. Целта ви е да имате много ясно разделение и абстракция между "ядрото" на вашия проект и графичния му интерфейс. Добре би било основната логика на проекта ви да се намира изцяло в "ядрото", под формата на пакети, типове и прочее, като това ядро предоставя на своите позлватели някакво API. Тоест, стремите се да пишете въпросното ядро все едно пишете библиотека, която ще се преизползва в друг(и) софтуер(и). От там нататък, GUI-то се прави като wrapper на тази библиотека, ползва публичното й API и е един вид pluggable компонент към нея.
Можете да минете и само с кода от основното ядро, който имплементира функционалност без GUI, ако сте писали обилно тестове. Този проект е подходящ шанс за вас да пробвате подхода TDD. Допълнително, това ще ви помогне да покриете едно от изискванията, а именно да имате пълно покритие с unit тестове.
GUI-то е добре да е съвсем просто и може да минете без особено тестване там, освен, евентуално, някой друг инреграционен тест. Може да минете и с най-просто и дървено конзолно UI, което е тънка обвивка около API-то на "ядрото". Ако сте запалени, може да направите повече от едно GUI. Последното със сигурност ще ви донесе бонус точки :)
Документация
На този, който ще чете кода ви ще му бъде нужда докуентация, така че опитайте се да бъдат максимално полезни за четящия и да казват същественото, а не само това, което може да се види с един поглед в кода.
Version control
Задължително е. Силно препоръчваме да ползвате Git и GitHub, но сме ок и с алтернативи. Кодът на проекта трябва да е публичен. Ако все пак държите да ползвате друга version control система, пак ще приемем това изискване за покрито. Важното е да има някакъв version control.
Оценяване
Проверката на функционалността на проектите няма да се прави автоматизирано, което означава че ви се дава свобода да изясните по-дребните детайли.
- 50% от точките, за вeрен и отговарящ на условието код. Трябва като минимум да покриете условието на проекта (по ваш избор можете да го разширите, но не и да променяте/пропускате части от него)
- 20% за стил, другояче казано: за четим код, добър дизайн, лесни възможности за разширяване на програмата ви, достатъчна документация.
- 30% отиват при добрите unit, benchmark (ако сметнете за нужно) и example тестове.