• Ei tuloksia

Aiemmat tutkimukset LTY:ssä

Lappeenrannan teknillisessä yliopistossa on tehty useampia tutkimuksia Ohjelmoinnin perusteet-kurssiin liittyen. Nikula, Gotel ja Kasurinen (Nikula 2011, 34) pitivät viiden vuoden pitkittäistutkimuksessaan tärkeimpinä tekijöinä pyrittäessä mahdollisimman hyviin oppimistuloksiin ja pieniin kurssien keskeyttämisprosentteihin:

 kurssin hygieniatekijöitä (opetusmateriaalit, opetustilat)

 sisäistä motivointia (kurssin sisällön kiinnostavuus ja hyödyllisyys)

43

 ulkoisten motivointitekijöiden käyttöönottoa jolloin parannetaan opiskelijoiden käyttäytymisen ennakointia.

Käytännön ohjelmointi -kurssin opiskelijapalautteessa keväällä 2011 korostui luentovideoiden merkitys opetusmateriaalina sekä harjoitustyöstä toivottava palaute. Nämä kaksi edellä mainittua tekijää liittyvät aiemman tutkimuksen (Nikula 2011) hygieniatekijöihin ja sisäiseen motivointiin, jotka siis tulivat tässäkin seurannassa esiin.

Käytännön ohjelmointi -kurssin Webrobol-kyselyyn 2011 (liite 2) tässä työssä verrattavat Ala-Mutkan (Ala-Mutka 2005) ja Milnen (Milne 2002) tutkimukset pohjautuvat yliopistoissa 1-2 ohjelmointikurssia suorittaneiden opiskelijoiden seurantaan.

Jenkins’n tutkimuksen mukaan sisäinen motivointi (49,6 %) muodosti hieman suuremman osuuden opiskelijoiden opiskeluasenteesta kuin ulkoiset motivointitekijät (47,1 %).

Prosenttiosuuksia voidaan pitää yllättävän korkeina, mutta tutkimuksen asettelu ja kysymykset johtivat suhteellisen suuriin prosenttiosuuksiin. (Jenkins 2001)

44

6 Keskustelu

Vertailen seuraavassa Ala-Mutkan (2005) ja Milnen (2002) tutkimuksia tämän diplomityön tutkimustuloksiin. Näiden kolmen tutkimuksen kysymysten eroavaisuuksien tähden oli vaikea tehdä suoria vertailuja, mutta seuraavia alla esiteltyjä yhtäläisyyksiä kuitenkin on havaittavissa.

Verrattaessa tämän Webropol-kyselyn tuloksia aiempiin opiskelijatutkimuksiin, voidaan pyrkiä löytämään yhteisiä hankaliksi osoittautuneita aihealueita joita tulisi opetuksessa painottaa. Ala-Mutkan (2005) tutkimusta, johon osallistui kuudesta yliopistosta 559 opiskelijaa, jotka olivat ennen kyselyä suorittaneet 1-2 ohjelmointikurssia, voidaan pitää sangen kattavana ja vertailuun sopivana materiaalina. Tässä tutkimuksessa ongelmal-lisimmiksi käsitteiksi erottuivat: ohjelmiston suunnittelu, toimintojen jakaminen prosesseihin ja virheiden löytäminen omista ohjelmista. Ohjelmoinnissa hankalimpia olivat osoitteet ja viitteet, abstraktit tietotyypit, virheiden käsittely ja ohjelmakirjastojen käyttö.

Parhaana opiskelumateriaalina opiskelijat pitivät tarjolla olleita ohjelmaesimerkkejä.

Käytännön ohjelmointi -kurssin Webropol-kyselyn mukaan opiskelijat mielestään hallitsivat arkkitehtuurisuunnittelun ja moduulisuunnittelun keskimääräistä paremmin.

Arkkitehtuurisuunnittelu sai keskiarvon 3,57 (ϭ = 1.03) ja moduulisuunnittelu µ = 3,70 (ϭ

= 0,84) ollen arvojoukon ylälaidassa. Tässä tulee huomauttaa että Webropol-kyselyn ja Ala-Mutkan tutkimuksen asteikot olivat käänteiset. Webropol-lomakkeella kysyttiin asioiden osaamista asteikolla (1) en ole varma mistä on kysymys ... (5) hyvä osaaminen ja Ala-Mutkan tutkimuksessa vaikeutta oppia asiaa asteikolla (1) helppo oppia ..(5) vaikea oppia. Käytännön ohjelmointi -kurssilla ohjelmoinnin peruskäskyt kuten syöttö, tulostus, valinta-, toisto- ja hyppyrakenteet, virheenkäsittely oli niputettu yhteen kysymykseen ja vastausten keskiarvo oli 4,58 (ϭ = 0,74), eli opiskelijat pitivät osaamistaan näillä aihealueilla hyvänä. Ala-Mutkan tutkimuksessa kysymys oli jaettu useampaan osioon seuraavasti (hakasulkeissa keskiarvo käännettynä samalle skaalalle kuin Webropol-kyselyssä); syöttö / tulostus µ = 2,96 (ϭ = 1,04) [3,04], virheiden käsittely µ = 3,33 (ϭ =

45

1,01) [2,67], valintarakenteet µ = 1,98 (ϭ = 0,90) [4,02] ja toistorakenteet µ = 2,09 (ϭ = 0,97) [3,91]. Ala-Mutkan tutkimuksen ja Webrobol-kyselyn tuloksien kesken havaittiin siis suurehko eroavaisuus.

Dundeen yliopistossa tehdyn tutkimuksen, Difficulties in Learning and Teaching Programming (Milne 2002), kattavuus oli noin 70 opiskelijaa. Sen mukaan aloittelevat ohjelmoijat pitävät vaikeimpina aihealueina osoittimia ja dynaamiseen muistinkäsittelyyn liittyviä operaatioita. Milnen tutkimuksen tulokset ovat yhtenevät Käytännön ohjelmointi -kurssin kyselyn tulosten kanssa. Lappeenrannan teknillisessä yliopistossa tehdyn kyselyn mukaan linkitetty lista, osoittimet, dynaaminen muistinhallinta ja rakenteiset tietorakenteet olivat vaikeimmat aihealueet.

Mistä suuret eroavaisuudet Ala-Mutkan (2005) ja Lappeenrannassa tehdyn tutkimusten välillä voivat johtua? Merkittävimmät syyt ovat varmaankin vertailtujen kurssien sisältöjen poikkeavuudet. Lisäksi, jos kysymykset olisi esitetty samansisältöisinä, olisi vastausten analysointi helpompaa. Webrobol-kysely lähetettiin opiskelijoille (53) jotka olivat tehneet kaikki pakolliset tehtävät, ja näistä opiskelijoista 40 (75,5 %:ia) palautti kyselyn. Ala-Mutkan tutkimukseen osallistui opiskelijoita kuudesta yliopistosta otannan ollessa suuruudeltaan 559.

Milne’n (2002) ja tämän tutkimuksen tulokset ovat puolestaan yhteneväiset niiden aihealueiden suhteen joita opiskelijat pitivät vaikeimpina oppia.

Ala-Mutkan (2005) tutkimukseen osallistuneista opiskelijoista 58,6 %:lla oli ohjelmointikokemusta ennen yliopisto-opiskelua ja näistä opiskelijoista 40,6 % pitivät ohjelmointiosaamistaan kohtuullisen hyvinä. Opiskelijoiden osaamistason suurehko vaih-telu lienee yleistä yliopisto-opiskelijoiden keskuudessa, jolloin se asettaa haasteita kurssien järjestäjille, jotta kaikkien opiskelijoiden motivointi onnistuu.

46

Kun luentomateriaalit ja harjoitustehtävät ovat kurssia varten valmiiksi laadittuina, ei muutoksia tarvitse tehdä kuin projektityön aiheenvalinnassa. Tällä tavoin menetellen päästään kohti samaa rakennetta kuin muillakin Lappeenrannan teknillisen yliopiston ohjelmistotekniikan kursseilla on käytössä. Tutkimusartikkelissa, joka käsittelee Käytännön ohjelmointi -kurssin teknisen rakenteen parantamista Lappeenrannan teknillisessä yliopistossa (Nikula et al. 2009), todetaan että käytettävät opetustekniikat saattavat hidastaa opiskelijoiden oppimista. Artikkelissa päädytäänkin lopputulokseen, että on kaksi vaihtoehtoa parantaa oppimistuloksia: joko löytää paremmin kurssia tukevia opettamisteknologioita tai panna enemmän painoa pedagogiselle puolelle.

Seurantatutkimuksessa, joka tehtiin Ohjelmoinnin perusteet-kurssille vuosina 2005-2006, havaittiin että ohjelmointikielen (Python) valinnalla ja muiden opetusmateriaalien kehittämisellä pienennettiin ohjelmointia pakollisena oppiaineena opiskelevien keskeyttämismäärää 20 %:lla. (Kasurinen 2008)

Opiskelijapalautteen mukaan Noppa-portaalin käyttöä keskitettynä kurssimateriaalin talletuspaikkana tulisi vahvistaa. Lisäksi kurssilla tulee jatkossa olemaan käytössä kaksi erillistä luentomonistetta; C-kieli ja käytännön ohjelmointi osa 1 (Kasurinen 2011) sekä uusi jatko-osa edellä mainitulle luentomonisteelle, C-kieli ja käytännön ohjelmointi osa 2.

