Currrent Teaching

  • Present 2017

    Software Testing

    Welcome to SE 352 - Software Testing. The purpose of this course is to instruct the students on the importance of software testing, exposure to tools available, and some best practices.

  • Present 2017

    SWEN 749 - Software Evolution and Re-Engineering

    This course explores the concepts of software evolution and reengineering and introduces approaches and support tools used to extract the information needed to assess existing software systems. Major maintenance activities are presented including estimating maintenance costs, managing change and predicting maintainability with software quality metrics. Organizational issues relative to product maintenance are discussed. Principles of software reuse and reverse engineering techniques are demonstrated through the use of class activities, team projects and case studies.

  • 2017 2016

    SWEN 772 - Software Quality

    This course begins with an exploration of the concepts underlying quality systems and the use of metrics. Students are encouraged to discuss the advantages as well as the limitations of systems and quantitative approaches, with a view to understanding the importance of interpretation in metrics usage and of matching quality systems choices to organizational objectives and culture. They learn the use of modern metrics such as DRE, PCE, COQ/COPQ, reliability objectives and SUMI scores through exercises in analyzing and interpreting charts. This is complemented with a project where they work in teams to design an appropriate quality system for a specific project/software, and discuss the application and analysis of its evaluation experimentation as a means of improving the quality aspects of subject project/design, testing and maintenance of the software. (SWEN 722) Class 3, Credit 3 (Fall).

Teaching History

  • 2014 2016

    CIS 375 Software Engineering I | University of Michigan-Dearborn

    CIS 375 Software Engineering I: this course covers all aspects of software production ranging from the early stage of requirements definition to design and implementation then post-delivery maintenance. Moreover, through group projects, students can obtain hands‐on experiences on entire phases and workflow of the software process.

  • 2016 2016

    CIS 350/3501 (Online) Data Structures and Algorithm Analysis | University of Michigan-Dearborn

    This course focuses on data design and algorithm design. Data design topics include object-oriented discussions of hashing, advanced tree structures, graphs, and sets. Algorithm design topics include the greedy, divide-and-conquer, dynamic programming, backtracking, and branch-and-bound techniques. A significant discussion of algorithm complexity theory, including time and space trade-offs and elementary computability theory is included. Students should be able to use the Standard Template Library. Be able to know when and use various data structures including, hash tables, sets, priority queues, binary trees, search trees and graphs. Be able to design and document small programs. Be able to design algorithms using greedy, divide and conquer, dynamic programming, backtracking and branch and bound techniques.

  • 2015 2015

    CIS 405|505 (Online) Algorithm Analysis and Design | University of Michigan-Dearborn

    This course discusses how to design efficient algorithms. Topics include asymptotic analysis, average-case and worst-case analysis, recurrence analysis, classical algorithms, computational complexity analysis and NP-completeness. In addition, the course investigates approaches to algorithm design including: Greedy Algorithms, divide and conquer, dynamic programming, randomization, and branch and bound. I have not used this book before so all dates are an approximation.

  • 2014 2014

    CIS 296 - Java Programming | University of Michigan-Dearborn

    Gain a solid understanding of the fundamentals of the Java programming language and the Java Core API. Be able to author Java classes, applets, and applications. Gain experience with client-server interaction and multithreading in a Java environment. Use the Abstract Windowing Toolkit to build platform-independent GUIs and animations.

  • 2013 2013

    CIS 476 - Software Architecture and Design Patterns | University of Michigan-Dearborn

    A Design Pattern is a catalogued solution that has been applied and tested in multiple situations to produce well-designed reusable object-oriented software. Designing with reusability is an art, typically acquired after many years of software development, refining and iterating over designed software modules. In this course, each pattern session will start with theoretical understanding followed by practical use. The design patterns will be described using Intent, Motivation, Sample Code, Applicability, Structure, Consequences and its Known Uses. The students will also test their understanding by completing a practical assignment for few very popular design patterns.

  • 2013 2015

    CIS 150 - Introduction to Computer Science (Lab Assistant) | University of Michigan-Dearborn

    This course provides a foundation for further studies in computer and information science. It emphasizes a structured approach to problem solving and algorithm development. Topics include principles of program design, coding, debugging, testing and documentation. Students are introduced to the Unified Modeling Language for requirements analysis using use-cases and activity diagrams, an object-oriented programming language (C++), and the fundamentals of computer hardware, system software and components. The course will consist of three lecture hours and one two-hour laboratory. .

  • 2010 2009

    CIS 315 - Web Development | University of Tunis (Lab Assisitant)

    This course is about the web development using HTML, CSS and PHP. This course will introduce the fundamentals of the web and get the students familiar with the 3-tier web architectures. Recommended for student who want to know and practice the latest web development technologies.