TDDI02 - HEMTENTA HT 2011 Regler ------ Har du läst reglerna för hemtentan? Se annars sidan http://www.ida.liu.se/~TDDI02/hemtenta/info.txt som också kan nås via sidan 'Hemtenta'. Allmänt ------- En del frågor är på nåt sätt 'lätta' frågor, som det ofta bara är att slå upp någonstans. Ibland krävs dock att man läser mer än på bara ett ställe. Några frågor kan vara tillämpningsfrågor, där man måste använda någon bakgrundskunskap och sitt förnuft, för att till exempel räkna ut något. En del frågor kan förhoppningsvis också kräva att man funderar en del själv! På en del frågor räcker några få rader som svar. Andra kanske en sida. (Det ingår i uppgiften att inse vilka.) Skriv koncentrerat, men var inte alltför kortfattad; du kan t ex behöva förklara de begrepp som frågan grundar sig på. Besvara varje delfråga. Inlämning --------- Du ska lämna dina svar på papper och hophäftade (helst) med det speciella försättsblad som finns/kommer att finnas på sidan 'Hemtenta'. Svaren skall lämnas senast tisdag 27/9 2011 kl 17.00. Du kan lämna in antingen - direkt till mig, i handen (inte i mitt infack vid dörren), eller - i ett brunt internkuvert adresserat till mig, och som du lägger i brevinkastet mittemot café Java (postrummet). Försäkran --------- OBS att du på försättsbladet avger en undertecknad, personlig försäkran att du följt tentans regler! FRÅGORNA -------- 1. Varför finns Software Engineering? 2. Vad är dyrast, att göra en design eller att implementera den (dvs 'skriva programmet')? Varför? Är det bra? 3. Det programmerarlag i vilket du ska ingå i din yrkesroll, hur skulle du vilja att det är organiserat? Jämför med andra orga- nisationsformer, och motivera utifrån jämförelsen varför du föredrar just denna. 4. Vad innebär prototyping? Vad finns det för fördelar? Försök att också beskriva någon nackdel (sådana finns!). På vilka sätt kan en prototyp användas efter att den har framställts och provats? 5. Programmering kan till stor del sägas handla om att införa abstraktioner. Vad menas med det? Vad är det man vill uppnå? 6. Vad innebär en detaljerad (lågnivå) moduldesign? Man brukar också kalla en sådan ett modulkontrakt. Varför just 'kontrakt'? 7. Det existerar ett antal olika former av modulkoppling (coupling). Beskriv fyra av dem, och ange vilken som är starkast resp svagast. Beskriv också hur vardera mekanismen yttrar sig (eller är omöjlig!) i C/C++. 8. Beskriv och motivera begreppet inkapsling. Sätt det också i relation till begreppet information hiding. Vad innebär de båda för slags 'nytta'? 9. Ange några faktorer i programkod som bidrar till hög komplexitet. Kan man mäta sånt? 10. Ett sannolikt riktigt påstående lyder: "Programkod läses (av män- niskor) oftare än den skrivs." Hur ska man tolka det? Hur kommer du som kodare att ta fasta på påståendet? 11. Egenskapen 'stark typning' hos ett programspråk, vad innebär den? Utgör den ett hinder eller befrämjar den principerna för Software Engineering? Förklara och motivera. 12. Vad är det för skillnad på 'programming in the large' och 'programming in the small'? Belys detta ur flera olika perspektiv. 13. Vad är det för skillnad på validering och verifiering? 14. Är det nån idé att bara 'lusläsa' kod (alltså: utan att exekvera den) i avsikt att verifiera eller validera den? Hur skulle det i så fall kunna gå till? 15. Antag att 3 programmerare arbetar på heltid (8 timmar per dag) i ett programmeringsprojekt. Varje programmerare klarar av att skriva i genomsnitt 10 rader programkod per 8 timmar. Projektet är organiserat så att alla medlemmarna i gruppen måste kommuni- cera med varandra. Det går åt trettio minuter per dag för att prata med var och en av de andra gruppmedlemmarna. a) Hur många rader programkod per dag producerar den här projektgruppen? b) Projektet blir försenat, och för att det ska gå snabbare anställer företagsledningen ytterligare tre programmerare som ska ingå i projektgruppen. Hur många rader programkod per dag producerar gruppen nu? c) Projektet blir försenat i alla fall, så företagsledningen anställer sex programmerare till. Hur många rader programkod per dag producerar gruppen nu? d) Det står i scenariot att projektet är organiserat så att alla programmerarna måste kommunicera med varandra varje dag. Tyder det på att något är fel, och i så fall vad? (Redovisa alla antaganden och uträkningar!)