Software Process Improvement
Software Engineering

This course aims to introduce students to software process improvement.  
Process improvement aims to learn from current practice and objectively 
assess potential improvements. This will be explored by practicing a 
simplified form of the Personal Software Process and studying a number 
of process related topics drawn from: the goal question metric paradigm; 
appropriate automation; configuration management; project tracking and 
control; quality assurance; cost of quality; continuous integration; 
DevOps; software distribution; Infrastructure, Platform and Software as 
a Service; leveraging social media and the internet. 

Methods for IS Research
Software Engineering

This course enables students to understand concepts and application of 
research. It attempts to define what research is, why they do research, 
and the various methods that researchers use to investigate problems. It 
is designed as an under-graduate introduction to research methodology 
in software engineering and information systems. The course provides a 
framework for conceptualizing research and is meant to underpin the 
research project for the final year.  Special focus will be made in Design 
Science Research.

Software Project Management
Software Engineering

The course covers topics such as IS plans and projects; practical 
examination of how software projects can be managed from start to 
finish; stages of project planning and project life-cycle; project selection 
from an organizational perspective, project initiation and scope 
development; team building and leadership; project costing, scheduling, 
and identifying and managing risks; product quality assurance 
techniques, project resource identification and allocation; project 
contracts management; progress and performance measurement and 
evaluation, project audit and closure; automated project management 
tools; ethical issues in software project management.

Software Quality Assurance and Testing
Software Engineering

This course provides an introduction to software quality assurance 
concepts and testing. Quality assurance is viewed as an activity that runs 
through the entire development process: understanding the needs of 
clients and users; analyzing and documenting requirements; verifying 
and validating solutions through testing.  Major topics are: Why do we 
do software testing? The meaning of black-box testing and white-box 
testing; Software Testing throughout the Software Process; Software 
Testing and Extreme Programming; The Automation of Software 
Testing; Difficulties and Limitations of Software Testing; The Business 
of Software Testing; Implementing and Automated Testing. Reasons for 
SQA failures and factors critical to success of SQA in IS development.

Enterprise Systems
Software Engineering

The course covers the following Description: Enterprise-level 
information systems, technologies, and infrastructures; enterprise 
architecture and service management framework; business architecture 
(strategies, processes and governance), information architecture, 
applications architecture and technology architecture; enterprise 
information system design strategies, models and tools; evaluation of 
vendor strategies; legacy system migration issues, performance, 
interoperability, scalability, and security concerns; managing web-based 
client/server and distributed environments; web services foundations, 
vendor architectures, distributed applications; the context for integration, 
service-oriented application integration, multi-enterprise portals, mobile 
devices, business process integration; web design technologies, web 
services APIs, and emerging standards; implementation of enterprise 
resource planning package. 

Flutter
Software Engineering

This course introduces students to programming technologies, design 
and development related to mobile applications. Topics include 
accessing device capabilities, industry standards, operating systems, and 
programming for mobile applications using the programming language 
discussed in class.  

Web Systems and Services
Software Engineering

The objective of this course is to discuss how the Web systems are 
programmed and maintained and how online pages are created and 
delivered by Web servers and used by clients. Topics to be covered 
include: Web systems and technologies, information architecture, digital 
media, Web development, Web standards, vulnerabilities, social 
network software, client-side programming, server-side programming, 
Web services and servers, XHTML, CSS, CSS, Web systems security, 
JavaScript, PHP, and emerging technologies 

Operating Systems
Software Engineering

This course examines basic issues in operating system design and 
implementation. It covers the tradeoffs that can be made between 
performance and functionality during the design and implementation of an 
operating system. Particular emphasis will be given to the major OS 
subsystems: process management (processes, threads, CPU scheduling), 
Memory management, file and I/O device management and deadlock), 
memory management (segmentation, paging, swapping) and file systems.

Software Design and Architecture
Software Engineering

This course is designed to introduce students to the architecture and 
design of complete software systems, building on components and 
patterns. Topics to be covered include: Basic principles of Software 
Design, Moving from problem to solution, from what to how, from 
analysis to design, Problem Domain Modeling, Structure and Behavior 
Modeling, Class and Object Design, Software Architectures and Styles, 
Gang of four Design Patterns, GRASPRT Principles, Architecture and 
Design Refinement. 

Process Modeling and Workflow Design
Software Engineering

The aim of this course is to introduce students to the fundamental concepts of business process modeling, a systematic approach to model flow of work within organizations in order to support detailed analysis of business processes. The course covers definition of business processes, principles of process modeling, workflow design, analysis of business process models, overview of existing modeling languages (UML, YAWL, BPEL/BPMN), and business process integration. process representation; interpreting and creating process diagrams; and process validation and change management. 

Data Structures and Algorithms
Software Engineering

