CMU Coursework

Fall 2004

CS 15-819 Objects and Aspects: Language Support for Extensible and Evolvable Software [Elective], by Professor Jonathan Aldrich.

Spring 2005

CS 17-939: What Makes Good Research in Software Engineering [Design and Engineering Requirement], by Professor Mary Shaw.

CS 17-898: Reading Seminar: Modeling Dynamic Software Architectures [Elective], by Professor Jonathan Aldrich and Professor David Garlan

Fall 2005

CS 15-814: Type Systems for Programming Languages [Analysis Requirement], by Professor Robert Harper.

Spring 2006

CS 17-754: Analysis of Software Artifacts [Analysis Requirement],  by Professor Jonathan Aldrich.

CS 17-802: Privacy and Anonymity in Data [Business/Policy Requirement], by Professor Latanya Sweeney.

Fall 2006

CS 15-712: Advanced Operating Systems & Distributed Systems [Systems Requirement],  by Professor Garth Gibson.

CMU Practicum Reports

The Ph.D. program in Software Engineering at CMU requires two practicum reports: each practicum is an issue-focused reflection and analysis of a software engineering practical experience of the author. The results are presented through an oral presentation and a written report.

Practicum #1

Title: Confessions of a Former Software Reuse Engineer
Readers:
Professor Jonathan Aldrich and Professor Philip Koopman
Keywords: reuse, component-based development, re-engineering, designing for reuse.
Note: Report not for public distribution.

Abstract:
This practicum report reflects on my experience as a developer for two years on a project aiming to develop a collection of reusable components using modern middleware technologies as replacement for a legacy framework system. Issues associated with software reuse pervade many aspects of this project.

In the first part of this report, I discuss what has been known all along, that reuse is primarily not a technical problem. To confirm this intuition, I discuss the non-technical barriers to reuse, the importance of buy-in, and general organizational issues that arise in reuse projects. I then turn my attention to the high upfront costs normally associated with reuse. Finally, I emphasize how certain project specific issues increased the costs of the project leading to its demise, before it could produce value to its stakeholders. In the second part of this report, I discuss another facet of this project, re-engineering a legacy system. I focus on re-engineering for reuse, in particular, restructuring and wrapping legacy code. In the third part of this report, I discuss various technical mistakes and how they could have been addressed, and try to extract or relearn pithy lessons in architecting and designing for reuse, such as finding the reusable components, carefully choosing platforms, building reusable components, and delivering quality components. Some of these lessons may not be specific to reuse projects, but will be illustrated by examples drawn from this project. Throughout this report, I provide a subjective account of various software development best practices, such as peer reviews, using prototypes instead of feature lists, and the benefits of developer testing adopted from Extreme Programming.

Practicum #2

Title: Making Frameworks Work: a Project Retrospective
Readers:
Professor Jonathan Aldrich and Professor Jim Herbsleb
Keywords: product lines, object-oriented frameworks, reuse.
Note: Report not for public distribution.

Abstract:
Software product lines have been popular for the past several years both in research and in the industry. I spent three years as a developer in the industry working on a software product line project: more than two years as a framework developer and almost a year as a product developer on one of the first commercial applications of the product family. A pervading aspect of this project is the platform for the product line consisted of an enterprise application framework built on top of a technology framework. In this practicum report, I discuss various issues that make framework development harder than regular development. In the first part of this report, I discuss how the larger number of stakeholders in a framework project entails increased coordination and communication. In the second part of this practicum report, I discuss the difficulty of building the right abstractions, ranging from understanding the domain model to the framework architecture to designing the right interfaces. In the last part, I will conclude with some observations on how the project turned out.

USC Coursework

Software Architectures (Professor Nenad Medvidovic): Concepts, Principles, and state-of-the-art methods in Software Architectures, including Domain-Specific Software Architectures (DSSA), Architectural Styles, Architecture Description Languages (ADL), Software Connectors, Dynamism in Architectures, and Architecture-Based Testing and Analysis, Architecture Research, Software Reuse, Component Interoperability Platforms (CORBA, COM/DCOM, …). Described a semi-automated approach to assist software architects and designers in refining a high-level architecture specified in an architecture description language (ADL) into a design described with UML, and integrated DRADEL, an environment for architecture modeling and analysis, with Rational Rose®, a commercial UML modeling tool. This class project served as the basis for a paper submitted to the UML'99 conference.

Software Management and Economics (Professor Barry Boehm): Software Cost Estimation (COCOMOII), Business Case Analysis, Cost-Effectiveness Analysis, Multiple-Goal Decision Analysis, Risk Analysis, Statistical Decision Theory, Software Risk Management, Theory W, People Issues, Planning and Control. Wrote a confidential post mortem report on an actual problem project, analyzing model clashes, collecting size and effort data, and identifying risks using the taxonomy-based risk identification developed at the Software Engineering Institute (SEI).

Advanced Operating Systems (Professor B. Clifford Neumanand Professor Katia Obraczka): Distributed Shared Memory, Remote Procedure Calls, Concurrency, Transactions, Deadlock, Naming and Binding, Security Concepts and Architecture, Distributed File Systems, Kernel Design, Scheduling, Real-Time, Fault-Tolerance, and Database Support. Wrote a research paper on Serverless Distributed File Systems.

Software Engineering I (Professor Barry Boehm): WinWin Spiral Model, Risk Management, Planning and Estimating (COCOMO-II), Object-Oriented Analysis using Unified Modeling Language (UML), Design and Development, Visual Modeling Tools (Rational Rose), Prototyping, User Interface Design, Operational Concept Description, Requirements Description, Architecture Description, Feasibility Rationale, Life Cycle Planning and Control, Documentation and Presentations, Architecture Review Boards. Team Project.

Software Engineering II (Professor Barry Boehm and Professor Madachy): Capability Maturity Model, Requirements Management, Project Planning, Project Tracking and Oversight, Software Configuration Management, Software Quality Assurance, Product Engineering, Peer Reviews, Software Inspections, Organization Process Focus, Organization Process Definition, Software Engineering for Reliability, Cost/Reliability Tradeoffs, Inter-group Coordination, Training Program, Integrated Software Management. Team Project.

Database Systems (Professor Dennis McLeod): Database System Architecture, Conceptual Database Models: Semantic, Object-Oriented, Logic-Based, and Relational Databases, User and Program Interfaces, Structured Query Language, Database System Implementation: Integrity, Security, Concurrency and Recovery.

Advanced Software Engineering Project (Professor A. Winsor Brown): Personal Software Process. Team Project.

Other Coursework

Client-server computing (Professor Ayman Kayssi):  Client Server Model, TCP/IP, Socket interface, UNIX Network programming, Client software design and implementation, Server software design and implementation, Application Level Gateways. Remote Procedure Calls.

Advanced Computer Architecture (Professor Hassan Diab): Parallel Computer Models, Program scheduling, Scalable Performance, Memory design, Bus design, Cache memory design, Pipelining, Superscalar and superpipeline design, Multiprocessors, Multicomputers, Multivector computers.

Object-Oriented Systems (Professor Fadi Chehayeb): Inheritance, Polymorphism, User-Defined Data types, Custom Memory management, Design Patterns, Advanced C++ idioms, Document/View Architecture.

Computer Graphics and Applications (Professor Hassan Diab): Raster Graphics, Algorithms, Graphics Hardware, Geometrical Transformations, Viewing in 3-D, Color, Hidden-Surface Removal, Illumination and Shading.