<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="da">
	<id>https://holstebro-htx.dk/index.php?action=history&amp;feed=atom&amp;title=Softwaredokumentation</id>
	<title>Softwaredokumentation - Versionshistorie</title>
	<link rel="self" type="application/atom+xml" href="https://holstebro-htx.dk/index.php?action=history&amp;feed=atom&amp;title=Softwaredokumentation"/>
	<link rel="alternate" type="text/html" href="https://holstebro-htx.dk/index.php?title=Softwaredokumentation&amp;action=history"/>
	<updated>2026-04-19T23:11:42Z</updated>
	<subtitle>Versionshistorie for denne side i Holstebro HTX Wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://holstebro-htx.dk/index.php?title=Softwaredokumentation&amp;diff=2716&amp;oldid=prev</id>
		<title>Bar: /* NS-diagram */</title>
		<link rel="alternate" type="text/html" href="https://holstebro-htx.dk/index.php?title=Softwaredokumentation&amp;diff=2716&amp;oldid=prev"/>
		<updated>2022-10-18T20:15:01Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;NS-diagram&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;da&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Ældre version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Versionen fra 18. okt. 2022, 22:15&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l87&quot;&gt;Linje 87:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linje 87:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Eksemplet viser igen det samme forløb, som startede i blokdiagrammet.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Eksemplet viser igen det samme forløb, som startede i blokdiagrammet.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|valign=&quot;top&quot;|[[Image:NS-diag.png|Eksempel på noget dokumenteret med NS-diagram]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|valign=&quot;top&quot;|[[Image:NS-diag.png|Eksempel på noget dokumenteret med NS-diagram]]  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Bar</name></author>
	</entry>
	<entry>
		<id>https://holstebro-htx.dk/index.php?title=Softwaredokumentation&amp;diff=2687&amp;oldid=prev</id>
		<title>Bar: 1 version importeret</title>
		<link rel="alternate" type="text/html" href="https://holstebro-htx.dk/index.php?title=Softwaredokumentation&amp;diff=2687&amp;oldid=prev"/>
		<updated>2022-10-18T19:59:17Z</updated>

		<summary type="html">&lt;p&gt;1 version importeret&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Ny side&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Når man skal skrive et program skal man selvfølgelig dokumentere det. Det kan både være hvis man skal udgive koden så andre kan bruge den eller lære af den, men det kan også være for at sørge for, at når man om et par år finder koden igen og vil skrive videre, kan man igen komme ind i hvad det egentlig var man tænkte.&lt;br /&gt;
&lt;br /&gt;
En god dokumentation starter med at give et overblik, og kommer gradvist ned i detaljerne for de enkelte dele af softwaren.&lt;br /&gt;
&lt;br /&gt;
Denne side er mest rettet mod dokumentation af [[JAL]]-kode, til at fungere i en [[PIC]], men en del af teknikkerne har også generel karakter, så man kan bruge metoderne i andre sprog og andre programmeringsmiljøer.&lt;br /&gt;
=Struktur=&lt;br /&gt;
Når man dokumenterer sin software skal software gerne have en fornuftig struktur, hvis den skal være til at læse og senere udvikle på. Det betyder at dokumentation gerne skal følge den samme struktur, ellers er den ikke til at finde ud af. Der er forskellige måder afhængig af om det er et stort program med mange små moduler man laver, eller om det bare er en lille og simpel kode.&lt;br /&gt;
&lt;br /&gt;
==Store Programmer==&lt;br /&gt;
Er projektet et stort program, skal man dokumentere hvad hvert enkelt lille modul skal lave, hvad det har af input og output. Det er så man kan danne sig et overblik af hvordan de forskellige dele af programmet kommunikerer med hinanden. Når man så har gjort det, kan man gå ind i selve koden og skrive kommentarer, så man kan se hvad de enkelte funktioner, løkker og procedurer gør.&lt;br /&gt;
&lt;br /&gt;
==Små Programmer==&lt;br /&gt;
Selv ved meget små programmer kan det være en god ide med en overordnet oversigt, også selvom det kun involverer én fil. Man kan selvfølgelig gå ind i koden og dokumentere de forskellige funktioner, løkker og procedurer, men bare et program på 30-40 linjer vil have stor fordel af at blive dokumenteret ordentligt.&lt;br /&gt;
&lt;br /&gt;
=Den indledende softwaredokumentation=&lt;br /&gt;
En god indledning til softwaredokumentationen kan være at beskrive hvad den software man vil lave egentlig skal løse i det givne projekt.&lt;br /&gt;
&lt;br /&gt;
Hvis det handler om en temperatur-regulering, så kunne det være noget så enkelt som at beskrive, at softwaren skal kunne måle den aktuelle temperatur, og regulere ud på et varmelegeme for at fastholde den målte temperatur. Man kunne så supplere med at man skal kunne indtaste den ønskede temperatur, og man skal have en visning af temperaturen.&lt;br /&gt;
&lt;br /&gt;
==Blokdiagram==&lt;br /&gt;
En god måde at supplere overblikket over softwarens funktion er ved at skitsere et blokdiagram, som vist her:&lt;br /&gt;
[[Image:Sw_blok.png|center|Eksempel på blokdiagram]]&lt;br /&gt;
&lt;br /&gt;
Blokdiagrammet skitserer hvilke dele der er i softwaren, og hvordan de forskellige dele hænger sammen, altså hvad der kommer fra den ene blok i softwaren til den anden.&lt;br /&gt;
&lt;br /&gt;
På dette punkt er det også vigtigt, at man ikke går for meget i detaljer - man mister bare overskueligheden, hvis man har meget mere end 6-7 blokke i diagrammet. Så er det bedre at slå nogle blokke sammen, og så lave et nyt blokdiagram over dem senere.&lt;br /&gt;
&lt;br /&gt;
Man kan også komme ud for at der ikke er sammenhæng mellem blokkene, hvis softwaren skal løse flere uafhængige ting. Her kan det være vigtigt at skitsere hvilket princip man vil bruge for at løse det. Om man vil bruge [[polling]] eller [[interrupt]].&lt;br /&gt;
&lt;br /&gt;
==Snitflader==&lt;br /&gt;
Som det er vist i blokdiagrammet, så er det smart, at det er præcist afgrænsede ting der komme fra en blok til en anden.&lt;br /&gt;
&lt;br /&gt;
Til dette kan det være godt at definere snitfladerne. Det kunne være temperaturen, at den f.x. ligger i en variabel ved navn Temperatur af typen word, og at den er 0 ved 0 grader og at den er 2500 ved 25 grader, eller hvordan man ønsker at definere den. Det kunne også være praktisk at definere hvilket interval den kunne spænde over, f.x. fra 0 til 5000, altså fra 0 til 50 grader.&lt;br /&gt;
&lt;br /&gt;
Setpunktet kunne så have defineret så det ligger i en variabel der hedder Setpunkt af typen word, og med samme værdimæssige betydning som temperaturen.&lt;br /&gt;
&lt;br /&gt;
=Detaljeret dokumentation=&lt;br /&gt;
Når man har fået skitseret et overblik over hvad softwaren skal lave, så skal man have dokumenteret de forskellige dele af koden.&lt;br /&gt;
&lt;br /&gt;
Der findes mange forskellige teknikker til dokumentation af software, og hvor anvendelige de er afhænger af hvad det er softwaren skal løse.&lt;br /&gt;
&lt;br /&gt;
Et forløb i softwaren kan dokumenteres med pseudokode, flowchart eller en variant af flowchartet der hedder NS-diagram&lt;br /&gt;
==Pseudokode==&lt;br /&gt;
Princippet i pseudokode er at man beskriver i almindelig tekst, hvad det er koden skal udføre.&lt;br /&gt;
&lt;br /&gt;
Hele teknikken i at anvende pseudokode er beskrevet på [[Pseudokode]]&lt;br /&gt;
&lt;br /&gt;
Hvis man befinder sig i hvile-tilstanden af det ovenstående eksempel, hvor der skal måles temperatur, reguleres og styres på varmelegemet, der kunne en pseudokode for det se ud som følger:&lt;br /&gt;
&lt;br /&gt;
 Loop uendeligt&lt;br /&gt;
    Mål Temperaturen&lt;br /&gt;
    Styr varmelegemet efter temperaturen&lt;br /&gt;
    Vis temperaturen&lt;br /&gt;
&lt;br /&gt;
Alternativt kan man gå lidt dybere i det og beskrive:&lt;br /&gt;
&lt;br /&gt;
 Loop uendeligt&lt;br /&gt;
    Mål temperatur&lt;br /&gt;
    Er temperaturen under setpunktet?&lt;br /&gt;
       tænd for varmelegemet&lt;br /&gt;
    ellers&lt;br /&gt;
       sluk for varmelegemet&lt;br /&gt;
    Vis temperaturen&lt;br /&gt;
&lt;br /&gt;
==Flowchart==&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|En gammel klassisk måde at dokumentere flowet i et program på er ved hjælp af et flowchart, hvor der er en række standard-symboler der betyder handlinger, start og stop, input og output, forgreninger osv.&lt;br /&gt;
&lt;br /&gt;
Som vist her til højre giver det et godt overblik over hvad der sker i programmet på en meget overskuelig form, men som dokumentation skal man passe meget på at man ikke laver sine flowcharts for store. Som man kan se i eksemplet her, så er hele indtastningsdelen blot illustreret som en blok, selvom det nok er den der kodemæssigt fylder langt det meste.&lt;br /&gt;
&lt;br /&gt;
Eksemplet her illustrerer hele programmet som er skitseret i blokdiagrammet.&lt;br /&gt;
&lt;br /&gt;
Et af problemerne ved at bruge flowchart er at det ikke er så let at tegne i f.x. word. Man skal typisk have et specielt program til det som visio, [http://dia-for-windows.en.softonic.com/ dia] eller andet.&lt;br /&gt;
&lt;br /&gt;
|[[Image:flow-eksempel.png|right|thumb|Eksempel på et flowchart]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==NS-diagram==&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|Et alternativ til flowcharts er at man tegner NS-diagrammer.&lt;br /&gt;
&lt;br /&gt;
De kan tegnes ved hjælp af tabeller i word, så de er relativet enkle at gå til, det eneste lidt kryptiske er at få betingelser på, men her kan man gøre god brug af tegneværktøjet i tabeller.&lt;br /&gt;
&lt;br /&gt;
Det kræver bare lidt tilvænning at læse NS-diagrammer.&lt;br /&gt;
&lt;br /&gt;
Eksemplet viser igen det samme forløb, som startede i blokdiagrammet.&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|[[Image:NS-diag.png|Eksempel på noget dokumenteret med NS-diagram]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==State-machine==&lt;br /&gt;
[[Image:state-diagram.png|thumb|right|eksempel på state-machine]]&lt;br /&gt;
Til at dokumentere en state machine bruger man et state-diagram som vist her.&lt;br /&gt;
&lt;br /&gt;
Hele teknikken i at programmere en [[state-machine]] er dokumenteret på linket.&lt;br /&gt;
&lt;br /&gt;
Anvendelsen af en statemachine er meget afhængig af hvilket problem man skal løse, men det kan være et meget effektivt værktøj til at løse ting der skal gøre forskelligt alt afhængigt af hvad f.x. en bruger har gang i.&lt;br /&gt;
&lt;br /&gt;
Styrken ved en statemachine er at man kan isolere de enkelte dele relativt enkelt i koden, så det er lettere at holde styr på hvad der foregår i hvilke tilstande.&lt;br /&gt;
&lt;br /&gt;
==Objekt-dokumentation==&lt;br /&gt;
Det skal først nævnes at [[JAL]] &amp;#039;&amp;#039;&amp;#039;IKKE&amp;#039;&amp;#039;&amp;#039; er et objektorienteret sprog.&lt;br /&gt;
&lt;br /&gt;
Til at dokumentere objektorienterede programmer er [http://en.wikipedia.org/wiki/Unified_Modeling_Language UML] normalt en god standard, eller rettere det er mange gode standarder, for UML kan dokumentere rigtigt mange sider af programmeringen og på mange forskellige niveauer, lige fra det helt overordnede anvendelses-niveau, og helt ned i at dokumentere de enkelte objekter. Se beskrivelsen på det angivne link.&lt;br /&gt;
&lt;br /&gt;
=Kommentering af Kode=&lt;br /&gt;
Hvis man fx kommenterer en funktion kan det gøres på flere måder. Hvis det er en tilstrækkelig simpel funktion vil det være nok at kommentere den med en linje der forklare hvad den gør.&lt;br /&gt;
&lt;br /&gt;
Eksempel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;jal&amp;quot;&amp;gt;&lt;br /&gt;
 function(input)  -- man giver funktionen et tal, og så viser den hvad man får når man lægger 2 til det tal&lt;br /&gt;
   var1 = input&lt;br /&gt;
   var2 = var1 + 2&lt;br /&gt;
   print var2&lt;br /&gt;
 end function&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Man kan også skrive kommentar til hver linje, men det kan nogle gange få koden til at se uoverskuelig ud. På den anden side kan det også blive nødvendigt, hvis det er meget avanceret programmering.&lt;br /&gt;
&lt;br /&gt;
Eksempel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;jal&amp;quot;&amp;gt;&lt;br /&gt;
 function(input)		-- funktion med et enkelt input&lt;br /&gt;
   var1 = input		-- definering af variabel 1&lt;br /&gt;
   var2 = var1 + 2 	-- læg 2 til tallet&lt;br /&gt;
   print var2		-- vis tallet&lt;br /&gt;
 end function		-- slut funktion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hvornår de forskellige metoder skal bruges skal man selvfølgelig selv vurdere.&lt;br /&gt;
&lt;br /&gt;
=Ting at huske=&lt;br /&gt;
* Start med at dokumentere det overordnede, så læseren får et overblik.&lt;br /&gt;
* Lav det af dokumentationen man kan, før man skriver softwaren, det giver normalt en bedre struktur i softwaren.&lt;br /&gt;
* Brug [[#Flowchart|Flowchart]], [[#Pseudokode|Pseudokode]], [[#State-machine|Statediagram]] eller en anden gængs standard til at lave den overordnede overblik med.&lt;br /&gt;
* Kommentarene og specielt den tilhørende dokumentation skal kunne forstås af nybegyndere, som udgangspunkt har man altid skrevet for lidt dokumentation.&lt;br /&gt;
* Skriv kommentarene mens man skriver koden, så man er sikker på at man ikke glemmer hvad koden gør.&lt;br /&gt;
* Husk at revidere og udvide dokumentationen efter man har skrevet softwaren, så dokumentationen passer sammen med det der reelt sker i softwaren.&lt;br /&gt;
* Overvej hvilken struktur koden har - dokumentationsformen kan godt være meget afhængig af hvad det er koden laver, og ikke mindst hvordan koden er opbygget.&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Software-beskrivelse]]&lt;/div&gt;</summary>
		<author><name>Bar</name></author>
	</entry>
</feed>