BCT3109 Software Engineering

Course Unit Title

BCT3109 Software Engineering

Side Navigation

Course Unit Description

This course is about the application of a systematic, disciplined, and quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software. The course put much concern on software design and production techniques

Course Objectives
Knowledge
An understanding of different software processes and how to choose between them

  • How to elicit requirements from a client and specify them
  • Design in the large, including principled choice of a software architecture, the use of modules and interfaces to enable separate development, and design patterns.
  • Understanding good coding practices, including documentation, contracts, regression tests and daily builds.
  • Various quality assurance techniques, including unit testing, functional testing, and automated analysis tools.

Skills

  • Working with version control, configuration management, unit/regression testing, issue tracking, and debugging tools
  • Creating a project plan
  • Creating and analyzing design models
  • Making engineering tradeoffs
  • Coping with large legacy systems and frameworks such as GUIs, EJBs, and Eclipse

Experience
Working in a team

  • Putting software process into practice
  • Communicating with clients

 

Learning Outcomes
By the end of the course students should be able to:

  • apply problem-solving and analytical skills to software development, work effectively in different phases of software development life cycle 
  • be able to analyze requirements of computing problems and design solutions 
  • construct, test and document software systems 
  • apply theoretical knowledge and practical skills to turn ideas into successful software startups
  • use appropriate programming languages and diagramming techniques to develop high quality software systems using a variety of software tools and technologies
  • establish and apply metrics to determine the readiness, quality, and operability of software, systems and products
  • develop high quality products and solutions in various domains such as embedded systems, web, and mobile applications, 
  • identify relevant theories and best practices in managing process change in software development organizations 
  • work effectively on open-ended software development problems using suitable theories and methods
  • identify, investigate and critically assess published work in software engineering.