1072 Software Engineering
- Study programme and level: University Study Programme in Administrative Information Science - 1st Cycle
- 3rd year
- 6 ECTS
- Course type: Core
- Lectures: 45
- Seminar: 10
- Tutorial: 20
- Individual work: 105
- Lecturer: Dejan Lavbič, PhD
1. Objectives and competences
The aim of the course is to provide an overview of activities in the software development life cycle that must be preformed regardless of the process model used. In order to master these activities, the students combine theoretical knowledge with practical work on a quasi-real software project.
The competences the students gain are:
- the ability to define, understand and solve creative professional challenges in computer and information science;
- the ability to apply acquired knowledge in independent work for solving technical and scientific problems in computer and information science; the ability to upgrade acquired knowledge.
- the ability of teamwork within the professional environment; management of a small professional team;
- the ability for administrative management of processes related to research, industry, education and other fields;
- the ability to understand and apply computer and information science knowledge to other technical and relevant fields (economics, organisational science, etc);
- practical knowledge and skills of computer hardware, software and information technology necessary for successful professional work in computer and information science;
- the ability to tackle demanding developmental, engineering, and organisational tasks as well as moderately demanding research tasks in their fields of study.
- Core topics:
- Basic concepts
- What is Software Engineering
- Phases in the development of software
- Software process models (e.g., waterfall, incremental, agile)
- Software engineering tools and environments
- Configuration management and version control
- Automated builds and continuous integration
- Requirements analysis and design modeling tools (CASE tools)
- Requirements engineering
- Requirements elicitation
- Requirements documentation
- Non-functional requirements
- Evaluation and use of requirements specifications
- Classic modeling techniques (e.g., entity-relationship diagrams, data flow diagrams, finite state machines)
- The Unified Modeling Language
- Software design
- Software design principles (abstraction, modularity, separation of concerns, information hiding, coupling and cohesion, reuse)
- Classical design methods (functional decomposition, data flow design)
- Object-oriented analysis and design (Rational Unified Process)
- Design patterns
- Software construction
- Coding practices (defensive coding practices, secure coding practices, use of exception handling mechanisms, refactoring)
- Coding standards
- Integration strategies
- Software testing
- Testing and the software life cycle
- Inspections and walkthroughs
- Unit, integration, validation, and system testing
- Black-box and white-box testing techniques
- Regression testing and test automation
- Test-driven development
- Software maintenance and evolution
- Major causes of maintenance problems
- Characteristics of maintainable software
- Reverse engineering and refactoring
- Software reuse
- Process improvement models
- CMMI (Capability Maturity Model Integration) for Development
- PSP (Personal Software Process)
- TSP (Team Software Process)
- Agile and lean software development
- Extreme Programming
- Balancing agility and discipline
- Team-work on almost real projects. Projects can be proposed by students themselves and approved by instructors or can be defined by teacher in co-operation with real customers. Group sizes are restricted to four and students are given the opportunity to decide who they should work with. Each group is asked to nominate a Project Manager and identify specific roles which they feel will be important in managing the group. Students are encouraged to work on the project outside the officially scheduled hours. There are several progress meetings (milestones) with the tutor before the final presentation takes place.
- Roger S. Pressman, Bruce R. Maxim: Software Engineering: A Practitioner's approach, 8th edition, McGraw Hill, 2014.
- Ian Sommerville: Software Engineering, 9th edition, Pearson, 2010.
- H. van Vliet: Software Engineering, Third Edition, John Wiley & Sons, 2008.
- I. Jacobson, G. Booch, J. Rumbaugh: The unified software development process, Addison-Wesley, 1999.
- M. Seidl, M. Scholz, C. Huemer, G. Kappel: UML @ Classroom, An Introduction to Object-Oriented Modeling, Springer, 2015.
- CMMI® for Development (CMMI-DEV), Version 1.3 CMU/SEI-2010-TR-033, Software Engine-ering Institute, Carnegie Mellon University, 2010.
- K. Schwaber: Agile Project Management with Scrum, Microsoft Press, 2004.
4. Intended learning outcomes
After the compeltion of the course a student will be able to:
- know and understand activities in the software development life cycle
- know and understand different approaches to software development
- know the most important software development methodologies
- know and understand the criteria that affect the choice and adaptation of the development methodology
- use diagramming techniques for system modelling
- develop professional skills like teamwork, management/leadership, planning and organizing, presentation and communication, information search, written and oral reporting
- apply acquired knowledge in the context of a real software development project
5. Learning and teaching methods
- Lectures with active participation on the part of students (explanation, discussion, questions, examples, problem solving).
- Lab practice (teamwork on an quasi-real software development project that serves as a case study for illustration of required activities).
- Consultations (discussion, additional explanation, answers to specific questions)
Type (examination, oral, coursework, project):
- Continuing assessment: seminal and project work (50%)
- Final assessment: written exam (50%)