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

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