Suorituskykytestauksen opetusohjelma

⚡ Älykäs yhteenveto

Suorituskykytestaus on ohjelmistotestausprosessi, joka arvioi sovelluksen nopeutta, vasteaikaa, vakautta, skaalautuvuutta ja resurssien käyttöä tietyillä työkuormilla. Se tunnistaa ja poistaa pullonkaulat ennen käyttöönottoa varmistaen luotettavuuden todellisissa olosuhteissa.

  • Määrittele laajuus etukäteen: Tunnista testiympäristösi, hyväksymiskriteerit ja keskeiset skenaariot ennen suorituskykytestien suunnittelua.
  • 🔄 Kattaa kaikki testaustyypit: Käytä kuormitus-, jännitys-, kestävyys-, piikki-, tilavuus- ja skaalautuvuustestejä arvioidaksesi erilaisia ​​vikaantumistiloja.
  • 📊 Seuraa kriittisiä mittareita: Seuraa prosessorin käyttöä, muistin kulutusta, vasteaikaa, läpäisykykyä ja virhemääriä jokaisen testisuorituksen aikana.
  • ⚠️ Pullonkaulojen systemaattinen diagnosointi: Tutki suorittimen, muistin, verkon ja levyn käyttöastetta suorituskyvyn heikkenemisen perimmäisen syyn selvittämiseksi.
  • 🔁 Toista ja testaa uudelleen: Analysoi tuloksia, hienosäädä konfiguraatioita ja testaa uudelleen, kunnes suorituskyky täyttää ennalta määritetyt hyväksymiskriteerit.
  • 🤖 Hyödynnä tekoälypohjaista analyysia: Käytä tekoälyä ennakoivaan poikkeamien havaitsemiseen, automatisoituun perussyyanalyysiin ja älykkääseen resurssien kohdentamiseen testauksen aikana.

Suorituskykytestauksen opetusohjelma

Mitä suorituskykytestaus on?

Suorituskykytestaus on ohjelmistotestausprosessi, jota käytetään ohjelmistosovelluksen nopeuden, vasteajan, vakauden, luotettavuuden, skaalautuvuuden ja resurssien käytön testaamiseen tietyssä työkuormassa. Suorituskykytestauksen päätarkoituksena on tunnistaa ja poistaa ohjelmistosovelluksen suorituskyvyn pullonkaulat. Se on suorituskyvyn suunnittelun osajoukko ja tunnetaan myös nimellä "Täydellinen testaus".

Suorituskykytestauksen keskipisteenä on ohjelmiston seuraavien ominaisuuksien tarkistaminen:

  • Nopeus – Määrittää, vastaako sovellus nopeasti
  • skaalautuvuus – Määrittää ohjelmiston käsittelemän enimmäiskäyttäjäkuorman
  • Pysyvyys – Määrittää, onko sovellus vakaa vaihtelevilla kuormituksilla

Miksi suorituskyvyn testaus on tärkeää?

Ohjelmistojärjestelmän tukemat ominaisuudet ja toiminnallisuudet eivät ole ainoa huolenaihe. Ohjelmistosovelluksen suorituskyvyllä, kuten sen vasteajalla, luotettavuudella, resurssien käyttöasteella ja skaalautuvuudella, on merkitystä. Suorituskykytestauksen tavoitteena ei ole löytää virheitä, vaan poistaa suorituskyvyn pullonkauloja.

Suorituskykytestauksen tarkoituksena on antaa sidosryhmille tietoa sovelluksen nopeudesta, vakaudesta ja skaalautuvuudesta. Vielä tärkeämpää on, että suorituskykytestaus paljastaa, mitä on parannettava ennen tuotteen markkinoille tuloa. Ilman suorituskykytestausta ohjelmisto kärsii todennäköisesti ongelmista, kuten hitaasta toiminnasta useiden käyttäjien käyttäessä sitä samanaikaisesti, epäjohdonmukaisuuksista eri käyttöjärjestelmien välillä ja heikosta käytettävyydestä.

Miksi suorituskykytestaus on tärkeää

Suorituskykytestaus määrittää, täyttääkö ohjelmisto nopeus-, skaalautuvuus- ja vakausvaatimukset odotettujen työkuormien alla. Sovellukset, jotka lähetetään markkinoille heikoilla suorituskykymittareilla olemattoman tai heikon suorituskykytestauksen vuoksi, saavat todennäköisesti huonon maineen eivätkä saavuta odotettuja myyntitavoitteita.