This course aims to introduce students some basic data structures and 
algorithms which are to be used as tools in designing solutions to problems. 
It will make students familiar with the specification, usage, implementation 
and analysis of these data structures and algorithms, Introduction of Data 
Structures (Linear, non-Linear Data Structures) mainly focused and 
Algorithm Analysis Concept, Measuring Complexity, Complexity of; 
Algorithm Big-O Notation. Simple Sorting and Searching Algorithms 
(Bubble Sort, Insertion Sort, Selection Sort, Sequential Searching, Binary 
Searching; Abstract Data Types, Structures, Pointers, Arrays, Linked Lists, 
Stacks, Queues, Trees, Graphs. Advanced Sorting and Searching Algorithms 
(Shell Sort, Quick Sort, heap Sort, Merge Sort, and Hashing); Laboratory 
exercises are dedicated to practice the basics on concepts on data structures 
like Abstract Data Types, Structures, Pointers, Arrays, Linked Lists.

Advanced Programming
Software Engineering

This course makes revision of software design and architecture and 
practical agile approaches to usable application software development, 
it then continues to familiarize students to DevOps and related 
workflows, Software design patterns, Software development workflow, 
tools and components, General setup and structure of software projects, 
Software versioning (version control), Software development and 
testing, Behavior driven development (BDD); User stories and 
scenarios, Writing / Generating tests from scenarios, Developing 
features (models, views, controllers) with Test-driven Development 
techniques; Software version control with Git. 

Software Requirements Engineering
Software Engineering

    This course focuses on using a systematic approach to eliciting, 
analyzing, validating, documenting and managing requirements. It 
investigates the requirements engineering approach and the adoption of relevant techniques at each stage.

     The course starts with an overview of software requirements basics including definitions of terminology, describing software requirements, standards and an introduction to the requirements engineering process. UML tools and techniques are also covered.

     Theoretical concepts are introduced and are then reinforced through practical exercises and a running case study where students can apply techniques of analysis in a realistic project.  The course aims to develop the necessary skills needed to work with requirements stakeholders and actors to make sure that requirements are complete, unambiguous, realistic and testable.

Teacher: Kidus Menfese 

Information Assurance and Systems Security
Software Engineering

The course provides an introduction to information assurance. It covers fundamental concepts necessary to understand the threat to security as well as various defenses against those threats.

IT also examines fundamentals of network security involved in creating and managing secure computer network environments. Both hardware and software topics are considered, including authentication methods, remote access, network security architectures and devices, cryptography, forensics and disaster recovery plans. 

Instructors of this course:  Anteneh Kassaye and Fasika Tegegn

Object Oriented Programming
Software Engineering

The course is designed to introduce students on how to develop business 
applications using object-oriented design methodology with Java as an 
illustration programming language. It includes Object Oriented Programming 
paradigm and its use; classes, 
Objects, Abstraction and Encapsulation; Inheritance, Polymorphism, Creating 
Graphical User interfaces (GUIs), Data Structures, Exceptions (Try, catch, and 
throw, finally how exceptions affect the design of an application)

Introduction to Software Engineering
Software Engineering

This course covers the fundamental concepts and methodologies of software 
engineering. It emphasizes the main phases of the software lifecycle, such as 
requirements, design, implementation, testing, project planning. Also, it 
stresses the difference between the software product and process.   It 
introduces concepts such as software processes and agile methods, and 
essential software development activities, from initial specification through 
to system maintenance. Formalisms and tools to assist in software 
development are also presented, including common design patterns and UML 
notation. There is a focus on software testing, from unit testing to the testing 
of software releases. Case studies provide practical examples for many of 
these concepts. 

Fundamentals of Programming
Software Engineering

In this course the student will gain a broad understanding of modern computer programming. The student will acquire introductory skills in problem analysis, solution design, and program construction. Through practical programming activities, the student will gain an appreciation of the nature and history of computer programming. Introduction to computer programming.  The main contents of the course are - Generations of computer language; Interpreted and compiled languages; Program design and development process; Problem definition; Pseudo-code; Flowcharting; Code modularization; Coding, testing, and debugging; Sequence, selection, and iteration patterns; Array processing; File operating, file input / output. 

Introduction to Computer Systems
Software Engineering

This course provides a general introduction to computers, applications software, programming, hardware and computer information system. Emphasis will be placed on modern computer system; procedural and assembly languages typically used for low-level programming of computer system. Representation of data on computers. Comparisons of different types of instruction sets and corresponding addressing modes; relationships among instruction sets, fetch and execute operation, and the underlying architecture. Consideration of the physical implementation of large memory systems, together with the techniques of data storage and checking. Overall concepts of virtual memory, operating system functions, file systems and networks. Virtual machines and the levels of machine organization, the assembly and linking process and software libraries.