I più comuni bug "stile Y2K" oggi? [chiuso]

40

Non intendo specificamente problemi relativi alla data come 2038, ma più in generale, bug che si adattano allo schema:

  • Una generazione fa, i programmatori tendevano a scrivere codice che ass-u-me-d X, che era ragionevole al momento.
  • Ma le circostanze sono cambiate e ora X è una fonte comune di problemi che devono essere risolti.

Ad esempio:

  • X="La memoria è troppo costosa per giustificare la memorizzazione di tutte e 4 le cifre dell'anno. Non preoccuparti del 2000, è molto lontano." (rotto da Y2K)
  • X="Chi ha bisogno di size_t ? Possiamo semplicemente usare unsigned int ." (rotto da sistemi a 64 bit)
posta dan04 29.03.2011 - 08:22
fonte

24 risposte

87

Solo codice di rete IPV4. Il tempo non è ancora arrivato per la maggior parte delle persone, ma l'idea della sola rete IPV4 diventerà obsoleta.

    
risposta data 29.03.2011 - 08:51
fonte
76

Molti problemi di localizzazione si adattano a questo modello:

  • una generazione fa, i programmatori presumevano che tutti i personaggi possano essere rappresentati con un tipo di dati a 8 bit
  • una generazione fa, i programmatori presumevano che ogni tipo di testo dovesse essere letto da sinistra a destra, dall'alto in basso
  • una generazione fa, i programmatori presumevano che il separatore di campo in un file CSV fosse sempre il carattere virgola , (No, in realtà non lo è. CSV è l'estensione del file, non la specifica del formato di file. CSV è stato inventato, in realtà era solo valori separati da virgola.Non si è evoluto, nessuno ha voluto rinominarlo in "file di dati tabulari con separatore di colonna dipendente dalla locale, campi quotati per valori di campo contenenti un carattere separatore e virgolette doppie per virgolette ".)
risposta data 29.03.2011 - 14:42
fonte
41

Validatori per nomi di domini che formulano assunzioni errate come:

  • TLD è lungo 2-3 caratteri (non vero dal 2001);
  • nomi di dominio e TLD contengono solo caratteri US-ASCII (non veri da gennaio 2010);
risposta data 29.03.2011 - 13:38
fonte
35

Ho fatto qualche ricerca su y2010 circa 14 mesi fa:

printf("200%d", year);

Che ci crediate o no, esiste un codice simile.

    
risposta data 29.03.2011 - 11:12
fonte
26

Un altro non ancora toccato sono le applicazioni (e in particolare i siti Web) assumendo che tutti gli indirizzi siano indirizzi statunitensi. In un'era in cui gli affari internazionali sono sempre più vitali, questo sta causando problemi. Le aziende stanno perdendo terreno in affari probabilmente redditizi perché i clienti non sono in grado di effettuare ordini.

Questo è particolarmente importante con codici postali / codici postali e numeri di telefono. Numerose applicazioni e siti Web convalidano queste informazioni contro il sistema statunitense, presupponendo erroneamente che è l'unico sistema esistente (quando in realtà gran parte del pianeta utilizza sistemi diversi e ci sono paesi senza codici postali). Un problema più piccolo è richiedere numeri civici negli indirizzi, quando ci sono ancora luoghi senza di loro (piccoli villaggi) e talvolta anche nomi di strade.

Ho ascoltato una storia l'anno scorso su qualcuno in un piccolo villaggio in Francia che cercava di ordinare una linea telefonica installata (si stava trasferendo lì) e trovava impossibile come il sistema computerizzato utilizzato dal provider non accettava il suo indirizzo che esisteva solo del nome della casa e del villaggio (senza nome della via, nessun numero civico, nessun codice postale).

    
risposta data 29.03.2011 - 15:06
fonte
21

Codifica a byte singolo (ASCII, ISO-8859-x) e codifica multibyte (Unicode, UTF-8). Questo è attualmente il più grande problema legacy che riesco a pensare. C'è solo così tanto software che presume che la lunghezza dei byte delle stringhe == lunghezza del carattere.

    
risposta data 29.03.2011 - 12:53
fonte
16

IPv4 viene in mente. Stiamo esaurendo gli indirizzi IP (infatti potrebbe già essersi esaurito, gli ultimi batch sono stati distribuiti alle autorità regionali).

L'introduzione dell'IPv6 sostitutivo è lenta dato che i produttori di hardware e software stanno recuperando terreno.

    
risposta data 29.03.2011 - 09:43
fonte
15

Qualcosa che mi ha fatto davvero male qualche mese fa era la data di scadenza dei cookie ...

A quanto pare, le date di scadenza dei cookie possono essere impostate solo così avanti nel futuro (correggimi se ho torto su questo punto - non sono un esperto su questo!). Ad ogni modo, pochi mesi fa, un problema di accesso davvero bizarro è venuto fuori con un'app che il nostro team stava mantenendo. Ma questo era un progetto parallelo, e questa componente di login era davvero solida, non doveva essere toccata in 10 anni, quindi non c'era nessuno in giro che sapesse come funzionava (mai dovuto toccarlo per quanto fosse solido) .

In ogni caso - dopo mezza giornata trascorsa a scavare e perdere la testa ho notato che c'era una data hard-coded del 31 dicembre 2010 in una routine di validazione. Quindi, in pratica, chiunque abbia tentato di utilizzare il sistema con un cookie più recente non ha potuto effettuare l'accesso. Si è rivelato che questo era codificato nel 2001, perché non potevano impostare una data di scadenza dei cookie oltre i 10 anni futuri - e il programmatore all'epoca era troppo pigro per renderlo un "appuntamento fluttuante".

    
risposta data 29.03.2011 - 13:12
fonte
13

Eseguendo qualsiasi tipo di aritmetica data (addizione / sottrazione) direttamente su un numero intero UNIX Epoch, ad esempio:

gmt_epoch
1301397219
March 29, 2011 11:13:39 GMT

e vuoi calcolare l'ora esatta per la costa orientale dell'America, EST (-5: 00 GMT), quindi fai qualcosa del tipo:

gmt_epoch-(5*60*60)
1301379219
March 29, 2011 06:13:39 EST

che è SBAGLIATO, perché il 29 marzo 2011 sembra essere EDT (-4: 00 GMT).

Questo non è tanto un bug calibro Y2K, poiché non devi aspettare 10 anni per vederne l'effetto, ma, ad esempio, assumi un programmatore di contratto che lavora solo al progetto per circa un mese, allora, BAM! la cosa si rompe dopo la fine dell'ora legale.

    
risposta data 29.03.2011 - 13:23
fonte
12

Sicurezza.

Memorizzazione di password unhassh, lasciando "backdoor" nelle applicazioni, utilizzando lingue con buffer overflow. Vedi l' OWASP top 10 per l'attuale lista di ipotesi stupide.

    
risposta data 29.03.2011 - 11:55
fonte
11

Supporto e utilizzo del fuso orario. Quanti sistemi hai visto che hanno solo date date o dateCreated senza nessun riconoscimento o notazione su quale fuso orario è considerato la base? Speriamo che sia GMT / UTC ma contando su quello è rischioso al meglio.

    
risposta data 29.03.2011 - 20:54
fonte
10

Gli sviluppatori - o DBA - che presumono che il nome di tutti cada nel familiare (agli occhi occidentali) schema di FirstName e LastName .

  • In molti paesi asiatici, il nome della famiglia viene tradizionalmente prima di tutto a causa di un valore culturale che pone i bisogni della famiglia sui bisogni dell'individuo. Scrivere "Bevan Arps" può essere considerato irrispettoso, anche maleducato.

  • In altre parti del mondo, le famiglie non hanno nomi - le persone vengono indicate con il loro (solo) nome. Se ci può essere confusione, anche i loro genitori o commerci sono referenziati.
    [ A parte : questa è anche la fonte di molti nomi di famiglie occidentali come McGreggor (figlio di Greggor), Mathieson (figlio di Mathie), O'Connor (figlio di Connor), Carpenter, Smith, Butcher e Taylor.]

  • Il nome non tutti ha una grafia lunga - "N" e "O" sono le grafie inglesi dei nomi autentici, ma molti sistemi rifiutano i nomi come troppo brevi.

  • Il cognome di tutti non è abbastanza breve per rientrare in un campo di 50 caratteri.

  • Il nome di tutti non viene mai capitalizzato allo stesso modo. Alcune persone scrivono il loro cognome "van den ..." altri "Van Den ..." e aggiustandolo è sbagliato .

risposta data 30.03.2011 - 10:16
fonte
10

Nel Regno Unito, quando l'aliquota IVA è passata dal 17,5% al 15% nel dicembre 2008, è stata la prima modifica all'IVA dal 1991 e molti programmi avevano il valore codificato in essi.

Il cambiamento significava anche che il sistema doveva separare le aliquote IVA in base alla data, perché non sarebbe stato così semplice come cambiare un valore costante da qualche parte.

Speriamo che fossero tutti pronti quando è cambiato (e poi aumentato)!

    
risposta data 30.03.2011 - 10:24
fonte
8

Un presupposto è che la nostra azienda non dovrà crescere in mercati non statunitensi (o non di lingua inglese). L'internazionalizzazione quando hai fatto tutto bene all'inizio è un grande progetto. Quando la maggior parte delle stringhe sono codificate nel codice, è un progetto molto più grande.

Ci sono anche supposizioni che le persone fanno riguardo alle lingue.

Puoi convertire liberamente tra maiuscolo e minuscolo (spezzato in tedesco, con il carattere eszet simile alla beta che converte in due S maiuscole).

Hai forme singolari e plurali (alcune lingue hanno anche una doppia forma)

Una pressione di tasto non modificabile produce un personaggio (un mio amico è stato colpito da un problema che si verifica quando si preme ESC dopo aver digitato una consonante per formare la prima parte di una sillaba giapponese, poiché katakana e hiragana sono alfabeti sillabici).

    
risposta data 29.03.2011 - 16:24
fonte
8

Non usare una libreria XML per scrivere XML.

Il livello di frustrazione che si ottiene quando si ha a che fare con file XML malformati a volte può essere eccessivo. Molto probabilmente print "<data>$value</data>"; fallirà.

Ci sono così tante librerie XML là fuori che sei destinato a trovarne una facile da usare. Seriamente - smetti di reinventare ciò che altri hanno già speso molte risorse. Potresti pensare di conoscere XML, ma più cose possono andare storte di quanto tu possa aspettarti.

    
risposta data 30.03.2011 - 02:54
fonte
7

L'assunto del programmatore secondo cui la posizione geografica dell'utente deve automaticamente definire la lingua preferita dell'utente. La tecnologia IP-to-location non dovrebbe essere utilizzata per le decisioni linguistiche preferite ... di sempre. Anche Google e Facebook sono colpevoli di questo.

    
risposta data 29.03.2011 - 23:19
fonte
5

Utilizzare un numero intero per memorizzare la valuta nella sua forma minima. Di 'cent's. Domani potresti usare una nuova valuta, è successo in molti paesi europei.

Memorizzazione di tariffe Vat statiche per categorie ecc. nei webstores. In molti paesi i tassi di iva sono considerati statici, ma l'idea non è di averli statici e di tanto in tanto vengono cambiati.

Memorizzare numeri civici in una notazione specifica e usarlo come chiave (o qualsiasi altra cosa "chiave naturale"); domani potresti avere milioni di rifugiati dalla Cina, il loro numero civico sarà come il tuo? (Oggi questo è già il caso in Svezia)

Supponendo che 0 sia NULL nei database. Il prossimo standard SQL potrebbe iniziare a contare da 0, chi lo sa? : -)

    
risposta data 30.03.2011 - 02:20
fonte
4

Sono contento di non essere nei paraggi dell'apocalisse Y10K.

    
risposta data 29.03.2011 - 16:42
fonte
4

Supponendo che una chiave primaria derivata dai dati dell'applicazione non debba mai essere modificata. L'esempio più comune è id utente: di solito è impossibile modificarlo, anche se l'utente cambia nome.

Altri esempi che ho trovato - supponendo che i codici paese non cambino mai, codici valuta, nomi di città.

    
risposta data 30.03.2011 - 00:15
fonte
4

Elaborazione seriale vs parallela. I processori multi core sono o saranno presto considerati universalmente onnipresenti, con l'eccezione di hardware specifico per prodotto o attività specifica.

    
risposta data 30.03.2011 - 04:59
fonte
2

Bene, questo tipo si adatta a questa domanda, immagino.

In pratica reti wireless non protette. Apparentemente le organizzazioni standard hanno in qualche modo pensato qualcosa del tipo "Oh, solo i bravi ragazzi useranno le reti WiFi aperte!", Così hanno deciso di non crittografarlo in alcun modo. Voglio dire, non è questo il tipo di cosa per cui è stato realizzato lo scambio della chiave di crittografia Diffie-Hellman?

Questo è un grosso problema oggi, con cose come Firesheep che vengono usate abbastanza ampiamente.

    
risposta data 30.03.2011 - 03:28
fonte
1

Solo perché Y2K è finito non significa che i programmatori abbiano finito di scrivere data e bug di tempo. C'erano intere famiglie di insetti che hanno colpito vicino e intorno all'anno 2000. Gli errori di data e ora che continuano a sorgere continuano a intrattenermi nel loro creatività.

Anche se è vecchio e sta diventando obsoleto, il seguito ha goduto di popolarità la corsa fino all'anno 2000 e ha ancora alcune informazioni attuali.

link

Mentre l'hardware legacy alla fine muore, i formati dei dati precedenti sono sempre disponibili.

    
risposta data 29.03.2011 - 20:04
fonte
-1

Contatore a 32 bit in vari MIB hardware di rete. Possono avvolgere abbastanza velocemente e tuttavia a volte vengono utilizzati per la fatturazione ...

    
risposta data 30.03.2011 - 01:15
fonte
-4

Non proprio uguale, ma il numero 10100401822940525 non esiste in Javascript o ActionScript 3.

Specifically, we found that the number 10100401822940525 appears to simply not exist in these programming environment. You can test this for yourself, simply trace or log the following statements: 10100401822940524 10100401822940525 10100401822940524+1 Number(“10100401822940525″) (10100401822940525).toString()

All of the above statements will output “10100401822940524″, when obviously all but the first one should return “10100401822940525″.

Theres no obvious significance to that value. The binary/hex value isn’t flipping any high level bit, and there are no results for it on google or Wolfram Alpha. Additional testing showed the same result with other numbers in this range.

Il mistero risolto qui:

risposta data 29.03.2011 - 09:04
fonte

Leggi altre domande sui tag