"Ohjelmistokriisi" on aikoinaan tietojenkäsittelytieteessä käytetty termi kuvaamaan tietokoneiden nopean laskentatehon kasvun seurauksia ja niiden avulla ratkaistavien ongelmien monimutkaisuutta. Pohjimmiltaan se viittaa vaikeuteen kirjoittaa toimivia, ymmärrettäviä ohjelmistoja käyttämällä vahvistettuja algoritmeja .
Termin "ohjelmistokriisi" keksi Friedrich L. Bauer Naton ohjelmistotekniikan konferenssissa 1968 Garmisch -Partenkirchenissä ( Saksa ) [ 1] . Termiä käytti Edsger W. Dijkstra vuonna 1972 Turing Award -luennossaan [ 2 ] :
Ohjelmistokriisin suurin syy on laskentatehon jyrkkä kasvu! Yksinkertaisesti sanottuna: ei ole tietokonetekniikkaa - ei ole ongelmia ohjelmistojen kehittämisessä sitä varten; kun muutama heikko tietokone ilmestyi, ilmaantui ensimmäiset ohjelmistokehitysongelmat, nyt meillä on jättiläisiä tietokoneita ja ohjelmoinnista on tullut yhtä jättimäinen ongelma.
Alkuperäinen teksti (englanniksi)[ näytäpiilottaa] Ohjelmistokriisin suurin syy on se, että koneista on tullut useita suuruusluokkaa tehokkaampia! Suoraan sanottuna: niin kauan kuin koneita ei ollut, ohjelmointi ei ollut ollenkaan ongelma; kun meillä oli muutama heikko tietokone, ohjelmoinnista tuli lievä ongelma, ja nyt meillä on jättimäisiä tietokoneita, ohjelmoinnista on tullut yhtä jättimäinen ongelma. — Edsger W. Dijkstra . "Nöyrä ohjelmoija" (EWD340)Ohjelmistokriisin syyt on yhdistetty laitteiston yleiseen monimutkaisuuteen ja ohjelmistokehityksen monimutkaisuuteen. Kriisi ilmenee monin tavoin:
Monet ohjelmistoon liittyvät ongelmat ovat aiheutuneet laitteiston monimutkaisemisesta. Edsger W. Dijkstra totesi esseessään, että uudet tietokoneet olivat aikanaan "niiden vakavien puutteiden ruumiillistuma, että [hän uskoo] tietotekniikan kehitys on jäänyt jälkeen ainakin kymmenen vuotta" [2] . Hän katsoi myös, että laitteiston vaikutus ohjelmistoihin jätettiin liian usein huomiotta.
Viime vuosikymmeninä on kehitetty erilaisia prosesseja ja menetelmiä ohjelmistokriisin kesyttämiseksi. Yleisesti uskotaan kuitenkin, ettei ole olemassa "hopealuotia" eli ei ole olemassa universaalia menetelmää ylikulujen ja projektien epäonnistumisen estämiseksi. Yleensä ohjelmistokehitysprojektit – suuret, monimutkaiset, huonosti dokumentoidut ja tuntemattomat – voivat silti kohdata suuria odottamattomia ongelmia.