Programų sistemų inžinerija 2018-02-07 Saulius Ragaišis, VU MIF saulius.ragaisis@mif.vu.lt
Klausytojai: Susipažinimas Išklausyti programų sistemų inžinerijos kursai Profesinė patirtis Dabar klausomi pasirenkami dalykai Žmogaus ir kompiuterio sąveikos projektavimas Objektinės technologijos IT projektų valdymas Programų sistemų kūrimo metodai ir įrankiai Daugiamačių duomenų vizualizacija
PSI praktikoje
PSI praktikoje (2)
Kurso struktūra ir vertinimo strategija Egzaminas (teoriniai klausimai ir praktinės užduotys): iki 5 balų - Būtina surinkti bent 1 balą Darbas semestro metu: iki 6 balų Pranešimas seminare: iki 3 balų Būtina gauti bent 1 balą Praleistas pranešimas -1 balas Esminis vertinimo kriterijus: klausytojų įtraukimas į diskusiją. Papildomas darbas: Aktyvumas paskaitų metu Aktyvumas seminarų metu Kolegų vertinimas Pranešimo medžiaga Klausimai egzaminui
Šaltiniai seminarams Roger S Pressman, Software Engineering: A Practitioner's Approach, 6th Edition, 2005, ISBN 007-123840-9 Kiti magistrantų pasiūlyti šaltiniai
Organizacinis patikslinimas Paskaitos nuo 16:15, seminarai nuo 18:00 arba Paskaitos nuo 16:00, seminarai nuo 17:45. Pastaba: pranešimui seminare skiriama 1 valanda, todėl seminarų, kurių metu bus daromi 2 pranešimai, trukmė 2 valandos.
Programų sistemų inžinerijos samprata Computing Curricula 2005: The Overview Report. ACM and IEEE, 2006. http://www.acm.org/education/curric_vols/cc2005-march06final.pdf Išskiriamos 5 savarankiškos disciplinos: Kompiuterių inžinerija (angl. Computer Engineering); Kompiuterių mokslas (angl. Computer Science); Informacinės sistemos (angl. Information Systems); Informacinės technologijos (angl. Information Technology); Programų sistemų inžinerija (angl. Software Engineering).
Informatikos (Computing) disciplinos Organizaciniai aspektai ir informacinės sistemos Organizaciniai aspektai ir informacinės sistemos Taikymų technologijos Taikymų technologijos Programų kūrimo metodai ir technologijos Programų kūrimo metodai ir technologijos Sistemų infrastruktūra Sistemų infrastruktūra Kompiuterių techninė įranga ir architektūra Teorija Principai Inovacijos Kompiuterių inžinerija Labiau teorinis Kūrimas Labiau taikomasis Taikymas Diegimas Konfigūravimas Kompiuterių techninė įranga ir architektūra Teorija Principai Inovacijos Kompiuterių mokslas Labiau teorinis Kūrimas Labiau taikomasis Taikymas Diegimas Konfigūravimas Organizaciniai aspektai ir informacinės sistemos Organizaciniai aspektai ir informacinės sistemos Taikymų technologijos Taikymų technologijos Programų kūrimo metodai ir technologijos Programų kūrimo metodai ir technologijos Sistemų infrastruktūra Sistemų infrastruktūra Kompiuterių techninė įranga ir architektūra Teorija Principai Inovacijos Informacinės sistemos Labiau teorinis Kūrimas Labiau taikomasis Taikymas Diegimas Konfigūravimas Kompiuterių techninė įranga ir architektūra Teorija Principai Inovacijos Informacinės technologijos Labiau teorinis Kūrimas Labiau taikomasis Taikymas Diegimas Konfigūravimas
Informatikos (Computing) disciplinos (2) Organizaciniai aspektai ir informacinės sistemos Taikymų technologijos Programų kūrimo metodai ir technologijos Sistemų infrastruktūra Kompiuterių techninė įranga ir architektūra Teorija Principai Inovacijos Programų sistemų inžinerija Labiau teorinis Kūrimas Labiau taikomasis Taikymas Diegimas Konfigūravimas
Disciplinų nagrinėjamos sritys Žmonės 30 % Žmonės 30 % 25 % 25 % Organizacijos ir verslas 20 % Informatikos teorija Organizacijos ir verslas 20 % Informatikos teorija 15 % 15 % Valdymas 10 % 5 % Matematika Valdymas 10 % 5 % Matematika Informacija Fizika Informacija Fizika Programinė įranga Techninė įranga ir architektūra Programinė įranga Techninė įranga ir architektūra Infrastruktūra Infrastruktūra Kompiuterių inžinerija Kompiuterių mokslas Žmonės 30 % Žmonės 30 % 25 % 25 % Organizacijos ir verslas 20 % Informatikos teorija Organizacijos ir verslas 20 % Informatikos teorija 15 % 15 % Valdymas 10 % 5 % Matematika Valdymas 10 % 5 % Matematika Informacija Fizika Informacija Fizika Programinė įranga Techninė įranga ir architektūra Programinė įranga Techninė įranga ir architektūra Infrastruktūra Informacinės sistemos Infrastruktūra Informacinės technologijos
Disciplinų nagrinėjamos sritys (2) Žmonės 30 % Organizacijos ir verslas Valdymas 25 % 20 % 15 % 10 % 5 % Informatikos teorija Matematika Informacija Fizika Programinė įranga Techninė įranga ir architektūra Infrastruktūra Programų sistemų inžinerija
Projektas SWEBOK SWEBOK Guide to the Software Engineering Body of Knowledge. IEEE. http://www.swebok.org/ Šio projekto tikslas apibrėžti pagrindines programų sistemų inžinieriams būtinų žinių sritis. Buvo sukurtos kelios versijos:: Šiaudų amžiaus žmogaus versija (Straw Man Version) 1998 metais; Akmens amžiaus žmogaus versijos (Stone Man Versions) 1999-2001 metais; Geležies amžiaus žmogaus versija (Iron Man Version) 2004 metais. SWEBOK v3.0. Guide to the Software Engineering Body of Knowledge. IEEE, 2014. (užsiregistravus galima atsisiųsti)
2004 m. žinių sritys ir esminės jų temos 1 Programų sistemų reikalavimai (angl. Software Requirements): - Reikalavimų pagrindai (angl. Software Requirements Fundamentals) - Reikalavimų procesas (angl. Requirements Process) - Reikalavimų išgavimas (angl. Requirements Elicitation) - Reikalavimų analizė (angl. Requirements Analysis) - Reikalavimų specifikavimas (angl. Requirements Specification) - Reikalavimų validavimas (angl. Requirements Validation) - Praktiniai aspektai (angl. Practical Considerations) 2 Programų sistemų projektavimas (angl. Software Design): - Projektavimo pagrindai (angl. Software Design Fundamentals) - Esminės projektavimo problemos (angl. Key Issues in Software Design) - Programų sistemų struktūra ir architektūra (angl. Software Structure and Architecture) - Projekto kokybės analizė ir vertinimas (angl. Software Design Quality Analysis and Evaluation) - Projektavimo notacijos (angl. Software Design Notations) - Projektavimo strategijos ir metodai (angl. Software Design Strategies and Methods)
2004 m. žinių sritys ir esminės jų temos (2) 3 Programų sistemų kūrimas (angl. Software Construction): - Kūrimo pagrindai (angl. Software Construction Fundamentals) - Kūrimo valdymas (angl. Managing Construction) - Praktiniai aspektai (angl. Practical Considerations) 4 Programų sistemų testavimas (angl. Software Testing): - Testavimo pagrindai (angl. Software Testing Fundamentals) - Testavimo lygiai (angl. Test Levels) - Testavimo metodai (angl. Testing Techniques) - Matavimai, susiję su testavimu (angl. Test Related Measures) - Testavimo procesas (angl. Test Process) 5 Programų sistemų priežiūra (angl. Software Maintenance): - Priežiūros pagrindai (angl. Software Maintenance Fundamentals) - Esminės priežiūros problemos (angl. Key Issues in Software Maintenance) - Priežiūros procesas (angl. Maintenance Process) - Priežiūros metodai (angl. Techniques for Maintenance)
2004 m. žinių sritys ir esminės jų temos (3) 6 Programų sistemų konfigūracijos valdymas (angl. Software Configuration Management): - Konfigūracijos valdymo procesas (angl. Management of the SCM Process) - Konfigūracijos identifikavimas (angl. Software Configuration Identification) - Konfigūracijos kontroliavimas (angl. Software Configuration Control) - Konfigūracijos būsenos valdymas (angl. Software Configuration Status Accounting) - Konfigūracijos auditas (angl. Software Configuration Auditing) - Konfigūracijos išleidimų valdymas ir pateikimas (angl. Software Configuration Release Management and Delivery) 7 Programų sistemų projektų valdymas (angl. Software Engineering Management): - Inicijavimas ir apimties apibrėžimas (angl. Initiation and Scope Definition) - Projekto planavimas (angl. Software Project Planning) - Projekto vykdymas (angl. Software Project Enactment) - Peržiūra ir vertinimas (angl. Review and Evaluation) - Uždarymas (angl. Closure) - Programų inžinerijos matavimai (angl. Software Engineering Measurement)
2004 m. žinių sritys ir esminės jų temos (4) 8 Programų sistemų kūrimo procesas (angl. Software Engineering Process): - Proceso įgyvendinimas ir keitimas (angl. Process Implementation and Change) - Proceso apibrėžimas (angl. Process Definition) - Proceso vertinimas (angl. Process Assessment) - Proceso ir produkto matavimai (angl. Process and Product Measurement) 9 Programų sistemų metodai ir įrankiai (angl. Software Engineering Tools and Methods): - Reikalavimų įrankiai (angl. Software Requirements Tools) - Projektavimo įrankiai (angl. Software Design Tools) - Kūrimo įrankiai (angl. Software Construction Tools) - Testavimo įrankiai (angl. Software Testing Tools) - Priežiūros įrankiai (angl. Software Maintenance Tools) - Konfigūracijos valdymo įrankiai (angl. Software Configuration Management Tools) - Projektų valdymo įrankiai (angl. Software Engineering Management Tools) - Programų kūrimo proceso įrankiai (angl. Software Engineering Process Tools) - Kokybės užtikrinimo įrankiai (angl. Software Quality Tools) - Įvairialypiai įrankiai (angl. Miscellaneous Tools Issues) - Euristiniai metodai (angl. Heuristic Methods) - Formalūs metodai (angl. Formal Methods) - Prototipavimo metodai (angl. Prototyping Methods)
2004 m. žinių sritys ir esminės jų temos (5) 10 Programų sistemų kokybė (angl. Software Quality): - Kokybės pagrindai (angl. Software Quality Fundamentals) - Kokybės valdymo procesas (angl. Software Quality Management Process) - Praktiniai aspektai (angl. Practical Considerations) 11 Susijusių disciplinų žinios (angl. Knowledge Areas of the Related Disciplines): - Kompiuterių inžinerija (angl. Computer Engineering) - Kompiuterių mokslas (angl. Computer Science) - Valdymas (angl. Management) - Matematika (angl. Mathematics) - Projektų valdymas (angl. Project Management) - Kokybės valdymas (angl. Quality Management) - Programų sistemų ergonomika (angl. Software Ergonomics) - Sistemų inžinerija (angl. System Engineering)
SWEBOK evoliucija Nuo SWEBOK Guide to the Software Engineering Body of Knowledge, 2004 Version. IEEE, 2004. prie SWEBOK v3.0. Guide to the Software Engineering Body of Knowledge. IEEE, 2014. http://www.swebok.org/ Tolimesnėse skaidrėse apžvelgiami struktūriniai pasikeitimai.
Mažiausiai pakitusios žinių sritys Programų sistemų reikalavimai (angl. Software Requirements) Reikalavimų įrankiai (angl. Software Requirements Tools) Programų sistemų testavimas (angl. Software Testing) Testavimo įrankiai (angl. Software Testing Tools) Programų sistemų priežiūra (angl. Software Maintenance) Priežiūros įrankiai (angl. Software Maintenance Tools) Programų sistemų konfigūracijos valdymas (angl. Software Configuration Management) Konfigūracijos valdymo įrankiai (angl. Software Configuration Management Tools) Programų sistemų projektų valdymas (angl. Software Engineering Management) Projektų valdymo įrankiai (angl. Software Engineering Management Tools) Programų sistemų kokybė (angl. Software Quality) Kokybės užtikrinimo įrankiai (angl. Software Quality Tools)
Minimaliai pakitusios žinių sritys Programų sistemų projektavimas (angl. Software Design) Projektavimo įrankiai (angl. Software Design Tools) + Vartotojo interfeiso projektavimas (angl. User Interface Desing) Programų sistemų kūrimas (angl. Software Construction) Kūrimo įrankiai (angl. Software Construction Tools) + Kūrimo technologijos (angl. Construction Technologies: 1. API Design and Use; 2. Object-Oriented Runtime Issues; 3. Parameterization and Generics; 4. Assertions, Design by Contract, and Defensive Programming; 5. Error Handling, Exception Handling, and Fault Tolerance; 6. Executable Models; 7. State-Based and Table- Driven Construction Techniques; 8. Runtime Configuration and Internationalization; 9. Grammar-Based Input Processing; 10. Concurrency Primitives; 11. Middleware; 12. Construction Methods for Distributed Software; 13. Constructing Heterogeneous Systems; 14. Performance Analysis and Tuning; 15. Platform Standards; 16. Test- First Programming)
Kiek daugiau pakitusi žinių sritis Programų sistemų kūrimo procesas (angl. Software Engineering Process) Programų kūrimo proceso įrankiai (angl. Software Engineering Process Tools) - Proceso įgyvendinimas ir keitimas (angl. Process Implementation and Change) Proceso vertinimas ir gerinimas (angl. Process Assessment and Improvement) Programinės įrangos (Proceso ir produkto) matavimai (angl. Software (Process and Product) Measurement) + Programinės įrangos gyvavimo ciklai (angl. Software Life Cycles: 1. Categories of Software Processes; 2. Software Life Cycle Models; 3. Software Process Adaptation; 4. Practical Considerations)
Esmingai pakitusi žinių sritis Programų sistemų modeliai (įrankiai) ir metodai (angl. Software Engineering Models (Tools) and Methods) - Įrankiai (angl. Tools) - Įvairios įrankių problemos (angl. Miscellaneous Tool Issues) + Modeliavimas (angl. Modeling) + Modelių tipai (angl. Types of Models) + Modelių analizė (angl. Analysis of Models) + Programų sistemų metodai (angl. Software Engineering Methods) Euristiniai metodai (angl. Heuristic Methods) Formalūs metodai (angl. Formal Methods) Prototipavimo metodai (angl. Prototyping Methods) Judrieji metodai (angl. Agile Methods)
Visiškai perstruktūrizuota žinių sritis Susijusių disciplinų žinios (angl. Knowledge Areas of the Related Disciplines) Kompiuterių inžinerija (angl. Computer Engineering) Kompiuterių mokslas (angl. Computer Science) Valdymas (angl. Management) Matematika (angl. Mathematics) Projektų valdymas (angl. Project Management) Kokybės valdymas (angl. Quality Management) Programų sistemų ergonomika (angl. Software Ergonomics) Sistemų inžinerija (angl. System Engineering) Naujos žinių sritys: Informatikos pagrindai (angl. Computing Foundations) Matematikos pagrindai (angl. Mathematical Foundations) Inžinerijos pagrindai (angl. Engineering Foundations)
Informatikos pagrindai Problem Solving Techniques Abstraction Programming Fundamentals Programming Language Basics Debugging Tools and Techniques Data Structure and Representation Algorithms and Complexity Basic Concept of a System Computer Organization Compiler Basics Operating Systems Basics Database Basics and Data Management Network Communication Basics Parallel and Distributed Computing Basic User Human Factors Basic Developer Human Factors Secure Software Development and Maintenance
Matematikos pagrindai Set, Relations, Functions Basic Logic Proof Techniques Basics of Counting Graphs and Trees Discrete Probability Finite State Machines Grammars Numerical Precision, Accuracy, and Errors Number Theory Algebraic Structures
Inžinerijos pagrindai Empirical Methods and Experimental Techniques Statistical Analysis Measurement Engineering Design Modeling, Simulation, and Prototyping Standards Root Cause Analysis
Naujos žinių sritys Programų sistemų inžinerijos profesinė praktika (angl. Software Engineering Professional Practice) Profesionalumas (angl. Professionalism) Grupės dinamika ir psichologija (angl. Group Dynamics and Psychology) Komunikavimo įgūdžiai (angl. Communication Skills)
Naujos žinių sritys (2) Programų sistemų inžinerijos ekonomika (angl. Software Engineering Economics) Programų sistemų inžinerijos ekonomikos pagrindai (angl. Software Engineering Economics Fundamentals) Gyvavimo ciklo ekonomika (angl. Life Cycle Economics) Rizika ir neapibrėžtumas (angl. Risk and Uncertainty) Ekonominiai analizės metodai (angl. Economic Analysis Methods) Praktiniai aspektai (angl. Practical Considerations)
Klausimai?