PBL in Object Oriented Software Engineering course, IU

Course overview

The Object Oriented Software Engineering Course focuses on using object oriented principles to build flexible software applications. The course also focuses on how object oriented principles, software design patterns, and different development approaches fit into the object oriented software engineering lifecycle. The course further discusses how different stakeholders can communicate clearly through the use of UML use cases to deliver the appropriate software that meets every stakeholder’s requirements.

Participants in piloting 

The course is a core course of the BS in Software Engineering program and is being offered to 3rd and 4th year students. The course is also offered as an elective in the BS in Computer Science program. As this course is offered to senior semester students, the participants are already familiar with fundamental of programming and software engineering principles.

Use of ALIEN services and tools

During the course of Object Oriented Software Engineering, students were exposed to active and problem-based learning in the context of object oriented programming and software engineering. Different laboratory exercises were carried out during the practical activity hours. Each exercise described an overall goal, objectives, context, and problem.  Students were divided into groups to discuss and solve the exercises. Early finishers were given some more problem explanations.  Half semester classes were conducted through physical presence. The rest of the classes were mixed mode and deployed open source tools on the Moodle® platform due to COVID-19 restrictions.

The active learning activities allowed students to engage in practical software engineering development in groups. Assigned problems exposed them to active learning practices. Laboratory activities were published through the ALIEN platform as good practices for the benefit of engineering students and educators.

A total of 16 different laboratory exercises covering the following activities were conducted:

  • Analyzing existing project design and source code.
  • Figuring out coding problems that cause inappropriate results.
  • Redesigning and rewriting source code fragments that cause problems.
  • Testing a project for correct results.
  • Re-factoring and improving an existing project.
  • Understanding how object oriented principles help in code refactoring.
  • Redesigning and rewriting source code fragments that cause problems.
  • Understanding the requirements change phenomenon.
  • Learning how to cope with evolving requirements.
  • Learning how to avoid duplicate code.
  • To understand how software works in real world context.
  • Learning how to create classes from use cases by using textual analysis.
  • Learning how analysis can solve software problems in the real world.
  • Understanding how to respond to customers’ changing needs.
  • Understanding the importance of flexible software.
  • Understanding how inheritance and abstract classes are deployed for solving problems.
  • Understanding the situations and scenarios where encapsulation, interfaces, abstraction, and change principles are applied.
  • Using design patterns: strategy pattern.
  • Using design patterns: decorator pattern.

Students worked in teams and solved above activities by learning and using problem-solving principles.