Introductie
description
Transcript of Introductie
IntroductiePiet de VriesPinkRoccadeStudenten TUE
Mijn VuurdoopVerhaal uit de 60-er jarenOmvangrijk SimulatieprogrammaTwee tekens voor namen van variabelen Misbruik common data areaEen goto in elke 3 statementsGeen documentatieOpdracht: Omzetting van 35- naar 32-
bits
DoelstellingInzicht 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
IndelingDe TheorieDe PraktijkOorzaken en GevolgenOnderhoudbaarheid
Waar gaat het eigenlijk om?
De TheorieGeen Cryptische CodeZwakke KoppelingVerbergen van techniekVerduidelijkende NaamgevingVerduidelijkend CommentaarSterke SamenhangModulariteit
De PraktijkSteekproef 40 bedrijvenSelecte 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 VoorbeeldBurgerzaken 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 EisenSoftware 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 AanpakOpleidingen
Filosoof, Mulo, Bioloog, Zeeman, Socioloog, Chemicus, Sexuoloog, Indisch Informaticus, Wiskundige, Melkcontroleur, Neerlandicus, Hobbyisten, Heao, Materiedeskundigen, Binnenhuisarchitect, Gesjeesden
Akelig weinig informaticiHoge eisen zijn niet waar te maken
GevolgenHomohuwelijkGevolgen voor GBA
Teksten aanpassen Controles aanpassen Beperkingen van selectie aanpassen Impliciete aannames aanpassen
Kosten: 2 manjaar
GevolgenGlobale GegevensFoutmelding: 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 voldoendeEen goede programmeur heeft veel
ervaringOpleidingen kunnen geen goede
programmeurs afleverenBedrijven zijn er niet op ingericht om
medewerkers op te leiden Onvoldoende Belang Onvoldoende Omvang Onvoldoende Kennis
OorzakenDe ProgrammeurPreoccupatie 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 werkCobol kent geen variabele arraylengteIk had verstand van operating systeemRoutine gemaakt voor dynamische
allocatie van geheugen Goed gestructureerdGoed gedocumenteerdHeeft nooit iemand iets van begrepen
GevolgenHandige schermroutineMaximaal 60 veldenVelden op volgnummer te benaderenGevolgen: veel herhaling van zetten en
vaak hernummering nodigOplossing: schermdefinitie in tabel
opslaan en generieke moduleGevolg: volstrekt onbegrijpelijke code
omdat de tabel niet generiek genoeg isKosten per jaar niet te becijferen
OorzakenVicieuze CirkelGoede 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
OorzakenSpecialisatieOnderhoudsprogrammeurs
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 nietOplossing: onderhoudbare
nieuwbouw?Nieuwbouwprogrammeurs
onderhoudsprogrammeurskennen de theorie niet
externe leverancierskennen de theorie niethebben geen belang bij onderhoudbaarheid
OorzakenVerbetertraject helpt nietDe noodzaak wordt breed gevoeldEr wordt veel geinvesteerd in verbeteringMen richt zich vooral op management
processen, planning, beheersing, tijd, voorspelbaarheid, verantwoording, specificaties, contracten
Alleen nuttig als de techniek in orde isIn 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 ProbleemOnderhoud wordt gedaan voor
Mensen Onderhoudbaar programmeren =
Communiceren met je collegaInvesteren ten behoeve van je collegaOverzicht en Inzicht bewerkstelligenRekening houden met menselijke
zwakheden
OnderhoudbaarheidDe Heilige GebodenFocus 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 Lezer Overzicht heeft over de materie
Documentatie moet in beide richtingen Traceerbaar zijn