Friday, October 24, 2008

Software Engineer in Test

Since Mike Kirby (one of our Whitebox test team leads) doesn't have a blog, I thought I'd post some of our "Software Engineer in Test" training materials.

These are the subject areas and techniques we expect our Test Engineers to understand and the skills we want them to have to effectively perform whitebox testing in our group.

Software Engineer in Test level 1:

Week 1 Introduction
Read the following chapters from _Testing Object Oriented Systems_:
Chapter 3 "Testing: A Brief Introduction"
Chapter 4 "Testing Object-oriented Software" sections 4.1.2 -4.1.3 "Fault Model"
Chapter 4 sections 4.2.1 - 4.2.5 "Effects of the Paradigm"
Chapter 4 sections 4.4 "Coverage Models"
Chapter 5 "Test Models"
Chapter 8 "A Tester's Guide to UML"
http://dn.codegear.com/article/31863
Chapter 10.1 "Class Test and Integration"
Chapter 10.2 "Preliminaries" (Code coverage, Path Sensitization, Domain Testing)
Chapter 16 "Test Automation" 4pgs
Chapter 17 sections 1-3 & 6-7 "Assertions"
Chapter 19 sections 1-3 "Test Harness Design"

Week 2 Source Control Management
Create a SVN repository on your linux box, and check out sample the sample code to work through the examples.
Read chapter 2 "Basic Usage" and chapter 4 "Branching and Merging" of the subversion book.
http://svnbook.red-bean.com/en/1.4/svn-book.pdf
Test Development repository structure:
(links to our internal wiki)

You will be asked to give a live demonstration of the following repository activities:
How to create branches
How to rollback changes
How to merge changes
How to resolve conflicts
How to create and apply patches
Demonstrate a 3 way merging using KDiff3

Week 3 Application Runtime Analysis
Read Valgrind "Quick Start Guide"
http://valgrind.org/docs/manual/QuickStart.html

Read chapters 1-3 "Intro", "Using Valgrind" , "Using Valgrind - Advanced Topics"
Valgrind - http://valgrind.org/docs/manual/manual.html

Read chapter 4 on Valgrind-memcheck
Build, run sampeles and find the memory leaks
Create/load Valgrind-memcheck supressions files

Read chapter 6 on Valgrind-callgrind
Build, run sampeles and generate callgraphs
Convert callgraphs to images

Read chapter 5 on Valgrind-cachegrind
Generate cachegrind output files
Review cachegrind output with KCachegrind

Week 4 Quality characteristics for Whitebox
Reliability
Maintainability
Efficiency
Functionality

Week 5 Non-Whitebox Essentials
Monitoring
Syslog and logger and Syslog-ng
http://linux.die.net/man/8/syslogd
http://linux.die.net/man/5/syslog.conf
http://linux.die.net/man/1/logger

SNMP + Cacti
Probing the PROC filesystem

PostgreSQL
(link to our internal wiki)

Pelco Package utilities
(link to our internal wiki)

Using Packet Sniffers
tcpdump
whireshark

Pelco/Endura:
Syseng + Pulse + Crucible + Fisheye + Jira + Pelcoverse + PPM
(link to our internal wiki)

Endura Developer Reference
(link to our internal wiki)



Software Engineer in Test level 2:

Read the following chapters from _Testing Object Oriented Systems_:
Chapter 10.3 "Method Scope Test Design Patterns" (Recursive,Polymorphic)
Chapter 10.4 "Class Scope Test Design Patterns" (Invariant Boundaries, non/Modal Class Test)
Chapter 10.5 "Flattend Class Scope Test Design" (Hierarch Test)
Chapter 13.1 "Integration in Object-oriented Development"
Chapter 13.2 "Integration Patterns"
Chapter 14.3 "Implementation-specific Capabilities" (Configuration,Compatability,Performance,Fault Tolerance)
Chapter 15 "Regression Testing"
Chapter 17 section 17.4.5 "Assertions - C++"
Chapter 17 section 17.5 "Assertions - Depolyment"
Chapter 17 section 17.8 "Assertions - Notes"

Presenting Quality sub-characteristic:
Security
Time behavior
Resource utilization
Maturity
Fault tolerance
Analyzability
Testability
Stability

Fundamental Design Principles
Maximize cohesion, minimize coupling
Subclasses should be substitutable
Favor association over inheritance
Base the design on the invariants
Encapsulate design decisions
Minimize overall complexity

High Leverage Patterns
Factory method
Abstract factory
Model-View-Controller
Bridge / Strategy
Composite

How to write Evil, untestable code
http://googletesting.blogspot.com/2008/07/how-to-write-3v1l-untestable-code.html

