Kategooria ‘Arendus’ artiklid
Halloo… testid on ka kood!
Mingil põhjusel arvatakse, et testid on samaväärsed write-only koodiga ning ei kanta erilist hoolt selle üle, et neid tulevikus hallata saaks. Küllaltki kurb on tõdeda pärast ümberstruktureerimist katkiseid teste, millest pole võimalik väga aru saada.
Pakun välja mõned võimalused testide paremaks struktureerimiseks.
Esimest varianti on võimalik kasutada küllaltki lihtsalt olemasolevate testide peal. Kuna testid koosnevad kolemast osast (Arrange, Act, Assert; Given, When, Then), siis võib testi ka selliselt tükkideks jagada. Cucumberi kasutajatele peaks see olema küllaltki tuttav: samalaadselt tuleb kirjeldada ära sammud. Selle pahupooleks võibki sammude haldamine olla, sest test on tükeldatud, kuid ülevaate saab palju kiiremini ning on korduvkasutatav.
Ilusaks on võimalik ka saada igasuguste maskidega, näiteks näo- või juustemaskiga. Staatiliselt tüübitud keeltes on ka tavaliselt seda silmas peetud ning loodud liidesed. Nende kasutamine teeb ilusamaks ja paindlikumaks ka arhitektuuri.
Liideste abiga saame objektide omavahelist siduvust vähendada. Teavad täpselt nii palju kui vaja. Mida väiksemaks nendega läheme, seda rohkem anname teada kavatusest ning ei pea kartma NotSupportedExceptionit.
public interface IConsume<TMessage>
{
void Consume(TMessage message);
}
public interface ICanMakeCustomerPreferred
{
void MakePreferred(Cutomer customer);
}
Toidupoodides tihti võib leida väga huvitavaid teid. Mõned noorendavad, teised salendavad, osa isegi annavad energiat juurde. Üldiselt selliste turundussiltide tõttu tekkib mul tung need järjest prügikasti visata (soovitan pigem minna korralikku tee poodi ja sealt mõned sobilikud teed endale välja valida). Kui prügikast oleks samalaadne nagu tarkvaraarenduse käigus loodud lisamismeetodid kollektsiooni, siis mul läheks ühe paki äraviskamiseks liigselt aega.
public class Teabag
{
//..
}
public class Trashbin<TTrash>
{
public void Add(TTrash trash)
{
//..
}
}
var trashbin = new Trashbin<Teabag>();
trashbin.Add(new Teabag());
trashbin.Add(new Teabag());
trashbin.Add(new Teabag());
Loodetavasti on kõht nüüd brokkoli parajasti täis ja kood ilustatud laiendusmeetoditega, mida käsitlesin eelmise artiklis. Teiseks lihtsaks võtteks on tagastada kogu objekt meetoditel. See ei ole midagi keerulisemat kui kirjutada kaks sõna:
return this;
Võib kerkida küsimus, et kus neid kasutada, kui on klassides defineeritud ainult atribuudid (property) ja paar üksikut meetodit. Nii ei ole võimalik seda väga lihtsalt rakendada.
public class Product
{
public StockKeepingUnit SKU { get; set; }
public ProductName Name { get; set; }
public Money Price { get; set; }
public Party Vendor { get; set; }
}
var product = new Product
{
SKU = new StockKeepingUnit(“PRO-2345”),
ProductName = new ProductName(“Goldstein Elite Blue Pen”),
Price = new Money(10m, Currency.EEK),
Vendor = new Organization(“ABC Company”)
};
Ilusa koodi saamiseks ei ole vaja toita teda brokkoliga, osta kalleid kreeme ega noorenevaid tablette. Tegelikult on olemas küllaltki lihtsaid võtteid selle saamiseks. Peamiselt on need tulnud sisemiste Domain Specific Language (DSL) loomise võtetest, õigemini sinna poole pürgimegi ehk kood näeks välja nagu DSL.
Esimeseks võtteks, mida käsitlen, on laiendusmeetodite (Extension Methods) kasutamine. Nende abiga saame kergesti olemasolevatele klassidele lisada meetodeid juurde, eriti kui meil pole võimalik klassi ennast muuta.
1926. aastal ilmus Henry Fordi kirjutatud raamat “Täna ja homme”, mis andis edasi autori mõtteid muuhulgas Fordi tehaste töökorraldusest. Soovitan kindlasti lugeda, kuna tegemist on ka Toyota Production System-i ja Lean-i ja kaudselt ka igasuguste väledate arendusmetoodikate alusega. Tõsi, üllatusin ka ise, et masstootmise looja kirjutab raiskamise vältimisest.
Igal juhul tahtsin välja tuua ühe lõigu selle kohta, kuidas Fordi tootmises Ford-T nukkvõlli kaheksa nuki ajastust automaatselt testiti. Loe edasi »
Niisamuti nagu mitmete teiste eesti keelsete sõnadega on ka sõnapaari tarkvara – riistvara tõlkimisega veidi kehvasti läinud. Ja ma ei püüa siin kiruda, et tarkvara on tegelikult rumal.
Asi on nimelt selles, et inglise keelsed väljendid software – hardware ei anna absoluutselt mingit vihjet selle kohta, et üks vara oleks teisest nutikam ega ka seda, et teine vara on tööriistadega seotud.
Minu arvates on tõlkes kaduma läinud mõte, et software-i on võimalik pidevalt muuta ja edasi arendada, seevastu hardware on selline vara, mida muuta ei saa. Seega on minu ettepanek mõelda iga kord tarkvara tehes, et seda võiks, saaks ja peaks tulevikus muutma. Muidu võiks ta olla ka riistvara.
Üks tüüpilisi töövestluse küsimusi on: kas sa oled motiveeritud tööd tegema? Kui inimene on juba nii kaugele jõudnud, et on töövestlusel, siis mingisugune motivatsioon tal on. Variante võib olla mitmeid: keskkonna vahetus; arengu võimaluste / väljakutsete puudumine eelnevas kohas; suurem palgasoov jms.
Ühes artiklis jäi mulle huvitav seisukoht meelde: ettevõtted ei pea motiveerima enda töötajaid, vaid nad ei tohi seda ära võtta. Seetõttu töövestlusel tasub vastu küsida, et mida nad teevad, et sult seda ära võtta. Esmapilgul tundub see veidi jabur, kuid võib-olla veenab teid ettekanne “Väledate metoodikate mõõdikutest”.
Kui alustame mingi hobiga, siis me teeme seda selle enda pärast. Meil on kirg mingi tegevuse vastu, kuid seda on võimalik lõhestada ning nii juhtub tavaliselt kui hobist saab meie töö, aastate pärast juba vaikselt vihkame seda. Siit väike soovitus: ära tee enda hobist tööd.
Selle aasta lõpuks peaks välja tulema ReSharper 5 Visual Studio 2008 ja 2010-le. Siiski, kes soovib seda varem juba katsetada, siis on võimalik seda läbi Early Access Programi teha.
Selle versiooni suuremad edasiminekud on veebi arendamise osas. Nüüd on võimalik MVC ja tavalise ASP.NET-i peal genereerida vajaminevat koodi ja kiirelt parandada vigasid. Lisaks on seal osas ka navigeerimist paremaks tehtud. Veebiarendus hakkab ka nüüd R#5 jaoks olema esmaklassiline kodanik.
Märkimisväärne uuendus on ka koodi analüüsis – võimalik on otsida koodi struktuurilisi/mustrilisi vigasid ehk halbu lõhnu. See on suurepärane töövahend meeskonna koodi ühtlustamise osas ning uute koolitamisel.
Kui Visual Studio 2010 oskab kenasid UML diagramme luua, siis R#5 seevastu näitab lihtsamalt, kuidas väärtused või meetodi väljakutsed aset leiavad. See kiirendab oluliselt koodist arusaamist (juhul kui pole üks suur kauss spagette).
Väiksemate väärtuste hulka võiksid kuuluda koodiviited (bookmark) ja ka NUniti integratsioon. Rohkemat infot leiate R# uuenduste nimekirjast.
Kellel suurem huvi koodi kirjutamise produktiivsuse tõstmise katsetamiseks on, võiksid heita ka pilgu peale Telerik JustCodeile, kuigi sellel on vähem võimalusi. Oleks tore ka kuulda, mis teile uues R# meele järgi on ja mis puudujääke on.
Tarkvara arendamine on pidev tegevus; pidevalt ilmuvad uuendused ja vigade parandused. Kõik see on meeldiv, kuid uuendamine alati pole, eriti kui peab vana maha võtma ja uue paigaldama. Kerkivad mõned küsimused: kas seadistused jäävad alles? kas kõik seaded on varundatud? Palju meeldivam on see, kui rakendus imeväel ennast uuendab ja ise midagi tegema ei pea. Nii toimivad paljud töölaua rakendused praegu, kuid samalaadselt võiksid ka meie klient-server rakendused uueneda.
Peamiselt on meil vaja uus kood kokku kompileerida, lisada talle uus versiooni number, andmebaasi skeem uuendada ja andmete kohandada. Väga palju polegi. Automatiseerimiseks sobivad lihtsad skriptid: kõige algupärasem variant oleks teha konsooli skript, kuid selleks peame väga hästi tundma iga kasutatava rakenduse parameetrite süntaksit.
KAIZEN FEED
Telli endale Kaizeni uudisvoog
KOMMENTAARIDE FEED
Telli endale kommentaaride voog
KAIZEN TWITTER
Lühiuudised Kaizeni autoritelt
KAIZEN FACEBOOK
Liitu Kaizeniga
MIS ON KAIZEN?
Kaizen on Saiku tarkvaraarendusealane blogi, kus kirjutame erinevatest lähenemistest meisterlikule tarkvaraarendusele.
KATEGOORIAD
- .NET (18)
- Analüüs/Arhitektuur (11)
- Arendus (66)
- Ettevalmistus (1)
- Juhtimine (2)
- Varia (24)
SILDIPILV
- .NET (41)
- ilus kood (23)
- Arendus (23)
- C# (20)
- Analüüs/Arhitektuur (14)
- Testimine (10)
- raamat (8)
- Ruby (8)
- projektijuhtimine (8)
- printsiibid (6)
- produktiivsus (5)
- ReSharper (5)
- PHP (5)
- NHibernate (4)
- objekt-orienteeritud (4)
- pidev integratsioon (4)
- Viited (4)
- agile (4)
- Java (4)
- Geekdinner (4)
- lean (4)
- raamatukogu (4)
- CI (3)
- Cruise Control.NET (3)
- Robert C. Martin (3)
- scrum (3)
- iteratsioon (3)
- suhtlus (3)
- jQuery (2)
- TechEd 2008 (2)
- Visual Studio (2)
- valideerimine (2)
- intervjuu (2)
- tööpakkumised (1)
- analüüs (1)
- ASP.NET (1)
- ümberstruktureerimine (1)
- üritus (1)
- CodeRush (1)
- dokumentatsioon (1)
- Kent Beck (1)
- LINQ (1)
- Martin Fowler (1)
- Moq (1)
- Rhino Mocks (1)
- stackoverflow (1)
- võltsitud objektid (1)
- Whiteboard Wednesday (1)
- hindamine (1)
- tarkvara kvaliteet (1)
- ajagraafikud (1)
- Saiku (1)
- koolitus (1)
- tagasivaate (1)
- koosolek (1)
- dünaamilised keeled (1)
- staatilised keeled (1)
- FluentNHibernate (1)
- facebook (1)
- aastapäev (1)
- Rake (1)
- Oredev 2008 (1)
- toyota way (1)
- raiskamine (1)
- NDepend (1)
- podcasts (1)
- väle tarkvaraarendus (1)
- raido tonts (1)
- minimal marketable feature (1)
- kasutajalugu (1)
- twitter (1)
- Joomla! (1)
- MVC (1)
- andmebaas (1)
- versioonimine (1)
- diskussioon (1)
- regulaaravaldised (1)
- motiveerimine (1)
- mõõdikud (1)
- agileestonia (1)
- riistvara (1)
- koolitused (1)
- kujundus (1)
- kodulehed (1)
- veeb (1)
