accertatevi che tutto quello che vi serve (git, jest,...) sia disponibile sul computer che intendete usare durante l'esame. A volte sui computer del laboratorio ci possono essere problemi ad es di spazio su disco etc, accertatevi che i problemi vengano fuori prima dell'esame e non durante.
Potete usare il vostro computer MA dovete sapere usare git da command line.
Evaluation is different for who attends lessons regularly and takes part to the class project, and those who don’t. Attending classes takes time, and the class project also takes time, so the exam is different if you choose to be in the project.
Written/oral: A part of the exam will consisting of questions and exercises. Questions will be written in most cases but we reserve the right to do an oral exam as well if we have doubts on the answers given or if we have questions on the contributions to the class project. Exercises may involve writing API, implementing, deploying on heroku, testing, and all the good stuff we tried out in class
Project: During the semester you will work in a small group on a project. Multiple groups will work on the same project, so that there is an aspect of coordination within and among groups.
During the project, EACH student will
- Design APIs,
- Write code and tests
- Review other students' code and API
- Deploy code and API through test and production environments, so that it is made publicly available
- Make the work visible by working and committing on the appropriate branches, so that we can examine the progress and the contribution of each on GitHub. If it’s not visible to us on GitHub, for us you have not done it and you will not get credit for it.
Because we collaborate with others, the code and API should be ready at the specified time, which means that you have to keep a constant pace - which is what modern software development methods recommend.
Marks distribution:
Written/oral: 22 points
Project: 10 points
il materiale e' riportato in ciascuna delle 4 sezioni "required for exam", alle pagine:
In aggiunta ci aspettiamo che sappiate
il codice NON sara' complesso, una conoscenza basilare di nodejs come acquisita durante il corso sara' piu' che sufficiente, la parte di "programmazione" sara' semplicissima
Students who do NOT attend classes (studenti non frequentanti), or that attend but do not take part to the project, or that drop out of the project for *whatever* reason will take the written/oral exam only, but they will have to study additional material related to the application design process, and specifically design via design thinking methodologies
Additional study material, comparable in effort to attending classes and working on the project, is available here
a 2-point bonus is given the first time a student registers for an exam (if you register and cancel you can still have the bonus, if you register and do not show up for whatever reason, the bonus is lost).
The bonus is not required to take maximum point. you can always take the maximum mark (30L) at any exam.
Simulazione esame 2018-19
una possibile soluzione per la parte pratica e' su github, courtesy of Jorge.
Parte pratica esame gennaio 2019
https://docs.google.com/document/d/1DmWse9wWOTnIcq5K1FwYsfgsAZdMN0NXGJLDfbBiIbU/edit?usp=sharing
una possibile soluzione di un vostro collega: https://github.com/cosimobortolan/bortolan-185254-jan2019
Altri esempi di quiz:
Altri esempi di esercizi:
L'esame in generale puo' riguardare tutto quanto visto durante il corso.
Per la parte di teoria trovate varie domande di esempio nelle pagine dei vari topics.
Per la parte invece di "pratica", ci possono essere varie modalita'.
Alcuni esempi:
Create un servizio che riceve consegne di esami dagli studenti (e, in generale, a "workers" di consegnare "assignments". il servizio consente ad un worker di mandare il proprio assignment (esame), caratterizzato da
taskID - a string
assignmentID - a string
workerID - a string
assignmentResult - an object
gli utenti possono anche modificare un assignment consegnato, guardare assignments, e cancellare assignments (ovvero ritirarsi).
non implementiamo metodi di controllo degli accessi: per semplificare assumiamo che tutti possano fare tutto.
vi chiediamo di:
RIcordiamo di non modificare nulla dopo la consegna.
NON e' necessario memorizzare le info in un database.
Per i casi di test, basta mettere casi di test che testano un casi valido di get, di post, e di delete
In generale, se non riuscite a fare tutto (e' tanto, se partite da zero), concentratevi sul fare poche funzionalita' fatte bene (ad es, un paio di metodi di API descritti bene, una o due funzioni implementate come si deve, una serie di casi di test per un metodo o due pensati bene con equivalence partitioning e boundary value analysis, magari anche con coverage se avete il tempo)
Come soluzione, trovate un link ad una semplice api definita su apiary: https://examware.docs.apiary.io
Repo su github: https://github.com/sphoebs/examware.git
all'interno di questo schema ci sono tante varianti.
Ad esempio potremmo chiedere di:
E2: tema del 12 gennaio 2018 - (requires UNITN login)
La parte relativamente piu' complessa qui era relativa ai casi di test, e trovate di seguito una possibile soluzione (ce ne sono tante).
const getArea = require('./area.js')
test('more than 2 array elements', () => {
expect(getArea([2,3,4])).toBe(-1)
});
test('less than 2 array elements ', () => {
expect(getArea([4])).toBe(-1)
});
test('one array element is null', () => {
expect(getArea([2,null])).toBe(-1)
});
test('second array element is not a number', () => {
expect(getArea([2,'fdfd'])).toBe(-1)
});
test('first array element is not a number', () => {
expect(getArea(['fdfd',2])).toBe(-1)
});
test('correct area computation', () => {
expect(getArea([2,3])).toBe(6)
});
test('correct area computation with zeros', () => {
expect(getArea([0,3])).toBe(0)
});
test('one parameter is not an integer', () => {
expect(getArea([2.5,2])).toBe(-1)
});
test('one parameter is a string that is a number', () => {
expect(getArea(['1',2])).toBe(-1)
});
test('one parameter is undef', () => {
expect(getArea([0,])).toBe(-1)
});
test('parameter is an object', () => {
expect(getArea({a:1,b:2})).toBe(-1)
});
test('negative integers', () => {
expect(getArea([-2,6])).toBe(-1)
});
test('no pars', () => {
expect(getArea()).toBe(-1)
});
test('two pars instead of one', () => {
expect(getArea([2,3],5)).toBe(-1)
});
Per le possibili soluzioni vi rimando a due compiti ben fatti dei vostri colleghi: