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
© Copyright 2024