Kurssimateriaalin yhtenäisempi ja harkittu rakenne tullee jatkossa nostamaan kurssin läpäisyprosenttia sekä kurssiarvosanoja. Voidaan myös olettaa, että käytettäessä kurssin alusta alkaen Linux-ympäristöä, ei opiskelijoille tulisi ongelmia päättää kumpaa kehitysympäristöä käyttää, jolloin myös luennoitsijan ja assistentin työkenttä selkenisi keskityttäessä yhteen kehitysympäristöön.

Jatkotutkimuksen aiheena voidaan pitää seuraavalla käytännön ohjelmointi -kurssilla saatavaa opiskelijapalautetta ja hypoteesin lopullista testausta (ks. luku 3.2) uudesta kurssimateriaalista (ks. liite 1).

47

7 Yhteenveto

Tämän tutkimuksen tarkoituksena oli koostaa luentomateriaalia käytettäväksi Käytännön ohjelmointi -kurssilla Lappeenrannan teknillisessä yliopistossa. C-ohjelmointikieli on jossain määrin menettänyt asemiaan opetuskielenä verrattaessa Suomen yliopistojen kurs-sitarjontaa, kun on siirrytty käyttämään oliopohjaisia kieliä ja suunnittelumenetelmiä.

Työelämässä on kuitenkin vielä selvää tarvetta myös perinteisten ohjelmointikielten taitajille.

Käytännön ohjelmointi -kurssin C-kielen perusteisiin oli jo oma oppaansa ja tehdyn konstruktion tuloksena rakentui luentomoniste C-kieli ja käytännön ohjelmointi – osa 2.

Luentomoniste käsittelee käytännön ohjelmointiin liittyviä aihekokonaisuuksia ollen samalla myös opas ja muistilista opiskelijoille keskeisistä Unix-komennoista esimerkiksi versionhallinnan yhteydessä. Muutenkin oppaassa pyritään antamaan sekä ohjelmaesimerkein että komentojonoin opiskelijoille selkeä kuva käsiteltävistä aihekoko-naisuuksista. Käytännön ohjelmointi -kurssin harjoitustyötä ajatellen luentomoniste sisältää myös ohjeet testauksen raportointiin ja esimerkki Excel-pohjat testauspöytäkirjasta ja testauspäiväkirjasta, joita opiskelijat voivat hyödyntää.

Liitteenä oleva luentomoniste koostuu seitsemästä yhtenäisestä lukukappaleesta, joissa on alussa lyhyt johdanto ja lopussa yhteenveto, jossa mainitaan aihekokonaisuuteen liittyvät www-linkit. Kahdeksas luku on yhteenveto sisältäen aihekokonaisuuksia joita ei kurssilla käsitellä, mutta joista uskotaan olevan opiskelijoille vastaisuudessa hyötyä.

Luentomonisteen liitteenä on suhteellisen lyhyt tyyliopas sisältäen kuusi sivua, mutta se tullee ohjaamaan opiskelijoita yhtenäisempään ohjelmointitapaan, joka puolestaan johtaa koodin parempaan luettavuuteen ja helpompaan tarkastettavuuteen.

48

Lähteet

Aalto-yliopisto, 2010, Tietotekniikan koulutusohjelman opinto-opas, [viitattu 31.05.2011],<URL:https://into.aalto.fi/display/fitik/Opinto-oppaat>.

Åbo Akademi, 2010, Undervisningsprogrammet 2009-2010 och 2010-2011, [viitattu 01.06.2011], <URL:http://www.abo.fi/student/it_undervisningsprogram>.

Ala-Mutka, K., Järvinen, H. & Lahtinen Essi. 2005, June, A Study of the Difficulties of Novice Programmer. Proceedings of the 10th annual SIGCSE conference on Innovation and technology in computer science education , Monte de Caparica p.

14-18.

Anderson, M.S. 2001, "The complex relations between the academy and industry - Views from the literature", The Journal of Higher Education, vol. 72, no. 2, pp. 226-246.

Carver, J. & Henderson, L. 2006, "Viope as a Tool for Teaching Introductory

Programming: An Empirical Investigation", CSEET '06: Proceedings of the 19th Conference on Software Engineering Education & Training (CSEET'06) .

Cheng, H.H. 2009, "C for the Course", Mechanical Engineering, vol. 131, no. 9, pp. 50-52.

Cheng, H.H. Ten Reasons to Teach and Learn Computer Programming in C, [viitattu 17.08.2011] ,<URL:http://iel.ucdavis.edu/publication/WhyC.html>.

CodeBlocks, Code::Blocks-sivusto, [viitattu 25.04.2011],

<URL:http://www.codeblocks.org/downloads/binaries#windows>.

GNU Coding Standards, [viitattu 28.3.2011],

<URL:http://www.gnu.org/prep/standards/html_node/index.html>.

Gorgone, J.T., Davis, G.B., Valacich, J.S., Topi, H., Feinstein, D.L. & Longenecker, H.E.

