Visual Studio 2005 Team System

Visual Studio 2005 Team System will be a great product. On my opinion, this is one of the most significant improvements in tools for software development during the last several years. Perfect integrated environment with so many good features (unit tests, continuous integration, version control, iterative planning, bug tracking). In fact, this is close to road map of our TargetProcess application, but we are just on the start. Microsoft is a good competitor, you know 🙂

Maybe it is not for small teams (and this is a bad thing for sure), but I hope we will see a kind of light edition. If not, someone will definitely take that niche. For example, TargetProcess 🙂

NHibernate Query Analyzer

At least there is a GUI tool for NHibernate that simplifies mapping files creation and NHibernate queries debugging. NHibernate Query Analyzer is good for the first sight. I did not dig into details yet, but the tool is usable and quite clever. It converts NHibernate queries to SQL queries, provides chooses where possible and maybe could generate source code (there is a option, but I did not try it).

One disadvantage is a lack of a User Guide, but I hope it will appear soon.

Funny Phrase Book of Programmer-speak

Great and funny stuff 🙂 Yes, sometimes this is true from Project Manager’s side:

“It’ll be done ASAP.”
Translation: There is no schedule yet.

“That feature shouldn’t add any time to the schedule.”
Translation: There is no schedule yet.

“It’s Alpha ready.”
Translation: A lot of code has been written; none tested.

“It’s Beta ready.”
Translation: It’s Alpha ready.”

Read more at http://blog.tomevslin.com/2005/03/managing_progra.html

Adopting XP planning to Game Development

In Game Development Team we have several unique specialists who can not do job of each other: Artists can’t programm, Programmers don’t know how to create 3D models, Level Designers can’t do both of previous (will call them subteams). When planing, XP says: “Write user stories, asign them into iterrations according there business value limiting by team velocity.” The problem is that it’s not clear how to plan stories in particular iteration, because we need to balance job between different subteams.

To solve this problem, as I see, it is required to consider personal speed of every subteam when planning or separate project into several subprojects.

How To Start a Startup

Very good and detailed article about startup – How To Start a Startup. Paul Graham talks about ideas, people, money, customers’ expectations and all the other important questions that should be asked while starting a company. Some cites:

So if you want to invest two years in something that will help you succeed in business, the evidence suggests you’d do better to learn how to hack than get an MBA.

Working was often fun, because the people I worked with were some of my best friends. Sometimes it was even technically interesting. But only about 10% of the time. The best I can say for the other 90% is that some of it is funnier in hindsight than it seemed then

Starting a startup is not the great mystery it seems from outside. It’s not something you have to know about “business” to do. Build something users love, and spend less than you make. How hard is that?

NUnitASP Problems

I’ve tried NUnitASP to test ASP.NET web pages in TargetProcess project. As usual, there are some problems with tool adoption. All these issues have been resolved, but I am not satisfied with solutions and stop using NUnitASP for now. I want to find a better way.

Tests Independence & Database State

To keep tests independent, web application should be in known initial state before every test

The TargetProcess system uses database, so the database should be in the same state before each test. I can’t find a better way than executing bat file from command line in [SetUp] method. The bat file contains something like this:

osql -U sa -P -d dbname -i D:\TargetProcess\src\Tp.Model\Sql\testData.sql

This works. Not as fast as I want, but I can wait a minute or two. When database become bigger, this solution might be unacteptable.

Dynamic Controls Insertion and NUnitASP

Most of the server controls inserted dynamically on run-time in TargetProcess. This cause additional problems, since controls ids may change. For example, new TargetProcess’ module will insert additional control on dashboard. And I should update many already defined Ids in tests. Here is code sample:

protected override void SetUp()
{
  SetInnocentState();

  control = new UserControlTester("_ctl4", CurrentWebForm);

  ddFilterByIteration = new DropDownListTester("ddFilterByIteration", control);
  btnUpdate = new ButtonTester("btnUpdate", control);

  dgUserStories = new DataGridTester("dgUserStories", control);
  row = dgUserStories.GetRow(0);

  ddIterations = new DropDownListTester("ddIterations", row);
 
  lbChangeStatus = new LinkButtonTester("lbChangeStatus", row);
  lbDelete = new LinkButtonTester("lbDelete", row);

  Browser.GetPage("http://tp/Tp.Web/Project/1/Planning/UserStories/List.aspx");
}


[Test]
public void ListView()
{
   string[] expected = new string[]
       {"Text. Will not check it", "12", "Great"};

   AssertEquals(expected[1], dgUserStories.GetRow(0).TrimmedCells[1]);
   AssertEquals(expected[2], dgUserStories.GetRow(0).TrimmedCells[2]);
   AssertEquals("- Iteration? -", ddIterations.SelectedItem.Text);
   AssertEquals("Done", lbChangeStatus.Text);
}

[Test]
public void FilterList()
{
   ddFilterByIteration.Items[1].Selected = true;
   AssertEquals("Iteration #1", ddIterations.SelectedItem.Text);
   ddFilterByIteration.Items[0].Selected = true;
   AssertEquals("- Iteration? -", ddIterations.SelectedItem.Text);
}

In code control = new UserControlTester(“_ctl4”, CurrentWebForm) real base control id is “_ctl4”. But when add new control on the top of this, its id will be “_ctl5”. This is a major issue for now.