Qual è un buon esempio di idea o tecnica di sviluppo del software che è stata un fallimento?

9

In particolare, quali sono alcuni esempi di dove le idee delle masse erano semplicemente sbagliate. Perché le persone si sono attaccate alle idee in primo luogo? E perché le idee sono state respinte? O forse le idee sono ancora vive e vere e, in tal caso, perché?

Ad esempio, potrei descrivere CORBA (e altre tecnologie simili) come qualcosa che ha tentato di risolvere il problema della comunicazione tra i componenti di software. Molti hanno ritenuto necessario definire i contratti tra i vari componenti. Alla fine, HTTP + JSON ha risolto il problema delle masse e altri meccanismi RPC come Thrift e Proto-bufs sono comparsi.

    
posta Evan 09.08.2011 - 09:22
fonte

4 risposte

11

Fondamentalmente, proprio come nel mondo al di fuori dei computer, le idee e le tecnologie competono per l'attenzione, la leva, ecc. Alcuni vincono, altri perdono; e alcuni potrebbero sembrare The Winner per qualche tempo, poi svanire nell'oscurità con l'avvento di The Next Big Thing. Potrebbe o meno avere qualcosa a che fare con il quale era effettivamente il meglio. Testimone VHS vs Betamax, o la guerra più recente tra i vari formati di DVD.

CORBA era enorme, scomodo e difficile da usare, ma era il migliore che alcune persone potevano inventare al momento (si noti che è stato progettato prima che il World Wide Web - e HTTP, Java, XML, ... - diventasse ampiamente conosciuto). Ed è stato anche un classico esempio di design by committee , in cui racchiudono ogni idea per soddisfare tutti, alla fine rendendola inutilmente gonfia (almeno vista dagli occhi di oggi). Per non parlare del suo prezzo, che con l'avvento di FOSS divenne presto proibitivo.

Ultimately, HTTP + JSON solved the problem for the masses

Almeno per qualcuno che non ha visto un paio di simili "soluzioni finali" aumentare e alla fine cadere ... È bene tenere a mente che c'era un sentimento simile a CORBA nel suo tempo; -)

Ritengo che sia opportuno citare da The Rise and Fall of CORBA :

CORBA’s history is one that the computing industry has seen many times, and it seems likely that current middleware efforts, specifically Web services, will reenact a similar history. [...]

Overall, the OMG’s technology adoption process must be seen as the core reason for CORBA’s decline. The process encourages design by committee and political maneuvering to the point where it is difficult to achieve technical mediocrity, let alone technical excellence. Moreover, the addition of disjointed features leads to a gradual erosion of the architectural vision. [...]

A democratic process such as the OMG’s is uniquely ill-suited for creating good software. Despite the known procedural problems, however, the industry prefers to rely on large consortia to produce technology. Web services, the current silver bullet of middleware, uses a process much like the OMG’s and, by many accounts, also suffers from infighting, fragmentation, lack of architectural coherence, design by committee, and feature bloat. It seems inevitable that Web services will enact a history quite similar to CORBA’s.

Ora da una prospettiva diversa: leggendo il tuo termine "idee delle masse", ho pensato a cose molto diverse dal CORBA o da altri standard; questi sono in genere l'idea di una persona o un piccolo gruppo. Ho pensato a pratiche / punti di vista noti come "codifica dei cowboy", "codice e prega", "funziona sulla mia macchina" ecc. Queste sono IMHO "idee delle masse" reali, poiché questo è il modo in cui quasi tutti i principianti lo sviluppatore inizia istintivamente a scrivere codice. E hanno torto, poiché non scalano né nello spazio né nel tempo - non è possibile creare programmi ampi, manutenibili ed estensibili in questo modo. Tuttavia ritengo che sfortunatamente sia ancora la norma piuttosto che l'eccezione per le persone che cercano di lavorare in questo modo nei negozi professionali di tutto il mondo.

L'altro estremo di questo sono le idee di molti manager e teorici del "giusto approccio" allo sviluppo di SW, che si manifestano in Metodologie big-M come CMM, RUP, Waterfall, ecc. L'idea alla base di tutto ciò è che tutti è necessario il processo giusto e inizierà a produrre automaticamente software di qualità in modo deterministico, indipendentemente da chi siano effettivamente gli sviluppatori. Nota che lo stesso gioco può essere giocato anche con i metodi Agile - è solo un cambio di etichette. Ogni manager che crede che selezionare (e mantenere) i membri giusti per il proprio team di sviluppo sia meno importante del processo di sviluppo, è destinato a fallire, a prescindere da quale sia il processo. Tuttavia, questa convinzione nel processo sembra essere ancora prevalente - forse è ancora insegnata nelle scuole di management?

    
risposta data 09.08.2011 - 09:40
fonte
13