2002, Model Curriculum and Guidelines for Undergraduate Degree Programs in Information Systems, ACM, New York, NY, USA, [viitattu 19.09.2011],

<URL:http://www.is.informatik.unikiel.de/~thalheim/Wirtschaftsinformatik/Studienpr ofilWirtschaftsinformatik/LinkedDocuments/IS%202002.pdf>.

Haikala, I. & Järvinen, H. 2004., Käyttöjärjestelmät, Talentum, Helsinki.

Helsingin Yliopisto, 2010, Matemaattis-luonnontieteellinen tiedekunta, opinto-opas, [viitattu 01.06.2011], <URL:http://www.helsinki.fi/ml/opinto-opas/index.html>.

Itä-Suomen yliopisto, 2010, Luonnontieteiden ja metsätieteiden tiedekunta, Opinto-opas, [viitattu 01.06.2011],

<URL:http://www.uef.fi/c/document_library/get_file?uuid=fc37d285-1bd2-404e-bac5-16f3621f2ed7&groupId=78409&p_l_id=78564>.

49

Järvinen, P. & Järvinen, A. 2004, Tutkimustyön metodeista, Opinpaja, Tampere.

Jenkins, T. 2001, "The motivation of students of programming", ACM SIGCSE Bulletin, vol. 33, no. 3, pp. 53-56.

Jokela, T. 2001, Assessment of user-centred design processes as a basis for improvement action An experimental study in industrial settings. Acta Universitatis Ouluensis.

Series A, Oulun yliopisto, Oulu.

Jyväskylän yliopisto, 2010, Informaatioteknologian tiedekunnan opinto-opas, [viitattu 01.06.2011], <URL:http://opinto-opas.jyu.fi/it/2010/opas/pdf/index.php>.

Kasurinen, J. 2011, C-kieli ja käytännön ohjelmointi osa 1, Lappeenrannan teknillinen yliopisto.

Kasurinen, J. & Nikula, U. 2008, "Lower dropout rates and better grades through revised course infrastructure", Proceedings of the 10th IASTED International Conference on Computers and Advanced Technology in Education , pp. 152-157.

Kernighan, B.W. & Pike, R. 1999, The practice of programming, Addison-Wesley, Indianapolis.

Kernighan, B.W. & Ritchie, D.M. 1988, The C programming language, Prentice-Hall, Englewood Cliffs (NJ).

Koffman, E.B., Miller, P.L. & Wardle, C.E. 1984, "Recommended curriculum for CS1, 1984", Commun.ACM, vol. 27, no. 10, pp. 998-1001.

Koffman, E.B., Stemple, D. & Wardle, C.E. 1985, "Recommended curriculum for CS2, 1984: a report of the ACM curriculum task force for CS2", Commun.ACM, vol. 28, no. 8, pp. 815-818.

Koskimies, K. & Mikkonen, T. 2005, Ohjelmistoarkkitehtuurit, Talentum, Helsinki.

Lapin yliopisto, 2010, Menetelmätieteiden opinto-opas 2010-2011, [viitattu 01.06.2011],

<URL:http://www.ulapland.fi/Suomeksi/Yksikot/Yhteiskuntatieteiden_tiedekunta/O piskelu/Opiskeluinfoa/Opinto-opas.iw3>.

Lappeenrannan teknillinen yliopisto 2010, Tekniikan opinto-opas 2010-2011, [viitattu 25.04.11],

<URL:http://www.lut.fi/fi/lut/studies/tools/studyguide/Documents/Tekniikan%20op into-opas%202010-2011.pdf>.

Lappeenrannan teknillinen yliopisto 2006, Tekniikan opinto-opas 2006-2007, [viitattu 20.08.11],

<URL:http://www.lut.fi/fi/lut/studies/tools/studyguide/Documents/DIopas0607.pdf>

.

50

Lester, R.K. & Sotarauta, M. 2007, "Yliopistot, innovaatio ja alueiden kilpailukyky:

Huomioita ja johtopäätöksiä Local Innovation Systems -projektista" , Technology review 214/2007, Tekes,Helsinki, pp. 31-42.

March, S.T. & Smith, G. 1995, "Design And Natural-Science Research On Information Technology", Decision Support Systems, vol. 15, no. 4, pp. 251-266.

Milne, I. & Rowe, G. 2002, "Difficulties in Learning and Teaching Programming—Views of Students and Tutors", Department of Applied Computing, University of Dundee, Dundee , pp. 55-66.

Nikula, U., Alaoutinen, S., Kasurinen, J. & Pirinen, T. 2009, "Improving the technical infrastructure of a programming course", Proceedings - 2009 9th IEEE International Conference on Advanced Learning Technologies, ICALT 2009, pp. 374-376.

