jonm.dev

The Art of Writing Software



Scrum thoughts: Pre-planning

Series [ Scrum Thoughts ] Tags [ planning poker, pre-planning, Scrum, Scrum planning session, Scrum pre-planning, Scrum story planning, sprint pre-planning, story points, user stories ]

I think the way I’ll go about my scrum discussion is to go through the order of battle for one of our sprints, at least from my point of view as a software engineer/tech lead. We usually kick off a sprint with a pre-planning session that happens before the formal Sprint planning session. In this session, we walk through a list of asks from our product team (who come prepared with a big whopping list of them off the product backlog), put LOE (level of effort) estimates on them, and then help distribute them across the multiple scrum teams we have dedicated to the product.

Scrum thoughts: intro

Series [ Scrum Thoughts ] Tags [ scrum ]

Sorry for the pause in posting–I have been a member of our support scrum team at work for the past six weeks or so, and the ensuing insanity in my work day left me too tired to post anything here. I think what I will do is pick up with a review of some of the scrum practices we’re using, what works, and what doesn’t, probably moving through some of the same sequences of areas as the somewhat infamous (at least around here) “Swedish Scrum” article, Scrum and XP from the Trenches Hope you’ll enjoy the discussion.

Easy sanity testing of a webapp with Python

Tags [ Cactus, CruiseControl, HTMLParser, integration test, Maven, Python ]

Needed to whip up some automated sanity testing of a webapp, and Cactus seems to have a somewhat steep learning curve. Eventually, yes, this might be the way to go, because we should be able to integrate it nicely with Maven and CruiseControl, but I needed something quick. In particular, I needed to check whether a certain number of images were showing up in a portion of a JSP-generated page.

Auto-Deploying to Tomcat from CruiseControl with Maven

Tags [ auto-deploy, CruiseControl, deploy, Maven, Tomcat, deploy script, WAR ]

We have a web project that gets built using Maven; it was relatively simple to get this running under CruiseControl since CC has pretty good Maven2 support. However, we also wanted to have a successful build actually deployed to a Tomcat somewhere at a known location so that people could always check out the latest version. I played around with various maven plugins for working with Tomcat, but had a really hard time getting them to work properly.

Exposing the Stereo Knobs

Tags [ Java, JMX, Maven, MBeanExporter, Spring, Tomcat ]

As I mentioned in my last post, I’m about to implement an algorithm that involves a bunch of constant coefficients that we might be wanting to play around with. In order to make them easy to play with at runtime, we’ll go the JMX route. First, the service code will just have the coefficients injected as dependencies: public class MagicalAlgorithmServiceImpl { protected int coefficientOne; protected int coefficientTwo; public void setCoefficientOne(int one) { .

Customer Engagement

Tags [ jconsole, JMX, MBean, product owner, Scrum, Spring ]

Where I work, we have a product group that functions as our product owners for Scrum development. Fortunately, they are co-located, which generally makes them pretty accessible for clarifications, although they do have this habit of having to be in a lot of meetings (hi guys). So today I sat with one of them to work out a fairly complicated user-specific algorithm for sorting a bunch of movies and TV shows.

Keep It Simple, Stupid

Tags [ Cargo, curl, Maven, Maven2, shell script, Tomcat ]

Well, I just spent a couple of hours last night trying to get the Cargo Maven2 plugin to work the way I wanted it to, which was to be able to control an already-installed local Tomcat by saying mvn cargo:start and then having that process exit. Now the whole motivation was to try to get CruiseControl to redeploy the latest version of our webapp after a successful build. Due to various undeploy/deploy cycle PermGen memory leaks, and because it’s on a shared server, I essentially wanted to just have CC do a mvn cargo:undeploy cargo:stop cargo:deploy cargo:start.

Using Interface Hierarchies to Enforce Access Protection

Tags [ abstract data type, design patterns, inheritance hierarchy, interface, Java, refactoring ]

The “implements” relationship in Java between a class and its interface provides for abstract data types where the client of the interface can’t get at the guts of the implementation to muck around with it. I recently encountered this where we had a user object that needed to behave differently based on different login states. We decided to use the State Design Pattern, where we would have the user object delegate to a state object for its state-specific behavior.

TestUtil: Package for Unit Testing Setters/Getters

Series [ Unit Testing Setters and Getters ] Tags [ Java, JUnit, TestUtil, unit test ]

In a comment on an earlier post, a reader Tatsu reported on the TestUtil package from the GTC Group that’s a step ahead of us in this discussion. Here’s a sample snippet of all you have to do to test the setters/getters of a Java class: public void testSettersAndGetters() { assertTrue(TestUtil.verifyMutable(underTest, 1, 0)); } where underTest is the instance of the class you are testing (created and injected in the setUp method of your JUnit).

Unit Testing Boolean Setters and Getters

Series [ Unit Testing Setters and Getters ] Tags [ boolean, Java, unit test ]

It’s crunchtime down on the ranch, so just a quick post today: public class Foo { protected boolean theBool; public void setTheBool(boolean b) { theBool = b; } public boolean getTheBool() { return theBool; } } with: public class TestFoo extends TestCase { private Foo foo; public void setUp() { foo = new Foo(); } public void testSetsOwnTheBoolForSetTheBool() { foo.theBool = true; foo.setTheBool(true); assertEquals(true, foo.theBool); foo.theBool = true; foo.setTheBool(false); assertEquals(false, foo.