Writing Testable Code
http://googletesting.blogspot.com/2008/08/by-miko-hevery-so-you-decided-to.html

The Difference Between Mocks And Stubs
http://googletesting.blogspot.com/2008/06/tott-friends-you-can-depend-on.html
http://martinfowler.com/articles/mocksArentStubs.html


Choosing Between The Differences
http://martinfowler.com/articles/mocksArentStubs.html#ChoosingBetweenTheDifferences
(Fixture setup, Test isolateion, Coupling, Design style)

Test Driven Development
http://googletesting.blogspot.com/2008/09/test-first-is-fun_08.html

Factories
http://googletesting.blogspot.com/2008/09/where-have-all-new-operators-gone.html

Dependency Injection | Seperate application instantiation from application logic
http://googletesting.blogspot.com/2008/07/how-to-think-about-new-operator-with.html

Singletons
http://googletesting.blogspot.com/2008/05/tott-using-dependancy-injection-to.html
http://misko.hevery.com/2008/08/17/singletons-are-pathological-liars/
http://misko.hevery.com/2008/08/25/root-cause-of-singletons/

The Invisible Branch: Differences between statement coverage and branch coverage
http://googletesting.blogspot.com/2008/05/tott-invisible-branch.html

Google C++ Testing Framework
http://googletesting.blogspot.com/2008/07/tott-expect-vs-assert.html

Must Pass and Would be nice to Pass Tests
http://googletesting.blogspot.com/2008/08/progressive-developer-knows-that-in.html

Code Coverage
http://googletesting.blogspot.com/2008/03/tott-understanding-your-coverage-data.html

Too Many Tests
http://googletesting.blogspot.com/2008/02/in-movie-amadeus-austrian-emperor.html

Test Messages
http://googletesting.blogspot.com/2008/02/tott-stroop-effect.html

Automating tests vs. test-automation
http://googletesting.blogspot.com/2007/10/automating-tests-vs-test-automation.html

Performance Testing
http://googletesting.blogspot.com/2007/10/performance-testing.html

Testing Applications and APIs
http://googletesting.blogspot.com/2007/09/testing-applications-and-apis.html

Copeland’s GTAC Video
http://youtube.com/watch?v=pDtfMYyaTQY

Stubs Speed up Your Unit Tests
http://googletesting.blogspot.com/2007/04/tott-stubs-speed-up-your-unit-tests.html

Better Stubbing in Python
http://googletesting.blogspot.com/2007/01/better-stubbing-in-python.html

Non-Whitebox Essentials
Static and Dynamic Libraries
http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

Endura
(links to internal wiki)

SQLite
http://www.sqlite.org

Tools and Frameworks
C++ http://www.boost.org/
Python + SWIG http://www.swig.org/
NoBug http://freshmeat.net/projects/nobug/
GUPnP http://freshmeat.net/projects/gupnp/
Java UPNPLib http://freshmeat.net/projects/upnplib/
Memcheck http://freshmeat.net/projects/memcheck/
MPatrol http://freshmeat.net/projects/mpatrol
http://www.cbmamiga.demon.co.uk/mpatrol/mpatrol_44.html
Demalloc http://freshmeat.net/projects/dmalloc/
http://dmalloc.com/docs/latest/online/dmalloc_18.html
SWIG http://www.swig.org/
GProf
Gcov + Lcov

Static Analysis
Using Understand
Review complexity
Generate static analysis reports
Coupling + Cohesion

Doxygen Commands
http://www.stack.nl/~dimitri/doxygen/commands.html
mainpage,subpage,brief,section,subsection,paragraph,details,li
bug,exception,test,todo,dot,image

Doxygen Call and Caller Graphs
Doxygen Dependency Graph

GNU Binary Utilities
http://sourceware.org/binutils/docs/binutils/index.html#Top
addr2line
nm
c++filt

RPM Packaging
(links to internal wiki)

Pulse personal builds
(links to internal wiki)

Syslog-ng
(links to internal wiki)

Sustaining Log Parser
(links to internal wiki)

Stream Monitor
(links to internal wiki)

Dynamically Linked Application Profiling
(links to internal wiki)

Integrating Existing Code
(links to internal wiki)

Engineering Process Improvement
(links to internal wiki)

ISO9126 Quality Characteristics
(links to internal wiki)

Multicast Tunneling
(links to internal wiki)

Test API
(links to internal wiki)

1 Comments:

Blogger Unknown said...

Hey Steve,

You may want to take a look at http://www.amazon.com/Software-Testing-Craftsmans-Approach-Third/dp/0849374758/ref=sr_1_1?ie=UTF8&s=books&qid=1225281525&sr=1-1 as a reference for OO/UML testing concepts, too.

5:09 AM  

Post a Comment

<< Home