Nikula, U., Gotel, O. & Kasurinen, J. 2011, "A Motivation Guided Holistic Rehabilitation of the First Programming Course", ACM Transactions on Computing Education, Accepted for publication.

Oulun yliopisto, 2010, Opinto-opas 2010-2011 Teknillinen tiedekunta Oulun yliopisto, [viitattu 01.06.2011],

<URL:http://www.lutk.oulu.fi/tiedostot2007/opinto_opas/LuTKOpintoopas2010_20 11.pdf>.

Slaughter, S. & Leslie, L.L. 1997, Academic capitalism : politics, policies, and the entrepreneurial university, The Johns Hopkins University Press, Baltimore.

Tampereen teknillinen yliopisto, 2010, Opinto-opas 2010-2011, [viitattu 01.06.2011],

<URL:http://www.tut.fi/wwwoppaat/opas2010-2011/perus/laitokset/Ohjelmistotekniikka/index.html>.

Tampereen yliopisto, 2010, Opinto-oppaat 2010-2011, [viitattu 01.06.2011],

<URL:https://www10.uta.fi/opas/tutkintoOhjelma.htm?rid=4380&uiLang=fi&lang=

fi&lvv=2010>.

The Joint Task Force on Computing Curricula 2001, "Computing Curricula 2001 Computer Science", vol. 1, no. 3.

Trauth, E.M., Farwell, D.W. & Lee, D. 1993, "The IS expectation gap: Industry

expectations versus academic preparation", MIS Quarterly, vol. 17, no. 3, pp. 293.

Turun yliopisto, 2010, Opinto-opas Matemaattis-luonnontieteellinen tiedekunta 2010-2011, [viitattu 01.06.2011],

<URL:https://nettiopsu.utu.fi/opas/tutkintoOhjelma.htm?rid=4108&uiLang=fi&lang

=fi&lvv=2010>.

Vaasan yliopisto, 2010, Opinto-opas 2010-2011, [viitattu 01.06.2011],

<URL:http://www.uwasa.fi/tekniikka/oppaat/opintooppaat/opas/>.

51

Vanhala, E. & Nikula, U. 2010, Python 3 – ohjelmointiopas, versio 1.0, Käsikirjat 13, Lappeenrannan teknillinen yliopisto.

LIITE 1. C-KIELI JA KÄYTÄNNÖN OHJELMOINTI – OSA 2

(jatkuu) C-KIELI JA KÄYTÄNNÖN OHJELMOINTI – OSA 2

Lauri Kyttälä

(liite 1 jatkoa)

1 (jatkuu)

Sisällysluettelo

Luku 1: Ohjelmistokehitysympäristöt ... 3 1.1. Unix ... 3 1.2. Windows ... 4 1.3. Ubuntu Linux ... 4 1.4. Unix / Linux työpöytäympäristöt ... 4 1.5. Ubuntun editorit ... 5 1.6. Gnome-sovelluksia ... 5 1.7. Ubuntun asennus ... 5 1.8. Ohjelman kääntäminen Linuxissa ... 6 1.9. Makefile ... 6 1.10. Lopuksi ... 9 Luku 2: Versionhallinta ... 10 2.1. SVN (SubVersioN) ... 10 2.2. SVN:n tärkeimmät komennot ... 11 2.3. Lyhyt SVN ohje ... 12 2.4. Tortoise SVN ... 13 2.5. Lopuksi ... 13 Luku 3: Arkkitehtuuri ... 14 3.1. Ohjelmistoarkkitehtuuri yleisesti ... 14 3.2. Komponentin määritelmä... 15 3.3. Komponentit ohjelmistokehityksen yksikköinä ... 15 3.4. Komponentit ja rajapinnat ... 15 3.5. Lopuksi ... 16 Luku 4: Tyyliopas ... 17 4.1. Lopuksi ... 17 Luku 5: Moduulitestaus ... 18 5.1. Testiajuri ... 19 5.2. Tynkä ... 20 5.3. Testikattavuus ... 21 5.4. Lasilaatikkotestaus ... 22 5.5. Mustalaatikkotestaus ... 22 5.6. Virheiden etsintä ... 23 5.7. Lopuksi ... 24 Luku 6: Kooditarkastus ... 25 6.1. Tarkastus Faganin tapaan ... 26 6.2. Integrointitestaus ... 26 Luku 7: Testaus laajemmin ... 28 7.1. Testitapaukset ... 28 7.2. Testauksen dokumentointi ... 30 7.3. Testauksen hallinta ... 30 7.4. Testauksen raportointi ... 31 7.5. Järjestelmätestaus ... 32 7.6. Regressiotestaus ... 33 7.7. Regressiotestauksen automatisointi ... 33 7.8. Regressiotestaus käytännössä ... 34 7.9. Testauksen työkaluja ... 35

(liite 1 jatkoa)

2 (jatkuu)

