Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Build Lifecycle Craftsmanship for the Transylva...

Build Lifecycle Craftsmanship for the Transylvania JUG

Matthew McCullough

October 20, 2011
Tweet

More Decks by Matthew McCullough

Other Decks in Programming

Transcript

  1. Software tools for continuous integration include: ▪AnthillPro — continuous integration

    server by Urbancode ▪Apache Continuum — continuous integration server supporting Apache Maven and Apache Ant. Supports CVS, Subversion, Ant, Maven, and shell scripts ▪Apache Gump — continuous integration tool by Apache ▪Automated Build Studio — proprietary automated build, continuous integration and release management system by AutomatedQA ▪Bamboo — proprietary continuous integration server by Atlassian Software Systems ▪BuildBot — Python/Twisted-based continuous build system ▪BuildMaster — proprietary application lifecycle management and continuous integration tool by Inedo
  2. NAnt, Maven, and shell scripts ▪Software Configuration and Library Manager

    — software configuration management system for z/OS by IBM Rational Software ▪QuickBuild - proprietary continuous integration server with free community edition featuring build life cycle management and pre-commit verification. ▪TeamCity — proprietary continuous-integration server by JetBrains with free professional edition ▪Team Foundation Server — proprietary continuous integration server and source code repository by Microsoft ▪Tinderbox — Mozilla-based product written in Perl ▪Rational Team Concert — proprietary software development collaboration platform with built-in build engine by IBM including Rational Build Forge
  3. ★Checkstyle ★PMD ★ Findbugs ★ Cobertura ★ Emma ★ Clirr

    ★ JaCoCo ★ Useless Code ★ SQALE ★ 20+ others...
  4. import com.sun.btrace.annotations.*; import static com.sun.btrace.BTraceUtils.*; import com.sun.btrace.AnyType; import java.lang.management.MemoryUsage; import

    java.util.concurrent.atomic.AtomicInteger; import java.util.Map; @BTrace public class TraceAllMethodCalls { /** * METHOD CALL TRACEPOINT. */ @OnMethod( clazz="com.ambientideas.HelloWorldJava", method="print", location=@Location(value=Kind.CALL, clazz="/.*/", method="/.*/") ) public static void m(AnyType[] args) { //System.out.println("Hello"); println(strcat("****** WE'VE ENTERED A METHOD ON CLASS: ", name(probeClass()))); println(strcat("****** WE'VE ENTERED METHOD: ", probeMethod())); } @OnMethod(
  5. import java.util.concurrent.atomic.AtomicInteger; import java.util.Map; @BTrace public class TraceAllMethodCalls { /**

    * METHOD CALL TRACEPOINT. */ @OnMethod( clazz="com.ambientideas.HelloWorldJava", method="print", location=@Location(value=Kind.CALL, clazz="/.*/", method="/.*/") ) public static void m(AnyType[] args) { //System.out.println("Hello"); println(strcat("****** WE'VE ENTERED A METHOD ON CLASS: ", name(probeClass()))); println(strcat("****** WE'VE ENTERED METHOD: ", probeMethod())); } @OnMethod( clazz="/.*/", method="println" ) public static void m2(AnyType[] args) { println(strcat("****** WE'VE ENTERED A METHOD ON CLASS: ", name(probeClass()))); println(strcat("****** WE'VE ENTERED METHOD: ", probeMethod())); } /**
  6. public static void m(AnyType[] args) { //System.out.println("Hello"); println(strcat("****** WE'VE ENTERED

    A METHOD ON CLASS: ", name(probeClass()))); println(strcat("****** WE'VE ENTERED METHOD: ", probeMethod())); } @OnMethod( clazz="/.*/", method="println" ) public static void m2(AnyType[] args) { println(strcat("****** WE'VE ENTERED A METHOD ON CLASS: ", name(probeClass()))); println(strcat("****** WE'VE ENTERED METHOD: ", probeMethod())); } /** * ONEXIT TRACEPOINT. CALLED WHEN A BTRACE METHOD CALLS EXIT(INT). */ @OnExit public static void onexit(int code) { println("****** THE BTRACE PROGRAM IS EXITING."); } /** * LOW MEMORY TRACE POINT. */ @OnLowMemory( pool = "Tenured Gen",
  7. println(strcat("****** WE'VE ENTERED A METHOD ON CLASS: ", name(probeClass()))); println(strcat("******

    WE'VE ENTERED METHOD: ", probeMethod())); } /** * ONEXIT TRACEPOINT. CALLED WHEN A BTRACE METHOD CALLS EXIT(INT). */ @OnExit public static void onexit(int code) { println("****** THE BTRACE PROGRAM IS EXITING."); } /** * LOW MEMORY TRACE POINT. */ @OnLowMemory( pool = "Tenured Gen", threshold=58720250 ) public static void onLowMem(MemoryUsage mu) { println("******"); println(mu); } /** * MEMORY HISTOGRAM TRACE POINT. */ private static Map<String, AtomicInteger> histo = newHashMap();
  8. * ONEXIT TRACEPOINT. CALLED WHEN A BTRACE METHOD CALLS EXIT(INT).

    */ @OnExit public static void onexit(int code) { println("****** THE BTRACE PROGRAM IS EXITING."); } /** * LOW MEMORY TRACE POINT. */ @OnLowMemory( pool = "Tenured Gen", threshold=58720250 ) public static void onLowMem(MemoryUsage mu) { println("******"); println(mu); } /** * MEMORY HISTOGRAM TRACE POINT. */ private static Map<String, AtomicInteger> histo = newHashMap(); @OnTimer(4000) public static void print() { if (size(histo) != 0) { printNumberMap(strcat("******", "Component Histogram"), histo); } } }
  9. */ @OnLowMemory( pool = "Tenured Gen", threshold=58720250 ) public static

    void onLowMem(MemoryUsage mu) { println("******"); println(mu); } /** * MEMORY HISTOGRAM TRACE POINT. */ private static Map<String, AtomicInteger> histo = newHashMap(); @OnTimer(4000) public static void print() { if (size(histo) != 0) { printNumberMap(strcat("******", "Component Histogram"), histo); } } }