Published by Adam Myatt on 18 Apr 2008

Experimenting With JavaScript Support in NetBeans 6.1

NetBeans 6.1 includes new and improved JavaScript support. The NetBeans New and Noteworthy page on the NetBeans Wiki lists the following new and updated features :

  • Semantic Highlighting
  • Mark occurrences
  • Instant Rename
  • Refactoring
  • Quick Fixes and Semantic Checks
  • Tasklist
  • Code Completion and Type Analysis
  • Go To Declaration
  • Documentation
  • Embedded Completion
  • Browser Compatibility Info
  • Embedding
  • Open Type
  • 6.0 Java Script Information

I’ve been busy the last few weeks field testing it in some code and have found pros and cons. This article discusses some of these issues and features using some sample code.

Continue Reading »

Published by Adam Myatt on 18 Apr 2008

NetBeans Presentation at Java Users Group in Albany, NY.

I’d like to thank everyone who came out Thursday night, April 17, to hear me speak at the meeting of the Capital District Java Developer’s Network in Albany, NY, USA. This is the third or fourth time I’ve spoken at meetings of this group and I always have enjoyed it, especially when I can talk NetBeans.

The presentation was broken down into two parts (mainly so we’d have an excuse for a break in the middle to get some pizza and beer).

Part 1 : Exploring NetBeans 6.1 Features

Brief overview of NetBeans 6.0 and 6.1 to discuss the improvements and features in the latest few releases. The first part of the presentation will touch on new items such as the Sharable Libraries feature and how it can impact your projects. It will also touch on items such as MySQL integration, Axis2 support, and the improved JavaScript support.

Part 2 : Enforcing Code Quality Practices in NetBeans

The second part of the presentation will focus on using the NetBeans IDE in a code quality environment. Learn how to best combine static analysis tools (such as Checkstyle and PMD) in NetBeans for enforcing Java code quality, all while integrating with your application build process in a continuous integration environment (Hudson). Lessons learned and best practices will be demonstrated.

—————————-

Many thanks to the kind folks at Apress for sending some of my books to give away, both Pro NetBeans IDE 5.5 Enterprise Edition and Pro NetBeans IDE 6 Rich Client Platform Edition.

I look forward to another talk with this group in the future! Thanks again to those who attended!

Published by Adam Myatt on 10 Apr 2008

NetBeans 6.1 Release Candidate Available

The NetBeans team has announced the official 6.1 Release Candidate.

Download it here : http://www.netbeans.org/community/releases/61/

You can also read about all the new features in NetBeans 6.1 here : http://wiki.netbeans.org/NB61NewAndNoteWorthy

Published by Adam Myatt on 26 Mar 2008

Exploring Ant Build File Changes for Java Web Projects in NetBeans 6.1

While working with a Java Web Application in NetBeans, I noticed some slight changes in the Ant build file for my project between NetBeans 6.0 and 6.1. This article explores some of the problems these changes caused to help out anyone with similar issues.

Continue Reading »

Published by Adam Myatt on 11 Mar 2008

Reviewing the NetBeans Unit Tests Code Coverage Plugin

The NetBeans Unit Tests Code Coverage Plugin has been around for several versions of NetBeans. It measures code coverage statistics and displays annotated & highlighted lines in the Source Editor in each class that were executed by unit tests. In a recent release of the plugin, it also provides a report that shows overall, package, and class-level statistics. This article provides a quick overview of code coverage, why it is important, and what the NetBeans Unit Tests Code Coverage Plugin provides. I’ll also cover some pros/cons of the plugin.

Overview of Code Coverage

To quote myself from Chapter 16, Using Code Coverage Tools, of my book, Pro NetBeans IDE 5.5 Enterprise Edition (Apress, March 2007) :

You know that it is important to write accurate and effective tests for your code. But how do you measure the effectiveness of your tests? In a perfect world, you would write a test for every class, every method, and every line of code. Depending on the complexity of your code base, this may be easy or extremely difficult.

How do you know when you’ve written enough tests? If you have 200 tests for your code, and they all pass, then you’re finished, right? Not necessarily. You’re finished writing tests only when you know for a fact how effective your tests are. Since testing often involves visual analysis by programmers and code-based test cases, it’s difficult to know if 100 percent of your code has been tested. This is where code coverage tools come into play.

The first and obvious benefit of using a code coverage tool is being able to measure the coverage of your test cases (and, by association, the test case effectiveness). Untested code can lead to bugs, and bugs lead to many other problems.

Code coverage tools also help you identify areas in your code that are dead or unreachable. Suppose you have written test cases for all the public methods in your code. If your code coverage tool identifies one or more methods with private-level access that have never been executed, then you may be able to remove those methods from your source code. You can then use the NetBeans Safely Delete refactoring to check the method and make sure it is not called by any other code.