Un esempio frequente di persone sbagliate è il modello a cascata. Questo è un diagramma del modello di cascata stereotipato, che appare anche nel articolo di Winston Royce "Gestione del Sviluppo di grandi sistemi software ".

Questa immagine è seguita da questo testo:

I believe in this concept, but the implementation described above is risky and invites failure...The testing phase which occurs at the end of the development cycle is the first event for which timing, storage, input/output, transfers, etc., are experiences as distinguished from analyzed. These phenomena are not precisely analyzable. They are not the solutions to the standard partial differential equations of mathematical physics for instance. Yet if these phenomena fail to satisfy the various external constraints, then invariable a major redesign is required. A simple octal patch or redo of some isolated code will not fix these kinds of difficulties. The required design changes are likely to be so disruptive that the software requirements upon which the design is based and which provides the rationale for everything are violated. Either the requirements must be modified, or a substantial change in the design is required. In effect the development process has returned to the origin and one can expect up to a 100-percent overrun in schedule and/or costs.

Più avanti nel documento, Royce presenta modelli di processo alternativi che coinvolgono l'iterazione tra la fase corrente e la fase precedente e un ciclo tra la progettazione dell'analisi dei requisiti e un altro ciclo tra la verifica del codice di progettazione. Identifica inoltre un numero di documenti e durante le fasi in cui devono essere completati e sostiene il coinvolgimento del cliente e le cascate multiple in ciascuna fase per includere analisi, test e utilizzo di tutti gli artefatti coinvolti. In ogni circostanza, ciò che Royce discute potrebbe essere considerato un approccio precoce ai metodi agili - ancora molto guidato dal piano, però, ma una base per il movimento agile.

Perché le persone si sono attaccate alla primissima cascata, non lo so. Immagino che gli piaccia assumersi rischi e invitare il fallimento.

    
risposta data 09.08.2011 - 12:14
fonte
4

Generazione automatica di codice da un livello di astrazione più elevato o programmazione automatica .

L'articolo di Wikipedia è un po 'carente di informazioni storiche, ma questo è stato un sogno di manager da quando i programmatori sono diventati più costosi dei computer.

Dopo lo sviluppo di linguaggi di livello superiore come Fortran e Cobol, è venuto lo sviluppo delle lingue per domini speciali come la scrittura di report. Easytrieve e SAS erano un paio di esempi.

Durante gli strumenti CASE degli anni '80 erano di moda. CASE è sinonimo di ingegneria software assistita da computer. Si pensava che l'applicazione rigorosa dei principi di ingegneria avrebbe reso lo sviluppo del software più veloce. Il motivo principale per cui questi strumenti non sono stati in grado, a parte le spese, era l'alto livello di standardizzazione dei dati richiesto affinché gli strumenti funzionassero efficacemente.

Internet è entrato in risalto negli anni '90. I tipi di programmazione che Internet ha facilitato sono esplosi. I programmatori dovevano gestire illustrazioni, mappe, fotografie e altre immagini, oltre a semplici animazioni, ad una velocità mai vista prima, con pochi metodi ben noti. Il numero di tecnologie per produrre questi oggetti si è moltiplicato. Sogni di programmazione automatica sbiaditi.

L'outsourcing della programmazione in posizioni più economiche è uno dei pochi metodi rimanenti per ridurre i costi del programmatore. I problemi con l'outsourcing includono problemi di comunicazione e problemi di specifica.

    
risposta data 09.08.2011 - 14:40
fonte
2

Metodi formali

C'era una volta, è stato proposto che il software potesse essere dimostrato corretto. (L'idea è che il test non può dimostrare che non ci siano errori, ma le prove sarebbero in grado di farlo.) Sfortunatamente, escogitare una prova per un programma ha alcuni svantaggi principali:

  • È più difficile e richiede molto tempo rispetto alla scrittura del programma.
  • Deve coprire l'intero programma, il che significa che hai bisogno di prove per qualsiasi libreria, sistema operativo, ecc ...
  • Non dimostra l'assenza di bug, dal momento che questi bug potrebbero essere una causa accidentale.

Questo concetto era molto popolare negli anni '70.

Linkage: link link link

    
risposta data 09.08.2011 - 15:02
fonte

Leggi altre domande sui tag