Horizon Graphs for Code Churn

My advisor has asked that I do some posts as a journal for my software visualization work this semester. Some will hopefully come to fruition before the end of the semester. Do or die time, right?

The first idea that I’ve tweeted about, talked about, cannot shut up about is using a horizon graph to depict code churn. Currently, most of my work has centered around treemaps, but they have a weakness. They only depict one moment in time. Since code churn is concerned with the number of changes over time, a treemap will only show you code churn up to a certain moment in time.

This example horizon graph on Stephen Few’s blog shows the stock price performance for 50 stocks over 1 years. An increase in color saturation indicates an increase up or down. The hue indicates whether the change is positive (blue) or negative (red).

Although the example is from Panopticon, I’m confident that Processing could produce similar results. The idea is really genius, and says very good things about Panopticon. I starred this a while ago in reader. Recently, Alan Page turned me on to some papers by an expert at Microsoft, Dr. Nachi Nagappan. I’ve been rooting around in some of them and noticed that code churn is mentioned again and again. I also noticed that he’s frequently working with millions of lines of code. I don’t know how many components that adds up to, but I’d like to see if the horizon graph would still be useful with hundreds of components, or if it would overwhelm the viewer.

If we’re going for a t.h.u.d, I think you’d have the treemap for upper levels in a hierarchy of components. If the user wanted to investigate an area more there would be a click through to something like the horizon graph.

And the Winner is…

My last semester of school ever has begun. For the past few months I’ve been going back and forth about what I would study. I wrote a previous post about some of my options. The school I attend is very application based. There’s not a lot of research going on and most people just want the piece of paper. No one here expects a fancy internship at Microsoft or Google. Those recruiters have yet to show up on our campus. Students at Southern Poly just want their resume to look good. This means that the majority of people here focus on acronyms.

In looking around for a topic, I initially looked at holes in my skillset and the acronyms involved. I’m not that great with xml, css or xslt. I haven’t worked with SOAP, REST or LAMP. Although my thesis is about data visualization for software quality, I was telling myself that my thesis work should be enough “fun stuff” for me to be satisfied. Then I remembered how my parents relentlessly convinced me that a career should not be fun.

As a high school student, I was obsessed with a career in technical theater. I loved the design and build of sets. To me it was the creation of a new world within the limited space of a stage. There are just as many theater classes on my high school transcript as math classes, and I was committed to finding a great theater program for college.

To say that my parents were not encouraging is an understatement. They were so pissed off! Oh, the screams! For them, the only real jobs were the ones listed in the classified section of the Sunday paper. “Show us a ‘want ad’ for set designer,” was their common refrain. I heard this over and over for months in the living room, in the car on my way to freshman year in college, on the phone when I was at school. Eventually, they repeated this often enough that I became discouraged and dropped out of the theater program at Appalachian State.

Last week, it was finally time to put my intentions for this final semester into the system. As the acronyms were cycling through my head, I reflected on this whole show-me-the-want-ad mentality, and realized that I was in a similar situation with my last semester. I’ve got all the practical, resume-enhancing choices behind Door #1 and the topic with no want-ad attached, data and software visualization, behind Door #2. I can just see the indignation on my parent’s faces.

This is how I know, absolutely, that Data Visualization is the RIGHT choice. My thesis advisor (bless him!) helped me put a curriculum together for a survey of data visualization with a focus on software. I feel like I’ve gone back in time and re-traced my own steps. It’s like I’ve gotten a big, fat do-over as my SPSU swan song. The new Stephen Few book, Now You See It: Simple Visualization Techniques for Quantitative Analysisis my textbook along with Software Visualization: Visualizing the Structure, Behaviour, and Evolution of Software..

Even if I never have another job where I use this, even if I have to keep it as a hobby forever, it’s priceless to me that I will have the time and faculty support to broaden my expertise in this area. I have the rest of my life to learn “REST.” The important acronyms seem to change after 3-5 years anyway. At this point, I know that Data Visualization is not going anywhere. That might actually make it the most practical even though there’s no want-ad for data visualization specialist in the paper.

BTW, my parents eventually realized the damage they had done when I ended up an overqualified (and miserable) secretary. It took a few wayward years and another college degree, but I finally realized that sometimes it is necessary to ignore your parents.

Test Patterns

This will be the next-to-last week of my design patterns class, and I’m working on my final project. We were told to pick some category of design pattern and to do write-ups of the patterns in our category. Some of the example categories were security patterns, anti-patterns and concurrency patterns. I chose test patterns so it would be reusable for work.

So far, what I’ve found is that “test pattern” can mean just about anything in testing. In fact, I question whether there is really a difference between “test heuristic” and “test pattern.” It’s all just ways of categorizing abstract testing concepts that can reapplied in difference scenarios, right?

I looked up test patterns in How We Test Software at Microsoft who have also defined some of their own test patterns. In HWTSM they pretty much refer the reader to a great, fat, brick of a book titled, Testing Object-Oriented Systems by Robert Binder. I know that this book is a brick because I’ve purchased it and have been losing weight by carrying it around when I’m not reading through it. (Maybe Oprah should try this.)

This book not only has test patterns, but categorizes the test patterns into several chapters. Included are Results-Oriented Test Strategy, Classes, Reusable Components, Subsystems, Integration, Application Systems and Regression Testing. As an example, the Integration chapter contains the patterns Big-Bang Integration, Bottom-Up Integration, Top-down Integration, Collaboration Integration, Client/Server Integration, and a few more.

As I’ve been schlepping through this huge book, I’ve noticed just how technical and detailed it is. This leads to my next question, how many people use test patterns knowingly as test patterns? It’s not like most of us in testing trained for this, and the only place I’ve found straight up definitions of test patterns aside from the microsoft post is in this particular book. When I use Quality Center, it’s not like I’m separating out my tests by pattern or heuristic. Should I be? I’ve also read of testers who felt that their success was due to the fact that they weren’t following a pattern, but acting as a user. But then, isn’t that a pattern too?

I’ll post some of the stuff I’ve done for this project in a week or so. Very interested in what people think about using test patterns for testing.

Reblog this post [with Zemanta]

Concurrency,Picture Pages or Foxy Tests

This Fall will be my last semester of graduate school. Wow, I can’t believe I said that.

For my last semester, I’m already signed up to finish my thesis. I also have a completely, wide-open, elective to take. My advisor has cleared the way for me to take an independant study. This puts me in the freaking awesome position of putting together an independant study for any topic in the realm of Software Engineering/Computer Science that I want. Woo-hoo!

These are the topics I am considering:

Advanced Distributed Systems: Concurrency, Threads and The role of XML in web apis such as LAMP, SOAP, etc. I know the very basics of XML and I’ve seen it implemented (in the most horrible way conceivable). I’ve never written code using much XML, and I don’t like that. I only see more xml in the future, not less, and lately, this html parsing thing has really been kicking my butt. If I don’t learn about this at school, I’ll be addressing it separately afterward. Concurrency is, I think, one of the most underestimated topics in computing today, and I’d like to take a closer look at it. I’d especially like to do some more work with a functional programming language. I did some Erlang a while ago and it has drastically changed the way I think when I’m coding.

Survey of Data Visualization: I would do a lot of writing about different topics in visualization including some history. This would include using different tools for Visualization. Aside from Processing, I’ve been working with Flash and Illustrator (freaking sweet software, that). I know there’s a javascript library for visualization. I’ve already done some nice work with visualization, but it would be great to have the type of rock solid foundation that this would give me.

Web Browser Based Software Testing: All of the testing I do is for apps that have a command line interface. I read David Burns’s, aka the Automated Tester’s, blog and tweets feeling very envious of all the fun stuff he gets to do. I’ve also never done performance testing, and would really like to take a crack at it. If I choose this topic, I would definitely roll in some study of virtualization.

At this point in time, I’m not really sure which of these three topics I’ll choose. They all address areas of technology that I feel are highly important . Whichever topic I choose, I will be blogging most of my work.

I feel grateful that the teachers in my school trust me enough and are open enough to give me this opportunity of independent study. My school, Southern Polytechnic State University, might not have the resources of a top tier school, but all of the teachers I’ve encountered have gone out of their way to help me achieve goals that I set for myself. I’m not sure I would have been given this freedom at another school. The school that allows a motivated learner to chase their dreams in a responsible way is to be commended. I’m not a “school spirit,” cheerleader-y type, but I might actually purchase a class ring this time. It would definitely be silver and have either a black or amethyst stone to match my Doc Martens and black hair.