Myös, kriittiset sovellukset Kuten avaruuteen laukaisuohjelmat tai hengenpelastuslaitteet, tulee testata suorituskykyä sen varmistamiseksi, että ne toimivat pitkän ajan ilman poikkeamia.

Dunn & Bradstreetin mukaan 59 % Fortune 500 -yrityksistä kokee arviolta 1.6 tunnin seisokkeja viikossa. Kun otetaan huomioon, että keskimääräinen Fortune 500 -yritys, jossa on vähintään 10,000 56 työntekijää, maksaa 896,000 dollaria tunnilta, tällaisen organisaation seisokkien työvoimaosuus olisi 46 XNUMX dollaria viikoittain, mikä tarkoittaa yli XNUMX miljoonaa dollaria vuodessa.

Vain a 5 minuutin seisokki Google.com-sivuston (19.-13. elokuuta) arvioidaan maksavan hakujättiläiselle yhtä paljon kuin $ 545,000.

Yritysten arvioidaan menettäneen myyntiarvoaan 1100 dollaria sekunnissa äskettäisen takia Amazon Verkkopalvelukatkos.

Siksi suorituskyvyn testaus on tärkeää. Auttaaksesi sinua tässä prosessissa, tutustu tähän luetteloon suorituskyvyn testaustyökalut.

Suorituskyvyn testauksen tyypit

Ohjelmistotestauksessa on pääasiassa kuusi tyyppiä suorituskyvyn testausta, jotka selitetään alla.

  • kuormitustestaus - tarkistaa sovelluksen kyvyn toimia odotettavissa olevien käyttäjien kuormituksissa. Tavoitteena on tunnistaa suorituskyvyn pullonkaulat ennen ohjelmistosovelluksen käyttöönottoa.
  • Stressitestaus - sisältää sovelluksen testaamisen äärimmäisissä työkuormissa sen selvittämiseksi, kuinka se käsittelee suurta liikennettä tai tietojenkäsittelyä. Tavoitteena on tunnistaa sovelluksen murtumiskohta.
  • Kestävyystestit - tehdään sen varmistamiseksi, että ohjelmisto pystyy käsittelemään odotetun kuormituksen pitkän ajan kuluessa. Se auttaa havaitsemaan ongelmia, kuten muistivuotoja ja resurssien ehtymistä, jotka ilmenevät vasta jatkuvan käytön aikana.
  • Piikkitestaus – testaa ohjelmiston reaktiota käyttäjien aiheuttamiin äkillisiin kuormituksen piikkeihin. Toisin kuin stressitestaus, piikkitestaus keskittyy erityisesti siihen, miten järjestelmä käsittelee ja toipuu äkkinäisistä, lyhytaikaisista liikennepiikeistä.
  • Volyymitestaus – sisältää tietokannan täyttämisen suurella tietomäärällä ja koko ohjelmistojärjestelmän toiminnan seurannan. Tavoitteena on tarkistaa ohjelmistosovelluksen suorituskyky vaihtelevilla tietokantamäärillä.
  • Skaalautuvuustestaus – määrittää ohjelmistosovelluksen tehokkuuden skaalautumisessa käyttäjäkuormituksen kasvun tukemiseksi. Se auttaa suunnittelemaan ohjelmistojärjestelmän kapasiteetin lisäämistä.

Yleiset suorituskykyongelmat

