280 likes | 447 Views
Introductie. Piet de Vries PinkRoccade Studenten TUE. Mijn Vuurdoop Verhaal uit de 60-er jaren. Omvangrijk Simulatieprogramma Twee tekens voor namen van variabelen Misbruik common data area Een goto in elke 3 statements Geen documentatie Opdracht: Omzetting van 35- naar 32-bits.
E N D
Introductie • Piet de Vries • PinkRoccade • Studenten TUE
Mijn VuurdoopVerhaal uit de 60-er jaren • Omvangrijk Simulatieprogramma • Twee tekens voor namen van variabelen • Misbruik common data area • Een goto in elke 3 statements • Geen documentatie • Opdracht: Omzetting van 35- naar 32-bits
Doelstelling • Inzicht verkrijgen in • De praktijk van software-ontwikkeling tbv administratieve doeleinden • De rol die de theorie in de praktijk speelt • De oorzaken van slechte onderhoudbaarheid • de gevolgen van slechte onderhoudbaarheid
Indeling • De Theorie • De Praktijk • Oorzaken en Gevolgen • Onderhoudbaarheid • Waar gaat het eigenlijk om?
De Theorie • Geen Cryptische Code • Zwakke Koppeling • Verbergen van techniek • Verduidelijkende Naamgeving • Verduidelijkend Commentaar • Sterke Samenhang • Modulariteit
De PraktijkSteekproef 40 bedrijven • Selecte steekproef, subjectieve interpretatie, maar toch • 90% Programmeurs kent theorie niet • 9% Programmeurs past theorie niet toe • 90% Code slecht onderhoudbaar • 9% Code vrijwel niet onderhoudbaar • 90% Management heeft er geen oog voor • 9% Management ziet geen oplossing
De PraktijkEen Voorbeeld • Burgerzaken systeem • 1 miljoen regels code, Cobol • Initiele kosten 35 manjaar • 15 jaar oud • 120 manjaar onderhoud • 10 minuten onderhoud per regel • Voornamelijk wettelijke wijzigingen • Veel achterstallig onderhoud
OorzakenHoge Eisen • Software moet • Doen wat er van verwacht wordt • Niet meer en Niet minder • Op (vaak zeer korte) tijd af zijn • Binnen (een groot, maar veel te krap) budget • Grondig gecontroleerd zijn • Aan een groot aantal kwaliteitseisen voldoen • Herbruikbaar zijn • Onderhoudbaar zijn • Dit is zeldzaam moeilijk
OorzakenMulti-Disciplinaire Aanpak • Opleidingen • Filosoof, Mulo, Bioloog, Zeeman, Socioloog, Chemicus, Sexuoloog, Indisch Informaticus, Wiskundige, Melkcontroleur, Neerlandicus, Hobbyisten, Heao, Materiedeskundigen, Binnenhuisarchitect, Gesjeesden • Akelig weinig informatici • Hoge eisen zijn niet waar te maken
GevolgenHomohuwelijk • Gevolgen voor GBA • Teksten aanpassen • Controles aanpassen • Beperkingen van selectie aanpassen • Impliciete aannames aanpassen • Kosten: 2 manjaar
GevolgenGlobale Gegevens • Foutmelding: Soms worden wijzigingen niet doorgegeven aan een gekoppeld systeem • Oorzaak: Als een ambtenaar zijn werkdag begint met het uitgeven van een paspoort, dan krijgt een globaal gegeven een verkeerde waarde • Kosten: 3 manweken van dé specialist voor het vinden van de oorzaak
OorzakenOpleiding is niet voldoende • Een goede programmeur heeft veel ervaring • Opleidingen kunnen geen goede programmeurs afleveren • Bedrijven zijn er niet op ingericht om medewerkers op te leiden • Onvoldoende Belang • Onvoldoende Omvang • Onvoldoende Kennis
OorzakenDe Programmeur • Preoccupatie met techniek (de oplossing) ipv functionaliteit (de bedoeling) • Sterke en te vaak Onbekende Koppeling • Het ontbreken van aandacht voor de lezer • Zwakke Samenhang
GevolgenHet genie aan het werk • Cobol kent geen variabele arraylengte • Ik had verstand van operating systeem • Routine gemaakt voor dynamische allocatie van geheugen • Goed gestructureerd • Goed gedocumenteerd • Heeft nooit iemand iets van begrepen
GevolgenHandige schermroutine • Maximaal 60 velden • Velden op volgnummer te benaderen • Gevolgen: veel herhaling van zetten en vaak hernummering nodig • Oplossing: schermdefinitie in tabel opslaan en generieke module • Gevolg: volstrekt onbegrijpelijke code omdat de tabel niet generiek genoeg is • Kosten per jaar niet te becijferen
OorzakenVicieuze Cirkel • Goede programmeurs willen geen slechte software onderhouden • Zoeken heil in Nieuwbouw, Staffuncties, Management, Consultancy, Technische software • De meeste onderhoudsprogrammeurs kennen de theorie niet • Slechte software wordt steeds slechter
OorzakenSpecialisatie • Onderhoudsprogrammeurs • ingegraven specialisten op een subsysteem • onmisbaar en soms geniaal • worden gewaardeerd als ze vertrokken zijn • Management • beschikt niet over de voor sturing en verbetering vereiste kennis • verliest alle grip • Work-around zolang het duurt
Voorbeeld van een draakBegin is niet erg informatief • ********************* • A-000-HOOFD SECTION. • *********************--------------------------HOOFD VERWERKING • A-000. • PERFORM A-000-INIT. • * • PERFORM B-000-INDIKATIE UNTIL EINDE. • * • PERFORM C-000-AFSLUITEN. • * • A-999. • GOBACK. • Vervolg wordt er niet beter op
B-000. • IF SGVW-A-NUMMER < SAVE-A-NR • GO B-900. • MOVE SGVW-KEY TO BEGIN-KEY. • MOVE SGVW-A-NUMMER TO SAVE-A-NR • AFI-A-NUMMER. • MOVE 0 TO AFI-SL-INDIKATIE. • MOVE 12 TO AFI-OP. • B-100. • CALL "BXXAFI" USING BXXAFI. • IF AFI-FOUT • MOVE 1 TO EINDE-SW • GO B-999. • IF AFI-A-NUMMER NOT = SAVE-A-NR • IF SGVW-FOUT • MOVE 1 TO EINDE-SW • GO B-999 • ELSE MOVE AFI-A-NUMMER TO SAVE-A-NR • GO B-999. • MOVE 13 TO AFI-OP. • MOVE BEGIN-KEY TO SGVW-KEY. • PERFORM LEES-WRK. • IF SGVW-FOUT • MOVE 1 TO EINDE-SW • GO B-999. • PERFORM C-000-VERWERK-INDIK. • GO B-100. • B-900. • PERFORM LEES-SGVW-NEXT. • IF SGVW-FOUT • MOVE 1 TO EINDE-SW. • B-999. • EXIT.
C-000. • MOVE AFI-AFN-INDIKATIE TO AFN-CODE. • MOVE ZEROES TO LKAFN-SW. • MOVE AFN-KEY TO LKAFN-REC. • CALL "BXOAFN" USING DATA-AREA WORK-AREA. • MOVE LKAFN-REC TO AFN-RECORD. • IF AFN-CODE = ZERO • GO C-999. • C-050. • MOVE ZERO TO BERICHT-SW. • MOVE ZERO TO GV02-SW. • C-100. • MOVE ZERO TO WS-FASE. • MOVE SGVW-KEY TO BEGIN-KEY-KAT. • C-200. • PERFORM I-000-INIT-KAT. • IF ………… AND WS-FASE = 0 OR 2 • GO C-400. • C-300. • PERFORM Z-000-AUTORISATIE. • IF AUTORISATIE • AND WS-FASE = 2 • AND BERICHT • PERFORM K-000-KATEGORIE-NUL. • IF AUTORISATIE • AND WS-FASE = 0 • PERFORM L-000-HISTORIE-NUL. • IF AUTORISATIE • PERFORM E-000-BERICHT-AANMAKEN • MOVE 1 TO BERICHT-SW • KAT-SW. • PERFORM LEES-SGVW-NEXT. • C-400.
C-400. • * Als SKM-NEW = SKM-OUD, dan verschilt het rubr.nr. eventueel • IF SKM-NEW = SKM-OUD • GO C-300. • * Als SKM-NEW-TM-KAT = SKM-OUD-TM-KAT, dan zijn datum en volgnr • * eventueel verschillend (in dat & vlgnr staan niet alleen data) • IF SKM-NEW-TM-KAT = SKM-OUD-TM-KAT • MOVE WS-FASE TO SV-FASE • PERFORM D-000-CHECK-LEGE-KAT • MOVE SV-FASE TO WS-FASE • GO C-900. • * Als WS-FASE nog geen 1 is, dan is er nog geen historie gelezen • IF WS-FASE NOT = 1 • GO C-500. • MOVE 2 TO WS-FASE. • MOVE BEGIN-KEY-KAT TO SGVW-KEY. • PERFORM LEES-WRK. • IF SGVW-FOUT • MOVE 1 TO EINDE-SW • GO C-900. • GO C-200. • C-500. • * Als SKM-NEW-TM-MUTSRT= SKM-OUD-TM-MUTSRT, dan een andere kateg • * bij dezelfde mutatiesoort (GV01 of GV02) • * Init. nieuwe kategorie en vervolg binnen zelfde bericht • PERFORM D-000-CHECK-LEGE-KAT. • IF SKM-NEW-TM-MUTSRT = SKM-OUD-TM-MUTSRT • GO C-100. • C-900. • IF BERICHT • PERFORM F-000-IDENTIFIKATIE. • * Als SKM-NEW-TM-A-NR = SKM-OUD-TM-A-NR, dan een andere kateg • * Init. nieuwe kategorie en start voor een ander bericht • IF SKM-NEW-TM-A-NR = SKM-OUD-TM-A-NR • GO C-050. • * • C-999. • EXIT.
OorzakenNieuwbouw helpt niet • Oplossing: onderhoudbare nieuwbouw? • Nieuwbouwprogrammeurs • onderhoudsprogrammeurs • kennen de theorie niet • externe leveranciers • kennen de theorie niet • hebben geen belang bij onderhoudbaarheid
OorzakenVerbetertraject helpt niet • De noodzaak wordt breed gevoeld • Er wordt veel geinvesteerd in verbetering • Men richt zich vooral op management • processen, planning, beheersing, tijd, voorspelbaarheid, verantwoording, specificaties, contracten • Alleen nuttig als de techniek in orde is • In de praktijk is er vaak nauwelijks effect
CMM 5 zegt niet allesWat gebeurt hier? • MOVE H01-TIME TO SELEKTIE-NR-5385. • R20-10. • MOVE 01 TO FUNKTIE-5385. • CALL "B5385D" USING LINKAGE-5385. • IF STATUS-5385 = ZEROES • ADD 1 TO H01-SS • IF H01-SS = 99 • ADD 1 TO H01-MM • MOVE ZEROES TO H01-SS • END-IF • IF H01-MM = 99 • ADD 1 TO H01-HH • MOVE ZEROES TO H01-MM • MOVE ZEROES TO H01-SS • END-IF • MOVE H01-TIME TO SELEKTIE-NR-5385 • GO R20-10. • MOVE H01-TIME TO SEL-SELEKTIE-NUMMER.
CMM 5 zegt niet allesTwee fouten opgelost • MOVE H01-TIME TO SELEKTIE-NR-5385 • * We need to lock our entry in 5385 • * Try to write a dummy record with the current time as the key • * If not succesfull keep trying with a second more • MOVE 05 TO FUNKTIE-5385. • CALL "B5385D" USING LINKAGE-5385. • PERFORM UNTIL STATUS-5385 = ZEROES • ADD 1 TO H01-SS • IF H01-SS = 99 • ADD 1 TO H01-MM • MOVE ZEROES TO H01-SS • END-IF • IF H01-MM = 99 • ADD 1 TO H01-HH • MOVE ZEROES TO H01-MM • MOVE ZEROES TO H01-SS • END-IF • MOVE 05 TO FUNKTIE-5385 • CALL "B5385D" USING LINKAGE-5385 • END-PERFORM. • MOVE H01-TIME TO SEL-SELEKTIE-NUMMER.
OnderhoudbaarheidEen OrganisatieProbleem • Onderhoud wordt gedaan door Mensen • Wat is het belang van de programmeur? • Brood op de plank • Een excuus, waardoor fouten niet verwijtbaar zijn • Kwaliteiten ten toon spreiden • Wat is het belang van de projectleider? • Risicoreductie • Korte termijnresultaat • Wat is het belang van de manager? • Draagvlak • Voorkomen van mislukking op middenlange termijn • Keuze: Kop in het zand of Nek in de strop • Wat is het belang van de klant? • Wat is het belang van het bedrijf?
OnderhoudbaarheidEen Sociaal Probleem • Onderhoud wordt gedaan voor Mensen • Onderhoudbaar programmeren = • Communiceren met je collega • Investeren ten behoeve van je collega • Overzicht en Inzicht bewerkstelligen • Rekening houden met menselijke zwakheden
OnderhoudbaarheidDe Heilige Geboden • Focus op de basis van de theorie • Software moet goed Leesbaar zijn, begrijpelijk uitleggen hoe een taak uitgevoerd moet worden • Complexiteit moet gereduceerd zijn tot een niveau waarop de LezerOverzicht heeft over de materie • Documentatie moet in beide richtingen Traceerbaar zijn