Suljettu . Tämä kysymys on kohdistettava tarkemmin . Se ei tällä hetkellä hyväksy vastauksia.

Kommentit

  • Linkitetty kysymys on poistettu.
  • Mielestäni lähestymistapa on todella yksinkertainen. Jos kehitit sen yksin, tiedät siitä kaiken. Voit jopa korjata virheen ilman virheenkorjausta. Tässä mielessä paras tapa on käyttää aikakoodausta jotain muuta, kunnes joku, joka tietää siitä paljon, voi vastata kysymykseesi sen korjaamisesta. tai anna sen levätä, koodaa muita asioita, kunnes ajatus sen korjaamiseksi tulee mieleesi, joten et tapana hukata aikaa eikä energiaa. Oletan, että kysymyksesi koskee yritystiimin hallintaa.
  • Luulen Raid. Hylly, vikoja tappava spray. Onko tämä filosofinen kysymys? Kirjat valmistetaan pelkästään ylivoimasta …

Vastaus

Ajattelutapa ja virheenkorjausasenne ovat ehkä tärkein osa, koska se määrittää kuinka tehokkaasti korjaat virheen ja mitä opit siitä – jos mitään.

Ohjelmistokehityksen klassikot, kuten Pragmatic Programmer ja Code Complete , puolustavat periaatteessa samaa lähestymistapaa: jokainen virhe on mahdollisuus oppia, melkein aina itsestäsi (koska vain aloittelijat syyttävät ensin kääntäjää / tietokonetta).

Joten käsittele sitä mysteerinä, joka on mielenkiintoinen murtaa. Ja salaperäisyyden murtaminen olisi tehtävä järjestelmällisesti ilmaisemalla oletuksemme (itsellemme tai muille) ja testaamalla sitten oletuksemme yksitellen tarvittaessa – käyttämällä kaikkia käytettävissä olevia työkaluja, erityisesti virheenkorjaajia ja automaattisia testikehyksiä. Sitten, kun mysteeri on ratkaistu, voit tehdä vieläkin paremmin tarkastelemalla kaikkia koodejasi mahdollisesti tekemiesi vastaavien virheiden varalta; ja kirjoita automaattinen testi varmistaaksesi, että virhe ei toistu tietämättään.

Viimeinen huomautus – mieluummin kutsun virheitä ”virheiksi” eikä ”virheiksi” – Dijkstra kehotti kollegoitaan käyttämään jälkimmäistä termiä, koska se on epärehellistä ja tukee ajatusta siitä, että vahingolliset ja epävakaat bug-keijut istuttivat vikoja ohjelmiin, kun emme katsoneet, sen sijaan, että olisimme siellä oman (huolimattoman) ajattelumme takia: http://www.cs.utexas.edu/users/EWD/transcriptions/EWD10xx/EWD1036.html

Voisimme esimerkiksi aloittaa kielemme siivoamisesta ei enää kutsua virhettä virheenä, vaan kutsumalla sitä virheeksi. Se on paljon rehellisempi, koska se laittaa syyn suoraan siihen, mihin se kuuluu, nimittäin. ohjelmoijan kanssa, joka teki virheen. Animistinen metafora virheestä, joka hiipeli vahingollisesti, kun ohjelmoija ei katsonut, on älyllisesti epärehellistä, koska se peittää, että virhe on ohjelmoijan oma luomus. Tämän yksinkertaisen sanastomuutoksen mukava asia on, että sillä on niin syvällinen vaikutus : Vaikka aiemmin vain yhden virheen sisältävä ohjelma oli ”melkein oikea”, sen jälkeen virheohjelmalla varustettu ohjelma on vain ”väärä” (virheellisesti).

