(H) Kurssin palautuskäytäntö

Varoitus

Pystyt palauttamaan tehtävän vasta sitten, kun sinulle on luotu repositorio. Repositoriot luodaan vasta ilmoittautumisajan päätyttyä eli ensimmäisellä opiskeluviikolla.

Tavoite: Opin palauttamaan tekemäni C++-ohjelman opintojaksolla käytettyyn automaattiseen arviointijärjestelmään ja tulkitsemaan automaattisen palautejärjestelmän palautetta.

Tällä kurssilla saat tehtävänantoihin liittyvät ohjelmakoodipohjat käyttöösi versionhallinnan kautta, eli kurssin henkilökunta on tallentanut ne Git-keskustietovarastoosi, josta sinun pitää hakea ne paikalliseen tietovarastoosi, jotta voit tutkia niitä. Samoin palautat toteuttamasi ohjelmakoodit Plussaan versionhallinnan kautta.

Tässä tehtävässä harjoittelemme näiden toimenpiteiden suorittamista. Itse ohjelmointiosuus on pieni, vain yhden rivin mittainen. Tehtävänanto on pitkä, koska siinä ohjeistetaan versionhallinnan käyttöä yksityiskohtaisesti.

Huomaa, että alla olevissa ohjeissa kohdassa “4) Toteutuksen tallentaminen versionhallintaan” kerrotaan, miten tallentaminen onnistuu komentorivillä. Tallentamisen voi tehdä myös Qt Creatorin kautta. Ohjeet tähän löytyy materiaalin kohdasta 14.2 Toteutuksen tallentaminen versionhallintaan.

Tietovaraston rakenne

Kloonaamassasi kurssin Git-tietovarastossa on kolme hakemistoa:

  • templates, joka sisältää ohjelmakoodipohjat
  • student, jonne toteutat omat ohjelmakoodisi
  • examples, joka sisältää materiaalissa käytettyjä esimerkkiohjelmien koodeja.

Avaa etätyöpöytäympäristön tiedostonhallintajärjestelmä (Applications > Accessories > Files) ja katso, että löydät nämä hakemistot.

Älä koskaan tee mitään muokkauksia hakemistojen examples ja templates sisältöihin. Älä edes poista niistä mitään tiedostoja. Muutokset näissä hakemistoissa johtavat ongelmiin, kun kurssin henkilökunta kurssin edetessä lisää uusia materiaaleja ja ohjelmakoodipohjia. Tällöin et saa uusia tiedostoja käyttöösi.

Vaihe 1) Ohjelmakoodipohjan hakeminen

Kun alat tehdä tehtävää, johon kurssin henkilökunta on toteuttanut valmiin ohjelmakoodipohjan, tarkoittaa se, että et itse luo projektia Qt Creatorissa, vaan haet valmiin projektin Git-repositoriosta.

Olet juuri edellisestä materiaaliosiota lukiessasi kloonannut tietovaraston, joten tällä hetkellä se sisältää kaikki kurssihenkilökunnan tekemät muutokset.

Jos tehtävässä on valmis ohjelmakoodipohja tehtävänannossa kerrotaan aina, minkä nimisessä hakemistossa valmis projektipohja sijaitsee. Valmiit projektipohjat ovat aina hakemiston templates alihakemistoina. Kopioi oikean niminen hakemisto hakemiston student alihakemistoksi. Ole tarkkana, että varmasti kopioit, etkä siirrä hakemistoa, koska hakemistoon templates ei saa tehdä mitään muutoksia.

Tässä tehtävässä tarvittava ohjelmakoodipohja löytyy hakemistosta templates/01/first_submission. Avaa nyt siis tiedostonhallintajärjestelmä ja kopioi kyseinen hakemisto hakemistoksi student/01/first_submission. Kannattaa kopioida koko hakemisto templates/01/ kerralla hakemistoon student/01/, niin saat kaikki kierroksen 1 pohjat kerralla oikeaan paikkaan.

Vaihe 2) Projektin avaaminen Qt Creatorissa

Valitse Qt Creatorissa toiminto “Open File or Project…” ja valitse hakemistossa student/01/first_submission oleva projektitiedosto (.pro-päätteinen tiedosto). Qt Creator avaa sinulle projektin, joka sisältää ohjelmakoodipohjan. Jos projekti avautuu ensin Configure Project -välilehteen, klikkaa vain Configure Project.

Ole tarkkana, että avaat projektin hakemistosta student etkä hakemistosta templates!

Vaihe 3) Tehtävän toteuttaminen

Ohjelmakoodipohjassa on lähinnä vain syöte- ja tulostustoimintoja, joiden merkityksen luultavasti ymmärrät helposti, vaikka et olisi aiemmin nähnyt C++-ohjelmia. Jos kuitenkin tarvitset lisätietoja aiheesta, voit lukea seuraavan kierroksen materiaalia kohdasta 2.2.

Ohjelma kysyy käyttäjän nimen ja iän. Lisää ohjelmaan yksi tulostusrivi siten, että ohjelma toimii seuraavasti:

Enter your name: Will
Enter your age: 5
Pleased to meet you, Will!
In your next birthday you'll be 6 years old!

Vaihe 4) Toteutuksen tallentaminen versionhallintaan (komentoriviltä)

Tässä kohdassa tarkastellaan toteutuksen tallentamista versionhallintaan komentorivin kautta (Terminal). Jos haluat tehdä tallentamisen Qt Creatorissa, niin voit lukea tarvittavat toimenpiteet luvusta 14 “Vaihtoehto: Gitin käyttö Qt Creatorin kautta” ja sieltä kohta “Toteutuksen tallentaminen versionhallintaan”.

Aivan ensimmäisenä laitetaan kohdilleen Gitin henkilökohtaiset asetukset, jotka löytyvät tiedostosta ~/.gitconfig (~ tarkoittaa kotihakemistoasi). Asetukset voi muokata kyseiseen tiedostoon millä tahansa tekstieditorilla (esim. Applications -> Accessories -> Text Editor) tai vaihtoehtoisesti muokata niitä suoraan komentorivikomennoilla:

git config --global <asetus> <asetuksen arvo>

Jos et ole laittanut asetuksia kuntoon, tai et ole varma niistä, on nyt hyvä hetki laittaa ne kuntoon:

git config --global user.name "Teemu Teekkari"
git config --global user.email "teemu.teekkari@tuni.fi"

Nämä asetukset liittyvät siihen, kenet Git merkitsee version tekijäksi, kun paikalliseen tietovarastoon lisätään uusi versio.

Tämän jälkeen aloitetaan varsinaiseen palautukseen liittyvä työskentely. Kun olet toteuttanut ja testannut ohjelmasi, sinun pitää tallentaa se versionhallintaan, että voit palauttaa sen arvioitavaksi.

  1. Katso ensin, mikä tilanne versionhallinnassa on. Siirry ensin paikalliseen tietovarastoosi (joka on nimetty käyttäjätunnuksesi mukaan), ja kirjoita sitten komentoriville komento git status. Tällöin näet listan työkopiossasi tapahtuneista muutoksista. Katso listasta, että kohdassa “Untracked files:” löytyvät uudet hakemistot ja tiedostot, jotka olet luonut tätä tehtävää tehdessäsi:

    # On branch master
    # Untracked files:
    #   (use "git add <file>..." to include in what will be committed)
    #
    #       student/01/
    nothing added to commit but untracked files present (use "git add" to track)
    

    Tässä tapauksessa koko hakemisto 01 on uusi, joten sen sisältämiä tiedostoja ei luetella erikseen.

  2. Lisää uudet tiedostot indeksiin komennolla git add <path>, missä <path> on polku uuteen tiedostoon tai hakemistoon, joka lueteltiin edellä kohdassa “Untracked files:”. Tässä tapauksessa komento on siis:

    git add student/01/
    

    Näin saadaan lisätty koko hakemisto student/01/, eli kaikki tämän hakemiston tiedostot ja alihakemistot. Komentoa git add voi käyttää myös tiedostoille. Olisit voinut lisätä kummankin uuden tiedoston erikseenkin komennoilla:

    git add student/01/first_submission/first_submission.pro
    git add student/01/first_submission/main.cpp
    

    Komento git add lisää uudet/muutetut tiedostot mukaan seuraavaan committiin (ks. seuraava kohta).

  3. Vie tekemäsi muutokset paikalliseen tietovarastoon kirjoittamalla komento git commit -m "Message", missä Message kuvaa commitin sisältöä mahdollisimman selkeästi, mutta ytimekkäästi.

    Jos kirjoitat pelkästään komennon git commit, avautuu tekstieditori, johon viestin voi kirjoittaa.

  4. Vie paikallisessa tietovarastossa olevat muutokset keskustietovarastoon komennolla git push.

    Nyt olet lisännyt työkopiossasi tekemät muutokset ensin indeksiin (add) ja sitten paikalliseen tietovarastoosi (commit) ja sieltä keskustietovarastoosi (push). Voit tarkastella keskustietovarastoosi tekemiäsi muutoksia myös selaimen kautta gitlab-verkko-osoitteen avulla ja vaikka tarkistaa, että muutokset tosiaan menivät perille. Osaat myös tarkastella projektisi statusta versionhallinnassa komennolla git status.

Vaihe 5) Tehtävän palauttaminen

Kun ohjelmakoodisi on kurssin Git-repositoriossa, voit palauttaa sen kurssialustalle alla olevan lomakkeen kautta. Kopioi lomakkeen kenttään Git-tietovarastosi osoite (.git-loppuinen osoite) ja paina Lähetä-painiketta.

Seuraavilla palautuskerroilla käytetään samaa tietovarastoa, ja selaimesi mahdollisesti muistaa aikaisemmin annetun osoitteen. Automaattisen arvioinnin käynnistämiseen riittää, että ohjelmakoodi on tietovarastossasi oikean nimisessä hakemistossa ja painat Lähetä-painiketta.

A+ esittää tässä kohdassa tehtävän palautuslomakkeen.