Useimmat suorituskykyongelmat liittyvät nopeuteen, vasteaikaan, latausaikaan ja huonoon skaalautuvuuteen. Nopeus on usein yksi sovelluksen tärkeimmistä ominaisuuksista. Hitaasti toimiva sovellus menettää potentiaalisia käyttäjiä. Suorituskykytestaus varmistaa, että sovellus toimii riittävän nopeasti pitääkseen käyttäjän huomion ja mielenkiinnon yllä. Seuraavat ovat yleisiä suorituskykyongelmia, joissa nopeus on toistuva tekijä:

  • Pitkä latausaika – Latausaika on yleensä se aika, joka sovelluksen käynnistymiseen kuluu. Tämä tulisi yleensä pitää mahdollisimman lyhyenä. Vaikka joidenkin sovellusten lataaminen alle minuutissa on mahdotonta, latausaika tulisi pitää alle muutamassa sekunnissa, jos mahdollista.
  • Huono vasteaika - Vastausaika on aika, joka kuluu siitä, kun käyttäjä syöttää tietoja sovellukseen, siihen, kun sovellus antaa vastauksen kyseiseen syötteeseen. Yleensä tämän tulisi olla erittäin nopea. Jos käyttäjän on odotettava liian kauan, hän menettää kiinnostuksensa.
  • Huono skaalautuvuus - Ohjelmistotuote kärsii huonosta skaalautumisesta, kun se ei pysty käsittelemään odotettua käyttäjämäärää tai kun siihen ei mahdu tarpeeksi laajaa käyttäjäkuntaa. Kuormitustesti tulee tehdä varmistaaksesi, että sovellus pystyy käsittelemään odotetun määrän käyttäjiä.
  • Pullonkaula – Pullonkaulat ovat järjestelmän esteitä, jotka heikentävät järjestelmän kokonaissuorituskykyä. Pullonkauloista aiheutuu, että joko koodausvirheet tai laitteisto-ongelmat aiheuttavat suorituskyvyssä laskua tietyillä kuormituksilla. Pullonkaulan aiheuttaa usein yksi viallinen koodin osa. Pullonkaulan korjaamisen avain on löytää hidastumista aiheuttava koodin osa ja yrittää korjata se sieltä. Pullonkaulat korjataan yleensä joko korjaamalla huonosti toimivia prosesseja tai lisäämällä laitteistoa. Jotkut yleisiä suorituskyvyn pullonkauloja ovat:
    • CPU: n käyttö
    • Muistin käyttö
    • Verkon käyttö
    • Operajärjestelmän rajoituksia
    • Levyn käyttö

Suorituskykytestauksen tekeminen

Suorituskykytestauksen menetelmät voivat vaihdella suuresti, mutta suorituskykytestien tavoite pysyy samana. Se voi auttaa osoittamaan, että ohjelmistojärjestelmäsi täyttää tietyt ennalta määritellyt suorituskykyvaatimukset. Tai se voi auttaa vertailemaan kahden ohjelmistojärjestelmän suorituskykyä. Se voi myös auttaa tunnistamaan ohjelmistojärjestelmäsi osia, jotka heikentävät sen suorituskykyä.

Alla on yleinen prosessi suorituskykytestauksen suorittamiseksi.

Suorituskykytestausprosessi
Suorituskykytestausprosessi

Vaihe 1) Tunnista testausympäristösi

Tunne fyysinen testiympäristösi, tuotantoympäristösi ja käytettävissä olevat testaustyökalut. Ymmärrä testauksessa käytettyjen laitteisto-, ohjelmisto- ja verkkokokoonpanojen yksityiskohdat ennen testausprosessin aloittamista. Tämä auttaa testaajia luomaan tehokkaampia testejä. Se auttaa myös tunnistamaan mahdolliset haasteet, joita testaajat saattavat kohdata suorituskykytestausmenettelyjen aikana.

Vaihe 2) Tunnista suorituskyvyn hyväksymiskriteerit

Tämä sisältää tavoitteet ja rajoitukset läpimenolle, vasteajoille ja resurssien allokoinnille. On myös tarpeen tunnistaa projektin onnistumiskriteerit näiden tavoitteiden ja rajoitusten ulkopuolella. Testaajille tulisi antaa valtuudet asettaa suorituskykykriteerejä ja -tavoitteita, koska usein projektin määritykset eivät sisällä riittävän laajaa valikoimaa suorituskyvyn vertailuarvoja. Joskus niitä ei ehkä ole ollenkaan. Hyvä tapa asettaa suorituskykytavoitteita on löytää vastaava sovellus vertailukohteeksi, kun se on mahdollista.

Vaihe 3) Suunnittele ja suunnittele suorituskykytestit

Määritä, miten käyttö todennäköisesti vaihtelee loppukäyttäjien välillä, ja tunnista keskeiset testattavat skenaariot kaikissa mahdollisissa käyttötapauksissa. On tarpeen simuloida useita loppukäyttäjiä, suunnitella suorituskykytestien dataa ja hahmotella, mitä mittareita kerätään.

Vaihe 4) Testiympäristön määrittäminen

