On 10/22/2013 4:38 PM, Jon Paris wrote:
Anyone got any experience in applying Agile techniques in an ILE + RPG environment?
'Agile' is a big topic. I've found that most of the stuff that
comprises the Agile philosophy is out of my control. I'm a programmer.
I can ask that an end user from customer service sit with me for a week
while we do a few dozen iterations but the typical response to that
request is 'we are too busy. Show us the finished product and then
we'll talk.' Pair programming? Good luck convincing small business
management that two people should be paid to work on the same thing.
Deliver many small releases? It's really, really hard to convince other
departments to deal with literally constantly changing applications.
So why am I even responding to this? Good question! I'm responding
because even though all I am is a programmer, even though my company is
old school command and control hierarchical Silos of Ultimate Dominion,
I can still use some Agile ideas to help me be a better programmer.
TDD. I use RPGUnit to maintain test suites for new functions
(sub-procedures). Not a silver bullet because I have half a million LOC
not under test and not remotely testable in the sense we're talking
about here.
Much of my code is data driven rather than simple functions like
CalculateGreatCircleMiles(lat: lon: lat: lon) Simple functions are easy
to test - hit the boundary conditions, the mid points, the out of bounds
and you have darned good coverage. WHen you have a function that
depends on a value in a database table, and the database table has
millions of rows, complete testing (rather, completely pre-calculating
the desired result) is quite a chore.
For those functions (and the older programs not under test coverage) I
have a home-grown CMPF that operates on a column by column basis. I
keep a stock database, copy it to my test library, use SQL scripts to
add, update or remove rows needed for testing the new function and then
run my program(s) which update the database under test. Then CMPF runs,
highlighting the differences field by field. One can omit comparing
certain columns (like timestamps which will always be different between
copies of the tables) and indicate which columns are the keys to join
with. Still a lot of eyeballing; I haven't sussed out a way to create a
complete 'here is my input, this is what I want for output' test suite.
Workflow. I use KanbanFlow to keep dibs on what I'm working on with the
specific intention of reducing my work in progress while keeping track
of work I need to do. KanbanFlow is nice because it incorporates a
Pomodoro timer. Another task board I like is Trello. I keep a wiki
with personal notes about decisions I made about functions. That way I
can remember why I chose the route I did; after all I may have tried
something different and discarded it for some reason or other.
Beyond those bits of tooling, the agile methodology I use the most is to
think in functions. Small bits of code that I can easily change, easily
test (to make sure I haven't broken something) and easily revert (Alt-Z
in RDi is magical) if I don't like how it came out. Being able to see
the results of a change in an instant makes changes less stressful to
me. Testing makes me very confident that I haven't baked in an
unpleasant surprise to be discovered 6 months later during 'regression
testing'.
Hope this helps spur discussion. Agile is a topic I'm quite interested in.
--buck
As an Amazon Associate we earn from qualifying purchases.