kommentit

  • Pidän itse asiassa termistä " error " pikemminkin kuin " bug ", ei siksi, että siitä syytetään " ohjelmoijaa kuka teki virheen ", mutta koska se tekee selväksi, että se ei ehkä ole ollut ohjelmoijan vika. Minulle " bug " merkitsee virhettä koodissa; kun taas " erro r " merkitsee virhettä jossain . Ehkä koodissa, ehkä ympäristön asetuksissa, ehkä vaatimuksissa. Ajaa minua, kun pomolleni on " -virhelista ", jossa puolet ongelmista on vaatimusten muutoksia. Kutsukaa sitä tehtäväluetteloksi, ferchrissakes!
  • +1 " -kentälle jokainen virhe on mahdollisuus oppia, melkein aina itsestäsi (koska vain aloittelijat syyttävät kääntäjää / tietokone ensin) "
  • Olet tietoinen termin " virheestä ", eikö? Tarkoitan, sellaisena kuin sitä käytetään ohjelmistokehityksessä. Tietysti meillä ei ole ' tätä ongelmaa tänään, mutta vika todellakin lensi tietokoneen laitteistoon, jota ohjelmoija ei huomannut, ja aiheutti ongelman.Jotta joku ajattelisi korjata minua, tiedän, että Edison käytti tätä termiä kauan ennen koi-tapahtumaa, minkä vuoksi käytin sanaa ' history ', ei ' alkuperä '. Katso computerworld.com/article/2515435/app-development/… ja fi.wikipedia.org/wiki/Software_bug#Etymology
  • @threed Tietysti. Hyönteiset eivät ole kuitenkaan pitkään aikaan aiheuttaneet suurinta osaa ohjelmistovirheistä.

Vastaa

  1. Kirjoita testit. Testaus on paitsi erinomaista virheiden ehkäisemisessä (kokemukseni mukaan TDD oikein tehty eliminoi melkein kaikki triviaalit, tyhmät virheet), mutta myös auttaa paljon virheenkorjauksessa. Testaus pakottaa suunnittelun olevan melko modulaarinen, mikä helpottaa ongelman eristämistä ja toistamista. Lisäksi hallitset ympäristöä, joten yllätyksiä tulee olemaan paljon vähemmän. Lisäksi, kun saat epäonnistuneen testitapauksen, voit olla kohtuullisen varma, että olet naulannut sinut häiritsevän käyttäytymisen todellisen syyn.

  2. Opi käyttämään virheenkorjainta. print -lausekkeet voivat toimia kohtuullisen hyvin jollain tasolla, mutta virheenkorjaus on suurimmaksi osaksi erittäin hyödyllistä (ja kerran osaat käyttää sitä, se on paljon mukavampaa kuin print -lausunnot).

  3. Keskustele jonkun kanssa ongelmastasi, vaikka se olisi vain kumiankka . Jos pakotat itsesi ilmaisemaan ongelmaa, jolla työskentelet, tehdään todella ihmeitä.

  4. Anna itsellesi määräaika. Jos esimerkiksi 45 minuutin kuluttua sinusta tuntuu, että et ole menossa mihinkään, vaihda vain muihin tehtäviin jonkin aikaa. Kun palaat virheen luo, toivottavasti pystyt näkemään muita mahdollisia ratkaisuja, joita et olisi aiemmin harkinnut.

Kommentit

  • +1 ryhmälle " Jos pakotat itsesi ilmaisemaan käsittelemäsi ongelman sanoin, tapahtuu todella ihmeitä. "
  • Ja jos haluat lisätä kohtaan (1), melkein jokainen koodissa näkyvä vika tarkoittaa, että siellä ' on virhe – tai ainakin puute – testipaketissa. Korjaa molemmat samanaikaisesti, eikä vain todista, että olet ' korjannut käsillä olevan ongelman, olet ' turvassa sen estämiseltä palautettu.

vastaus