7.10. Lopuksi ... 35 Luku 8: Yhteenveto ... 36 8.1. Esikääntäjä ... 36 8.2. Makro ... 36 8.3. Scriptit ... 37 8.4. Funktio-osoitin ... 38 8.5. Errno ... 39 8.6. X11 ikkunointijärjestelmä ... 40 8.7. Xlib ... 41 Loppusanat ... 43 8.8. Huomioita ... 43 8.9. Lisäluettavaa ... 43 Lähteet ... 44 Liite 1: Tyyliopas ... 46

(liite 1 jatkoa)

3 (jatkuu)

Luku 1: Ohjelmistokehitysympäristöt

Unix- ja Windows- käyttöjärjestelmät eroavat toisistaan sekä ohjelmisto- että yleiskäyt-töisinä ympäristöinä. Seuraavassa esitellään käyttöjärjestelmien perusteita lyhyesti vertail-len niitä toisiinsa.

1.1.Unix

Ohjelmointi C-kielellä Unix / Linux ympäristössä on sikäli luonnollista, että Unix on kir-joitettu C-kielellä, näin ollen esim. perus C-kääntäjät tulevat oletuksena mukana asennuk-sessa, tai ainakin ne ovat helppoja asentaa sekä Linuxissa ilmaisia. Lisäksi kääntäjien käyttö on yleensä varsin ongelmatonta ja suoraviivaista. Unixista on olemassa useita kaupallisia versioita mm. Oracle Solaris. Tunnetuin Unix-klooneista on nykyään Linux, joka on GNU (GNU’s Not Unix) GPL-lisenssin (General Public Licence) mukaista koodia.

GNU/Linux- jakelupaketteja on useita jotka kuitenkin perustuvat Debian, Red Hat, Fedora, Slackware ja SuSe paketteihin. Red Hat on kaupallinen jakelupaketti, johon samanniminen pörssiyhtiö tarjoaa mm. ylläpitopalveluja.

Linuxissa on nykyään varsin kehittynyt graafinen käyttöliittymä, joka sallii ohjelmistoke-hityksen halutussa kehitysympäristössä merkkipohjaisen (komentorivi) käyttöliittymän sijaan. Gnome-työpöydälle on saatavissa mm. varsin monipuolinen Anjuta kehitystyöym-päristö, IDE (Integrated Development Environment). Anjuta mahdollistaa projektinhallinnan sekä sisältää debuggerin, kääntäjän sekä monipuolisen editorin. Linux-jakelun mukana tulee myös ilmainen OpenOffice-ohjelmisto. Kuvassa 1 esitetään Unix – GNU/Linux kehityskaari alkaen vuodesta 1969 päättyen Linuxin julkistamiseen.

1969 1972 kehitti FSF:än (Free Soft

Foundation) loi GPL:n (General Public

License)

Kuva 1. UNIX GNU/Linux aikajana (Robot Wisdom).

(liite 1 jatkoa)

4 (jatkuu)

1.2.Windows

Windows käyttöjärjestelmänä edustaa puhtaasti kaupallista linjaa ollen työasemamarkki-noilla johtavassa asemassa 92 prosentin osuudellaan (Keizer 2010). Käyttöjärjestelmään on saatavissa myös freeware ja shareware ohjelmia. Windowsin tuettuja työasemaversioita on käytössä tällä hetkellä kolme; Windows XP, Vista ja Windows 7.

Nykyään useimmat kehitysympäristöt tukevat Windows- käyttöjärjestelmää sen johtavan markkina-aseman tähden, mutta monet kehitysympäristöt tukevat myös GNU/Linuxia kuten esim. Eclipse ja CodeBlocks.

1.3.Ubuntu Linux

Ubuntu on avoimesta lähdekoodista koostuva Linux-käyttöjärjestelmä. Ubuntu sisältää kaikki peruskäyttöön tarvittavat ohjelmat, kuten esim. tekstinkäsittelyn, taulukkolaskennan, sähköpostiohjelman ja nettiselaimen. Ohjelmia on helppo asentaa lisää joko komentoriviltä tai synaptic asennustyökalulla. Graafisen asennusohjelman avulla käyttöjärjestelmän asennus on ongelmatonta ja sujuu nopeasti. Ubuntu-projekti on sitoutunut noudattamaan vapaan ohjelmistokehityksen periaatteita.

1.4.Unix / Linux työpöytäympäristöt

Työpöytää käytetään sovellusten hallintaan ja käyttöön. X11 ikkunointijärjestelmälle on kehitetty useita yhtenäisen käyttöliittymän antavia työpöytäympäristöjä. Kaupallisella puolella Sun:lla ja DEC:llä (Digital Equipment Corporation) oli omat tuotteensa, sittemmin lähes kaikki ovat siirtyneet käyttämään The Open Groupin kehittämää Common Desktop Environment:ia (CDE). Linux-puolella 1998 julkaistiin KDE 1.0, joka käyttää Qt-käyttöliittymäkirjastoa. Vuonna 1997 käynnistyi GNOME-projekti (GNU Network Object Model Environment), joka on nykyisin GNU:n virallinen työpöytäympäristö. (Wikipedia X Window System)

Gnome-projektin tavoitteena on tarjota helppokäyttöinen tietokoneen graafinen käyttöliit-tymä ja kattava kehitysalusta sovelluksille. Gnome on saatavilla useimpiin Linux- ja BSD-käyttöjärjestelmiin. Ubuntun oletustyöpöytäympäristö Gnome on käytetyin UNIX- ja Linux-työpöytä ja kehitysalusta. Vaihtoehtoisesti on mahdollista asentaa jälkikäteen KDE- tai Xfce-työpöytäympäristöt Ubuntun Gnome-työpöydän sovellustenhallinnan kautta (Sovellukset - Ubuntu sovellusvalikoima). Ohjeet työpöytien asennukseen löytyvät esim.

linkistä: http://www.psychocats.net/ubuntu/kde.

(liite 1 jatkoa)

5 (jatkuu)

1.5.Ubuntun editorit

Ubuntuun löytyy monia hyviä ja helppokäyttöisiäkin editoreja kuten esim. vi, nano, gedit

(kuuluvat perusasennukseen) ja emacs (asennettava erikseen). Emacs kehittyneempänä editorina tarjoaa monipuolisia mahdollisuuksia myös koodin kääntämiseen suoraan alas-vetovalikon kautta.

1.6.Gnome-sovelluksia

Muutamia käytetyimpiä Gnomen mukana toimitettavista sovellusohjelmista ovat:

Evince – PDF- ja PostScript-dokumenttien katselin

Evolution – sähköposti- ja kalenteriohjelma

Empathy – pikaviestiohjelma

Screenshot – kuvankaappausohjelma.

1.7.Ubuntun asennus

Linux voidaan asentaa joko Windowsin rinnalle nk. dual-boot:ina tai virtuaalikoneeseen.

Virtuaalikone löytyy esim. linkistä: http://www.vmware.com/products/player/, samoin ohjeet sen asentamiseen. Dual-boot asennus hoituu sekin suoraviivaisesti asennusohjelman ohjeitten mukaisesti. Valittaessa asennustavaksi dual-boot, GRUP-loader ohjelma latautuu koneelle hoitaen jatkossa alkukäynnistyksen. Ubuntu Linux-käyttöjärjestelmä on ladatta-vissa osoitteesta http://www.ubuntu-fi.org/ iso- tiedostoformaatissa.

(liite 1 jatkoa)

6 (jatkuu)

1.8.Ohjelman kääntäminen Linuxissa

Ohjelma voidaan kirjoittaa esim. gedit-editointiohjelmalla ja tallettaa haluttuun hakemisto-rakenteeseen. Tämän jälkeen ohjelma käännetään komennolla:

gcc –o ohjelma ohjelma.c

Mikäli käännös onnistuu ilman virheitä, tallentuu hakemistoon suoritettava ohjelmatie-dosto, joka on ajettavissa komennolla: ./ohjelma (./:llä kohdistetaan suorituskomento työhakemiston ajettavaan binääritiedostoon ohjelma). On suositeltavaa käyttää käännöskomentoa parametreilla; gcc –o ohjelma ohjelma.c -std=c99 –Wall, määreellä -o käännetään lähdekoodi ohjelma.c binääriseksi suoritettavaksi tiedostoksi, määreellä -std=c99 lähdekoodin tulee täyttää ANSI C99 standardin mukaiset vaatimukset ja Wall aktivoi kaikki varoitukset (warnings).

1.9.Makefile

GNU Make on työkalu joka hyväksyy syötteekseen Makefile-tiedoston, ks. esimerkki 1 alla. Työhakemistossa on siis kolme lähdekooditiedostoa project.c, read.c ja write.c

jotka ensi käännetään kukin erikseen ja lopuksi yhdistetään yhdeksi suoritettavaksi tiedostoksi project. Makefilen tarkoituksena on yksinkertaistaa ja helpottaa ohjelman käännöstä sen koostuessa useammasta komponentista. Komennolla make –f <tiedosto>

voidaan komennon parametrina antaa tiedoston nimi joka suoritetaan.

Esimerkki 1.

# Yksinkertainen Makefile

project:project.o read.o write.o

gcc –std=c99 -Wall project.o read.o write.o -o project

Ajettuna esimerkin 1 Makefile suorittaa seuraavat komennot:

cc -c -o project.o project.c cc -c -o read.o read.c

cc -c -o write.o write.c

gcc project.o read.o write.o -o project

jolloin syntyy suoritettava binääritiedosto project.