Valmistele testausympäristö ennen suoritusta. Järjestä myös työkalut ja muut resurssit. Peilaa tuotantoympäristöä mahdollisimman tarkasti varmistaaksesi, että testitulokset ovat realistisia ja käytännöllisiä.

Vaihe 5) Toteuta testisuunnittelu

Luo suorituskykytestit testisuunnitelmasi mukaan.

Vaihe 6) Suorita testit

Suorita ja seuraa testejä.

Vaihe 7) Analysoi, viritä ja testaa uudelleen

Yhdistä, analysoi ja jaa testitulokset. Hienosäädä ja testaa sitten uudelleen nähdäksesi, onko suorituskyvyssä parannusta vai heikkenemistä. Koska parannukset yleensä pienenevät jokaisen uudelleentestauksen myötä, lopeta, kun suorittimen pullonkaula aiheuttaa sen. Tällöin sinun on ehkä harkittava suorittimen tehon lisäämistä.

Suorituskyvyn testausmittarit: Valvotut parametrit

Suorituskykytestauksen aikana seurattavia perusparametreja ovat:

Suorituskykytestauksen mittarit ja parametrit

  • Prosessorin käyttö - aika, jonka prosessori käyttää ei-tyhjäkäyntisäikeiden suorittamiseen.
  • Muistin käyttö - tietokoneen prosessien käytettävissä olevan fyysisen muistin määrä.
  • Levyn aika - aika, jonka levy on varattu luku- tai kirjoituspyynnön suorittamiseen.
  • Kaistanleveys - näyttää verkkoliitännän käyttämät bitit sekunnissa.
  • Yksityiset tavut – Prosessin varaamien tavujen määrä, joita ei voida jakaa muiden prosessien kesken. Näitä käytetään muistivuotoja ja -käyttöä mittaamaan.
  • Sitoutunut muisto - käytetyn virtuaalimuistin määrä.
  • Muistisivut/sekunti – levylle kirjoitettujen tai levyltä luettujen sivujen määrä sivuvirheiden ratkaisemiseksi. Sivuvirheitä esiintyy, kun muualta kuin nykyisestä työjoukosta peräisin olevaa koodia kutsutaan ja noudetaan levyltä.
  • Sivuvirheet/sekunti – Suorittimen suorittaman vikasivujen käsittelyn kokonaisnopeus. Tämä tapahtuu, kun prosessi vaatii koodia työjoukkonsa ulkopuolelta.
  • CPU-keskeytykset sekunnissa - prosessorin vastaanottamien ja käsittelemien laitteistokeskeytysten keskimääräinen määrä sekunnissa.
  • Levyn jonon pituus - valitun levyn jonossa olevien luku- ja kirjoituspyyntöjen keskimääräinen määrä näytteenottovälin aikana.
  • Verkon lähtöjonon pituus – lähtöpakettijonon pituus paketteina. Yli kaksi tarkoittaa viivettä, ja pullonkaulat on lopetettava.
  • Verkkotavut yhteensä sekunnissa – Rajapinnan kautta lähetettyjen ja vastaanotettujen tavujen nopeus, mukaan lukien kehystysmerkit.
  • Vasteaika - aika käyttäjän syöttämästä pyynnöstä vastauksen ensimmäisen merkin vastaanottamiseen.
  • Suorituskyky - nopeus, jolla tietokone tai verkko vastaanottaa pyyntöjä sekunnissa.
  • Yhteyden yhdistämisen määrä – poolattujen yhteyksien täyttämien käyttäjien pyyntöjen määrä. Mitä enemmän pyynnöt poolissa olevat yhteydet täyttävät, sitä parempi suorituskyky on.
  • Aktiivisten istuntojen enimmäismäärä – istuntojen enimmäismäärä, jotka voivat olla aktiivisia kerralla.
  • Osumasuhteet – tämä liittyy lukumäärään SQL lausekkeet, joita käsitellään välimuistilla kalliiden I/O-toimintojen sijaan. Tämä on hyvä paikka aloittaa pullonkaulaongelmien ratkaiseminen.
  • Osumat sekunnissa – verkkopalvelimen osumien määrä kuormitustestin jokaisen sekunnin aikana.
  • Palautussegmentti – datamäärä, joka voidaan palauttaa milloin tahansa.
  • Tietokannan lukitukset - Taulukoiden ja tietokantojen lukitsemista on valvottava ja säädettävä huolellisesti.
  • Parhaat odotukset - seurataan sen määrittämiseksi, mitä odotusaikoja voidaan lyhentää, kun käsitellään sitä, kuinka nopeasti tiedot haetaan muistista.
  • ketjujen määrä - Sovelluksen kuntoa voidaan mitata käynnissä olevien ja aktiivisten säikeiden lukumäärällä.
  • Roskakokoelma - sisältää käyttämättömän muistin palauttamisen takaisin järjestelmään. Roskakorin tehokkuutta on seurattava.

