Graduate Courses

Software Engineering

An introduction to the field of Human-Computer Interaction (HCI), the process of Human Centered design, types of interfaces humans can interact with, fundamental methods, principles and tools for analyzing, designing, programming and testing interactive systems, Emotional and social interactions, interaction design in practice.

Software Requirements: Modem SRS for Enterprise Application, Software Process: Personal and Team Software Process, Traditional Software Processes and Agile Processes. Software Design: Architecture Tradeoff Analysis and patterns. Software Project Management: project initiation, planning, executing, monitoring control and closing. Software Engineering Measurement and Analysis, Software Quality Assurance: 6-Sigma. Software Integration: Enterprise Application Integration, COTS Integration. Note: This course is for non SWE students, it cannot be taken for credit toward a MS degree by SWE graduate students.

The course gives state of the art and state of the practice in software requirements engineering. In-depth research-oriented study of methods, tools, notations, and validation techniques for the analysis, specification, prototyping, and maintenance of software requirements. Topics include study of object-oriented requirements modeling, using state of the art modeling techniques such as the Unified Modeling Language (UML). The course work includes a project investigating or applying approaches to requirements engineering. Note: SWE 515 cannot be taken for credit with ICS 512

Concepts and methods for the architectural design of large-scale software systems. Fundamental design concepts and design notations are introduced. Several design methods are presented and compared. In-depth research-oriented study of object-oriented analysis and design modeling using state of the art modeling techniques such as Unified Modeling Language (UML). Students participate in a group project on object-oriented software design. Note: SWE 516 cannot be taken for credit with ICS 513

In-depth research-oriented study of verification and validation throughout the development lifecycle. Techniques for validation and verification, quality assurance at the requirements and design phases, software testing at the unit, module, subsystem, and system levels. Automatic and manual techniques for generating and validating test data. Testing process: static vs. dynamic analysis, functional testing, inspections, and reliability assessment. Note: SWE 526 cannot be taken for credit with ICS 514

Software security development lifecycle including security requirements analysis, design, coding, review, and testing. Construction of secure and safe ClUnix programs. Vulnerabilities in C source code. Stack and heap buffer overflows. Overview of secure web application development with consideration for SQL injection, cookies, and forceful browsing. Techniques for software protection, such as code obfuscation, tamper-proofing, and water- marking. Analysis of software based attacks and defenses, timing attacks and leakage of information. Type safety and capability systems.

Study of contemporary web application vulnerabilities, based on the OWASP (Open Web Application Security Project). Study of exploitation techniques for server and client web applications, and techniques that lead to web defacement and server penetration. Auditing and scanning web applications and servers for security weaknesses and vulnerabilities. Contemporary attack scenarios exploiting web vulnerabilities such as cross-site scripting, SQL injection, cookies, and forceful browsing. Content-based attacks and effective countermeasures. Secure programming for the following technologies: .NET, ASP.NET, ActiveX, JAVA, Secure Sockets, and XML, and a study of web security protocols such as SSL and HTTPS.

Advanced principles, methods and best practices in building software architecture and the architecture design process are discussed. Architectural styles and patterns are presented and compared. Software architecture analysis and evaluation methods such as. AT AM and CBAM, tradeoffs among conflicting constraints in building high quality architecture are also discussed. Architecture documentation is also presented.

Software metrics history and current practice, basics of measurement theory for software metrics, framework for software measurement, product, application, and process metrics. The course includes introduction to foundations of measurement theory, models of software engineering measurement, software products metrics, software process metrics and measuring management.

Security in requirements engineering; Secure designs; Risk analysis; The SQUARE Process Model; Threat modeling; Defensive coding; Software protection; Fuzzing; Static analysis and security assessment; Memory leaks, buffer and heap overflow attacks, injection attacks.

Software development process, software specification and modeling techniques, software architecture and design for embedded & IoT systems, software construction and implementation guidelines, software testing techniques, software quality for embedded & IoT systems, safety-critical software development for embedded & IoT systems, security for embedded & IoT systems, and software development tools.

Agent-based programming; elements of distributed artificial intelligence; beliefs, desires and intentions; component based technology; languages for agent implementations; interface agents; information sharing and coordination; KIF; collaboration; communication; ontologies; KQML; autonomy; adaptability; security issues; mobility; standards; agent design issues and frameworks; applications in telecommunications.

The course discusses how empirical studies are carried out in software engineering. The distinction between analytical techniques and empirical techniques is reviewed. Other topics include empirical studies required in software engineering, kinds of problems that can be solved empirically, methods used to control variables and eliminate bias in empirical studies, and analysis and presentation of empirical data for decision making.

Lifecycle and process models; process metrics; planning for a software project; mechanisms for monitoring and controlling schedule, budget, quality, and productivity; and leadership, motivation, and team building. Topics cover quantitative models of the software lifecycle, process improvement techniques, cost-effectiveness analysis in software engineering, multiple-goal decision analysis, uncertainty and risk analysis, software cost estimation, software engineering metrics; and quantitative lifecycle management techniques. Note: SWE 587 cannot be taken for credit with ICS 515

None

Advanced topics selected from current journals of software engineering that deal with theoretical development or applications in the field. Topic include: Reusable Software Architectures, Software Engineering, Experimentation, Concurrent Software Systems, Software Metrics, Web Engineering or Formal Methods and Models in Software Engineering, etc.

Graduate students are required to attend the seminars given by faculty members, visiting scholars, and fellow graduate students. Additionally, each student must give at least presentation on a timely research topic. Among other things, this course is designed to give the student an overview of research, research methodology, journals and professional societies. Graded on a Pass or Fail basis

This course is intended to allow the student to conduct research in advanced problems in his MS research area. The faculty offering the course should submit a research plan to be approved by the Graduate Program Committee at the academic department. The student is expected to deliver a public seminar and a report on his research outcomes at the end of the course. Graded on a Pass or Fail basis

The student has to undertake and complete a research topic under the supervision of a faculty member in order to probe in depth a specific problem in Computer Science.

Advanced object-oriented design and programming of real-time and distributed systems using C++ and/or Java. Object-oriented features: inheritance, polymorphism, templates, exception handling and Concurrency issues. Design patterns and frameworks for distributed systems, with examples from communication applications. Design issues for reusable software.

Software evolution and reengineering approaches and abstraction techniques to extract specifications and design from existing code are discussed. 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 reverse engineering techniques are also presented.

In-depth advanced formal mechanisms for specifying, validating, and verifying software systems. Program verification. Formal specification via algebraic specifications and abstract model specifications, including initial specification and refinement toward implementation. Integration of formal methods with existing programming languages, and the application of formal methods to requirements analysis, testing, safety analysis, and object-oriented approaches. Model-driven architectures. Formal methods using the Object Constraint Language (OCL). Prerequisites: Consent of Instructor