[Linux-Biella] Ingegneria Informatica

Mastro daniele.bilug a gmail.com
Mar 4 Apr 2006 14:56:16 CEST


Paolo Ciarrocchi ha scritto:

 > On 4/4/06, Mastro <daniele.bilug a gmail.com> wrote:
 > [...]
 >>>> eh eh.. si il motivo è come al solito che non avete ancora capito che
 >>>> cos'è ingegneria informatica...
 >>> Non è che ci sia così tanto da capire...
 >>>
 >>>
 >> ah si? forse non hai letto l'altra mail che ho scritto "[Linux Biella]
 >> Ingegneria Informatica"! per ora mi ha risposto solo Paul TT..
 >> leggila e poi rispondi di nuovo a quest'ultima mia affermazione..
 >
 > Daniele, cosa si insegna a Ingegneria Informatica e' chiaro a chi ha
 > frequentato un corso di Ingegneria, le altre persone spesso la
 > confondono con la "pura programmazione".

ho già provato a descrivere quello che si insegna nell'altro post...
a cui tu mi hai risposto qui sotto facendoti una domanda

(non allego tutto il mio spiegone perchè penso lo abbiate ricevuto tutti..)

Paolo Ciarrocchi ha scritto:

> On 4/3/06, Mastro <daniele.bilug a gmail.com> wrote:
> [...]
>> domande? :P
> 
> Si.
> Cosa e' la programmazione estrema?

Programmazione Estrema o eXtreme Programming in inglese (si abbrevia XP 
e bigM non centra una mazza..)

premettendo che me le sono studiate da solo alla veloce e che quindi non 
sono un esperto mondiale... un giorno spero di trovare il tempo di 
studiarmele bene... diciamo che per ora mi sono fatto un idea...

intanto vi do dei link....
la programmazione estrema è semplicemente una metodologia di 
programmazione per team di medie dimensioni che se applicata dovrebbe 
migliorare la qualità del codice e quindi la facilità di aggiornamento e 
assenza di bug... fa parte delle così dette metodologie di 
programmazione agile (o leggera) e non è l'unica, ma solo la più 
famosa.. anzi in realtà sarebbe utile conoscerle tutte...

vi consiglio questo testo:

http://martinfowler.com/articles/newMethodology.html

o la sua traduzione italiana

http://www.marcopapacchini.com/agility/nuovametodologia.html

parlano delle metodologie Agili e accennano all'XP

qui invece trovate link ad articoli dedicati ad XP:

http://www.tecnoteca.it/upgrade/aprile_2002

in queste pagine troverete tutto ciò che c'è da sapere ma provo a farvi 
un piccolo sunto..

l'XP non dice nulla di nuovo.. prende molte pratiche di buona 
programmazione e le mette assieme "estremizzandole"

il tutto parte dalla "user stories" cioè da quello che il cliente ci 
dice di volere (che poi non è mai quello che vuole) da qui si fa un 
progetto e si implementa, il più velocemente possibile..
cioè si deve fare la cosa + semplice per ottenere lo scopo senza 
preoccuparsi del futuro.. però si devono aggiungere piccole modifiche 
alla volta, non si devono fare straordinari e ci si deve riposare 
regolarmente, mantenere le cose semplici e usare metafore quando 
necessario. Quindi ci si ritrova dal cliente per sentire la sua nuova 
storia circa a metà lavoro (quando l'utente vede già qualcosa capisce 
meglio cosa vuole) e qui si cicla..

programmando:
si deve cominciare scrivendo i test, e solo dopo i metodi o le classi 
vere e proprie..

si deve programmare a coppie, ad esempio si programma per un oretta, poi 
ci si scambia e si guarda il lavoro dell'altro, le coppie vanno cambiate 
regolarmente (ovviamente questo funziona su programmatori con esperienze 
paragonabili)

tutti devono avere accesso a tutto il codice e poterlo modificare, con 
la regola che prima di effettuare la modifica scrivano il test per la 
modifica..

seguire una guida di stile unificata (stesso tipo di indentamente ecc.. 
ecc..)

refactoring.. sono tutte quelle modifiche che non aggiungono 
funzionalità ma che sono necessarie per modificare il funzionamento del 
codice o per aggiungervi funzionalità, direi che l'XP si basa su questo, 
perchè se scrivete codice senza preoccuparvi del futuro è inevitabile 
che dovrete riadattarlo.. ci sono tecniche di refactoring che permettono 
di stravolgere in poco tempo la struttura del codice senza cambiarne la 
funzionalità ma aumentandone di molto l'espandibilità


tutto questo dovrebbe far si che il costo di aggiornamento del software 
cresca logaritmicamente anzichè esponenzialmente..

poi ci si scontra con altre cose come il principio di sostituzione di 
Liskov: in poche parole dice che il test di una superclasse DEVE essere 
valido anche per tutte le sottoclassi.. in sostanza serve a capire 
quando è meglio usare un interfaccia o una classe astratta..

non mischiare più comportamenti in un unica classe ma mantenerli 
separati ecc...

in oltre c'è uno studio matematico della rigidità del codice che si basa 
sulle dipendenze tra classi... io ve lo risparmierei.. salvo che 
qualcuno non lo voglia sentire.

un'ultima precisazione sui test (o collaudo): non hanno molto senso su 
moduli grafici... in quel caso funziona meglio l'osservazione diretta...

spero di aver risposto alla tua domanda..
-- 
ciao
-----------------
Mastro (Daniele)


Maggiori informazioni sulla lista Linux