Suorituskykytestauksen testitapaukset Esimerkki

Alla on esimerkkisuorituskykytestauksen testitapauksia:

  • Testitapaus 01: Varmista, että vasteaika ei ole yli 4 sekuntia, kun verkkosivustolla on samanaikaisesti 1000 käyttäjää.
  • Testitapaus 02: Varmista, että sovelluksen kuormituksen aikainen vasteaika on hyväksyttävällä alueella, kun verkkoyhteys on hidas.
  • Testitapaus 03: Tarkista sovelluksen käsittelemien käyttäjien enimmäismäärä ennen kuin se kaatuu.
  • Testitapaus 04: Tarkista tietokannan suoritusaika, kun 500 tietuetta luetaan/kirjoitetaan samanaikaisesti.
  • Testitapaus 05: Tarkista sovelluksen ja tietokantapalvelimen suorittimen ja muistin käyttö huippukuormitusolosuhteissa.
  • Testitapaus 06: Tarkista sovelluksen vasteaika alhaisessa, normaalissa, kohtalaisessa ja raskaassa kuormituksessa.

Varsinaisen suorituskykytestin aikana epämääräiset termit, kuten hyväksyttävä alue, raskas kuorma jne., korvataan konkreettisilla numeroilla. Suorituskykyinsinöörit asettavat nämä luvut liiketoimintavaatimusten ja sovelluksen teknisen maiseman mukaan.

Suorituskykytestauksen parhaat käytännöt

Vakiintuneiden parhaiden käytäntöjen noudattaminen varmistaa, että suorituskykytestaus tuottaa luotettavia tuloksia. Nämä ohjeet auttavat tiimejä välttämään yleisiä sudenkuoppia.

  • Peilaa tuotantoympäristöä – Määritä testiasetukset vastaamaan mahdollisimman tarkasti tuotantoa. Laitteisto- tai ohjelmistoversioiden erot voivat tuottaa harhaanjohtavia tuloksia.
  • Suunnittele realistisia testiskenaarioita – Luo testitapauksia, jotka simuloivat todellista käyttäjän käyttäytymistä, mukaan lukien ajatteluajat ja samanaikaiset tapahtumayhdistelmät.
  • Käytä persentiilipohjaisia ​​mittareita – Käytä mieluummin 90. ja 95. persentiilin vasteaikoja kuin pelkkiä keskiarvoja. Persentiilit paljastavat loppupään latenssin, jonka keskiarvot voivat piilottaa.
  • Testaa ajoissa ja jatkuvasti – Integroi suorituskykytestaus CI/CD-prosessiin sen sijaan, että käsittelisit sitä viimeisen vaiheen aktiviteettina.
  • Dokumentoi ja lähtötilanteen tulokset – Tallenna jokaisen testiajon tulokset. Uusien tulosten vertaaminen lähtötilanteisiin helpottaa regressien havaitsemista eri versioissa.

Kuinka tekoäly mullistaa suorituskykytestausta

Tekoäly mullistaa suorituskykytestausta automatisoimalla monimutkaisia ​​analyysitehtäviä ja mahdollistamalla ennustavia ominaisuuksia. Tekoälypohjaiset työkalut analysoivat historiallista dataa, havaitsevat malleja ja tarjoavat toimintasuosituksia ilman ihmisen puuttumista jokaiseen vaiheeseen.

  • Ennakoiva poikkeavuuksien havaitseminen – Tekoälyalgoritmit analysoivat suorituskykymittareita reaaliajassa kuormitustestien aikana ja merkitsevät poikkeamat ennen kuin ne eskaloituvat kriittisiksi vioiksi.
  • Automaattinen perussyyanalyysi – Tekoälyllä toimivat työkalut korreloivat hajautettujen järjestelmien dataa paikantaakseen tarkasti suorituskyvyn heikkenemistä aiheuttavat komponentit.
  • Älykäs testioptimointi – Koneoppimismallit tunnistavat tarpeettomat testiskenaariot ja ehdottavat optimaalisia konfiguraatioita, mikä lyhentää suoritusaikaa ja säilyttää samalla kattavuuden.
  • Itsekorjautuvat testiskriptit – Tekoäly mukauttaa testiskriptejä sovellusrajapintojen muuttuessa, mikä vähentää suorituskykytestaussarjojen ylläpitokustannuksia.

