JEMP
Rühmatöö aines Programmeerimine C# keeles
Meeskond
- Jüri Ahhundov
- Erik Ehrbach - Projektijuht
- Marko Linde
- Pille Ulmas
Sissejuhatus
Projekti eesmärk on meeskonnal omandada teadmisi ja arendada oskusi C# programmeerimiskeele ja .NET tehnoloogial rakenduste ehitamisel.
Loodav toode on e-valmisrakendus, mille raames toimub kasutajatel autentimine, mille järgselt tekib kasutajale võimalus valida endale esindaja kas kohaliku omavalitsusse või üldvalimiste puhul riigitasandil valitsusse, olenevalt valimisaastast.
Terminid
- Toode - Interaktiivne e-valimisrakendus
- Meeskond - grupp, kes vastutab toote arenduse ja valmimise eest
Tehnoloogia
- C# programmeerimiskeel
- WPF tehnoloogia
- Microsoft SQL Server
Analüüs
Arenduse infrastruktuur
Meeskond kasutab projekti edukaks sooritamiseks järgmiseid vahendeid:
- Windows 10
- Visual Studio 2017 IDE
- Visual Studio Team Services
- SQL Server Management Studio
- SQL serveri hosting - https://www.gearhost.com/
- JetBrains ReSharper
Arenduse protsess ja metoodika
Arenduse protsess toimub Kanban vormis. Meeskonnaliikmete vaheline suhtlus ja positiivne sünergia saavutatakse läbi aktiivse suhtluse ja ülesannete delegeerimise.
Tehnilise aspekti poolt vaadatuna on efektiivseks tööks kasutusel GIT põhine koodihoidla Visual Studio Team Services teenuses, kuhu tehakse regulaarseid, ülesannetepõhiseid koodilükkeid. Toote dokumentatsioon asub samuti eelmainitud keskkonnas.
Nõude “rakendus peab olema kommenteeritud koodiga” täitmisel peame eelkõige silmas Robert C. Martini raamatu “Clean code” põhimõtet, et kommentaaridega täidetud kood on kehv kood ja pigem saavutada koodi efektiivne loetavus läbi kasutatavate meetodite ning muutujate nimetuste.
Lähtekood kirjutatakse inglisekeelsete muutuja- ning meetodnimedega ja jälgitakse .NET raamistiku Framework Design Guidelines juhiseid.
Toote kirjeldus
Minimaalselt nõutud funktsionaalsused
- Efektiivne ja turvaline autentimisloogika
- Valimisnimekirja põhine valimisfunktsionaalsus
- Valimisfunktsionaalsuse algusaja ja lõppaja piirangute loogika
- Valimisprotseduuride järgne infokuva
- Võimalus muuta eelnevalt tehtud valikut
- Tegevuste logimine
"Nice-to-have":
- Valimispiirkonnapõhine valimisfunktsionaalsus
- Smart-ID, Mobiil-ID, ID-kaardi põhine autentimine
- Eraldiseisev haldusliides
- Andmebaasitasemel auditeerimisväljad tabelitelt (created_by, created_dtime, modified_by, modified_dtime)
- Valimisseisu statistika
"Nice to have" ideed, ehk kuhu võiks edasi kasvada:
- Võimalik hääletada läbi otsedemokraatliku hääletussüsteemi uute seaduste ja eelnõuete poolt
- Vastavus ISKE riiklikule turvanõuete standardile
- Smart-ID , ID-kaardi põhine audentimine vastavuses OAuth 2.0 standardile
- Andmebaasi osade muutumine normaliseeritud kujult väiksemale normaliseerituse astmele.
Võimalikud vaated
- Hääletaja ning piirkonnapõhine vaade
- Hääletaja ajalugu
- Administraatori vaade
- Kandideerija isiklik tagasiside
- Kandideerija ajalugu
- Erakonnapõhine tagasiside
- Piirkonnapõhine tagasiside
- Üldtulemus
- Süsteemi muutmise ajalugu
- Süsteemi kasutamise ajalugu ja ajaline koormusstatistika.
Andmebaasi kirjeldus analüüsiks. Kokkuvõtlik olemite/tabelite semantika ning baasi loomise skript
Olemite semantika
- PERSON
Tabelis hoiatakse kõikide inimeste andemeid, sõltumata nende soost, rollist ja oskustest. Igal isikul on üks aktiivne telefon ja mailiaadress. Vastavadid üks mitmele seose kogumikke ei lisa.
- USER
Tabelis hoitakse isiku semantilist aliast, mis võib olla tuletis olemasolevast informatsioonist.
- ASSOCIATION
Teadmik olemasolevatest erakondadest või valimisliitudest.
- USER_ASSOCIATION
Kasutaja kuulumine teatud valimisliitu või erakonda teatud aja jooksul.
- PASSWORD
Tabelis hoitakse SHA-2 võtmetena kasutajale mõeldud mistahes isikuvormi tuvatamiseks mõeldud tähtajalist võtit. Tabelist näeb ka eelnevalt kasutuses olnud võtmeid. Algus tähistab võtme kasutamise algust ja lõpp, kui võti pole enam kasutusel. Võimalab salvestada 64 tähemärgilist SHA-2 võtit ja vajaduse korral on 1 tähemärk jäetud kasutaja blokeerimisele ! näol.
- ROLE
Sisaldab tegevuse olekust sõltuvat ametinimetust. candidate, voter.
- RIGHTS
Teadmik kasutajapõhistest õigustest. Määrab kasutaja võimalused. Admin, superadmin, user
- ROLE_RIGHTS
Hoitakse informatsiooni konkreetse rolli õiguste kohta kuuluvad informatsiooni nii selle hetkeseisu, kui ka tagasivaatavalt.
- USER_ROLE
Tabel sisaldab kasutaja kohta puudutavat informatsiooni ja määratleb tema võimalused kasutajapõhiselt või muu järgi kindlal perioodil. Antakse kasutajale roll vastavalt rolli nimekirjale kindlaks perioodiks. Näiteks kandidaat ja voter võivad olla ka ühes isikus või admin ning hääletaja.
- TYPE
Teadmik erinevatest valimisvormidest. Valimissündmuste ja sisestatavate seaduste võimalik kogumik.
- EVENT
Tabelis on sündmus läbi teadmiku oma alguse ja lõppuga.
- PARTICIPATIONS aka USER_EVENT
Sündmusel osalev kasutaja ehk kanditeerija algus ja lõpu kuupäevaga.
- REGION
Kandideerimispiirkond, kus parasjagu toimuvad valimised.
- USER_REGION
Kasutaja kandideerib teatud piirkonnas.
- EVENT_VOTE
Võimalik hääletus seaduseelnõude poolt.
- USER_VOTE
Bit põhine, kas null, 1 või 0. Kasutaja hääletamine osaleja poolt. Sündmusel osaleva kasutaja arvutatud häältehulk
- SYSTEM
Teatmik kokku lepitud ja jälgitavadest süsteemi muudatustest.
- LOG
Kasutaja kuupäevaline seos süsteemi muudatusega.
Baasipõhine äriloogika
- USER:
Kasutaja tuvastamiseks kontrollitakse USER_ROLE From/Until järgi, et on kas hääletaja või kandideerija. Igale Inimesele on määratud valimispiirkond, mille kaudu saab teda valida või mille kaudu kuvatakse hääletajale ainult tema piirkonnas oleva valimisnimekirja järgseid inimesi. Ehk esitatakse ainult need kandidaadid, kellele ta saab hääli anda. Võimalik limiteerida ka erakonna eelistuse kaudu. Piirangud teevad baasi kindlasti kiiremaks. Kandidaadid saavad lisakontrolli USER_EVENT näol ehk kas nende kandidatuur on antud valimistel aktiivne.
- HÄÄLETAMINE:
Inimene annab hääle - saadetakse vastavalt valitud kandideerija USER_EVENT tabeliväärtuse muutus tagasi - kandideerija hääl suureneb 1 võrra.
- RIGHTS:
Rollidele ääratud õigused ,ehk hääletaja õigused, kandideerija õigused ning arendaja või muu vaja mineva rühma õiguste määramine.
- SYSTEM/LOG:
Salvestatakse kõikide tabelite üleselt äriloogikaga määratud võimalik andmebaasi muutus. Näiteks saadiku piirkonna muutuse salvestus, kus äriloogika kaudu nõutakse baasis toimuva muudatuse salvestust. Muudatus seotakse konkreetse kasutajaga. Edaspidi saab kõiki muudatusi jälgida grupeeringute kaupa või ka kasutaja kaupa.
Võimalikud probleemid
- Andmebaas on normaliseeritud kujul ja väga lühikese perioodi jooksul suurte kasutajahulkadega opereerimine võib muutuda koormavaks ja aeglaseks. Kiiremaks andmete käitlemiseks on ilmselt vajalik konsulteerida oma ala spetsialistidega ja selle projekti raames selle probleemiga ei tegelta.
- C# oskuste erinevuste tase meeskonnas - inimeste erinev õpikõver.
- Projekti keerukuse aste vastavalt vaja minevatele turvanõuetele.
- Linq kasutamine arendumustrites.
Blogi
- 19.09.17 Meeskonna moodustamine
- 21.09.17 TFS konto tegemine
- 21.09.17 Projekti idee osas kokkuleppimine
- 01.10.17 Projekti analüüsiga alustamine
- 15.10.17 Projekti analüüsiga jätkamine
- 22.10.17 Wiki lehe tegemine
- 05.11.17 Wiki lehe täiendamine
API
Rakenduse asukoht gitis ning kes soovib võib kohe kloonida : https://github.com/er1ck/ElectionApp.git