Pidän useimmista muista vastauksista, mutta tässä on joitain vinkkejä mitä tehdä ENNEN mitä teet mitään. Säästää aikaa Beaucoupilla.

  1. Selvitä onko virhettä. Virhe on AINA ero järjestelmän käyttäytymisen ja vaatimusten välillä; testaajan pitäisi pystyä ilmaisemaan odotettu ja todellinen käyttäytyminen. Jos hän ei pysty tarjoamaan tukea odotetulle käytökselle, sitä ei vaadita eikä virhettä ole – vain jonkun mielipide. Lähetä se takaisin.

  2. Harkitse mahdollisuutta että odotettu käyttäytyminen on väärin. Tämä voi johtua vaatimuksen väärästä tulkinnasta. Se voi johtua myös itse vaatimuksen puutteesta (delta yksityiskohtaisen vaatimuksen ja yritysvaatimuksen välillä). Voit myös lähettää nämä takaisin.

  3. Eristä ongelma. Vain kokemus opettaa sinulle nopeimman tavan tehdä tämä – jotkut ihmiset voivat melkein tehdä sen suoliston kanssa. Yksi perusmenetelmä on vaihtaa yhtä asiaa pitämällä kaikki muut asiat vakiona (esiintyykö ongelma muissa ympäristöissä? muiden selainten kanssa? eri testialueella? eri päivinä?) Toinen lähestymistapa on tarkastella pinon kaatopaikkoja tai virheilmoituksia – joskus voit kertoa vain tapa, jolla se alustetaan, mikä järjestelmän osa heitti alkuperäisen virheen (esim. jos se on saksaksi, voit se kolmas osapuoli, jonka kanssa työskentelet Berliinissä).

  4. Jos olet kaventanut sen kahteen järjestelmään, jotka tekevät yhteistyötä, tarkista näiden kahden järjestelmän väliset viestit liikennevalvontalaitteella tai lokitiedostoilla ja määritä mikä järjestelmä käyttäytyy spesifikaation mukaan ja mikä ei. Jos skenaariossa on enemmän kuin kaksi järjestelmää, voit suorittaa paritarkastukset ja työskennellä sovelluspinon ”alas”.

  5. Syy ongelman eristämiseen on niin kriittinen Ongelma ei välttämättä johdu koodivirheestä, jota hallitset (esim. kolmansien osapuolten järjestelmät tai ympäristö), ja haluat saada osapuolen ottamaan haltuunsa mahdollisimman nopeasti. Tämä on sekä säästää työtäsi että saada ne heti paikalleen, jotta resoluutio voidaan saavuttaa mahdollisimman lyhyessä ajassa. Et halua työskennellä kymmenen päivän ajan vain löytääksesi ongelman jonkun toisen verkkopalvelussa.

  6. Jos olet todennut, että vika on todella olemassa ja se todella on hallitsemassasi koodissa, voit eristää ongelman etsimällä viimeistä ”tunnettua hyvää” koontiversiota ja tarkistamme lähteen hallintalokien muutokset, jotka ovat saattaneet aiheuttaa ongelman. Tämä voi säästää paljon aikaa.

  7. Jos et pysty selvittämään sitä lähteen hallinnasta, nyt on aika liittää virheenkorjain ja käydä läpi koodi sen selvittämiseksi. Todennäköisesti sinulla on jo nyt melko hyvä käsitys ongelmasta.

Kun tiedät virheen ja pystyt keksimään korjauksen, tässä on hyvä korjausmenettely:

  1. Kirjoita yksikötesti, joka toistaa ongelman ja epäonnistuu.

  2. Tee yksikkötestiä muuttamatta se läpäisee (muokkaamalla sovelluskoodia).

  3. Pidä yksikötesti testipaketissasi regressioiden estämiseksi / havaitsemiseksi.

vastaus

Mielestäni virheen toistaminen on myös tärkeää. Kaikki virheen toistavat tapaukset voidaan luetella, ja voit sitten varmistaa, että virhekorjauksesi kattaa kaikki kyseiset tapaukset.

Vastaa

Tästä aiheesta on lukemani erinomainen kirja nimeltä Miksi ohjelmat epäonnistuvat , jossa hahmotellaan erilaisia vikojen löytämisstrategioita aina tieteellisen menetelmän soveltamisesta virhe, delta-virheenkorjaukseen. Tämän kirjan toinen mielenkiintoinen osa on, että siinä poistetaan termi ”vika”. Zellerin lähestymistapa on:

(1) Ohjelmoija luo vian koodiin. (2) Vika aiheuttaa infektion (3) Infektio leviää (4) Infektio aiheuttaa epäonnistumisen.

Jos haluat parantaa virheenkorjaustaitoja, suosittelen tätä kirjaa.

Omassa henkilökohtaisessa kokemuksessani olen löytänyt sovelluksestamme paljon vikoja, mutta hallinta yksinkertaisesti painaa meitä eteenpäin saada uusia ominaisuuksia ulos. Olen ”usein kuullut”. Löysimme tämän virheen itse ja asiakas ei ole vielä huomannut sitä, joten jätä se, kunnes he huomaavat ”. Mielestäni reaktiivisuus ja ennakoivuus vikojen korjaamisessa on erittäin huono idea, koska kun on aika todella korjata, sinulla on muita ratkaistavia asioita ja lisää ominaisuuksien hallintaa haluaa ASAP-ovelta, joten saat kiinni noidankehässä, joka voi aiheuttaa paljon stressiä ja palamista ja viime kädessä vikoja.

