Empiirinen ohjelmistotutkimus on osa tietojenkäsittelytiedettä. Siinä tutkitaan lähinnä empiirisin menetelmin tietojenkäsittelyssä havaittuja lainalaisuuksia ja esitetään havainnoista hypoteeseja. Hyväksi havaitut menetelmät eli best practices ovat käytännössä toimivia periaatteita, joita empiirinen ohjelmistotutkimus pyrkii validoimaan. Tutkimus perustuu havaintoihin, lakeihin ja teorioihin. Yleensä tutkimus etenee havainnoista johdettuihin lakeihin, jotka puolestaan yleistetään teorioiksi. Eräitä tunnettuja ohjelmistotekniikan lainalaisuuksia on esitelty alan kirjallisuudessa laajasti. Olen koonnut luettelon tunnetuimmista ohjelmistotekniikan laeista, jotka voidaan edelleen ryhmitellä ohjelmistoprojektin eri vaiheisiin.
Vaatimusmäärittely
Glassin laki
Puutteelliset vaatimukset ovat tärkein projektien epäonnistumisen syy.
Boehmin I laki
Mitä myöhemmin virheet löytyvät, sitä kalliimmiksi niiden korjaaminen tulee.
Boehmin II laki
Prototyyppien käyttö vähentää virheitä.
Davisin laki
Mallin hyöty riippuu näkökulmasta, mutta yksi malli ei ole paras kaikkiin tarkoituksiin.
Suunnittelu
Curtisin laki
Hyvä suunnittelu vaatii syvällistä tuotteen sovellusalueen hallintaa.
Simonin laki
Hierarkkisuus vähentää kompleksisuutta.
Constantinen laki
Rakenne on stabiili, jos sen yhtenäisyys on vahva ja kytkentäaste matala.
Parnasin laki
Vain piilotettua tietoa voidaan muuttaa ilman riskiä.
Testaus
Faganin laki
Tarkastukset parantavat merkittävästi tuottavuutta, laatua ja projektien stabiiliutta.
Porter-Vottan laki
Tarkastusten tehokkuus ei juuri riipu niiden järjestelytavasta.
Basilin laki
Näkökulmaperustaiset tarkastukset ovat (erittäin) tehokkaita.
Hetzel-Myersin laki
Useaa verifiointi- ja validointitekniikkaa käyttämällä savutetaan parempia tuloksia kuin yhdelläkään menetelmällä yksin.
Dijkstran laki
Täydellinen testaus on mahdotonta.
Weinbergin laki
Ohjelmoija ei sovellu testaamaan kirjoittamaansa koodia.
Ylläpito
Lehmanin I laki
Käytössä olevaa järjestelmää tullaan muuttamaan.
Lehmanin II laki
Kehittyvä järjestelmä monimutkaistuu ajan kanssa, ellei kehitystä pysäytetä lisätyöllä.
Lehmanin III laki
Järjestelmän evoluutio määräytyy (liiketoiminnan) palauteprosessin mukaan.
Basili-Möllerin laki
Pienillä muutoksilla on suuria muutoksia korkeampi virhetiheys.
Projektinhallinta
Sackmanin II laki
Ohjelmistotuotantoprojektien työntekijöiden tehokkuus vaihtelee merkittävästi.
Nelson-Jonesin laki
Työntekijän tuottavuus on monen tekijän summa.
Boehmin III laki
Kehitystyöhön vaadittava työmäärä on tuotteen koon funktio.
DeMarco-Glassin laki
Useimpien projektien kustannusarvioilla on taipumus jäädä liian mataliksi.
Humphreyn laki
Kehittyneet prosessit ja henkilökohtainen kurinalaisuus parantavat suunnittelua, lisäävät tuottavuutta ja vähentävät virheitä.
Brooksin laki
Uusien työntekijöiden lisääminen myöhässä olevaan projektiin saa projektin myöhästymään lisää.
Luettelo ei ole täydellinen, vaan listaa kaikkein yleisimmät ja tunnetuimmat ohjelmistotekniikan lait. En ole tässä listassa myöskään selostanut lakeja, sillä se on jonkun seuraavan jutun paikka.