DevHelpVR
Meeskond
Martin Jääger
Kristo Leemets
Idee
Idee põhineb varasemalt C# aines loodud DevHelp rakendusel. Rakendus aitab arendajatel oma tööd paremini planeerida. Seekord on eesmärgiks aga saada see tööle võrgus kasutatavana.
Projekt
Projekti analüüs
16.04.2017
Mida rakendus endas sisaldab?
Rakendus sisaldab erinevaid funktsionaalsusi, mis võimaldavad tarkvaraarendajatel oma tööd paremini organiseerida. Oluline on rakenduse loomisel kasutada ka sobivaid arendusmustreid. Projekti laiem eesmärk on projekti juhtimise ja vajalike ülesannete täitmise lihtsustamine. Selle jaoks on võimalik luua süsteemi erinevaid arendusprojektide profiile. Kuna arendusprojektid koosnevad mitmetest väiksematest ülesannetest ja tegevustest, saab ka neid kirjeldada ja eraldi kategoriseerida. Väiksematele ülesannetele on võimalik juurde lisada nende lühikirjeldus ja pikem lahtiseletus, samuti ka täitmiseks kuluv eeldatav aeg ja täitmise prioriteet. Oluline on ka igale tegevusele seotud isikute määramise funktsionaalsus. Iga isik saab näha endaga seotud erinevate projektide arendusprotsesside käekäiku. Vastavad kategooriad oleksid siis: veel alustamata, täitmisel, täidetud ja lõpetatud. Kategooriate sees saab kasutajalugusid vastavalt täitmise olulisusele ja muudele parameetritele järjestada. Rakendus peab toimima läbi keskse veebiteenuse, mis teeb võimalikuks rakenduse kasutamise erinevate kasutajate jaoks üle võrgu.
Mis on rakenduse eesmärk?
Rakenduse eesmärk on aidata organiseerida erinevate arendusmeeskondade tööd kasutajasõbraliku projektihaldusprogrammi abil. Rakendus annab projektijuhile ning arendusmeeskonnale ülevaate projektis toimuvast läbi kasutajalugude ja iteratsioonide organiseerimise. Projekti kogukestvust kirjeldavad story pointid.
Mida tavakasutaja sellega teha saaks?
DevHelp rakendust saab kasutada erinevate arendustööde organiseerimisel, see annab ülevaate meeskonna arendusprojektidest ja sellega kaasnevatest tegevustest. Rakenduses saab lisada user storysid ja iteratsioone ning neid filtreerida. Tavakasutajal on võimalik programmi sisse logida ning samuti uutel kasutajatel ennast registreerida. Suuremate õigustega kasutaja saab määrata tavakasutajatele erinevaid user storysid ning määrab user storyidele story pointe. Laias laastus jagunevad kasutajad kolmeks: suuremate õigustega kasutaja, vaatlemisõigustega kasutaja ning tavakasutaja. Tavakasutaja ja suuremate õigustega kasutaja saab lisada ja vaadata erinevatele user storydele lisamärkusi. Kõiki user storysid on võimalik kasutajatel kategoriseerida olulisuse, raskusastme, ajakulu ja hetketäidetuse põhjal. Vaatlemisõigustega kasutaja saab vaadata projekti kulgu ning hoida silma peal, kas vajalikud user storyd saavad tähtaegadeks realiseeritud. Tavakasutajatel on võimalik vaadata erinevate user storyde staatust ning näha, kellele user storyd on määratud.
Millised funktsionaalsused kindlasti rakendusse sisse kirjutame?
- Arendusmeeskonna projektide loetelu nägemine
- Projektiga seotud isikute vaatamine
- User storyde ja user pointide lisamise võimalus
- User storyde määramine kasutajatele
- User storyde filtreerimine määramata ning määratud user storyde lõikes
- User storyde filtreerimine kasutajate lõikes
- User storyde kategoriseerimine olulisuse, raskusastme, ajakulu ja hetketäidetuse põhjal
- User storydele märkuste lisamise võimalus
- Kasutaja loomine
- Sisselogimise funktsionaalsus
- Erinevate õigustega kasutajad
- User storyde iteratsioonidesse kategoriseerimise funktsionaalsus
- Rakenduse toimimine üle võrgu
- Iteratsioonide filtreerimine vastavalt projektile
Millised oleksid nice to have funktsionaalsused?
- Oluline on välja tuua ka, et user storyd jaotatakse rakenduses kuvatavale tahvlile- seeläbi on vajalikel tegevustel lihtne silma peal hoida. Projektide burn down charti vaatamise võimalus.
- Vaatlejaõigustega kasutajale üldise projekti staatuse näitamine (progress bar).
- Ideaalis võiks antud rakendusega olla võimalik ära defineerida teemasid (theme), epicuid, user storysid ning ülesandeid (tasks).
DevHelp rakenduse andmebaasi skeem
XML
XML
Projektid koos iteratsioonide ja kasutajalugudega.
<?xml version="1.0" encoding="utf-8" ?>
<projects>
<project id="1">
<name>
<![CDATA[Koduleht firmale Test OÜ]]>
</name>
<description>
<![CDATA[Projekti kirjeldus]]>
</description>
<iterations>
<iteration id ="1" start_date="11.03.17" end_date="18.03.17">
<name>
<![CDATA[Iteratsioon 1]]>
</name>
<description>
<![CDATA[Iteratsiooni 1 lisatakse kõik kasutajalood, mis on keerulisemad ning mis nõuavad rohkem aega]]>
</description>
<userstories>
<userstory id="1" story_points="2" story_status="1">
<name>
<![CDATA[Sisselogimisaken]]>
</name>
<description>
<![CDATA[Sisselogimisakna tegemine]]>
</description>
</userstory>
<userstory id="2" story_points="1" story_status="0">
<name>
<![CDATA[Formaadid]]>
</name>
<description>
<![CDATA[Formaatide loomine]]>
</description>
</userstory>
</userstories>
</iteration>
<iteration id ="2" start_date="20.03.17" end_date="27.03.17">
<name>
<![CDATA[Iteratsioon 2]]>
</name>
<description>
<![CDATA[Iteratsioonis 2 tegeletakse peamiselt UI-ga]]>
</description>
<userstories>
<userstory id="3" story_points="4" story_status="1">
<name>
<![CDATA[Kasutajamenüü]]>
</name>
<description>
<![CDATA[Kasutajamenüü loomine]]>
</description>
</userstory>
<userstory id="4" story_points="6" story_status="0">
<name>
<![CDATA[Menüü]]>
</name>
<description>
<![CDATA[Menüü UI tegemine]]>
</description>
</userstory>
</userstories>
</iteration>
</iterations>
</project>
<project id="2">
<name>
<![CDATA[Laohaldusprogramm Ladu OÜ-le]]>
</name>
<description>
<![CDATA[Projekti 2 kirjeldus]]>
</description>
<iterations>
<iteration id ="3" start_date="11.06.17" end_date="18.06.17">
<name>
<![CDATA[Iteratsioon 1]]>
</name>
<description>
<![CDATA[Laohaldusprogrammi esmase versiooni loomine]]>
</description>
<userstories>
<userstory id="5" story_points="3" story_status="1">
<name>
<![CDATA[Kaupade sisestamine]]>
</name>
<description>
<![CDATA[Kaupade sisestamine lattu]]>
</description>
</userstory>
<userstory id="6" story_points="2" story_status="0">
<name>
<![CDATA[Valikumenüü]]>
</name>
<description>
<![CDATA[Valikumenüü riba]]>
</description>
</userstory>
</userstories>
</iteration>
<iteration id ="4" start_date="20.05.17" end_date="27.05.17">
<name>
<![CDATA[Iteratsioon 2]]>
</name>
<description>
<![CDATA[User Interface korrastamine]]>
</description>
<userstories>
<userstory id="7" story_points="3" story_status="1">
<name>
<![CDATA[Kauba kustutamine]]>
</name>
<description>
<![CDATA[Kauba kustutamise funktsioon]]>
</description>
</userstory>
<userstory id="8" story_points="5" story_status="0">
<name>
<![CDATA[UI konfigureerimise funktsioon]]>
</name>
<description>
<![CDATA[UI konfigureerimise funktsiooni lisamine]]>
</description>
</userstory>
</userstories>
</iteration>
</iterations>
</project>
</projects>
XML schema (XSD)
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="projects">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="project">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="description" type="xs:string" />
<xs:element name="iterations">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="iteration">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="description" type="xs:string" />
<xs:element name="userstories">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="userstory">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="description" type="xs:string" />
</xs:sequence>
<xs:attribute name="id" type="xs:integer" use="required" />
<xs:attribute name="story_points" type="xs:integer" use="required" />
<xs:attribute name="story_status" type="xs:integer" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:integer" use="required" />
<xs:attribute name="start_date" type="xs:string" use="required" />
<xs:attribute name="end_date" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:integer" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
XSLT 1
XSLT => HTML
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="html" indent="yes"/>
<xsl:template match="/">
<html>
<head>
<title>Projektid</title>
</head>
<body>
<h1>Käesolevad projektid</h1>
<xsl:for-each select="/projects/project">
<h2>
<xsl:value-of select="name"/>
</h2>
<ul>
<xsl:for-each select ="iterations/iteration">
<li>
<xsl:value-of select="name"/>, alates
<xsl:value-of select="@start_date"/> kuni <xsl:value-of select="@end_date"/>
<ul>
<xsl:for-each select ="userstories/userstory">
<li>
<xsl:value-of select="name"/>
<ul>
<li>
Kirjeldus:
<xsl:value-of select="description"/>
</li>
<li>
ID:
<xsl:value-of select="@id"/>
</li>
<li>
Story pointid:
<xsl:value-of select="@story_points"/>
</li>
<li>
Staatus:
<xsl:value-of select="@story_status"/>
</li>
</ul>
</li>
</xsl:for-each>
</ul>
</li>
</xsl:for-each>
</ul>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
XSLT 2
XSLT => XML, kuvab kõik kasutajalood, mis on järjestatud kahanevas järjekorras kasutajaloo punktide järgi. Samuti kuvatakse kasutajalugude koguhulk ja kasutajapunktide kogusumma.
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<userstories>
<total_userstories>
<xsl:value-of select="count(/projects/project/iterations/iteration/userstories/userstory)"/>
</total_userstories>
<sum_userpoints>
<xsl:value-of select="sum(/projects/project/iterations/iteration/userstories/userstory/@story_points)"/>
</sum_userpoints>
<xsl:for-each select="/projects/project/iterations/iteration/userstories/userstory">
<xsl:sort select="@story_points" order="ascending"/>
<userstory id ="{@id}" story_points ="{@story_points}" story_status ="{@story_status}">
<total></total>
<xsl:value-of select="name"/> - <xsl:value-of select="description"/>
</userstory>
</xsl:for-each>
</userstories>
</xsl:template>
</xsl:stylesheet>
Retsensioonid
XML failide retsensioon tiimile Ticketer, 26.03.2017: Talk:Ticketer
22.04.2017 - 25.05 Lõpptoode
Lõpptoote saab leida siit: Lõpptoode
Tarkvaralahenduse kasutajajuhendi saab leida siit: Juhend
Projekti lõppkirjeldus:
Käesolev tarkvaralahendus realiseerib süsteemi, mis on abiks tarkvaraprojektide arendamise planeerimisel. Esmalt saab kasutaja luua konto. Konto loonud kasutajaid saab märkida kas projekti või kasutajalooga seotud isikuteks. Luua saab ka arendusmeeskondi ning meeskondi saab siduda projektidega. Ühtlasi tagab konto loomine ja kasutamine ligipääsu süsteemile. Luua saab uusi projekte, projektidele saab lisada iteratsioone ning iteratsioonidele omakorda kasutajalugusid. Kõiki kolme, nii projekte, kasutajalugusid kui ka iteratsioone saab eraldiseisvatena kustutada. Ülemkategooria kustutamisel kaovad ka kõik tema alamüksused.
Nii projektidele, iteratsioonidele kui ka kasutajalugudele saab lisada nende seletavaid kirjeldusi ja planeeritud algus- ning teostustähtaegu. Kasutajalugudele saab lisada muuhulgas kasutajaloo punkte ehk tema teostamiseks kuluvate ajaühikute hulga. Samuti on kirjeldatav kasutajalugude prioriteetsus ning täidetuse staatus. Juba eelnevalt salvestatud projekte, iteratsioone ja kasutajalugusid saab muuta ning muutusi on võimalik salvestada. Kasutajalugusid saab vastavalt atribuutidele kindlas tabelis järjestada.
Projekti loomise käik:
Projekti raames otsustasime teha edasiarenduse oma varasemast DevHelp projektist. Nimelt otsustasime uues projektis kasutada samu funktsionaalsusi ning lisada juurde ka olulisi täiendusi. Projekti ehitasime sisuliselt algusest lõpuni täiesti ümber, et ta toimiks Web API najal. Arendusega oleme olnud hõivatud algusest kuni lõpuni mõlemad. Enamus koodi ja koostööd on tehtud õhtuti koos ning enamasti TeamVieweri toel. Kõik tehtud muudatused ja lisatud funktsionaalsused said koos läbi arutatud, et leida meie oskustele ja vajadustele sobivaim lahendus.