Michael Mortensen
Academic Background
Education
PhD student in Computer Science at CSU, 4.0 GPA
Advisor: Dr. Sudipto Ghosh, Co-advisor: Dr. Jim Bieman
M.S. (1995), Computer Science, Florida Institute of Technology, 4.0 GPA
My thesis focused on using executable assertions from
various verification techniques as an aid
for debug and improving program correctness.
Advisor: Dr. J. Richard Newman
B.S. (1993), Computer Science, Brigham Young University, 3.6 GPA
Research Interests
- Developing systems using Aspect-oriented programming (AOP) and aspectualizing legacy systems
- Using AspectC++ with C++ VLSI CAD frameworks
- Using AOP (esp. AspectC++) to develop and refactor large-scale software systems
- The OpenAccess object-oriented C++ framework for EDA (VLSI CAD) application development and integration
- Testing aspect-oriented systems using AOP-based coverage criteria and mock systems
Dissertation topic: Enhancing the use of Object-Oriented Frameworks
through Aspect Libraries AOSD 2006 Poster (PPT)
Publications
Michael Mortensen, Sudipto Ghosh, and James Bieman.
A Test Driven Approach for Aspectualizing Legacy Software Using Mock Systems,
accepted to the Journal of Information and Software Technology, 2007.
PDF Preprint
Michael Mortensen and Sudipto Ghosh. Refactoring Idiomatic Exception Handling in C++:
Throwing and Catching Exceptions with Aspects,
International Conference on Aspect-Oriented Software Development (AOSD) Industry Track
Vancouver, British Columbia, Canada, March 12-16, 2007. PDF Preprint
Michael Mortensen, Sudipto Ghosh, and James Bieman. Testing During Refactoring: Adding Aspects to Legacy Systems,
17th International Symposium on Software Reliability Engineering (ISSRE), Raliegh, NC, November 2006. PDF Preprint
Michael Mortensen and Sudipto Ghosh.
Using Aspects with Object-Oriented Frameworks,
International Conference on Aspect-Oriented Software Development (AOSD) Industry Track
Bonn, Germany, March 20-24, 2006. PDF Preprint
PPT
Michael Mortensen and Sudipto Ghosh.
Creating Pluggable and Reusable Non-functional Aspects in AspectC++,
Fifth AOSD Workshop on ACP4IS, Bonn, Germany, March 21, 2006. PDF Preprint
Michael Mortensen and Roger T. Alexander.
An Approach for Adequate Testing of AspectJ Programs,
2005 Workshop on Testing Aspect-Oriented Programs (held in conjunction with AOSD 2005). PDF
Michael Mortensen and Roger T. Alexander.
Adequate Testing of Aspect-Oriented Programs,
Department of Computer Science, Colorado State University, Fort Collins, Colorado, USA,
Technical report CS 04-110, December 2004. PDF
Michael Mortensen, Modular Software Design of EDA Applications Software: A Case Study Using Perl 5,
International Cadence User Group Conference, Austin, TX, September 1998.
Michael Mortensen, J. Richard Newman, Using Executable Assertions to Verify CAD Programs,
International Cadence User Group Conference, Boston, MA Oct 1995.
Michael Mortensen, Using multiple verification methodologies with executable assertions to improve confidence in the correctness of software,
Masters Thesis, Department of Computer Science, Florida Institute of Technology, 1995.
Michael Mortensen, US Patent 6,772,402, "Failure path grouping method, apparatus, and computer-readable medium", awarded 2004.
This patent was for work that used statistical classification of timing paths to rank and group electrical nodes that were most likely responsible for circuit failures.
Doctoral (post-MS) coursework includes:
CS 545 -- Machine Learning
CS 575 -- Parallel Processing
CS 614B -- Object-oriented analysis and testing
CS 614F -- Certification Techniques for Component-Based Software
CS 640/641 -- Advanced Artificial Intelligence
Qualifying exams in Software Engineering and Artificial Inelligence: completed March/April 2003
Preliminary exam (proposal approval by my committee): Sep 2005. Title: Enhancing the Use of Object-Oriented Frameworks through Aspect Libraries
Work Experience
I am a Hardware Verification Engineer at Hewlett-Packard. Hardware verification involves creating
models and checkers (in high level languages like C++) to validate hardware
designs (in languages like Verilog and VHDL) before a chip is created.
I transitioned from EDA software to Verification in October 2006.
Previously, I worked as an EDA (Electronics Design Automation) software engineer.
EDA software is used for the creation and verification of VLSI systems (computer chips). Primary
languages used are C++, C, Lisp (SKILL), Perl, and Tcl. Design work is done
with UML. Most development is object-oriented and is implemented in C++
using STL containers and iterators, as well as developing my own classes,
templates, etc. Other languages I have used include Java, Ruby, Pascal, Prolog,
Modula2, and Ada.
1999-present Hewlett-Packard - Fort Collins, CO
Hardware Verification using C++ and SystemC.
Development of CAD tools in C++, C, and Perl for static timing analysis and electrical
rules checking. Static timing analysis ensures that a circuit will work
at the targeted frequency. Electrical rules checking ensures that a circuit
will not have electrical glitches that cause incorrect functioning of the
circuit.
Development and integration of VLSI CAD tools using object-oriented frameworks, using
Si2's OpenAccess framework and HP proprietary OO frameworks.
1997-1999 Cadence Design Systems - Austin, TX
Worked (as an onsite Cadence consultant) for Motorola (PowerPC design center)
developing floorplanning tools (in C, C++, and Lisp) and integrating Cadence
tools with in house PowerPC design tools.
Worked (an an onsite Cadence consultant) for IBM as the lead programmer
developing data translation tools (using a parser generator, C, and Lisp).
1995-1997 Motorola - Austin, TX
Automated layout generation by creating a toolkit (in SKILL) for block-based
microcontroller design. Worked on a C-based engine for transistor sizing
for optimal speed/area/power.
1993-1995 DoD-funded project at the Florida Institute of Technology.
Automated LPGA (laser-programmable gate array) flow and datapath generator
tools (RAMs, ROMs, ALUs, etc.) by writing SKILL code. [SKILL is a Lisp-based
language that can access and change Cadence's EDA tool databases].
Teaching Experience
Received Regis University Excellence in Teaching Award - May 2003
Classroom-based courses taught for Regis University (Jan 2002-present):
CS 436 - Object oriented programming in C++
CS 432 - Object oriented design with UML
CS 444 - Software Engineering
CS 465 - Unix operating system
CS 430 - Operating Systems
CS 440 - Computer Architecture
CS 320 - C Programming
CS 493 - Senior capstone
Online courses taught for Regis University:
CS 241 - Control Structures (Pascal/Delphi)
CS 341 - Data Structures (Pascal/Delphi)
CS 372 - Advanced Programming and Algorithms (C/C++)
CS 440 - Computer Architecture
CS 436 - Object oriented programming in C++
CS 437 - Advanced Data and File Structures (C/C++)
CS 444 - Software Engineering