Viestintä on myös toinen tekijä vikoja löydettäessä. Sähköpostin lähettäminen tai dokumentoiminen vikaseuranta on kaikki kunnossa, mutta omien kokemusteni mukaan muut kehittäjät löytävät samanlaisen virheen ja käyttävät pikemminkin koodin korjaamiseen käyttämääsi ratkaisua (koska he ovat unohtaneet kaiken), mutta lisäävät omat versiot, joten koodissasi on viisi erilaista ratkaisua ja se näyttää sen seurauksena paisuneemmalta ja hämmentävämmältä. Joten kun korjaat virheen, varmista, että muutamat ihmiset tarkistavat korjauksen ja antavat sinulle palautetta, jos he ovat korjaaneet jotain vastaavaa ja löysi hyvän strategian sen hoitamiseksi.

limist mainitsi kirjan,

Pragmaattinen ohjelmoija , jolla on mielenkiintoista materiaalia virheiden korjaamisesta. Käyttämällä edellisessä kappaleessa antamaani esimerkkiä tarkastelin tätä: Ohjelmiston entropia , jossa käytetään rikki lesken analogiaa. Jos kaksi monta rikki Ikkunat tulevat näkyviin, tiimisi saattaa tulla apaattiseksi korjaamaan sen koskaan, ellet ota ennakoivaa kantaa.

Kommentit

  • I ' ole kuullut " Löysimme tämän virheen itse ja asiakas ei ole vielä ' huomannut sitä, joten jätä se he tekevät " liian monta kertaa. Ja käydessään sivustokäynneillä asiakas on huomannut usein, mutta ei ole ' t ilmoitti siitä. Joskus koska heidän mielestään ' ei ole mitään järkeä, koska se voitti ' ei korjata, joskus koska he katsovat jo kilpailijan ' korvaamista, ja joskus (oikein tai väärin) " hyvin, se on joka tapauksessa kaikki höyryvä kasa paskaa ".
  • @JuliaHayward – Näin on usein, mutta tilanteessasi, asiakkaasi saattavat olla tyytyväisiä toiminnallisuuteen eivätkä ole liian huolissaan siitä, mitä ' tapahtuu hupun alla. Ongelma alkaa nousta, kun asiakas palaa takaisin pyytääkseen lisäominaisuuksia ja sinun on lisättävä lisäparannuksia, kuten tekemällä sovelluksestasi monikielinen, mobiililaitteiden kanssa yhteensopiva blah blah, alat tarkastella mitä sinulla on ja nähdä kaikki seinän halkeamat.
  • Näyttää vain, että kaikki maailman ohjelmistosuunnittelua, testausta ja hyvää viestintää käsittelevät kirjat sekä monet tuotteistasi, joiden parissa työskentelet, ovat leviävää sotkua.Huolimatta siitä, että tiedät mikä ' on oikein, stressi ja epärealistiset määräajat (jo sekaisin koodisi edessä) ovat syitä miksi koodi on siinä muodossa kuin se on. Minulla ei ' ole vastauksia itse, minulla ' olen melko erilainen toimistossa kuin syyttävät kasvot ***** * kun potkun ja huudan pitämään koodin terveenä ja kehitysprosessin sujuvana, mutta joskus tiimi ei ' sido hyvin yhteen.

Vastaa

Virhe, virhe, ongelma, vika – millä tahansa haluat kutsua sitä, sillä ei ole paljon eroa. Pidän ongelmasta sen jälkeen ”mitä olen tottunut.

  1. Selvitä ongelman käsitys: käännä asiakkaalta” Bob ”ei vieläkään ole järjestelmässä” muotoon ”Kun yritän Luo käyttäjätietue Bobille, se epäonnistuu kaksoiskoodiavaimella, vaikka Bob ei ole jo siellä
  2. Selvitä, onko se todella ongelma vai vain väärinkäsitys (todellakin, Bob ei ole ” Siinä ei ole ketään, jota kutsutaan bobiksi, ja insertin pitäisi toimia).
  3. Yritä saada mahdollisimman luotettavat vaiheet ongelman toistamiseksi – jotain ”Annettu järjestelmä, jossa käyttäjätietue” Bruce ”, kun käyttäjätietue” Bob ”lisätään, tapahtuu poikkeus”
  4. Tämä on sinun testi – jos mahdollista, laita se automaattiseen testivaljaat, joita voit käyttää uudestaan ja uudestaan, tämä on korvaamatonta virheenkorjauksessa. Voit myös tehdä siitä osan testipakettiasi varmistaaksesi, että kyseinen ongelma ei tule uudelleen esiin myöhemmin.
  5. Ota virheenkorjaaja ulos ja aloita taittopisteiden asettamista – selvitä koodirata, kun suoritat testin, ja tunnista mikä on vialla. Kun teet niin, voit myös tarkentaa testiä tekemällä siitä mahdollisimman kapea – mieluiten yksikkötesti.
  6. Korjaa – tarkista testisi läpäisy.
  7. Vahvista alkuperäinen ongelma kuten asiakkaan kuvaama on myös kiinteä (erittäin tärkeää – olet ehkä vain korjannut ongelman osajoukon). Varmista, että et ottanut regressiota muille ohjelman osa-alueille.

