Date 31/10/2000
Here
is our first report:
It
turned out that there werent that many. Here they are as
written by the customer.
It is store department managers responsibility to
maintain the various levels of stocks (e. g.: buffer, reorder etc.).
If the stock falls below any defined level
The
software should flash a warning message to her/him about the
status of the stock. This will also depend on the time lag of the
purchase activity.
USER
STORY #3:
At
the end of the day, the software should be able to update the
inventory by keeping the track record of each item issued to all
the departments. It should be able to calculate the cost
department wise also.
SER
STORY #4:
At each stock level the software should be able to calculate the
repurchase level (Whether it should be the minimum repurchase/
maximum repurchase level) thus
constantly
displaying repurchase quantity of each item.
Notes:
The
central store is who we are building the software system for. It
has a database where it stores its inventory. Each item has a
corresponding buffer level, which is the max we can store of that
item. It also has a reorder level. If we go below that level, we
must issue an order to the purchase department.
This
is what a repurchase level (story 4) was defined as by our
customer.
Min
repurchase level: Reorder
level current stock
Max
repurchase level: Buffer
level current stock
![]() |
Figure #1: Level 0 Data Flow Diagram for Users Story #1.
![]() |
||||
|
||||
(I
know that these arent mentioned in XP, but I think XP does
say that you can use anything else that happens during analysis,
so these just happened, and hence I am including them here)
Use
case 1: Requisition arrives from a department
1. Input to Requisition
handler is a requisition.
2. Sort it out,
generate reorders etc.
3. Generate Report for
requisitioning dept saying what is being issued to it and what is
not.
2. Update the database
(i.e. increase the stock of the relevant items)
3. Satisfy any
departments who are waiting for these items
Stage
3: Breaking up each story into tasks
We
found that the last three stories were pretty straightforward,
and solved them almost immediately.
They
would involve querying our database with the following queries:
For
story 3 -
SELECT
*
FROM
Requisition R, Has H
WHERE
R.dept = Some department.
AND H.slipnumber = R.slipnumber
And
for department wise cost
SELECT
H.code, SUM(quantity)
FROM
Requisition R, Has H
WHERE
R.dept = 'Some dept again'
AND R.slipnumber = H.slipnumber
GROUP
BY H.code
Story
4 This was also directly available from the database.
As
for the maintaining of various levels, this would need to be
taken care of only when a requisition was actually handled. This
is the only time when the level falls.
Any
necessary reorders for items will be sent to the purchase
department, by the main requisition handler.
Story
1 This is the meaty one. The basic DFD we came up with, has
been shown above.

1)
1) Requisition Handler
There would probably only exist one instance of these. It would
be created by the main program. We could say something like:
handler.handleRequisition(aRequisition)
The output would be a Result
object which stores information about which of the requests were
satisfied and which ones werent. The classes would be like
this

The
following sequence diagram illustrates what I have in mind

We
thought we might be able to start our first iteration earlier
than the 29th (the proposed date) but ended up
starting only then.
In
the meantime, the following was accomplished in our iteration 0
1)
Creation of mailing list [email protected]
2)
Preliminary meeting with Manish
3)
User stories generation
4)
Estimation of user stories: (More on the estimation below)
5)
Iteration planning meeting
The
web page was postponed. It is being worked upon and should be up
in a day at most from now.
1) The part that would handle
a requisition
2)
The part that would handle the fresh supplies coming in from the
vendor
The
first had the following tasks:
a)
A web form for getting the requisitions from the department
b)
The main module which would handle such a requisition
c)
Some sort of interface between the web form and the module
The
second was similar:
a)
An interface to collect the order slip
b)
A module to update the database and inform departments that are
waiting
c)
Interface to these departments.
We
thought 2(b) and 2(c) would need to wait.
But,
we also thought it was possible, from the numbers we put in front
of these that we could finish all the tasks this iteration,
provided we put in three hours consistently everyday.
We
debated on what language to use. The main point was that we werent
sure how easy it was to connect to a database in java. A half day
spike solution sorted this out. So Java it was.
The
XP idea of a spike solution was really a big help, because it
helped us to identify the exact part that we werent sure of.
Without a process we would have started off writing code, and
been in awe of jdbc for half the duration of the project.
We
are now a couple of days into our iteration, and things havent
been going exactly as planned. We are making good progress, but
it hasnt been as disciplined as I would have liked. What we
need to do is re-estimate the tasks taking into account the
following -
· All but three
of us are new to Java.
· These three
are also using Java for the first time.
· Time for
learning the testing framework, needs to be allowed for
·
I have found initial development to be very slow because of the
test before writing any code rule.
·
The pair programming rule wasnt being followed as strictly
as I would have liked. This was because of the following that I
think was the problem.
Given that we have scheduled three hours per day, I dont
think its right to ask someone to pair program with you for
any extra time that you put in. However, the logic behind pairing
is that two people together will be more productive than if they
work separately.
However,
if there is no one else, that shouldnt stop him from
working on his own, since one person working at all, is better
than no one working at that time. This doesnt violate the
argument behind pairing.
The
following is a more realistic team structure, as opposed to the
structure proposed in our first submission
Nitin
Sukhvinder
Singh (Jimmy)
Vibhu
Parag
Alok
Coach
Vibhu
Manish
Sukhvinder
Singh ( Jimmy )
No
Testers yet. We will think about acceptance tests, after the
first week of development at which point we will decide exactly
who the testers are and how they should proceed.
Progress
Tests
and code have been developed to handle requisitions, according to
current stock in the inventory. We have managed to figure out
jdbc/odbc and so we are being able to maintain our inventory in a
database.
Simultaneously,
there has been excellent progress made on a java GUI that accepts
requisitions. The remaining part is to get the first part (i.e.
the requisition handling code) to support the exact interface
that is needed, so that these two can be integrated.
I
find that the XP idea of each team being allowed to work out its
own design for its tasks, not very practical. The reason I think
is as follows:
In a
large system, the modules are quite distinct and probably more
independent of each other, than ours are. This is because as it
turns out the tasks we had for this iteration (which in fact
covered all the stories), are really artificial divisions, which
would probably be implemented by just one team.
Now
we are attempting to distribute this work between teams. I feel
that for this more design should be done, before we all rush off
to do our own parts. At the very least, we need to define each
part clearly enough so that the interfaces between parts are
clear.
We
are maintaining timecards, but I dont think its
necessary to include them in this first report, since we are only
three days into our iteration.
I am
submitting the code produced so far. Suggestions regarding
whether or not the unit testing is being done in the right way
would be appreciated. The GUI part has been excluded.
Basically
the RequisitionHandlerTest, is what was written first it
assumed existence of everything else. To make it work, the entire
system had to be built. Then we realized that the smaller classes
should have been built first with their test cases, as they were
the ones which were failing. Anyway, that was a first try at
test before writing any code.
In
closing : The web page is now almost ready, and we will let you
know as soon as it is. The idea of the web page is to show our
progress, so it will develop as we go along.