(liite 1 jatkoa)

7 (jatkuu)

Käännettävän ohjelman koostuessa useammasta komponentista on hyödyllistä tehdä kään-nös- ja linkkausvaihe erikseen, jolloin aikasäästöt saattavat olla huomattavat.

Kuvassa 2 laatikko kuvaa aina yhden Makefilen lohkon suoritusta:

all: data.o io.o main.o

gcc data.o io.o main.o –o executable data.o: data.c data.h

gcc –c –std=c99 –Wall data.c io.o: io.c io.h

gcc –c –std=c99 –Wall io.c main.c: main.c data.h io.h main.h

gcc –c –std=c99 –Wall main.c

Makefile vaatii rivinvaihdon yhteyteen tabulaattorin toimiakseen.

data.h data.c

data.o

main.h main.c

main.o

Io.c io.h

Io.o

executable

Kuva 2. Makefilen hierarkinen lohkorakenne.

(liite 1 jatkoa)

8 (jatkuu)

Alla vielä toinen esimerkki Makefilestä jossa on käytetty parametrejä.

Esimerkki 2.

# Kommentti

# make komento täydentää all: rivin vaatimukset

# make täydentää clean: rivin joka poistaa (rm = remove) rekursiivisesti (–r) mainitut tiedostot

# Voit käyttää muuttujia kirjoittaessasi Makefile:n. Tämä on käytännöl-listä kun

# haluat esim. vaihtaa kääntäjää tai kääntäjän parametreja.

# muuttuja CC ilmoittaa kääntäjän

# muuttuja CFLAGS välittää parametrit kääntäjälle CC = gcc

CFLAGS = -c –Wall –std=c99 all: koe

koe: main.o my_stdio.o

$(CC) main.o my_stdio.o -o koe main.o: main.c

$(CC) $(CFLAGS) -c main.c my_stdio.o: my_stdio.c my_stdio.h

$(CC) $(CFLAGS) -c my_stdio.c

# make clean clean:

rm -r *.o koe *.*~ *~

(liite 1 jatkoa)

9 (jatkuu)

1.10.Lopuksi

Ohessa on muutamia hyödyllisiä linkkejä liittyen luvun aiheeseen:

Ohje gcc-kääntäjästä:

http://www.network-theory.co.uk/gcc/intro/gccintro-sample.pdf Unix-harjoituksia aloittelijoille:

http://www.ee.surrey.ac.uk/Teaching/Unix/index.html Ubuntun asennus:

Ubuntu: http://www.ubuntu-fi.org/

virtuaalikone: http://www.vmware.com/products/player/

Makefile:

http://linux.fi/wiki/Makefile

http://oreilly.com/catalog/make3/book/index.csp

(liite 1 jatkoa)

10 (jatkuu)

Luku 2: Versionhallinta

Yksi tärkeimmistä asioista ohjelmistoprojekteissa on versionhallinta. Versionhallintajärjes-telmät rakentuvat asiakas-palvelin periaatteelle yksinkertaistetun kuvan 3 mukaan. Tällä raken-teella varmistetaan se, että ohjelmamoduulista säilyy aina alkuperäinen kappale arkistossa (repository) ja vain kopiota editoidaan.

Ohjelmistokehityksen aikana tulee taata stabiili työympäristö, jossa projektiin osallistuvat henki-löt eivät tee samanaikaisia muutoksia moduuleihin, siis ylikirjoita toistensa tekemiä muutoksia.

Lisäksi muutokset tulee systemaattisesti kommentoida. Kun ohjelmistoa kehitetään sen moduu-leiden versionumerot normaalisti kasvavat, mutta saattaa tulla tarve jonkin moduulin osalta palata edelliseen versioon. Versionhallintaohjelmistot mahdollistavat nämä edellä mainitut, minkä lisäksi ne tallentavat tiedostoja editoineen henkilön tiedot ja aikaleiman.

arkisto

asiakas 2 asiakas 1

toimita

toimita päivitä

päivitä

Kuva 3. Versionhallinnan yksinkertaistettu asiakas-palvelin periaate.

2.1.SVN (SubVersioN)

Tigris SVN (http://subversion.tigris.org/) on avoimen lähdekoodin versionhallintaohjel-misto GNU/Linux- ympäristöön. Versionhallinnan arkisto sisältää kaikki ohjelmamoduu-lien versiot joista muodostuu ohjelman versiohistoria. Päivitä-komennolla haetaan työversio (working copy) arkistosta. Ideana versionhallinnassa on että työversio olisi editoitavana vain yhdellä henkilöllä kerrallaan. Jos tilanne kuitenkin muuta vaatii, on siihen olevissa menetelmiä joilla työversioon tehdyt muutokset voidaan tehdä hallitusti, SVN:ssä kopioi/muuta/yhdistä -malli.