PHP e gli Sviluppatori Selvaggi…

Mi e’ capitato da poco di mettere le mani su un gestionale che una ditta AAA ha commissionato a una ditta BBB, sviluppato in php/mysql . Il titolare della ditta AAA mi chiama in preda alla disperazione e dopo innumerevoli sue imprecazioni riesce ad espormi chiaramente il problema. Incuriosito, mi reco da AAA che mi mostra i sorgenti e dopo una veloce panoramica mi rendo conto del motivo di tanta ira. Riconosciuti gli evidentissimi problemi del software, vengo quindi incaricato di fare le dovute patch e aggiunte per renderlo funzionante (e gia’ qui mi chiedo come si faccia a consegnare un software incompleto… mah!).

Inizio a questo punto una analisi piu’ approfondita dei codici e il bisogno dei tranquillanti comincia a sorgere anche dentro di me. Una camomilla? 😛 …beh, passa il tempo e apro altri file per capire la logica usata, ma trascorsi 2 giorni concludo che NON c’e’ alcuna logica. Per chi fosse programmatore con un minimo di esperienza, elenco qui di seguito alcune delle osservazioni che saltano subito all’occhio:

  • non e’ stata definita alcuna classe… (siamo nel 2007… php supporta le classi ormai da anni!)
  • dove sono le funzioni? (wow… il paradiso del copia & incolla)
  • tag html aperti e non chiusi o viceversa (ah, bei tempi, quelli di FrontPage)

Vista la mole di lavoro da fare per correggere (o forse sarebbe meglio dire “rifare”) tale scempio, chiamo un mio carissimo amico (Cimi) per darmi una mano e ridurre i tempi, ma dopo 5 minuti, CINQUE, davanti ai sorgenti esclama (testuali parole):

“O MIO DIO,
MA L’HA SCRITTO CON I PIEDI?
[…]
…SI FA PRIMA A RISCRIVERLO!”

Ora, io saro’ anche un po’ pignolo sul rigore formale, logico ed estetico nello scrivere i sorgenti, ma una porcheria del genere non l’ho mai vista. Bene, lavoriamo per qualche giorno per dare al gestionale una parvenza di decenza e via via che leggiamo i sorgenti si susseguono espressioni alternate tra stupore, risate, insulti, ecc… Il titolare della ditta AAA ci assiste e ci racconta le discussioni avute con la ditta BBB, furiose dal suo punto di vista, comiche dal nostro.

Un piccolo esempio:

AAA: “quando mostrate a video l’agenda degli appuntamenti, suddividete le righe ogni 30 minuti, cosi’ come avviene per la stampa”
BBB: “no, richiede troppo lavoro”
AAA: 😮

Allora guardiamo il codice per capire dove fosse il problema… Oki, siete pronti a ridere? Non non abbiamo ancora smesso, abbiamo mal di pancia ormai… ahahah

Beh, questi simpatici programmatori selvaggi hanno pensato bene di fare 48 (24×2) IF e SWITCH nella pagina di stampa, con tutti i minuti e le ore del giorno invece di fare una funzione che accettasse in ingresso un maledettissimo parametro chiamato INTERVALLO. Troppo difficile, vero? E cosi’ quando gli e’ stato chiesto di fare la stessa cosa per la pagina da mostrare a video si sono spaventati della enorme, immensa, megagalattica mole di lavoro che li aspettava… che poi, giusto per aggiungere schifo allo schifo, potevano risolvere con un semplice, ahime’ ENNESIMO, copia & incolla.

Morale della favola, su 1786 righe di codice (esclusi i commenti) del file appuntamenti.php, ne sono rimate solo 425 (compresi i commenti)… si, c’erano anche molti altri copia & incolla di IF e SWITCH che abbiamo sostituito con banali funzioni. E ora funziona meglio di prima, ovviamente!

Possiamo forse trascurare le query? Ma certo che no! Avete mai sentito parlare di SQL injection? Non e’ una bestia rara, ne’ una cosa che si mangia… semplicemente il piu’ comune e banale degli attacchi a cui vengono suttoposti costantemente i siti. Beh, anche qui i nostri “amici” BBB ci hanno regalato grasse risate: proprio belli i $_GET[‘variabile’] inseriti brutalmente nelle query sql. COMPLIMENTI!

E come non citare i commenti! Ehm… quali commenti?!? Nelle specifiche, oltre ad essere stato scritto espressamente di usare classi e funzioni (nel caso non fosse scontato… ed evidentemente non lo era, ma non e’ bastato), c’era scritto anche di “commentare abbondantemente il codice per permettere a terzi di apportare modifiche in un secondo momento”. Voi avete visto commenti? Noi no… Quando AAA ha chiesto a BBB il motivo di tale mancanza la risposta di BBB e stata:

“i commenti ci sono, li abbiamo messi dove abbiamo ritenuto che fossero davvero utili”

Allora, degni della pazienza di un monaco benedettino dedito alla trascizione di antiche pergamene, cerchiamo questi commenti e dopo un po’ effetivamente ne troviamo un paio… ne cito uno per chiarire la tipologia dei loro “commenti davvero utili”:

$html_str = strreplace(“`”,”`”,$html); // qui sostituisco le lettere accentate con il corrispondente codice html

Ora… sorvolando sul fatto che esiste una funzione PHP fatta apposta per svolgere questo compito (htmlentities() per chi la conosce), vi pare che siano proprio cosi’ significativi quei commenti quando non scrivete che cazzo fanno altri blocchi di codice lunghi 500 righe?!? Non ho parole!

Ci sarebbero molte altre chicche degne di nota, ma non mi basterebbe ne’ il tempo ne’ lo spazio su disco per scrivere tutte.

Credo la mia opinione riguardo a BBB si possa evincere dalle righe appena scritte, ma visto che i signori BBB hanno piu’ volte detto che i requisiti non erano chiari (certo, dopo 4 riunioni e decine di email con le specifiche, oltre ad un costante collegamente in Skype, potevano esserci ancora dubbi, no?), preferisco essere esplicito nel caso venissero a leggere questo post.

PRIMA DI APRIRE UNA PARTITA IVA COME SVILUPPATORI CERCATE DI CAPIRE IN COSA CONSISTE IL VOSTRO LAVORO… IL BUON VECCHIO “HELLO-WORLD” POTREBBE ESSERE UN OTTIMO PUNTO DI PARTENZA! IL COLMO? NON POTETE PRESENTARE UN SOFTWARE DICENDO CHE NON RISPETTA LE SPECIFICHE PERCHE’ AVETE UN VOSTRO “MODO” DI PROGRAMMARE… MA STATE SCHERZANDO??? STUDIATE, FINCHE’ SIETE IN TEMPO!

Lascia una risposta

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

È possibile utilizzare questi tag ed attributi XHTML:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">