A good code coverage tool not only tracks if each line in each method was executed, but also how many times each line was executed. Using this data and the knowledge of what lines were and were not executed, you can understand the flow of program functionality and rearrange code blocks accordingly.

The NetBeans Unit Tests Code Coverage Plugin does not provide access to some of the information mentioned above (such as number of times each line was executed). However, it provides enough of the basic features you will need to be quite useful. Internally, the plugin depends on the Emma code coverage library.

Code Coverage tools like Emma and Cobertura (one of my personal favorites) typically work by instrumenting classes (inserting extra byte codes).  The instrumented classes are then executed instead of the original un-instrumented classes. The inserted byte codes in the instrumented classes then collect different bits of data and deposit them in a file for later analysis.

Getting Started

As of the official release of NetBeans 6.1 Beta, the update centers contained a slightly older version of the code coverage plugin. I would suggest going to the official NetBeans code coverage plugin site and download it using the prominently displayed button labeled “Download Code Coverage Plugin”.

Use the Plugins Manager to install the NBM file. Go to the Downloaded tab and click the Add Plugins button. Accept the license, click Next a few times, and you should be all set.

Once installed, you need to activate code coverage on a per-project basis. For this article, I have a standard J2SE Java Library project. In the Projects window, right-click the project name, and you should see a Coverage submenu. It contains the following options :

    Activate Coverage Collection: When clicked activates code coverage collection for the selected project. This will also generate the file nbproject/coverage.properties and coverage/emmascript.xml, which are covered below.

    Deactivate Coverage Collection: When clicked deactivates code coverage collection.

    Show Project Coverage Statistics: When clicked displays a tab in the Source Editor showing the accumulated statistics collected by the plugin for the selected project.

 Files Generated By Activating Coverage Collection

As previously mentioned, several files are generated by activating coverage collection.

The nbproject.properties file contains several parameters used by the plugin such as :

    coverage.activity=ON
    project.type=java
    coverage.templateFile=coverage/template.emma
    coverage.coverageFile=coverage/coverage.emma

The first parameter obviously indicates whether the coverage collection is active or inactive. The second parameter identifies the type of NetBeans project, and the last 2 parameters identify the paths to specific files used by the plugin.

The coverage/emmascript.xml file contains Ant targets for executing the instrumentation of the project class files.

<?xml version=”1.0″ encoding=”UTF-8″?>
<project basedir=”.” default=”echoit” name=”Coverage Tasks”>

    <target name=”echoit” description=”test target”>
        <echo message=”Test succeeded.”/>
    </target>     
    
    <target name=”instr” description=”Instrumenting jars”>
        <echo message=”Instrumenting started.”/>
       
        <java classname=”emma” fork=”true”>           
            <classpath >
                <pathelement location=”${emma}”/>
            </classpath>
            <arg line=”instr -verbose -m overwrite -cp ‘${jarfiles}’ -outdir ‘${output.dir}’ -outfile ‘${output.dir}/template.emma’”/>
        </java>
        <echo message=”Instrumenting done.”/>
    </target>
    
</project>

 The instr target runs the main emma class passing it several arguments to overwrite the application JAR file with a JAR file of the project’s instrumented classes.

Creating Sample Code

First, create a simple Java Class like this :

public class StringUtils {

    public static String tryIntToString(int numLoops) {

        StringBuffer sb = new StringBuffer();

        for (int i = 0; i < numLoops; i++) {
                sb.append(String.valueOf(i));
        }
        return sb.toString();
    }
}

 It is basically a ‘hello world’ class that takes in a counter variable, numLoops, instantiates a StringBuffer, and loops appending an int converted to a String into the StringBuffer. The method then returns the value of the StringBuffer.

To test this method, create a JUnit test. Right-click the class listing in the Projects window and select Tools >> Create JUnit Tests (or press Control+Shift+U). Select your preferred JUnit version (4.x in this case) and the various other JUnit settings you are prompted for. Once created, I implement a basic test case for the StringUtils class passing in a value and setting the expected return.

public class StringUtilsTest {

    public StringUtilsTest() {
    }

    @BeforeClass
    public static void setUpClass() throws Exception {
    }

    @AfterClass
    public static void tearDownClass() throws Exception {
    }

    @Before
    public void setUp() {
    }

    @After
    public void tearDown() {
    }

    @Test
    public void testTryIntToString() {
        System.out.println(”tryIntToString03″);
       
        int numLoops = 10000;

        String result = StringUtils.tryIntToString(numLoops);

        int expectedResult = 38890;
       
        assertEquals(expectedResult, result.length());
    }
}

Continue Reading »

« Prev - Next »