Suorituskyvyn testaustyökalut

Markkinoilla on saatavilla laaja valikoima suorituskykytestaustyökaluja. Valitsemasi testaustyökalu riippuu monista tekijöistä, kuten tuettujen protokollien tyypeistä, lisenssin hinnasta, laitteistovaatimuksista ja alustatuesta. Alla on luettelo yleisesti käytetyistä testaustyökaluista.

  • HP LoadRunner - on yksi markkinoiden suosituimmista suorituskykytestaustyökaluista. Tämä työkalu pystyy simuloimaan satojatuhansia käyttäjiä ja asettamaan sovelluksia tosielämän kuormituksen alaiseksi määrittääkseen niiden käyttäytymisen odotettavissa olevissa kuormissa. Hienosäätö sisältää virtuaalisen käyttäjägeneraattorin, joka simuloi elävien ihmiskäyttäjien toimia.
  • JMeter - yksi johtavista avoimen lähdekoodin työkaluista, joita käytetään web- ja sovelluspalvelimien kuormitustestaukseen. Se tukee useita protokollia ja tarjoaa laajat raportointiominaisuudet.

UKK

Suorituskykytestausta tehdään vain asiakas-palvelinpohjaisille järjestelmille. Sovellukset, jotka eivät noudata asiakas-palvelinarkkitehtuuria, kuten erilliset pöytälaskimet, eivät vaadi suorituskykytestausta.

Suorituskykytestaus keskittyy sovelluksen nykyisen suorituskyvyn testaamiseen ja raportointiin. Suorituskyvyn suunnittelu menee pidemmälle yhdistämällä testauksen hienosäätöön, jotta voidaan optimoida käyttökokemus ja järjestelmän tehokkuus.

Kuormitustestaus arvioi järjestelmän käyttäytymistä odotettujen käyttäjäkuormien alaisena löytääkseen pullonkauloja. Stressitestaus ajaa sovelluksen normaalin kapasiteetin yli sen rikkoutumispisteen tunnistamiseksi ja palautumiskäyttäytymisen tarkkailemiseksi.

Kriittisimmät mittarit ovat vasteaika, läpimenoaika, virheprosentti, suorittimen käyttöaste ja muistin käyttö. Näiden indikaattoreiden seuraaminen auttaa tunnistamaan pullonkauloja ja varmistamaan, täyttääkö sovellus suorituskykykriteerinsä.

Suorituskykytestauksen tulisi alkaa varhain ja jatkua jatkuvasti. Sen integrointi CI/CD-prosessiin antaa tiimeille mahdollisuuden havaita regressiot jokaisen koontiversion yhteydessä sen sijaan, että ongelmat löydettäisiin vasta ennen julkaisua.

Tekoäly automatisoi poikkeamien havaitsemisen, perussyyanalyysin ja testien optimoinnin. Se analysoi historiallista dataa ennustaakseen pullonkauloja ja mukauttaa testiskriptejä automaattisesti sovellusrajapintojen muuttuessa.

Ei. Tekoäly parantaa tehokkuutta automatisoimalla toistuvia analyysi- ja tunnistustehtäviä, mutta ihmisen asiantuntemus on silti välttämätöntä realististen testiskenaarioiden suunnittelussa, liiketoimintakontekstin tulkinnassa ja strategisten optimointipäätösten tekemisessä.

Pilvipohjainen testaus tarjoaa skaalautuvuutta tarvittaessa, hajautettua kuormituksen luomista useilta alueilta ja alhaisemmat infrastruktuurikustannukset. Paikallinen testaus tarjoaa enemmän hallintaa testiympäristöön, mutta vaatii erillisiä laitteistoinvestointeja.

Tiivistä tämä viesti seuraavasti: