Skip to main content

A Word About the Analysis Sequence

I mentioned it earlier at some point, but I'm not following the traditional method of system analysis and design as taught in my class. I'm skipping quite a few steps, and really what I'm planning to end up with is a little disjointed. However, I have some reasons for that--namely that in a situation like this, I feel going whole hog on the discovery phase is redundant.

For instance, domain model and entity relationship model. If a student had come to me and described the problem and asked for a solution? Yes. Absolutely. I would need to sketch this out--what things am I working with? Which things are going to live in the database? Does a course have a grade like a planet has a moon, or is a course and a grade more like Mars and Uranus? These are important questions that need answered before you can get into the meat and potatoes.


But...I already did that. Months ago. Before I knew what a domain class model even was, but I have the relationships and the entities all laid out. There's not that many of them. Wait, I can hear it now:
But John--then shouldn't you just go through the motions? Throw together something in diagram form just to prove you know how to do it?
And to that italicized block quote let me say, "Be patient."

There is very limited value to this project to just listing all the "things" in the domain, broadly defined, just for the sake of listing them. In fact, I'd argue the sole point would be to prove to some reader of this blog down the road that I in fact know how to do it. For my time and money (both very limited!) I think that would be better proven with the more detailed, iteration-based diagrams and ultimately a complete project.

The initial domain class diagram and entity relationship diagrams to me are like outlines you do before a rough draft--really useful if you're groping in the dark trying to find words but a painful, derailing distraction if you already know enough to string sentences together. In my CSCI-1275 class, our project was to build a system that allowed realtors and buyers to list and view houses--not a subject that I was familiar with at all. In that case, brainstorming use cases and domain objects and how they related was not just helpful but crucial to making sense of what our system had to do.

We didn't know the problems that needed to be solved, until we talked it out and mapped it. We found we had to make decisions--realtors could have multiple listings, but could a listing have multiple realtors? Could a seller or buyer have multiple realtors? Until we laid it out visually, these questions seemed to all have "Maybe?" as the answer. We didn't know enough to start defining class structures or activity flows until those had been completed.

I'm not doing a research paper that needs an outline to organize a bunch of disparate facts I looked up. I'm writing an opinion piece on a topic I've felt passionate about for some time. I don't need to puzzle out what I'm thinking, I just need to organize concepts in the most effective way possible. Don't have to go back to "See Jane run" and build complexity piece by piece in order to say "Jane outran every boy in her class, shouting 'Who wants to run like a girl now?'" do we?

Comments

Popular posts from this blog

Use Cases: The Theory

They told me in my CSCI-1275 Systems Analysis and Design course there's a tendency for programmers to just start coding stuff without thinking, and this was nigh on tantamount to total catastrophe. I didn't fully understand this until a little later in the semester. We had just learned about arrays and collections in my CSCI-1630 C# Programming I course, and I found this to be a perfect excuse to write a little application that would synthetically divide polynomials . (That's a really great way to master synthetic division, actually, if you're interested in brushing up on that skill. Although my wife still insists the time would have been better spent putting more time into my algebra homework. Two types of people...). At any rate, long story short: I made the program work perfectly, for 3rd degree polynomials that divided evenly. Then I realized it broke when I tried a polynomial of the 4th degree. And then again when the 3rd degree polynomial had a remainder. ...

Sequence Diagrams: Theorizing

The activity diagram is all well and good, and can even be super useful in a lot of cases. But for my money, so far in my limited experience, the sequence diagram is where you really start to get a handle on what you need to do as a programmer. Before the sequence diagram, you're dealing with steps in a process. What needs to happen, in what order, and you could just as easily be talking about employees or way stations or widgets or nothing at all. They're really about systems analysis--that high level, what needs to happen kind of stuff. Really important work, but totally dull from a programmer standpoint. The sequence diagram is where we start seeing method names and parameters being laid out. The interaction between classes and layers. You start to see what methods you'll need, in what classes, and get a feel for what properties those classes will need. You can see the flow of the data from the start of the operation to the end, note the inputs and the outputs. I...

Activity Diagram: Theory

So I've got use cases figured out. Not all of them--only a fool or a genius thinks he can sit at a desk away from the end user and think he's got all the use cases figured out (and a genius would never truly believe it). But you can't sit around trying to anticipate every possible use case before you start, so once we have enough to cobble together a complete program or part of one we can move on for a bit. Side note, this is the beauty of the agile approach: "Yeah, we know we gotta go to the moon. But we have to do it in 10 years, so we can't spend 5 years thinking up every problem we might need to solve before we start solving them. How about we start with 'design a rocket that reaches orbit without killing anyone' and build on that when we finish?" That's called an iteration, but more on that later. Fleshing out what that use case needs is the next step, and there are a couple tools I remember being taught. One of them is the activity diagra...