Introduksjon til TDT4140 Programvareutvikling

Introduksjon til TDT4140
Programvareutvikling/
Software Engineering
Carl-Fredrik Sørensen
Letizia Jaccheri
Ian Sommerville
Temaer som dekkes
• Kapittel 1 i pensumboka
– Profesjonell programvareutvikling
– Etikk i programvareutvikling
– En av tre case studier (pasientinformasjonssystem)
• http://db.tt/A1xinwbQ
2
Programvaresystemer
• Abstrakte og uhåndgripelige
– Ikke begrenset av materialegenskaper
– Ikke styrt av fysiske lover
– Ikke styrt av produksjonsprosesser
• Ingen naturlige grenser for potensialet for programvare
• Mangel på fysiske begrensninger kan fort gjøre programvare
– Ekstremt komplekst
– Vanskelig å forstå
– Dyrt å endre
• Programvare omfatter ikke bare programmene, men også all
assosiert dokumentasjon og konfigurasjonsdata som er
nødvendig for å operere programmene korrekt
3
Software engineering
• Økonomien i alle utviklede land er avhengig av
programvare.
• Software engineering = Programvareutvikling = teorier,
metoder (teknikker som Smidig) og verktøy (som
Eclipse) for profesjonell programvareutvikling..
• Software representerer en betydelig andel av BNP i alle
utviklede land
– IKT er Norges tredje største næring målt i omsetning
– http://ikt-norge.no/om-ikt-norge/statistikk/
4
Eksempel Norge i 2009
Omsetning i
Antall
milliarder
ansatte
kroner
IKT
Overnattings og
serveringsvirksomhet
Industri
Utgivelse av programvare
5
164 52 428
Antall
foretak
5952
50
663
6303
602
Software Engineering
• Ingeniørdisiplin som omfatter alle aspekter av
programvareproduksjon fra tidlige faser av
systemspesifikasjon til vedlikehold av systemet.
• Ingeniørdisiplin
– Benytte passende teorier og metoder for å løse problemer der
man tar hensyn til organisatoriske og økonomiske
begrensninger.
• Alle aspekter av programvareproduksjon
– Ikke bare den tekniske utviklingsprosessen
– Også prosjektstyring og utvikling av verktøy, metoder, etc. som
skal støtte programvareproduksjon
6
Fundamentale prinsipper for
programvareutvikling
• Noen fundamentale prinsipper som gjelder alle typer
programvaresystemer, uavhengig av utviklingsteknikk:
– Systemer bør utvikles vha. en styrt og forstått utviklingsprosess.
Forskjellige prosesser for forskjellige type systemer.
– Pålitelighet og ytelse er viktig for alle type systemer.
– Forstå og håndtere programvarespesifikasjon og krav er viktig
(hva programvaren skal gjøre)
– Hvor det passer, gjenbruk programvare I stedet for å skrive ny.
• Programvarekostnader er som oftest større en
maskinvarekostnader
• Programvare koster mer å vedlikeholde enn utvikle.
7
Kostnad-Kvalitet-Funksjon
• Individer og samfunnet er avhengig av avansert
programvaresystemer
– Må være i stand til å produsere pålitelige og troverdige systemer
økonomisk og raskt.
• Normalt billigere på sikt å benytte «software
engineering» metoder og teknikker for
programvaresystemer enn som et personlig
programmeringsprosjekt.
• Majoriteten av kostnader kommer etter et system har blitt
tatt i bruk.
• «Software engineering» handler om kostnadseffektiv
programvareutvikling
8
Kostnad-Kvalitet-Funksjon
kostnader
• Pasientstyring
• Alarmkontroll
• kalender
Funksjon
9
software
• Utvikling
• Testing
• Evolusjon
•
•
•
•
•
Ytelse
Pålitelighet
Vedlikeholdbarhet
Sikkerhet
Personvern
Kvalitet
Programvareprodukter
• Generiske produkter/hyllevare
– systemer til kundene som ønsker å anskaffe dem
• Programvare som grafikkprogrammer (Adobe Photoshop/GIMP),
prosjektstyringsverktøy (Microsoft Project); CAD/CAM software;
Office, Operating Systems (Linux, Windows, Mac OS)
• ERP, biblioteksystemer, IAM
• Skreddersydde produkter/
– Programvare som er bestilt av en spesifikk kunde for å møte
egne behov.
• Eksempler – innebygde styringssystemer, programvare for
lufttrafikkontroll, trafikkovervåkning, etc.
10
Eksempel Linux
– Nettside: http://www.kernel.org/
– Skaper: Linus Torvalds
– Utgitt 17. september 1991 (utviklingsversjon), 13. mars 1994
(stabil versjon)
– Nyeste versjon
– Plattform:
30.desember 2013
Mange arkitekturer
– Kommandobasert operativmiljø
– OS-familie:
– Lisens:
Unix-liknende
GNU General Public License versjon 2
– Lines of code: mer enn 10 Millioner
11
#include <linux/module.h>
#include <asm/console.h>
#include <asm/uaccess.h>
#include <asm/checksum.h>
#include <asm/fpu.h>
Eksempel http://ant.apache.org/
• Apache Ant 1.9.3 is available for download as source or
binary from http://ant.apache.org/bindownload.cgi.
• Apache Ant er et verktøy for å automatisere programvare
utviklingprosesser.
12
Aktiviteter i programvareprosessen
• Programvarespesifikasjon, hvor kunder og ingeniører
definerer programvaren som skal bli produsert og vilkår
for operasjon..
• Programvareutvikling, hvor programvaren blir designet
og programmert.
• Programvarevalidering, hvor programvaren blir sjekket
for å sikre at den er hva kunder krever.
• Programvareevolusjon, hvor programvaren blir modifisert
for å reflektere endringer i krav fra kunde og marked.
13
Applikasjonstyper
•
•
•
•
•
•
•
•
14
Stand-alone applications
Interactive transaction-based applications
Embedded control systems
Batch processing systems
Entertainment systems
Systems for modeling and simulation
Data collection systems
Systems of systems
Etikk i programvareutvikling
• Etikk (fra gresk ethos, moralsk) er den delen av filosofien
som søker å besvare spørsmål som «hva er godt», «hva
er det rette», «hvordan bør man oppføre seg».
• Bredere ansvar enn bare anvendelse av tekniske
ferdigheter.
• Ingeniører må opptre ærlig og etisk forsvarlig måte hvis de
skal bli respektert som fagfolk.
• Etisk atferd er mer enn å opprettholde loven, men
innebærer å følge et sett av prinsipper som er moralsk
riktig.http://www.acm.org/about/se-code
– ACM Association for Computer Machinery
– IEEE Institute of Electrical and Electronics Engineers.
15
Case studies
1.
A personal insulin pump
– An embedded system in an insulin pump used by diabetics to maintain blood glucose control.
2. A mental health case patient management system
– A system used to maintain records of people
receiving care for mental health problems.
3.
16
A wilderness weather station
– A data collection system that collects data about weather conditions in remote areas.
Et pasientinformasjonssystem
• Et system som brukes til å holde oversikt over personer
som mottar omsorg for psykiske helseproblemer.
• Et pasientinformasjonssystem for å støtte psykisk
helsevern er et medisinsk informasjonssystem som
vedlikeholder informasjon om pasienter som lider av
psykiske problemer og behandlinger som de har mottatt.
• De fleste psykiske pasienter krever ikke dedikert
sykehusbehandling, men trenger å besøke spesialist
regelmessig der de kan møte en lege som har detaljert
kunnskap om deres problemer.
17
Mål:
• Gjøre det lettere for pasienter å benytte tjenestene.
Klinikkene ikke bare på sentraliserte sykehus. De kan
også være i lokale legekontorer eller andre egnede
steder i distriktene.
• Generere styringsinformasjon som muliggjør at
helsetjenesten ledere kan vurdere ytelse mot lokale og
offentlige mål.
• Gi medisinsk personale riktig informasjon for å støtte
behandling av pasienter.
18
Funksjoner
• Individuell omsorg: helsepersonell kan lage journalposter,
redigere informasjonen i systemet, se pasientens
medisinske historie, etc. Systemet støtter informasjonssammendrag slik at leger raskt kan få informasjon om viktige
problemer og foreskrevne behandlinger.
• Pasientovervåkning: Systemet overvåker journalen til
pasienter som får behandling og gir en advarsel hvis mulige
problemer blir oppdaget.
• Administrativ rapportering. Systemet genererer månedlige
rapporter som viser antall behandlede pasienter ved hver
klinikk, antall pasienter som har kommet og forlatt
omsorgssystemet, antall pasienter «innesperret», medisiner
foreskrevet og kostnader, etc.
19
Krav
a) Personvern
– Det er viktig at pasientinformasjon er konfidensiell og kun
autorisert helsepersonell og pasienten selv har tilgang.
b) Sikkerhet (Safety)
– Noen psykiske lidelser fører pasienter til å bli suicidal eller en
fare for andre mennesker. Der det er mulig, skal systemet varsle
medisinsk personell om potensielt suicidale eller farlige
pasienter.
– Systemet må være tilgjengelig når det trengs, ellers kan det
være umulig å foreskrive riktig medisin til pasienter.
20
Organisering av MHC-PMS
21
Essensielle egenskaper i god
programvare
22
Produktkarakteristikk
Beskrivelse
Vedlikeholdbarhet
(Maintainability)
Programvare skal bli skrevet på en slik måte at den kan utvikle seg
til å møte endrede behov fra kunder. Dette er en kritisk egenskap
fordi endringer i programvare er et uunngåelig krav i miljø med
endringer i forretningskrav og behov.
Pålitelighet og sikkerhet
(Dependability and
security)
Programvarepålitelighet inkluderer en rekke karakteristikker som
funksjonsstabilitet, sikkerhet (både IT-sikkerhet og fysisk
sikkerhet). Pålitelig programvare bør ikke medføre fysiske eller
økonomiske skader dersom det oppstår en systemfeil.
Ondsinnede brukere skal ikke være i stand til å få tilgang til eller
gjøre skader i systemet.
Effektivitet
(Efficiency)
Programvare bør ikke sløse med systemressurser som minne,
prosessorsykluser eller båndbredde. Effektivitet inkluderer
responsitivitet, prosesseringstid, minneforbruk og utnyttelse etc.
Akseptabilitet
(Acceptability)
Programvare må være akseptabel for den type brukere som den
er designet for. Dette betyr at den må være lett å forstå, brukbar
og kompatibel med andre systemer som brukere benytter.
Akseptabilitet inkluderer brukbarhet og universell design.
Konklusjon
• Lysark er tilgjengelig i
– Wiki
https://www.ntnu.no/wiki/pages/viewpage.action?pageId=757601
79
– LectureTools -- https://my.lecturetools.co.uk/users/generic_invite/
– Its Learning
– Canvas -- https://uninett.instructure.com/courses/38
• Les kapittel 1
• Modeller eksemplene vha. f.eks. Violet
http://alexdp.free.fr/violetumleditor/page.php, Eclipse
eller andre modellingsverktøy (Visio)
23
Programvareutvikling og Web
• I 2014 kan vi ikke forestille oss en verden uten Web
• Web services (Chapter 19) gjør at
applikasjonsfunksjonalitet kan bli aksessert over Web.
• Skytjenester er en tilnærming for tilgjengeliggjøring av
IKT-tjenester hvor applikasjoner kjører distribuert i skyen.
– Bruker kjøper ikke programvare, men betaler for bruk.
– IaaS, PaaS, SaaS
24
Programvareutvikling og Web
• Gjenbruk av programvare er den dominante tilnærming for å
bygge web-baserte systemer.
– Når slike systemer bygges, tenkes de på hvordan de kan settes
sammen basert på allerede eksisterende programvare-komponenter og
systemer.
• Web-baserte systemer bør utvikles og leveres inkrementelt.
– I dag er generelt akseptert at det er upraktisk å spesifisere alle krav for
slike systemer på forkant.
• Brukergrensesnitt er begrenset av kapabiliteten til nettlesere.
– Teknologier som f.eks. AJAX og Flash gjør at man kan lage rikere
grensesnitt I en Web Browser, men er fortsatt vanskelig å bruker. Mer
normalt med bruk av Web forms med lokal skripting (f.ek.s JavaScript)
– HTML 5 er lovende, men fortsatt ikke en ferdig standard.
25
Etikk i programvareutvikling
• Etikk (fra gresk ethos, moralsk) er den delen av filosofien
som søker å besvare spørsmål som «hva er godt», «hva
er det rette», «hvordan bør man oppføre seg».
• Bredere ansvar enn bare anvendelse av tekniske
ferdigheter.
• Ingeniører må opptre ærlig og etisk forsvarlig måte hvis de
skal bli respektert som fagfolk.
• Etisk atferd er mer enn å opprettholde loven, men
innebærer å følge et sett av prinsipper som er moralsk
riktig.http://www.acm.org/about/se-code
– ACM Association for Computer Machinery
– IEEE Institute of Electrical and Electronics Engineers.
26
Problemstillinger og ansvar i faglig
utøvelse
• Konfidensialitet
– Ingeniører skal normalt respektere konfidensialiteten til deres
arbeidsgiver og klienter uavhengig av om det er eller ikke er
signert en formell taushetserklæring.
• Kompetanse
– Ingeniører skal ikke fremstille deres kompetansenivå uriktig. De
skal ikke bevisst eller med overlegg, akseptere arbeid som er
utenfor eget kompetanseområde.
27
Problemstillinger og ansvar i faglig
utøvelse
• Intellectual property rights/opphavsrett
– Ingeniører bør kjenne til lokalt lovverk som styrer bruk av
opphavsrettslig eiendom som f.eks. patenter og Copyright. De
skal være påpasselige i å sikre at opphavsretten til arbeidsgivere
og klienter er beskyttet.
– Tilsvarende med bruk av opphavsrettslig/lisensiert programvare.
API-er, åpen kildekode, programvare fra andre
arbeidsgivere/programvareutviklere.
28
Problemstillinger og ansvar i faglig
utøvelse
• Misbruk av datautstyr og programvare
– Programvareutviklere skal ikke benytte deres tekniske
ferdigheter til å misbruke andre menneskers eller bedrifters
datautstyr.
– Misbruk kan variere fra det relativt trivielle (spilling på en
arbeidsgivers maskin) til det ekstremt alvorlige (spredning av
virus/informasjon).
29
ACM/IEEE Code of Ethics
• The professional societies in the US have cooperated to
produce a code of ethical practice.
• Members of these organisations sign up to the code of
practice when they join.
• The Code contains eight Principles related to the
behaviour of and decisions made by professional
software engineers, including practitioners, educators,
managers, supervisors and policy makers, as well as
trainees and students of the profession.
30
Rationale for the code of ethics
– Computers have a central and growing role in commerce,
industry, government, medicine, education, entertainment and
society at large. Software engineers are those who contribute
by direct participation or by teaching, to the analysis,
specification, design, development, certification,
maintenance and testing of software systems.
– Because of their roles in developing software systems, software
engineers have significant opportunities to do good or
cause harm, to enable others to do good or cause harm, or
to influence others to do good or cause harm. To ensure, as
much as possible, that their efforts will be used for good,
software engineers must commit themselves to making software
engineering a beneficial and respected profession.
31
The ACM/IEEE Code of Ethics
Software Engineering Code of Ethics and Professional Practice
ACM/IEEE-CS Joint Task Force on Software Engineering Ethics and Professional Practices
PREAMBLE
The short version of the code summarizes aspirations at a high level of the abstraction; the
clauses that are included in the full version give examples and details of how these
aspirations change the way we act as software engineering professionals. Without the
aspirations, the details can become legalistic and tedious; without the details, the
aspirations can become high sounding but empty; together, the aspirations and the details
form a cohesive code.
Software engineers shall commit themselves to making the analysis, specification, design,
development, testing and maintenance of software a beneficial and respected profession. In
accordance with their commitment to the health, safety and welfare of the public, software
engineers shall adhere to the following Eight Principles:
32
Etiske prinsipper
1. PUBLIC - Software engineers shall act consistently with the public interest.
2. CLIENT AND EMPLOYER - Software engineers shall act in a manner that is in the best
interests of their client and employer consistent with the public interest.
3. PRODUCT - Software engineers shall ensure that their products and related
modifications meet the highest professional standards possible.
4. JUDGMENT - Software engineers shall maintain integrity and independence in their
professional judgment.
5. MANAGEMENT - Software engineering managers and leaders shall subscribe to and
promote an ethical approach to the management of software development and
maintenance.
6. PROFESSION - Software engineers shall advance the integrity and reputation of the
profession consistent with the public interest.
7. COLLEAGUES - Software engineers shall be fair to and supportive of their colleagues.
8. SELF - Software engineers shall participate in lifelong learning regarding the practice of
their profession and shall promote an ethical approach to the practice of the profession.
33
33
Etiske dilemmaer
• Prinsipiell uoverensstemmelse/uenighet med politikk fra
ledelsen.
• Arbeidsgiver opptrer på en uetisk måte og sender ut på
markedet et sikkerhetskritisk system uten å være ferdig
med testing av systemet.
• Deltakelse i utvikling av militære våpensystem eller
systemer benyttet i forbindelse med kjernekraft.
34
Mer om Software Engineering
Flere detaljer
Kontrollsystem for insulinpumpe
• Se http://db.tt/KdSuBAl1
• Samler data fra en blodsukkersensor og beregner hvor
mye insulin som kreves å bli injisert.
• Beregning basert på frekvensen av endring av
blodsukkernivået.
• Sender signaler til en mikro-pumpe for å levere den
riktige dosen av insulin.
• Sikkerhetskritisk system fordi lav blodsukker kan føre til
hjertesvikt, koma og død. Høy blodsukkernivået har
langsiktige konsekvenser som øye og nyreskader.
36
Insulin pump hardware architecture
37
Activity model of the insulin pump
38
Essensielle høynivås krav
• Systemet skal være tilgjengelig til å levere insulin når det
er behov
• System skal opptre pålitelig og levere den korrekte
dosen med insulin for å motvirke det nåværende
sukkernivået i blodet.
• Systemet må derfor bli designet og implementert for å
forsikre at systemet alltid møter disse kravene.
39
Wilderness weather station
• Myndighetene i et land med store villmarksområder,
bestemmer seg for å sette ut flere hundre værstasjoner i
fjerntliggende områder.
• Vårstasjoner samler data fra et sett av instrumenter som
måler luft/bakketemperatur og lufttrykk, solskinn, nedbør,
fart og retning på vind.
– Hvert instrument er kontrollert av et programvaresystem som
leser data periodisk og håndterer informasjon samlet fra
instrumentene.
40
The weather station’s environment
41
Weather information system
• The weather station system
– Denne er ansvarlig for å samle værdata, utføre noe initiell
dataprosessering og overføre data til “Data Management and
archiving system”
• The data management and archiving system
– Dette systemet samler data fra all værstasjoner i villmarka,
utfører data prosessering og analyse, og arkiverer dataene.
• The station maintenance system
– Dette systemet kan kommunisere ved hjelp av satellitter, med
alle værstasjoner for å overvåke helsen til disse systemene og
sørge for problemrapporter.
42
Tilleggsfunksjonalitet i programvaren
• Overvåke instrumentene, maskinvare for strøm og
kommunikasjon og rapportere feil til styringssystemet
(management system).
• Styre systemkraft, forsikre at batterier er ladet når
miljøbetingelsene tillater det, men også at generatorer
blir slått av dersom det er potensielt skadelige
værforhold, f.eks. mye vind.
• Supporter dynamisk rekonfigurering hvor deler av
systemet er erstattet med nye versjon og hvor
erstatningsinstrumenter er satt inn I systemet hvis det
oppstår en system feil.
43
Oppsummering
• Programvareutviklere/software engineers har ansvar som
ingeniører i forhold til sitt fagfelt og sine fagfeller. De skal
ikke bare være opptatt med tekniske problemstillinger.
• Profesjonsforeninger som IEEE og ACM, publiserer regler
for påkrevd opptreden. Disse beskriver en standard for
oppførsel som er forventet av deres medlemmer.
• Tre case studier er benyttet i pensumboka:
– An embedded insulin pump control system
– A system for mental health care patient management
– A wilderness weather station
44
Oppsummering
• Software engineering/programvareutvikling er en
ingeniørdisiplin som omfatter alle aspekter med
programvareproduksjon
• Essensielle produktegenskaper med programvare er
vedlikeholdbarhet, pålitelighet og sikkerhet,
effektivitet og akseptabilitet.
• Høynivå aktivitetene av spesifikasjon, utvikling,
validering og evolusjon er deler av alle
utviklingsprosesser for programvare.
45
Oppsummering
• De fundamentale verdier og notasjoner i
programvareutvikling er universelt gjeldende for alle
typer av systemutvikling.
• Det er mange forskjellige systemtyper og hver enkelt
krever passende programvareutviklingsverktøy og
teknikker i deres utvikling.
• De fundamenale ideene om programvareutvikling er
gjeldende for alle typer av programvaresystemer.
46
Frequently asked questions about
software engineering
Question
Answer
What is software?
Computer programs and associated documentation.
Software products may be developed for a particular
customer or may be developed for a general market.
What are the attributes of good software?
Good software should deliver the required functionality
and performance to the user and should be
maintainable, dependable and usable.
What is software engineering?
Software engineering is an engineering discipline that is
concerned with all aspects of software production.
What are the fundamental
engineering activities?
software Software specification, software development, software
validation and software evolution.
What is the difference between software Computer science focuses on theory and fundamentals;
engineering and computer science?
software engineering is concerned with the practicalities
of developing and delivering useful software.
What is the difference between software System engineering is concerned with all aspects of
engineering and system engineering?
computer-based
systems
development
including
hardware, software and process engineering. Software
engineering is part of this more general process.
47
Frequently asked questions about
software engineering
Question
Answer
What are the key challenges facing Coping with increasing diversity, demands for reduced
software engineering?
delivery times and developing trustworthy software.
What are the
engineering?
costs
of
software Roughly 60% of software costs are development costs,
40% are testing costs. For custom software, evolution
costs often exceed development costs.
What are the best software engineering While all software projects have to be professionally
techniques and methods?
managed and developed, different techniques are
appropriate for different types of system. For example,
games should always be developed using a series of
prototypes whereas safety critical control systems require
a complete and analyzable specification to be developed.
You can’t, therefore, say that one method is better than
another.
What differences has the web made to The web has led to the availability of software services
software engineering?
and the possibility of developing highly distributed servicebased systems. Web-based systems development has led
to important advances in programming languages and
software reuse.
48
Essensielle egenskaper i god
programvare
Produktkarakteristikk Beskrivelse
Vedlikeholdbarhet
(Maintainability)
Programvare skal bli skrevet på en slik måte at den kan utvikle seg til å møte
endrede behov fra kunder. Dette er en kritisk egenskap fordi endringer i
programvare er et uunngåelig krav i miljø med endringer i forretningskrav og
behov.
Pålitelighet og
sikkerhet
(Dependability and
security)
Programvarepålitelighet
inkluderer
en
rekke
karakteristikker
som
funksjonsstabilitet, sikkerhet (både IT-sikkerhet og fysisk sikkerhet). Pålitelig
programvare bør ikke medføre fysiske eller økonomiske skader dersom det
oppstår en systemfeil. Ondsinnede brukere skal ikke være i stand til å få tilgang
til eller gjøre skader i systemet.
Effektivitet
(Efficiency)
Programvare bør ikke sløse med systemressurser som minne,
prosessorsykluser eller båndbredde. Effektivitet inkluderer responsitivitet,
prosesseringstid, minneforbruk og utnyttelse etc.
Akseptabilitet
(Acceptability)
Programvare må være akseptabel for den type brukere som den er designet for.
Dette betyr at den må være lett å forstå, brukbar og kompatibel med andre
systemer som brukere benytter. Akseptabilitet inkluderer brukbarhet og
universell design.
49