JUnit and SunSpots

July 25th, 2008

I’ve been fairly frustrated trying to write code for SunSpots lately. This frustration mostly stems from my previous self-imposed training to use test-driven development. There is some support for using JUnit with SunSpots, but it requires that the code and tests all be deployed to an actual Spot before the tests are run. Since deployment can take a minute or three, I find that I’m developing much larger chunks of code because I don’t want to run the tests as often…

Thus, I spent the time to figure out how to run JUnit tests on my desktop for SunSPOT applications. I put together a strip-down template using JUnit tests for Spots on the desktop for anyone who would like to build on it. I was also able to get my IDE (IDEA) to use the Spot JVM and libraries, so I’m back in the groove with test-driven development!

ICSE 2008 – Day 2

May 16th, 2008

As with the previous post, the following papers piqued my interest during their presentation, and are potentially cool papers.

Challenges in Automotive Software Engineering (Keynote)

Authors: Manfred Broy
It figures that I’d start with a presentation that has no matching paper, eh? The whole presentation was rather interesting, but here are a couple key points that are relevant to my research:

  • Integrating all the control units found in a car is complicate by the combinatorial explosion resulting from the combination of optional features.
  • There is heavy use of automatic code generation based on models in this arena. While I didn’t completely grasp the extent and the ramifications of this, it’s something to keep in mind when targeting these types of applications.
  • A while back I was told that the automobile industry would love to use radios to communicate information between control units. This was routed in the desire to reduce the weight associated with the all the wiring involved with standard techniques. Well, it seems that even with wired networks on the car, there’s a more compelling problem: non-determinism. The old protocol “CAN” is being replaced by new technologies that using (some variation of) time division to guarantee a certain amount of bandwidth to each control unit. If we want to replace wired networks, we’re going to have to consider this problem which is very much non-trivial in wireless networks.

40 Years of Middleware

Presenter: Wolfgang Emmerich
Overall, this was a fun presentation. It’s hard to report exactly what was said since it was mostly a detailed historical retrospective of the evolution of middleware. Wolfgagng Emmerich did an excellent job of researching and presenting this information, and referred to a paper recently published (in TSE?) that contains much of the information presented. This paper ought to be an interesting read.
As a side note, many people in my lab have discussed “what is middleware” with varring degrees of success. The definition used for this presentation included two aspects: (1) multiple hosts (physical or logical), (2) heterogeneity, and (3) distribution. It’s probably worth looking up this paper to at least look at and consider the definition of Middleware presented there.

Asking and Answering Why and Why Not Questions about Program Behavior

Authors: Andrew Ko, Brad Myers
Paper: PDF, Tool Homepage
ICSE08 Distinguished paper award
This was cool, and defiantly worth a read. I’ll likely force this paper on my lab when I get back, even though it’s outside our research area. ;-)
The biggest open question in my mind at the end of the presentation was weather the tool can be (easily) applied to unit/integration testing implementations. The presentation clearly focused on the ability to integrate ith GUI-based applications, so it’s hopefully just a less glamorous version of the same underlying engine.

TODO or To Bug: Exploring How Task Annotations Play a Role in the Work Practices of Software Engineers

Authors: Margaret-Anne Storey, Jody Ryall, Ian Bull, Del Myers, Janice Singer
Paper: PDF will be available here some day
This research focused on the in-line comments that developers leave to themselves (and others) in the form of “TODO”, “FixMe”, and similar tags. I didn’t find the results particularly suprizing, but that might be due to wonderful presentation of the material. Again, this is outside my research area, but probably a paper that I’ll be reading to solidiy my pre-existing notions.

ICSE 2008 – Day 1

May 15th, 2008

As always, the welcome address for the ICSE conference included the submission/acceptance reports… and this year ICSE came in at 15% acceptance… pretty strong accept rate as always. One thing that the speaker pointed out that I hadn’t really realized earlier is that this includes all “submissions,” no matter what those submissions where. Later in the slides, he pointed out that some 14 of the original submissions were thrown out for being off-topic or because they “were just power-point slides and the such.” (I’m impressed that anyone bothers to submit presentation slides as research papers for such a big conference… but I shouldn’t be surprised by anything anymore)

Below I’ve listed some of the paper presentations that I found interesting. Note that I say interesting not good/great. Before I say that any of these items are really great, I’ll read the paper first. So let’s just say that these papers are candidates to be good papers…

Time will Tell: Fault Localization using Time Spectra

Authors: Cemal Yilmaz, Amit Paradkar, Clay Williams (IBM T.J. Watson Labs)

This idea and the presentation were both rather interesting. The presenter claimed that method execution time could be used to localize defects in source code. The technique operated in two phases: 1) Using passing test cases, execution times are correlated with the execution times of other methods, then 2) a failing test case is run and then look for a execution time that is outside the coloration model.

When the time for questions came around, I think some people forgot that the technique was only for localizing errors that were known to exist rather than detecting errors outright. This lead to questioning how the technique compared to stack traces (complementary, esp. once the trace doesn’t immediately work) and questions about the specific technique for correlation (anything will work at first to prove the concept, better techniques can be used later).

Precise Memory Leak Detection for Java Software Using Container Profiling

Authors: Guoqing Xu, Atanas Rountev

At first, I found most of this presentation rather obvious. The idea that Java leaks memory (via objects) is well known. In order to leak them, they have to still be referenced, but not directly. The reference has to be somewhat anonymous, otherwise the object is “owned” by someone which (when applied recursively) means that it’s either active or a candidate for GC. The primary way to keep an object around without “owning” it is via some sort of container. (In my practice, the biggest memory leak in Java is actually String.subString()’s implementation detail, but that’s another topic)

Ok, so once we assume that most memory leaks are due to objects loosing their identity and ownership by being placed in a container, then this paper proposes a technique for figuring out which container in the application is holding the leaking objects. Basically, containers are ranked based on how much memory they (and their contents) consume through a deep traversal of the object graph. They are also ranked based on a staleness metric (see the paper for exact details) which measures how long an object hangs out in a container after it retrieved (via get).

On the surface it seems like a reasonable idea, but in practice I would expect many cases where containers are working as designed when they cache large objects for long periods of time. If (and how) the authors account for this will be interesting to find out.

Omnet++ and Eclipse

April 14th, 2008

So if I’m going to take the plunge to learn c++ just so that I can use the Omnet simulator, I better have some decent tools to figure out what’s going wrong.

Since it’s likely that I’ll be doing some development on my windows machine and some on Ubuntu boxes, I’m opting for an Eclipse-based development environment. Unfortunately, it’s not so trivial to get everything working together, so here I am with yet another guide to what I’ve done to get my setup working. I hope it helps someone else out there…
Read the rest of this entry »