Jos tunnet koodin hyvin tai jos ongelma tai korjaus on ilmeinen, voit ohittaa osan niistä vaiheet.

Kuinka meidän tulisi lähestyä sitä, jotta voimme hyödyntää arvokkaata aikamme tehokkaammin ja antaa meille mahdollisuuden käyttää vähemmän aikaa sen etsimiseen ja enemmän aikaa koodaukseen ?

Olen sitä mieltä, että se tarkoittaa, että uuden koodin kirjoittaminen on arvokasta kuin korkealaatuisen työohjelman käyttäminen. Ei ole mitään vikaa olla mahdollisimman tehokas ongelmien korjaamisessa, mutta ohjelma ei välttämättä paranna vain lisäämällä siihen lisää koodia.

Kommentit

  • tämä on paras vastaus IMO

Vastaa

Näin teen:

  1. käytä samaa menetelmää joka kerta ongelman löytämiseksi. Tämä parantaa reagointiaikaa virheisiin.
  2. Paras tapa on luultavasti lukea koodi. Tämä johtuu siitä, että kaikki tiedot ovat saatavilla koodissa. Tarvitset vain tehokkaita tapoja löytää oikea sijainti ja kyky ymmärtää kaikki yksityiskohdat.
  3. virheenkorjaus on erittäin hidasta ja tarvitaan vain, jos ohjelmoijat eivät vielä ymmärrä, miten tietokone suorittaa asm-ohjeita / eivät ymmärrä puhelupinoja ja perusasiat
  4. Yritä kehittää todistustekniikoita, kuten toimintoprototyyppien käyttö ohjelman käyttäytymisen perustelemiseksi. Tämä auttaa löytämään oikean sijainnin nopeammin

vastaus

Kun havaitsemme virheen koodissamme, mitä voimme tehdä sen kitkemiseksi? Kuinka meidän tulisi lähestyä sitä, jotta voimme käyttää arvokkainta aikamme tehokkaimmin ja jotta voimme käyttää vähemmän aikaa sen löytämiseen ja enemmän aikaa koodaamiseen? Mitä meidän tulisi myös välttää virheenkorjauksessa?

Olettaen, että olet tuotantoympäristössä, sinun on tehtävä näin:

  1. Kuvaile ”virhe” oikein ja tunnista tapahtumat, jotka aiheuttavat sen tapahtumisen.

  2. Selvitä, onko ”virhe” koodivirhe vai määritysvirhe. Esimerkiksi 1 kirjaimen nimen syöttämistä voidaan pitää virheenä joissakin järjestelmissä, mutta hyväksyttävää käyttäytymistä muissa järjestelmissä. Joskus käyttäjä ilmoitti virheestä, joka hänen mielestään on ongelma, mutta käyttäjän odotukset järjestelmän toiminnasta eivät kuuluneet vaatimuksiin.

  3. Jos ovat osoittaneet, että siinä on virhe ja virhe johtuu koodista, voit määrittää, mitkä koodikappaleet on korjattava virheen estämiseksi. Tutki myös käyttäytymisen vaikutusta nykyisiin tietoihin ja tuleviin järjestelmän toimintoihin (vaikutusanalyysi koodi ja tiedot).

  4. Tässä vaiheessa sinulla todennäköisesti on arvio siitä, kuinka paljon resursseja kulutetaan virheen korjaamiseen. Voit joko korjata sen heti tai ajoita korjaus ohjelmiston tulevassa julkaisussa.Tämä riippuu myös siitä, onko loppukäyttäjä valmis maksamaan korjauksesta. Sinun tulisi myös arvioida eri käytettävissä olevat vaihtoehdot virheen korjaamiseksi. Tapa voi olla useampi kuin yksi. Sinun on valittava tilanteeseen parhaiten sopiva lähestymistapa.

  5. Analysoi syyt, jotka aiheuttivat tämän virheen (vaatimukset, koodaus, testaus jne.). Pakota prosessit, jotka estävät tilanteen toistumisen.

  6. Dokumentoi jakso riittävästi.

  7. Vapauta korjaus (tai uusi versio)

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *