JEMP

From ICO wiki


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

JEMP_DB election_create.sql

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