DTEK0065 / DTEK8971 Ohjelmoinnin laboratoriotyökurssi

Ohjelmistokehityksen työkaluja

Jari-Matti Mäkelä 8.3.2021 Tänään aiheina

Ohjelmistokehityksen työkaluja

Git

2 Ohjelmistokehityksen työkaluja Aloitetaanpa

2 Kaiken takana: iteratiivinen ohjelmistonkehitysprosessi

PROJEKTIN ALOITUS

MÄÄRITTELY

VALMISTELU SUUNNITTELU

ITERATIIVINEN OHJELMISTONITERATIIVINEN KEHITYS

ARVIOINTI TOTEUTUS

VERIFIOINTI

KÄYTTÖÖNOTTO 3 Työkalutarjontaa

Kuva 1: http://www.jamesbowman.me/post/continuous-delivery-tool-landscape/ 4 Työkalutarjontaa #2

Kuva 2: https://harness.io/2018/01/devops-tools-lifecycle-mesh-2018/ 5 Työkalutarjontaa #3

Kuva 3: agilegnostic.wordpress.com/2015/11/12/four-facets-of-agile-part-3-tools-and-technologies

6 Työkalutarjontaa #4

• Wikibooks - Introduction to Software Engineering

• Programming tool - Wikipedia

• https://hacker-tools.github.io/

• https://www.reddit.com/r/programmingtools/

• https://www.reddit.com/r/learnprogramming/wiki/tools

• Online-kurssit: esim. https://mooc.fi/ - DevOps with Docker

• yms.

• Yleisemmin: Outline of software engineering

7 • Kommunikointivälineet • oleellista “ammatillisten artefaktien” (esim. koodi, assetit) välittäminen käyttökelpoisessa muodossa

Yleiskatsaus työkaluihin

• Integroitu kehitysympäristö (IDE) • koodin kirjoitus • koodin kääntäminen ja kokoaminen (ks. konfiguraationhallinta) • syntaksin ja semantiikan tarkistus (“lintteri”) • virheenjäljitys (“debuggaus”) • yksikkötestaus (ks. testaus) • ..ja muita rajapintoja • esimerkkejä: Eclipse, IntelliJ IDEA

8 Yleiskatsaus työkaluihin

• Integroitu kehitysympäristö (IDE) • koodin kirjoitus • koodin kääntäminen ja kokoaminen (ks. konfiguraationhallinta) • syntaksin ja semantiikan tarkistus (“lintteri”) • virheenjäljitys (“debuggaus”) • yksikkötestaus (ks. testaus) • ..ja muita rajapintoja • esimerkkejä: Eclipse, IntelliJ IDEA

• Kommunikointivälineet • oleellista “ammatillisten artefaktien” (esim. koodi, assetit) välittäminen käyttökelpoisessa muodossa

8 • Versionhallinta • hajautettu, samanaikainen kehitystyö • ominaisuuksien itsenäinen kehitys • ominaisuuksien integrointi • konfliktien hallinta • esimerkkejä:

Yleiskatsaus työkaluihin #2

• DevOps-elinkaarityökalu • lähdekoodin varastointi (ks. versionhallinta) • bugiraportointi • CI/CD (ks. testaus & konfiguraationhallinta) • (alkeellinen) projektinhallinta • wiki ja dokumentaatio • ..ja muita rajapintoja • esimerkkejä: Gitlab, Github

9 Yleiskatsaus työkaluihin #2

• DevOps-elinkaarityökalu • lähdekoodin varastointi (ks. versionhallinta) • bugiraportointi • CI/CD (ks. testaus & konfiguraationhallinta) • (alkeellinen) projektinhallinta • wiki ja dokumentaatio • ..ja muita rajapintoja • esimerkkejä: Gitlab, Github

• Versionhallinta • hajautettu, samanaikainen kehitystyö • ominaisuuksien itsenäinen kehitys • ominaisuuksien integrointi • konfliktien hallinta • esimerkkejä: Git 9 • Alustan virtualisointi • käyttöympäristön konfigurointi • komponenttien eristäminen ja uudelleenkäyttö • klusterointi ja skaalaus • esimerkkejä: Docker, Podman, LXD

Yleiskatsaus työkaluihin #3

• Konfiguraationhallinta • projektin ja komponenttien määritys • kokoaminen • konfiguraatio • (ohj.komponenttien) versiointi • esimerkkejä: Maven, Gradle

10 Yleiskatsaus työkaluihin #3

• Konfiguraationhallinta • projektin ja komponenttien määritys • kokoaminen • konfiguraatio • (ohj.komponenttien) versiointi • esimerkkejä: Maven, Gradle

• Alustan virtualisointi • käyttöympäristön konfigurointi • komponenttien eristäminen ja uudelleenkäyttö • klusterointi ja skaalaus • esimerkkejä: Docker, Podman, LXD

10 • Virheenjäljitys • komponenttien toiminta määrittelyn mukaista • tehokkuusaspektit • esimerkkejä: IDE:n integroitu debuggeri, VisualVM

• Dokumentaation generointi • esimerkkejä: javadoc, doxygen

Yleiskatsaus työkaluihin #4

• (Yksikkö)testaus • komponenttien toiminta määrittelyn mukaista • epäkelvon syötteen käsittely • tehokkuusaspektit • esimerkkejä: JUnit, JQwik

11 • Dokumentaation generointi • esimerkkejä: javadoc, doxygen

Yleiskatsaus työkaluihin #4

• (Yksikkö)testaus • komponenttien toiminta määrittelyn mukaista • epäkelvon syötteen käsittely • tehokkuusaspektit • esimerkkejä: JUnit, JQwik

• Virheenjäljitys • komponenttien toiminta määrittelyn mukaista • tehokkuusaspektit • esimerkkejä: IDE:n integroitu debuggeri, VisualVM

11 Yleiskatsaus työkaluihin #4

• (Yksikkö)testaus • komponenttien toiminta määrittelyn mukaista • epäkelvon syötteen käsittely • tehokkuusaspektit • esimerkkejä: JUnit, JQwik

• Virheenjäljitys • komponenttien toiminta määrittelyn mukaista • tehokkuusaspektit • esimerkkejä: IDE:n integroitu debuggeri, VisualVM

• Dokumentaation generointi • esimerkkejä: javadoc, doxygen

11 Kommunikointitekniikoista

Nykyään monia tekniikoita, mistä valita…

aim, allo, android messages, bbm, blackberry messenger, briar, chaton, , diaspora, discord, duo, ebuddy, ekiga, email, facetime, fb, fb messenger, flowdock, gadu-gadu, gchat, gitter, hangouts, hike, hipchat, icq, imessage, imo, instagram, irc, jabber, jodel, kakaotalk, kik, line, linkedin, live messenger, lync, mailing lists, matrix, mattermost, myspaceim, periscope, qq, signal, skype, slack, sms ja mms., snapchat, socializer messenger, supesonic fun voice messenger, tamtam messenger, tango, teamspeak, telegram, threema, tinder, tiktok, tox, twitter, usenet news, ventrilo, viber, vk, voice, wechat, whatsapp, wickr me, wire, wispi, xfire, xmpp, yahoo messenger, yammer, zangi messenger, zoom, zulip, …

12 Esimerkki: IRC

Yliopiston kommunikaatiopalveluita: linux.utu.fi (ssh), irc.utu.fi (irc)

13 Esimerkki: Mattermost

https://mattermost.utu.fi/, https://mail.utu.fi/, yms

14 Esimerkki: Trello

Projektin työtehtävien seurantaan palveluita: https://trello.com/

15 • Ns. “pastebin-palvelut” • kannattaa tarkistaa sisällön lisensointipolitiikka, varsinkin NDA:n alaista työkoodia jakaessa !! • lähtökohtaisesti myös julkisia ja hakkereiden kiinnostuksen kohteita • osassa kommentointimahdollisuus, jopa koodin rivitasolla

• Ohjelmankehitysalustat • edellyttää ensin projektin luomista (http://gitlab.utu.fi/) • esim. github gist, gitlab snippets, bitbucket snippets, jne.

• Kysymysten kysymisestä • http://www.catb.org/~esr/faqs/smart-questions.html • https://jvns.ca/blog/good-questions/

Ohjelmakoodeista keskustelu

• Edellä mainituissa keskustelualustoissa vaihteleva tuki

16 • Ohjelmankehitysalustat • edellyttää ensin projektin luomista (http://gitlab.utu.fi/) • esim. github gist, gitlab snippets, bitbucket snippets, jne.

• Kysymysten kysymisestä • http://www.catb.org/~esr/faqs/smart-questions.html • https://jvns.ca/blog/good-questions/

Ohjelmakoodeista keskustelu

• Edellä mainituissa keskustelualustoissa vaihteleva tuki

• Ns. “pastebin-palvelut” • kannattaa tarkistaa sisällön lisensointipolitiikka, varsinkin NDA:n alaista työkoodia jakaessa !! • lähtökohtaisesti myös julkisia ja hakkereiden kiinnostuksen kohteita • osassa kommentointimahdollisuus, jopa koodin rivitasolla

16 • Kysymysten kysymisestä • http://www.catb.org/~esr/faqs/smart-questions.html • https://jvns.ca/blog/good-questions/

Ohjelmakoodeista keskustelu

• Edellä mainituissa keskustelualustoissa vaihteleva tuki

• Ns. “pastebin-palvelut” • kannattaa tarkistaa sisällön lisensointipolitiikka, varsinkin NDA:n alaista työkoodia jakaessa !! • lähtökohtaisesti myös julkisia ja hakkereiden kiinnostuksen kohteita • osassa kommentointimahdollisuus, jopa koodin rivitasolla

• Ohjelmankehitysalustat • edellyttää ensin projektin luomista (http://gitlab.utu.fi/) • esim. github gist, gitlab snippets, bitbucket snippets, jne.

16 Ohjelmakoodeista keskustelu

• Edellä mainituissa keskustelualustoissa vaihteleva tuki

• Ns. “pastebin-palvelut” • kannattaa tarkistaa sisällön lisensointipolitiikka, varsinkin NDA:n alaista työkoodia jakaessa !! • lähtökohtaisesti myös julkisia ja hakkereiden kiinnostuksen kohteita • osassa kommentointimahdollisuus, jopa koodin rivitasolla

• Ohjelmankehitysalustat • edellyttää ensin projektin luomista (http://gitlab.utu.fi/) • esim. github gist, gitlab snippets, bitbucket snippets, jne.

• Kysymysten kysymisestä • http://www.catb.org/~esr/faqs/smart-questions.html • https://jvns.ca/blog/good-questions/

16 Esimerkki: Ideone

17

Kuva 4: https://ideone.com/ Esimerkki: Gitlab snippet

18

Kuva 5: https://gitlab.utu.fi/ Esimerkki: Gitlab snippet #2

19 Esimerkki: Gitlab snippet #3

20 Avun kysyminen

• Netissä lukuisia suosittuja ohjelmistoalan keskustelualustoja 1) interaktiiviset chat-huoneet 2) uutisten kommenttipalstat 3) kysymys/vastaus-tyyliset palstat • Suositeltavaa seurata jo yleisestä kiinnostuksesta alaa kohtaan • Lähes kaikille alalla tutuksi tulevia sivustoja ohjelmointiongelmien yms. tiimoilta: • Stackoverflow (3) • Quora (3) • Hacker News (2) • Reddit (/r/programming) (2) • Medium • Wikipedia

21 Esimerkki: stackoverflow.com

22

# Versionhallinta • Aiemmin: rcs, cvs, svn, … • Nykyään suosituimmat: git, hg, bzr, darcs, … • Ehkä tulossa: Pijul yms. tutkimusprojekteja

• Versionhallinta seuraa tiedostojen historiaa • tiedoston sisältä: lisätyt/poistetyt/siirretyt/muutetut rivit • tiedostotasolla (nimi ja muu metadata) • muutoskokonaisuuksia (tiedostojoukot) • Tietokantamainen (lukitus ja atomisuus) • Eheys taattu kryptografisesti (esim. SHA-1) • Seurattavat & seurannan ulkopuoliset tiedostot

Versionhallinta - pääperiaatteet

• Automatisoi versionhallinnan työtehtäviä

23 • Versionhallinta seuraa tiedostojen historiaa • tiedoston sisältä: lisätyt/poistetyt/siirretyt/muutetut rivit • tiedostotasolla (nimi ja muu metadata) • muutoskokonaisuuksia (tiedostojoukot) • Tietokantamainen (lukitus ja atomisuus) • Eheys taattu kryptografisesti (esim. SHA-1) • Seurattavat & seurannan ulkopuoliset tiedostot

Versionhallinta - pääperiaatteet

• Automatisoi versionhallinnan työtehtäviä

• Aiemmin: rcs, cvs, svn, … • Nykyään suosituimmat: git, hg, bzr, darcs, … • Ehkä tulossa: Pijul yms. tutkimusprojekteja

23 Versionhallinta - pääperiaatteet

• Automatisoi versionhallinnan työtehtäviä

• Aiemmin: rcs, cvs, svn, … • Nykyään suosituimmat: git, hg, bzr, darcs, … • Ehkä tulossa: Pijul yms. tutkimusprojekteja

• Versionhallinta seuraa tiedostojen historiaa • tiedoston sisältä: lisätyt/poistetyt/siirretyt/muutetut rivit • tiedostotasolla (nimi ja muu metadata) • muutoskokonaisuuksia (tiedostojoukot) • Tietokantamainen (lukitus ja atomisuus) • Eheys taattu kryptografisesti (esim. SHA-1) • Seurattavat & seurannan ulkopuoliset tiedostot

23 • Lataussivu: https://git-scm.com/downloads • Linux-käyttäjät voivat asentaa paketinhallinnan kautta • Valmiina laitoksen virtuaalikoneessa

• Tuettu myös IDE-ympäristöissä • Eclipse, IntelliJ IDEA, … • Aputyökaluja • SourceTree, GitHub Desktop, TortoiseGit, Git Extensions, GitKraken, SmartGit, Tower, GitEye, gitg, ungit, git-cola, Cycligent, Aurees, Fork, CodeReview, gmaster, GitAhead, GitBlade, Guitar, RepoZ, GitAtomic, Sublime Merge, gitk, git-gui

Git

• Linus Torvalds (2005) • Hajautettu, tehokas, avoin lähdekoodi • Käytännössä nykyään hyvin laajalti • Seuraa muutosseteissä tiedostoja

24 • Tuettu myös IDE-ympäristöissä • Eclipse, IntelliJ IDEA, … • Aputyökaluja • SourceTree, GitHub Desktop, TortoiseGit, Git Extensions, GitKraken, SmartGit, Tower, GitEye, gitg, ungit, git-cola, Cycligent, Aurees, Fork, CodeReview, gmaster, GitAhead, GitBlade, Guitar, RepoZ, GitAtomic, Sublime Merge, gitk, git-gui

Git

• Linus Torvalds (2005) • Hajautettu, tehokas, avoin lähdekoodi • Käytännössä nykyään hyvin laajalti • Seuraa muutosseteissä tiedostoja

• Lataussivu: https://git-scm.com/downloads • Linux-käyttäjät voivat asentaa paketinhallinnan kautta • Valmiina laitoksen virtuaalikoneessa

24 Git

• Linus Torvalds (2005) • Hajautettu, tehokas, avoin lähdekoodi • Käytännössä nykyään hyvin laajalti • Seuraa muutosseteissä tiedostoja

• Lataussivu: https://git-scm.com/downloads • Linux-käyttäjät voivat asentaa paketinhallinnan kautta • Valmiina laitoksen virtuaalikoneessa

• Tuettu myös IDE-ympäristöissä • Eclipse, IntelliJ IDEA, … • Aputyökaluja • SourceTree, GitHub Desktop, TortoiseGit, Git Extensions, GitKraken, SmartGit, Tower, GitEye, gitg, ungit, git-cola, Cycligent, Aurees, Fork, CodeReview, gmaster, GitAhead, GitBlade, Guitar, RepoZ, GitAtomic, Sublime Merge, gitk, git-gui 24 • Mahdollista pystyttää omia palvelimia • https://gitlab.com/ - “hieman raskas” • https://gitea.io/ • https://gogs.io/ • Gitbucket, GitPrep, Kallithea, TuleapL, • …

Git #2

• Etävarastopalveluita • Turun yliopiston http://gitlab.utu.fi/ • https://github.com/ • https://gitlab.com/ • https://bitbucket.org/ • https://savannah.nongnu.org/ • …

25 Git #2

• Etävarastopalveluita • Turun yliopiston http://gitlab.utu.fi/ • https://github.com/ • https://gitlab.com/ • https://bitbucket.org/ • https://savannah.nongnu.org/ • …

• Mahdollista pystyttää omia palvelimia • https://gitlab.com/ - “hieman raskas” • https://gitea.io/ • https://gogs.io/ • Gitbucket, GitPrep, Kallithea, TuleapL, Phabricator • …

25 Gitin käyttöön palataan ensi kerralla.

25