Software Engineering

Learning Outcomes

  1. Compare software engineering concepts and describe different software engineering processes and software development life-cycle stages
  2. Use UML to model different views of an application.
  3. Apply Unified Process and Agile Methodologies
  4. Develop a software documentation using UML models.
  5. Apply design patterns in a small to medium-sized software project.
  6. Demonstrate work in small project teams to complete a medium-sized project.
  7. Ability to apply and evaluate design and development principles in the construction of software systems of varying complexity.
  8. Apply software testing and quality assurance techniques to the module level, and understand these techniques at the system and organization level.
  9. Use appropriate documentation, modeling, design, and debugging tools.

Forms of Teaching

Lectures

Independent assignments

Laboratory

Week by Week Schedule

  1. Systems level considerations, i.e., the interaction of software with its intended environment, Introduction to software process models (e.g., waterfall, incremental, agile), Programming in the large vs. individual programming, Evaluation of software process models, System design principles: levels of abstraction (architectural design and detailed design), separation of concerns, information hiding, coupling and cohesion, re-use of standard structures
  2. Team participation in software development, Effort estimation (at the personal level), Software development risks, Software measurement and estimation techniques, Software quality assurance and the role of measurements, Tools for software version control
  3. Software process and lifecycle, Agile and traditional development models, Software requirements and specifications, Software design principles, Software product and process metrics; Process tailoring, Software process evaluation, simulation, and improvement models
  4. Describing functional requirements using, for example, use cases or users stories, Properties of requirements including consistency, validity, completeness, and feasibility, Software requirements elicitation, Describing system data using, for example, class diagrams or entity-relationship diagrams, Non-functional requirements and their relationship to software quality, Evaluation and use of requirements specifications
  5. Requirements analysis and design modeling tools, Requirements analysis modeling techniques, Acceptability of certainty / uncertainty considerations regarding software / system behavior, Prototyping, Basic concepts of formal requirements specification, Requirements specification, Requirements validation, Requirements tracing
  6. Design Paradigms such as structured design (top-down functional decomposition), object-oriented analysis and design, event driven design, component-level design, data-structured centered, aspect oriented, function oriented, service oriented, Structural and behavioral models of software designs, Design patterns, Relationships between requirements and designs: transformation of models, design of contracts, invariants, Software architecture concepts and standard architectures (e.g. client-server, n-layer, transform centered, pipes-and-filters)
  7. Refactoring designs using design patterns, The use of components in design: component selection, design, adaptation and assembly of components, components and patterns, components and objects (for example, building a GUI using a standard widget set), Internal design qualities, and models for them: efficiency and performance, redundancy and fault tolerance, traceability of requirements, External design qualities, and models for them: functionality, reliability, performance and efficiency, usability, maintainability, portability, Measurement and analysis of design quality, Tradeoffs between different aspects of quality
  8. Midterm exam
  9. Programming environments that automate parts of program construction processes (e.g., automated builds), Application frameworks, Principles of secure design and coding, Software reuse, Documentation and program style
  10. Testing tools including static and dynamic analysis tools, Inspections, reviews, audits, Testing types/techniques, Testing fundamentals, Limitations of testing in particular domains, such as parallel or safety-critical systems, Static approaches and dynamic approaches to verification
  11. Validation planning; Documentation for validation, Verification and validation of non-code artifacts (documentation, help files, training materials), Defect/fault tracking and technical support for such activities, Software quality management and assessment, Automatization of testing; Testing languages and tools, Testing process and test-related measures
  12. Role of formal specification and analysis techniques in the software development cycle, Program assertion languages and analysis approaches, Formal approaches to software modeling and analysis, Tools in support of formal methods, Semantic of communicating processes, Process algebras, conceptual models, and Petri nets for communication system modeling, Temporal logic for reactive software verification
  13. Rigid and robust software development with domain specific languages, Specification languages, testing languages, and verification languages, Run time verification, Model checking of reactive software, Automatic and automata based programming for concurrent systems, Business process validation and verification
  14. Tool integration concepts and mechanisms, Software maintenance categories and principles, Maintainable software characteristics and maintenance metrics, Software configuration management, Release management, Reengineering systems, Reverse engineering, Software updating and patching
  15. Final exam

Study Programmes

University undergraduate
Computing (study)
(5. semester)

Literature

(.), I. Sommerville. Software Engineering 10th Edition, Pearson Education, 2016,
(.), E. J. Braude, Michael E. Bernstein Software Engineering: Modern Approaches 2nd Edition, Waveland Press,2016,
(.), H. Gomma: Software Modeling and Design: UML, Use Cases, Patterns, and Software Architectures, Cambridge University Press, 2011,
(.), N. Bogunović, V. Sruk, A. Jović: Oblikovanje programske potpore - Materijali za predavanja, FER ZEMRIS, (http://www.unizg.fer.hr/predmet/opp) 2014,
(.), V. Sruk, D. Ivošević, A. Jović: Oblikovanje programske potpore - Projektna dokumentacija, FER ZEMRIS, (http://www.unizg.fer.hr/predmet/opp), 2013,
(.), A. Jović, M. Horvat, I. Grudenić: UML-dijagrami: zbirka primjera i riješenih zadataka, sveučilišni priručnik, GRAPHIS d.o.o. Zagreb, 2014,
(.), A. Jović, M. Horvat, D. Ivošević, N. Frid: Procesi programskog inženjerstva, e-skripta, FER ZEMRIS (http://www.unizg.fer.hr/predmet/opp), 2014,

General

ID 183400
  Winter semester
5 ECTS
L3 English Level
L2 e-Learning
45 Lectures
0 Exercises
26 Laboratory exercises
0 Project laboratory