- Goto:
- Top
- Resume:
- Synopsis
- Expertise
- History
- Education
- Technical Lists
- Publications
|
Online Resume
Synopsis
- Skilled in both software development and maintenance on Windows, Unix and Linux platforms.
- Software engineering approach to Configuration and Process Automation.
- Effective team member who is comfortable in leading or collaborating.
- M.Sc in Computer Science with research and teaching experience.
Expertise
- Software QA and Test Automation
- Bridged the DevOps gap by delivering Protractor tests on Jenkins and CircleCi, using virtual and Docker machines
- Championed Behavioral Driven Development (BDD) in product and development team
- Integrated SpecFlow into development environment and implemented Behavioral Driven Development (BDD) tests
- Enhanced Bamboo continuous integration with BDD tests for nightly regression runs
- Encouraged and trained manual testers in BDD test implementation
- Worked with product managers in writing acceptance test criteria as BDD test features
- Introduced documentation templates to facilitate communication between disparate Requirements ( Contour ), Manual Test System ( HP ALM ) and Development ( Visual Studio and Perforce ) systems. This is to facilitate
traceability and metrics tracking
- Design and implementation of a Perl-based comprehensive, flexible, scalable production system that encompass Build, Test, Install, Reporting and Analysis, with the following capabilities :
- graphs to control and visualize dependencies
- single point of configuration
- single point of control for Unix ( Solaris Grid Engine ) and Windows ( rsh ) for all processes
- build/test/metrics subgraphs to combine for different processes such as Build only, Build and Test, Build,Test and Metrics
- facilities for debugging, restart, bypass and halt arbitary points in the graph
- nodes of graph can be run individually or as part of a graph
- Designed and developed advanced automated test infrastructures for functional, configuration and unit-level testing. Test systems can be built from scratch or based on commercial products such as Microsoft Visual Test.
- Extended and integrated test process with build and release processes for faster turnaround.
- Extended processes for metrics gathering for trending.
- Developed internal software tools such as flexible trace and debug package and a automated GUI test system.
- Software Development and Maintenance
- Participated in all aspects of software development cycle - requirements, design, implementation, maintenance, testing and customer support.
- Practical adoption of Extreme methodology where possible, such as continuous integration, ongoing testing, frequent small but complete small releases often and code re-factoring.
- Enhanced object-oriented solutions with pattern-based designs such as singletons, smart pointers and reference counting.
- Leveraged use of modern template based C++ libraries including Loki, Boost and XParam for quality and timely solutions.
- Depth of experience in multi platforms such as Unix, Linux and WinNT :
- Simultaneous development (test, implement, test) on Unix and WinNT ( no separate porting required ).
- Use of STLport to provide STL platform portability.
- Designated as the team resource on WinNT and VC5/6 development issues.
- Platform agnostic as a GNU and Emacs Development Environment power user on both Unix and WinNT.
- Completed basic Java and C#, advanced Java and XML training.
- Electronic Design Automation
- Background in Electrical Engineering with experience in electronic circuit analysis, design and troubleshooting.
- Familiar with schematic and language design methodology ( VHDL, Verilog, SystemC ) and simulators.
- Library Management area : designed, implemented and performance tuned EDA oriented API to bridge legacy products to proprietary Oracle tool.
- IC Verification area : maintained and supported 7 tools ( 7M lines of code ) for parasitic extraction, design rule checking, electrical rule checking, layout verification and netlist input/output.
- Experienced in advanced data structures and algorithms such as graph algorithms, parallel algorithms and simulated annealing.
History
- Zapproved
( Portland, OR :
Jul21 -
current
)
senior software engineer in test
- Zdiscovery is a portal based SaaS product that complies with Soc 2 Type 2 reporting. It is based on a .NET microservices (23) architecture, with a single Angular front end, and a single Postgres database server. There are also iframed-windows to access two key legacy applications until such time as they are integrated into the portal.
- Initial assignment of gap analysis identified the key areas and shortcomings to concentrate QE (quality engineering ) efforts
- The key testing gap is in Integration testing, where after deployment, all microservices and portal are up and running. This is also the environment of the customer.
- Protractor tool is being end of life-d at the end of 2022.
- Lack of resource and maintenance led to 50% of Protractor tests turned off
- Repeated and spurious failures let to the engineering team losing faith in Gui test results
- Selected Playwright as the successor to Protractor for Gui tests after conducting a series of proof of viability tests.
- Small set of key tests to ensure that key functionality of navigation, parallelization and reliability are met.
- Separation of pure Playwright and Playwright + Internal infrastructure tests to distinguish these two key software contributors.
- Use of inner ( functional ) loops and outer ( invoke Playwright ) loops to coax out timing issues.
- Loops are slowed down so that global test environment is not unduly disturbed and long, overnight runs become practical
- Reliability of Gui Tests
- Replace emphasis on counting number of Gui tests added with better reliability metrics such as:
- Improved precision of flakiness -- network, environmental, timing related, missing error handling, intentional Gui change etc
- New reliability metric called "Number to Fail" based on loop tests to help determine readiness of Gui tests
- Require all new tests to cleanup after themselves
- Created two sets of production Gui tests for flexibility ( 'fast' and 'many' )
- Added allowance for next integration API testing framework
- Working on a supportability metric : time to fix, % flakiness due to different categories
- Release Process Automation
- Despite flaky Protractor tests, retain the nightly Protractor process as a working implementation reference
- Automate Release testing by adding fast Gui test set into CiCd
- Incorporate slow Gui tests later as needed
- Added a shadow test process for QE to get earlier look at failures. The shadow process is run on demand with the expectation of many failures and not for general consumption.
- Improved CiCd efficiency by using one reusable Playwright image without baking in any tests
- Participate in team rotation for Release and On-call Support
- Independent projects and training
( Tualatin, OR :
Oct19 -
Jun21
)
software consultant
- The Standard
( Portland, OR :
Aug19 -
Sep19
)
senior software engineer in test
- EagleCap Software
( Sherwood, OR :
Oct17 -
Feb19
)
senior software engineer in test
- Employee #17 in Aviation-based startup company
- Team was contracted to work with a large airline company to create their next generation operations and control application. This Angular app is designed to replace 10 legacy software and miscellaneous Excel spreadsheets to give the user a 360 degree view leading to improved planning and decision making.
- Part of 3 pronged test strategy covering manual testing, middleware API testing and e2e GUI testing.
- Guiding principle of making automation progress, in spite of roadblocks, shifting requirements, under-integrated test machines and other aspects of a high pressure, high delivery system. Strategies include tiptoeing around unstable functionality, data-agnostic tests first and data-specific tests later. Persisted in repeated overtures to IT over an 8 month period to find the right person/group to open up download access for Protractor webdriver updates to work inside client's IT environment. This is a Day-one problem and the first impediment to integrating with the client's IT system.
- Implemented a GUI e2e test automation system based on Protractor ( Angular, Typescript )
- Single configuration setting to support multiple usage scenarios
- Automation: Chrome and Firefox in full GUI
- Development : Headless Chrome
- Continuous Delivery : Headless Firefox ( only platform provisioned from IT )
- Simple automated coding style assistant with Tslint and Prettier
- Common and functional-based libraries to support reuse in production test, loop tests and stress tests.
- Readme of coding tips and best practices for Angular developers working with Protractor
- Extended end-to-end tests by coupling basic API to end point GUI verification
- Tests provide a base to drive service virtualization using Mountebank
- Want to know how the 201th browser behaves? Implemented N+1 browser testing using Protractor, Mountebank and Gatling.
- Achieved unusual practice of running e2e tests as part of Bamboo CICD process. This made use of multicapabilites of Protractor to half the runtime of the e2e tests with 4 browsers.
- Improved e2e test reliability with layers of test promotion from single execution to looped runs to random stress runs and also testing on a slow machine.
- On an internal project, designed and implemented a C# GUI testing framework based on Windows Application Driver and xUnit.net.
- Integrated build and GUI testing into Jenkins process running Windows 2013 Server virtual machines
- Introduced failure snapshots and extended incubation testing for improved reliability
- Jeppesen
( Wilsonville, OR :
Jun11 -
Sep17
)
senior software engineer in test
Aviation Group:
- One of two C# test automation engineers, supporting four manual test engineers on suite of flight planning product.
- Product architecture is client-server, with WPF-based GUI and legacy MFC-based GUI.
- Combination of automated and manual testing allows team to effectively apply automation and manual testing as needed
- Implemented automated round-trip tests with Microsoft Unit Test Framework, to validate backend server functionality
- Implemented viewmodel unit tests of Gui components
- Designed and implemented CodedUi/Telerik Testing Framework (Ttf) Gui testing framework
- Leveraged programmatic Gui test technologies of CodedUi and free Telerik Testing Framework (Ttf)
- The use of two technologies provide the opportunity to check reliability and implementation differences. The primary technology for all tests is CodedUi.
- Designed and implemented task and Gui oriented interfaces to abstract test functionality from the CodedUi or Ttf technology.
- This results in testcases that can run with either technology, and worst case, read and performed manually, to avoid technology obsolescence
- Implemented, deployed and maintain regression test system with live server and dependencies
- Created a ruby-based tool for automatic updates and incremental installs of product and its dependencies
- Created a ruby-based test runner on top of vstest.console.exe that worked with and without Bamboo. Added ability to rerun only failed tests.
- Used dotTrace to track down massive slowdown ( 25x ) of CodedUi tests due to Bamboo agent running as a service
- Confirmed with Tanuki Software that Bamboo's wrapper functionality has inherent flaw
- Found solution by running Bamboo agent in user mode
- Transition build environment from VS 2012 Professional to MSBuild Tools 2015, saving a developer MSDN license
- Implemented and maintain stress and concurrent testing environment
- This is our best representation of a large customer, with 80 concurrent users, 90 days of activity representing 1.2 million flight plans
- System is available for ad hoc and targeted testing by Test and Dev
- Created flexible automation tools for generating massive offline base load or daily live injected mock data
- Used test environment to determine performance characteristics and weaknesses of current implementation
- Concurrent regression level testing uncovered issues not found in concurrent unit tests
- Spearhead and led training for manual testers on C# and automation testing
- Use of Visual Studio, Perforce, Git and other development tools
- Building, running and debugging client and server
- Basic functional programming in C#
- Improved cross training with subject matter manual testers
- Used DotCover to analyze and report code coverage of automated tests
Marine Group:
- Single test engineer responsible for suite of software products covering ship reporting, fleet management and voyage optimization
- Investigated Silverlight testing frameworks from Silvernium to Selenium, and settled on Ttf
- Implemented Ttf test base functionality and set of automated helper functions to assist manual exploratory testing
- Trained team of 4 test engineers on WebAii deployment. This effort was later cancelled.
- Investigated feasibility of technology-agnostic, screen-based testing tool EggPlant
- Designed and coordinated usability and user scenarios testing
- Learned C#, Linq, IronPython, NUnit and MSTest to leverage use of .NET technology used by the products
- Advanced Navigation and Positioning
( Hood River, OR :
Jan09 -
Jun11
)
senior software engineer in test
- Support releases with bug fixes, software enhancements, unit and system testing on Alpha Windows NT, Intel Windows XP and Intel QNX machines. Software include C modules and C++ MFC-based GUI applications.
- Implement custom automated unit test harness and unit tests for Pulse Processing functionality
- Design and implement manual test procedures for new modules both for functionality and code coverage
- Requirements extraction and validation from source code analysis
- Use of BOUML to extract and trace data dependencies
- Augment official production tool Visual C++ 6 with free Visual C++ 2008 Express for better source browsing and analysis
- Created Perl-based tool to emulate "svn status" missing in PVCS V8.3
- Developed SWIG Perl-based tool to interface and reuse legacy code
- Ongoing exploratory use of Git distributed version control system
- Investigated and piloted CxxTest as a unit test environment for C/C++ code
- Implemented DocBook documentation system to leverage common XML content, multiple output ( .chm and .htm ) and variant product user documentation
- Perl-based test assistant for GUI based system testing
- Simplify the management and updating of a multitude of simulation, settings and control files between various system nodes
- Flexible configuration file to encapsulate developer and site specific details
- High level and unified command format with Checks, Help and Status facilities
- Independent projects and training
( Tualatin, OR :
Mar08 -
Dec08
)
software consultant
- Completed Agile Web Development with Rails study
- Limited port of Environment Modules project to Windows
- Synopsys
( Hillsboro, OR :
Dec05 -
Feb08
)
senior software engineer
- Appraised level of Operational dysfunctionality and start triage work, starting with Build process
- Break long held but unproductive practices in legacy Production system
- Incorporated software development metrics ( Purify, PureCoverage and Coverity ) into Production system.
- Designed and implemented Graph-based Software Production Automation (Perl)
- Specify, purchase and fill-in administration of fringe Corporate platform ( Windows 32 and 64 bit)
- Promote use of Twiki for communication, documentation and access of Operational work and past practices. This anticipated the introduction of Corporate Document Retention policy by a year.
- Prototyped MySQL database for comprehensive process and testing results.
- Investigate use of Ruby on Rails for analysis and visualization of process metrics and trends.
- Independent projects and training
( Tualatin, OR :
Jun05 -
Dec05
)
software consultant
- Took 3 courses at Portland Community College, covering Database Development, Web Scripting and C#.
- Implemented CSS-based 3 pane layout to replace table-based HTML pages
- Investigated FxCop and NUnit for C# development process.
- Extended Database class to learn about ASP.NET and XML Web services.
- Mentor Graphics
( Wilsonville, OR :
Dec03 -
May05
)
senior software engineer
- Investigated, designed, implemented coverage gathering process based on PureCoverage for Windows.
- Worked with Imagix to produce call tree colorings to visualize coverage gaps and dependencies.
- Establish baselines utilizing 8000 test cases on 1 million lines of code. Each baseline took 1.5 weeks of run time.
- Used object-oriented Perl to fully implement a minimal specification of a new test launcher.
- Increased testing throughput from one build a day to three concurrent builds a day.
- Smart grouping of test cases into a dependency hierarchy of blocks, allowing early failure detection and improving confidence of downstream groups.
- Allow Lego-like mix and match of builds and test groups for flexible scheduling.
- Increased reliability and usability by strobed runs and pause/continue/abort control.
- Intel
( Hillsboro, OR :
Jul03 -
Dec03
)
software consultant
- Investigated and wrote product requirements document for new product evaluation/update/install CD for Intel Software Products division.
- Designed and implemented a Windows/Linux "smart" C++ utility to gather licence and install information and recommend subscription based options for the user.
- Licensing is based on the FlexLM API, while install detection is platform specific, RPM on Linux and Win32 API on Windows.
- Leveraged open sourced libraries Boost, Loki and XParam to meet tight delivery datelines.
- Independent projects
( Tualatin, OR :
Oct02 -
Jul03
)
software consultant
- Designed and implemented an extensible set of software utilities based on Boost Graph Library and AT&T's Graph Visualization package to allow the study of EDA algorithms. This included support for D calculus, flexible debug and trace facilities and command line handling.
- Implemented a basic automatic test pattern generation ( ATPG ) algorithm.
- Learnt basic VHDL and SystemC hardware and system modeling languages, using Blue Pacific HDL tools.
- Studied C# from "Inside C#" by Tom Archer and the .NET SDK.
- Studied Managed C++ and how to use STL with managed garbage-collected types.
- Completed study of Exceptional C++, by Herb Sutter.
- Mentor Graphics
( Wilsonville, OR :
Mar00 -
Sep02
)
senior software development engineer
- Primary engineer responsible for the extension of Mentor's proprietary C based Procedural Interface for parts library access. Careful design allowed the implementation to be in C++, with a bridge class interfacing the legacy C code. This provided an EDA object oriented layer on top of Oracle databases for managing electronic design, materials and enterprise data.
- Collaborated closely with product development team members located in Nuremberg, Germany.
- Implemented Java JNI interface to the product.
- Implemented new C++ Interface to provide better performance and usage compatibility. The implementation uses VC6 on Win2K/WinNT and gcc on Solaris and HPUX. Utilized STL extensively and advanced modular C++ design techniques to streamline dependencies and simplify development. Implemented 7 man-weeks project in 4 weeks.
- Utilized gprof and Quantify for performance tuning, improving query/reply time by 10x.
- Improved code quality with memory checking tools ( Purify ).
- Genedax
( Portland, OR :
Dec97 -
Mar00
)
software development engineer
- Developed and implemented an MFC compatible C++ persistence model for a VHDL COM-based product.
- Designed and implemented a Windows NT integrated Build/Test/Release/Install system linking Microsoft Visual SourceSafe for version control, Visual Studio for compile and builds, and InstallShield for installation and CD creation. The framework itself was designed and implemented in ActiveState Perl.
- Integrated and tested VC++ VHDL 87 and 93 validation modules developed by an off-site contractor.
- Mentor Graphics
( Wilsonville, OR :
Feb94 -
Nov97
)
software development engineer
- Responsible for the software maintenance of the CheckMate IC verification product family. This is a C-based set of 7 tools with a total of 7 million lines of code. Engineering work involved extensive use of gcc and gdb on Solaris, HP-UX and IBM AIX. Performed large-scale code re-factoring to legacy code to increase maintainability and robustness.
- Close collaboration with Dallas, Texas Instruments team on bug fixing, code sharing and releases.
- Designed and implemented a Perl-based Unix build and test environment. This includes using Perl modules for load monitoring, task synchronization, metric collection and dbm database access.
- Directed and trained entry-level engineer.
- Re-engineered the release process by integrating Build, Test and Release flow, slashing 40% off the final release schedule.
- Provided engineering support to Customer Support and Field. Team received Achievement Award in 1995 for outstanding effort.
- Mentor Graphics
( Wilsonville, OR :
Apr90 -
Jan94
)
software quality assurance engineer
- Responsible for quality assurance engineering functions on two key framework products on multiple platforms. This includes installation, configuration and interoperability testing.
- Architected, developed and maintained a flexible and extensible automated test environment supporting interactive and batch operations, flexible selection of test cases and parallel execution. Clean architecture allowed plugging any source control management system.
Education
Michigan State University East Lansing, MI |
Sep 1987 - Mar 1990 |
M. Sc. (Computer Science). Passed at Ph.D. Qualifying Level, Major GPA 3.85/4.0 |
Graduate FellowShip (Sep 1989 - Mar 1990 ) |
Auckland University Auckland, New Zealand |
Jan 1979 - Dec 1981 |
B.E. (Electrical), First Class Honors, Ranked 2nd of 65 |
Senior Prize in Electrical Engineering ( 1979, 1980, 1981 ) |
Technical Lists
Operating Systems |
Windows 10, Windows XP, Linux, UNIX - HPUX, Solaris, SunOS, AIX, Mach |
Languages |
C#, Typescript, Javascript, Java, Python3, Perl5, Bash |
Web |
Javascript, CSS, XML, XSLT, Twiki, Ruby on Rails |
Virtualization |
Docker (Linux and Windows), Docker Hub, VirtualBox, VMWare |
Unit Testing Frameworks |
MS Unit Test, NUnit, Xunit.Net, Jasmine, SpecFlow, Junit4, Junit5, PyTest, Test::More |
Gui Testing Frameworks |
Protractor, Windows Application Driver, CodedUi, Perl Win32::GuiTest, AutoIt |
Version Control |
Git, Github, Bitbucket, Perforce, Subversion, CVS, RCS, Visual SourceSafe |
Continuous Integration and Delivery |
CircleCi, Jenkins, Bamboo |
Publications
|