Saturday, June 25, 2005

Damon Cooper's BLOG - Merrimack


Ha ha, Damon. Very funny.

In addition to the river in New England, Merrimack is also the name of one of the first ironside warships. It was actually re-christened the CSS Virginia when it had its famous engagement with the USS Monitor, but the name never really stuck.

March 8, 1862
The Merrimack is best known from the battle of Hampton Roads during the Civil War. It fought in a battle against 5 other ships, the USS Congress, the USS Cumberland, the USS Minnesota and the USS Monitor.

The Merrimack sank the USS Cumberland and then ran the USS Congress aground. She then proceeded to engage the US Minnesota which had been wounded in a previous battle. Unknonw to the captain of the Merrimack, the Monitor had been assigned to protect the Minnesota. A four and a half hour battle ensued between the two ironsides.

They fired everything they had at each other, shot, shell musket and rifle balls, grape and canister, unable to do any damage to each other.

Eventually, the Merrimack withdrew because of lowering tides. There was no pursuit.

The battle was so impressive that the Union and the Confederacy never built another wooden battleship. They had become instantly obsolete.

A few months after the battle, the Merrimack ran aground six miles from the famous battle. She was scuttled by her crew to prevent capture.

Thursday, June 23, 2005

Trogdor Rulz!

WooHoo! Just got my Trogdor T-shirt in the mail. I think I wasted about 2 days of my life looking at that site. It just cracks me up. Make sure you watch the strong-bad emails from the bottom up. They sort of have an order to them.

Let me know if you figure out how to beat peasant quest!

PasswordSafe 2.11 released

Somehow I missed this one for a while. PasswordSafe 2.11 was released last month. The install process replaces any existing copy of the program. There are only a few minor changes introduced in this release.

Thursday, June 16, 2005

Maximum CFC method length

I just bumped into size limit of a method in a cfc. Since the methods get turned into java classes, they are limited in size to 65535 characters. Before you get all nuts telling me "DOOD! Your methods shouldn't be that big", relax. It was just a bunch of database calls that happen sequentially. There's no real complexity in there, only tedium.

Lucky for me, it's pretty easy to break it up into a bunch of small private methods. Just for reference, you'll hit the limit somewhere around 900 lines of fairly dense code. If things start looking that big, it's time to start rethinking the structure.

Wednesday, June 08, 2005

Software Estimation (Part 3) - Working with the factors

Now that we are able to put together a rough estimate of a project based on use cases, the question comes up - How the heck do we put figures on those crazy factors?

I've found little in the way of guidance on setting some of the factor values, especially the ones pertaining to the environment. Here is a list of tables that I use to help put consistent values on the factors. Most of the TCF tables are straight from the function point counting rules, but the Environmental Factors are pretty much just my stab at them. Feel free to comment on places where you think I'm off.

Total Complexity Factors
TCF01: Distributed System
Distributed System describes the degree to which the application transfers data among the components of the application. Distributed System processing functions are a characteristic of the application within the application boundary.
ValueDescription
0Application does not aid the transfer of data or processing functions between components of the system
1Application prepares data for user processing on another component of the system such as a spreadsheet or database
2Data is prepared for transfer, then is transferred and processed on another component of the system (not for end-user processing)
3Distributed processing and data transfer are online and in one direction only
4Distributed processing and data transfer are online and in both directions
5Processing functions are dynamically performed on the most appropriate component of the system (live connection)

TCF02: Response or throughput performance objectives
Response or throughput performance describes the degree to which response time and throughput performance considerations influence the application development. Application performance objectives, stated by the user, in either response or throughput, influence the design, development, installation, and support of the application.
ValueDescription
0No special performance requirements were stated by the user.
1Performance and design requirements were stated and reviewed by no special actions were required.
2Response time or throughput is critical during peak hours. No special design for CPU utilization was required. Processing deadline is for the next business day.
3Response time or throughput is critical during all business hours. No special design for CPU utilization was required. Processing deadline requirements with interfacing systems are constraining.
4In addition, stated user performance requirements are stringent enough to require performance analysis tasks in the design phase.
5In addition, performance analysis tools were or will be used in the design, development, and/or implementation phases to meet the stated user performance requirements.

TCF03: End User efficiency

End-Use efficiency describes the degree of consideration for human factors and ease of use for the user of the application measured. The online functions provided emphasize a design for end-user efficiency.

The design includes:

  • navigation aids (for example, function keys, jumps, dynamically generated menus)
  • Menus
  • Online help and documents
  • Automated cursor movement
  • Scrolling
  • Remote printing via online transactions
  • Pre-assigned function keys
  • Batch jobs submitted from online transactions
  • Cursor selection of screen data
  • Heavy use of highlighting, colors, underlining, and other stylistic indicators
  • Hard copy user documentation of online transactions
  • Mouse interface
  • Pop-up windows
  • Animated interface (count as 4 items)
  • As few screens as possible to accomplish a business function
  • Bilingual support (supports two languages; count as 4 items)
  • Multi-lingual support(supports more than two languages; count as 6 items)
ValueDescription
0None of the above
1One to three of the above
2Four to five of the above
3Six or more of the above, but there are no specific user requirements related to efficiency.
4Six or more of the above, and stated requirements for end-user efficiency are strong enough to require design tasks for human factors to be included (for example, minimize key strokes, maximize defaults, use of templates, etc)
5Six or more of the above, and stated requirements for end-user efficiency are strong enough to require us of special tools and processes to demonstrate that the objectives have been achieved.

TCF04: Complex Internal Processing

Complex processing describes the degree to which processing logic will influence the development of the application

The following components are present:

  • Sensitive control (for example, special audit processing) and/or application specific security processing
  • Extensive logical processing
  • Extensive mathematical processing
  • Much exception processing resulting in incomplete transactions that must be processed again (for example, incomplete ATM transactions caused by hardware/software failure interruption, missing data values, or failed validations)
  • Complex processing to handle multiple input/output possibilities (for example, multi-media or device independence)
ValueDescription
0None of the above
1Any one of the above
2Any two of the above
3Any three of the above
4Any four of the above
5All five of the above

TCF05: Code must be re-usable
Reusability describes the degree to which the application and the code in the application have been specifically designed, developed, and supported to be usable in other applications
ValueDescription
0No reusable code
1Reusable code is used within the application
2Less than 10% of the application can be extracted for use in another project
3Ten percent (10%) or more of the application can be extracted for use in another project.
4The application was specifically packaged and/or documented to ease re-use, and the application is customized by the user at a source code level
5The application was specifically packaged and/or documented to ease re-use, and the application is customized for use by means of user parameter maintenance

TCF06: Easy to install
Installation ease describes the degree to which conversion from previous environments influenced the development of the application. Conversion and installation ease are characteristics of the application. A conversion and installation plan and/or conversion tools were provided and tested during the system test phase.
ValueDescription
0No special considerations were stated by the user, and no special setup is required for installation. ASP model
1No special considerations were stated by the user but special setup is required for installation.
2Conversion and installation requirements were stated by the user, and conversion and installation guides were provided and tested. The impact of conversion on the project is not considered to be important
3Conversion and installation requirements were stated by the user, and conversion and installation guides were provided and tested. The impact of conversion on the project is considered to be important
4In addition to 2 above, automated conversion and installation tools were provided and tested
5In addition to 3 above, automated conversion and installation tools were provided and tested

TCF07: Easy to use
Easy To Use describes the degree to which the application attends to operational aspects, such as start-up, back-up, and recovery processes. Operational ease is a characteristic of the application. The application minimizes the need for manual activities, such as tape mounts, paper handling, and direct on-location manual intervention.
ValueDescription
0No special operational considerations other than the normal back-up procedures were stated by the user.
1-4

One, some, or all of the following items apply to the application. Select all that apply. Each item has a point value of one, except as noted otherwise

  • Effective start-up, back-up, and recovery processes were provided, but operator intervention is required
  • Effective start-up, back-up, and recovery processes were provided, and no operator intervention is required (count as two items)
  • The application minimizes the need for changing backup media
  • The application minimizes the need for paper handling (don't count if your application contains no paper handling)
5The application is designed for unattended operation. Unattended operation means no operator intervention is required to operate the system other than to start up or shut down the application. Automatic error recovery is a feature of the application.

TCF08: Portable
Portability describes the degree to which the application has been developed for multiple locations and user organizations. The application has been specifically designed, developed, and supported to be installed at multiple sites for multiple organizations
ValueDescription
0User requirements do not require considering the needs of more than one user/installation site
1Needs of multiple sites were considered in the design, and the application is designed to operate only under identical hardware and software environments
2Needs of multiple sites were considered in the design, and the application is designed to operate only under similar hardware and/or software environments
3Needs of multiple sites were considered in the design, and the application is designed to operate under different hardware and/or software environments
4Documentation and support plan are provided and tested to support the application at multiple sites and the application is as described by 1 or 2
5Documentation and support plan are provided and tested to support the application at multiple sites and the application is described by 3

TCF09: Easy to Change

Easy to Change describes the degree to which the application has been developed for easy modification of processing logic or data structure. The following characteristics can apply for the application:

  • Flexible query and report facility is provided that can handle simple requests. For example, and/or logic applied to only one internal logical file
  • Flexible query and report facility is provided that can handle request of average complexity, for example, and/or logic applied to more than one internal logical file (count as 2 items)
  • Flexible query and report facility is provided that can handle complex request, for example, for example, and/or logic combinations on one or more internal logical files (count as 3 items)
  • Business control data is kept in tables that are maintained by the user with online interactive processes, but changes take effect only on the next business day
  • Business control data is kept in tables that are maintained by the user with online interactive processes, and the changes take effect immediately (count as 2 items)
ValueDescription
0None of the above
1A total of one item from above
2A total of two items from above
3A total of three items from above
4A total of four items from above
5A total of five items from above

TCF10: Concurrent
Concurrent describes the software's ability to work with simultaneous users.
ValueDescription
0The application runs on a single device used by a single users. Your typical desktop application
1The application can be used by up to 3 users at the same time
2The application can be used by up to 3 users at the same time and record locking is stated in the user requirements
3The application can be used by more than 3 users at the same time.
4The application can be used by more than 3 users at the same time and record locking is stated in the user requirements
5The application must be able to support an unlimited number of users.

TCF11: Include special security features

Special Security Features include all of the technology the application requires to protect the information it houses. Special Security Features include the following:

  • User authentication required to access all or part of the application
  • Multi-factor authentication required to access all or part of the application (count as 2 items)
  • Application uses encrypted channels to move information between components (SSL, SSH, etc)
  • Application manages its own keys
  • Sensitive data is stored in encrypted forms only
ValueDescription
0None of the above items
1One of the above items
2Two of the above items
3Three of the above items
4Four of the above items
5Five or more of the above items

TCF12: Provide direct access for third parties

The application can be used by people or organizations besides the developing organization and the owner of the application. Third party access can include the following characteristics:

  • The application is available to the general public over the internet
  • The application maintains and manages third party integrations.
  • The application is a consumer of third party services (count one for each third party API consumed).
  • The application publishes and documents a public API
  • The application must directly manipulate third party software without a published API. (count as two items)
ValueDescription
0None of the above items
1One of the above items
2Two of the above items
3Three of the above items
4Four of the above items
5Five or more of the above items

TCF13: Special user training facilities are required

User training facilities are added to the project or required during delivery. Score one point for each of the following User Training included in the application except where noted:

  • Context sensitive help files
  • Printed user documentation
  • Automated software tutorials
  • User certification required (score 2 points)
  • Instructor led training courses
ValueDescription
0None of the above items
1One of the above items
2Two of the above items
3Three of the above items
4Four of the above items
5Five or more of the above items

Environmental Complexity Factors

ECF01: Familiar with Rational Unified Process
Familiar with RUP is a measure of how much experience your team has using your Software Lifecycle Management system. I base this on the average number of projects performed by all team members using your formalized process. I only include projects greater than 3 months in length and using at least 3 developers.
ValueDescription
0Less than 1 project.
1One project
2Two projects
3Three projects
4Four projects
5Five or more projects

ECF02: Application experience
Application experience is a measure of how familiar your team is with the project domain. I use the average number of projects built for the particular industry or discipline the application serves. For example, ecommerce applications or applications for the health care industry. I give a little room for cross industry applications of a similar structure. Again, I only count projects larger than 3 months in length with at least 3 developers. I also count multiple versions of the same project individually.
ValueDescription
0Less than 1 project.
1One project
2Two projects
3Three projects
4Four projects
5Five or more projects

ECF03: Object Oriented Experience
Object Oriented Experience is a measure of how familiar your team is with OO concepts. I base this on the average number of projects performed by all team members using object oriented languages (including some object oriented javascript work and object oriented ColdFusion). I only include projects greater than 3 months in length and using at least 3 developers.
ValueDescription
0Less than 1 project.
1One project
2Two projects
3Three projects
4Four projects
5Five or more projects

ECF04: Lead Analyst Capability
Lead Analyst Capability is a measure of your project leads experience. This one can be a little tough because some subjective judgments can certainly come into play here. As a rule of thumb, I just count the number of years the person has been employed as a project lead. I then cap the figure based on the maximum level for the individual's score under ECF01, ECF02 and ECF03. Since there is a tendency to over-value this attribute, I never round up on years of experience.
ValueDescription
0Less than 1 year of experience.
1One year of experience
2Two years of experience
3Three years of experience
4Four years of experience
5Five or more years of experience

ECF05: Motivation
Motivation is a measure of how eager a team is to be successful on the project. This is an extremely difficult measurement to take. As a rule of thumb, I start with each team member's willingness to work an amount of overtime for at least part of the project. If possible, I look at past overtime records as a benchmark. One technique I use for this measure is to poll the team. I ask them to (anonymously) estimate the level of overtime they think the team is capable of the week prior to the rollout of each iteration milestone. I rank each team member and average the results if possible. I reverse the 4 and 5 positions because I find that at that level of overtime, productivity actually falls. I also add one point to each member's score that has a family. I move anybody that is interviewing or that routinely puts in less than 40 hours a week to zero and contractors never score greater than 3. I generally base this on the team members work week and not necessarily the amount of work they put in on the project.
ValueDescription
0No overtime
110% overtime (44 hour work week)
220% overtime (48 hour work week)
330% overtime (52 hour work week)
450% overtime (60 hour work week)
540% overtime (56 hour work week)

ECF06: Stable requirements

Stable requirements is a measure of how much change can be expected to be introduced during the development process. Control of the requirements process includes the following items:

  • Formal requirements document exists and has been signed off on by team members and end user.
  • Formalized change management system is in use.
  • Weekly end user reviews of progress are done
  • The application already exists and this project is porting to a different platform or a subsequent version.
  • A non-working prototype exists.
ValueDescription
0Requirements document does not exist
1One item from above
2Two items from above
3Three items from above
4Four items from above
5Five items from above

ECF07: Part-time workers

Part-time workers measure the amount of the team that is not dedicated full time to the project. This is not to be construed to mean the team member's employment status.

ValueDescription
0Entire team is on the project full time
110% of the team is working on more than one project
220% of the team is working on more than one project
330% of the team is working on more than one project
440% of the team is working on more than one project
550% or more of the team is working on more than one project

ECF08: Difficult programming language

Difficult programming language refers to the level of complexity introduced by the software language being used. I usually add one point to the most complex language if multiple languages are being used.

ValueDescription
0Template driven development - minimal coding
1Scripting based languages (ColdFusion, ASP, PHP, etc)
2Scripting based languages plus comprehensive framework
3Object Oriented languages (.NET, java)
44th generation languages (C, Pascal)
5Embedded systems, assembly language.


Part 1: What Method to Use
Part 2: Nuts and Bolts
Part 3: Working with the Factors

Monday, June 06, 2005

Cfbreak out of a component

Just on a lark, I tried using cfbreak to terminate a particular cfc from executing with the idea that the calling code would continue processing.

What do you know, it works. This can come in handy when you are debugging a lengthy cfc method. The cfc I'm working with doesn't return anything, so maybe it's not that handy if your calling code relies on a return value.

Interesting, none the less.

Sunday, June 05, 2005

Sprint vs. Verizon Wireless

Well, my contract was up with Sprint and it was time to re-evaluate my cell phone situation.

The biggest reason for the switch to Verizon was the lack of coverage we had with Sprint. It seemed that almost anywhere we went that wasn't in a major metropolitan area had little or no coverage. After a few years, this gets really annoying.

So I took to opportunity to move to Verizon Wireless. Their coverage is much better for us and many of our friends and relatives have gravitated to Verizon so many of our calls won't use our minutes.

We selected our new calling plan and phones on the web, which was a pretty good experience. I tend to be salesperson averse, so I like to shop online when possible.

I was disappointed that no phones where available that used flash, but neither did my sprint phone. It's just something I would have liked exploring. Maybe next time.

I didn't bother to get web access or text messaging this time either. Neither of those features have lived up to my expectations. Way too slow and cumbersome.

Lets face it. In general, text messaging is just stupid. You have a phone IN YOUR FRICKEN HAND! Leave a message. The only real use I see for text messaging is to be able to receive short automated messages. Cool for monitoring servers or stock prices, but just too geeky to pay for.

Here's where the story gets interesting. Once I activated the phone, I placed a call. No problem, except that the person receiving the call had a strange name pop up on their caller id. Curious. So I had that person try to call me back. What do you know, but they got that other person's voice mail. When I checked my voice mail, I actually got this other persons mailbox. It seemed like it was an active mailbox. There were messages in there, some new ones, asking questions about this guys products. Obviously a business phone.

I quickly called Verizon to look into the problem. 10 minutes into their automated system and I find out I can't troubleshoot a phone if I'm calling on that phone. Doh!

I called back on another phone and went through the process again. I finally got through to a person, but they were in New Jersey. They couldn't access my records, so they had to transfer me to someone in Maryland. No big deal, except that each time I called back I would get routed to New Jersey by their automated system. I then had to explain the situation again and get forwarded to somebody in Maryland.

Once I was on the phone with a customer support person in the right state, we started reprogramming the phone to correct the problem. Hmm... didn't work. Next we had to take the phone apart and read off a bunch of numbers so the cs rep could confirm them in the system. Everything looked correct. After trying this 3 more times with no effect, the rep gave up and suggested I go to my local Verizon Wireless store to have them flash the operating in the phone.

Once I got to the store, we went through the process of taking the phone apart, verifying the numbers and reprogramming and activating a few times. When I told the technicians at the store (who seemed very knowledgeable) that customer support suggested that the os needed to be reinstalled, they all laughed. "What are they smoking up there" was the general feeling.

To prove a point, the technician (Joe) put my phone number on a completely different phone. Same problem. They let me use a phone in the store to call customer service again. After getting re-routed back to MD from NJ, we did the "take the phone apart" thing again and the "reprogram the phone" thing again with no effect. We also reinitialized the voicemail box. No effect. The cs rep said they would now like to transfer me to technical support (I thought that was who I was talking with, but there must be another level). He informed me the current wait for tech support was about 25 minutes. I was in the middle of the showroom floor doing this. I had already been there for over 2 hours. I decided to try again from home after I had run a few errands.

Back on the phone with customer service at home. I've already done the NJ to MD thing again and told my story. I suggested that we just change the number to a new phone. After a little coaxing and a discussion about how that will affect my invoice and such, we changed the phone number. A little more testing and yes, it worked. I was able to call out and receive calls.

Whew, that was a pain, but at least it's done.

I go to use my phone the next day and I get James Earl Jones telling me that my call can't be completed because of a "conflict in serial numbers". Crap. Call somebody else, maybe it was the person I was calling that had a problem. Same message. Double crap. Ok, try to call my phone from another phone. "Phone not in service". GAHH!

Back on the phone with customer service. Apparently, they had to change my phone number again because the new number I was assigned belonged to somebody else. Reprogram the phone. Now I have my third phone number on this phone. Seems to work again.

Let me go make a quick call to see if it is still working... Cool. Still working.

I can't wait to see what my bill looks like.

I have to say that everyone I spoke to was very friendly and gave it a good shot. I think the technicians in the store were probably the most knowledgeable. It might actually sway me into going to the store to buy the phone the next time.

One thing I have noticed, that I'm not too happy about is difference in sound quality between the Sprint and Verizon Wireless networks. When you can get a good signal from Sprint, the sound is crystal clear. With Verizon, I seem to get more distortion and changing of sound quality during a call. Its like the way streaming audio will degrade when your connection can't keep up with the streaming rate. I don't think you would notice the difference unless you move from one system to the other.

I hope Verizon works out. I feel like I've put in a lot of work getting the thing to work.

I wonder if this post is worthy of the BlivitLog?

Software Estimation (Part 2) - Nuts and Bolts

I think I should preface this post with the notion that what were trying to do here is come up with a very rough, gross estimate of a project very early in its life-cycle. The most elaborate software estimation process will have an accuracy of -50% to +75%, so we're really just trying to get in the ballpark. We don't want to spend thousands of dollars on the early estimating process especially if this is being done before an agreement or contract has been signed.

Use Case Point counting is similar to the Function Point counting technique in that you basically:

  1. Count certain key aspects of your collected requirements.
  2. Answer a series of questions about the nature of your project and your development environment.
  3. Process the questions based on a pre-defined formula to come up with an adjustment figure (ie., your fudge factor)
  4. Multiply your raw count by your fudge factor to arrive at an adjusted size figure.
  5. multiply the resulting figure by a number of man-hours/point to arrive at your expected level of effort.
Counting

Here is a simple use case diagram that I'm going to use as an example. (UML 2 Primer)

(click to enlarge)


Actors

The first thing we count are the actors of our system and assign them a rough difficulty.

Actor Weights
DifficultyRuleUse Case Points
EasyA machine with a programmable API 1
MediumA user with a command line interface or a system without a published API 2
DifficultA user with a GUI 3


In my example, we have 1 easy and 1 difficult actor. Doing the math, we have 1 easy actor x 1 point + 1 difficult actor x 3 points = 4 Raw Actor Points (RAP).

Use Cases (good book on Use Cases)
Next, we do the same sort of thing for the Use Cases we have identified in our project. In this case, the weights for easy, medium and complex are 5, 10 and 15 points respectively. In order to determine the complexity, we count (or predict) the number of scenarios the Use Case will have. Each use case will almost always have at least 2 scenarios, your basic success scenario (where everything goes right) and at least one alternate scenario that deals with errors. You can certainly have many more that deal with alternate logic paths.

Use Case Weights
DifficultyRuleUse Case Points
Easy3 or fewer execution paths or scenarios 5
Medium4 to 8 execution paths or scenarios10
DifficultMore than 8 execution paths or scenarios 15

In my example, I've assigned medium difficulty to "View Summary Data", since I expect this Use Case to have several different paths based on search criteria. The rest I've assigned to the "Easy" category since they are relatively simple.

Again, doing the math, I have 4 easy Use Cases x 5 points + 1 medium Use Case x 10 point for 30 Raw Use Case Points (RUP, not to be confused with the Rational Unified Process)

Calculating the Fudge Factor
This is where we adjust our raw total of use case points to account for characteristics that are specific to our system under design (Technical Complexity Factors) as well as characteristics about the environment that the project will be built in (Environmental Complexity Factors).

Technical Complexity Factors

For each of the 13 technical complexity factors, you are going to assign a value between 0 and 5. Zero indicating that a factor does not exist in your project and a five indicating that the factor has the maximum importance or impact on your system. The weights are pre-defined by the estimating method. I don't really fool with those. I think you should either wait until there is some industry movement to modify those figures, or wait until you have enough historical data collected to prove them wrong. Changing the Value column gives me enough impact on the factors for my taste.

MetricDescriptionWeightValueTCF
TCF01Distributed System2.005.0010.00
TCF02Response or throughput performance objectives1.004.004.00
TCF03End user efficiency (online)1.002.002.00
TCF04Complex internal processing1.004.004.00
TCF05Code must be re-usable1.002.002.00
TCF06Easy to install0.505.002.50
TCF07Easy to use 0.503.001.50
TCF08Portable 2.003.006.00
TCF09Easy to change 1.003.003.00
TCF010Concurrent 1.002.002.00
TCF011Include special security features 1.002.002.00
TCF012Provide direct access for third parties 1.005.005.00
TCF013Special user training facilities are required 1.003.003.00

Unadjusted TCF Value (UTV)

Total:47.00

Adding up all the TCF lines gives us an Unadjusted TCF Value (UTV). To arrive at the ending Total Complexity Factor, we apply the following formula:

TCF = TC + (UTV * TWF)
Where
TCF Constant (TC) = 0.60
TCF Weighting Factor (TWF) = 0.01

Applying the formula to our example, we have

TCF = 0.60 + (47.00 * 0.01) = 1.07

Environmental Complexity Factors
The Environmental Complexity Factors are generated the same way as the Technical Complexity Factor is calculated. You just use a different set attributes and constants.

MetricDescriptionWeightValueTCF
ECF01Familiar with Rational Unified Process1.504.006.00
ECF02Application experience0.503.001.50
ECF03Object-oriented experience1.004.004.00
ECF04Lead analyst capability0.504.002.00
ECF05Motivation1.003.003.00
ECF06Stable requirements2.004.008.00
ECF07Part-time workers-1.000.000.00
ECF08Difficult programming language-1.003.00-3.00

Unadjusted ECF Value (UEV)

Total:21.50

Notice that ECF01 references a specific software life-cycle model. A lot of the work for this method has been done by the people at Rational/IBM, which explains the item. You could probably substitute your life-cycle process here with similar results as long as the organization you are doing the work for has a mature process. Most of the organizations I've done work for rank really low in this area. A lot of CF shops seem to add management processes as an after thought with little regard for formal life-cycle management.

While I'm on the subject, it seems to me that the cf community spends a huge amount of effort building software frameworks (Fusebox, Mach-ii, Model-glue, etc.) While this is certainly worthwhile, life-cycle processes seem to be almost ignored by the community. About the only work I've seen in the area is FLiP, and it only goes so far. Maybe it's one of those things that everybody is doing that nobody feels is interesting enough to talk about on a regular basis. I get the impression that life-cycle management is handled using the "back of a napkin" or "I do that in my head" approach. I seriously hope that as more cf shops mature, that this changes. (end of rant).

Adding up all the ECF lines gives us an Unadjusted EF Value (UEV). To arrive at the ending Environmental Complexity Factor, we apply the following formula:

ECF = EC + (UEV * EWF)
Where
ECF Constant (TC) = 1.40
ECF Weighting Factor (TWF) = -0.03

Applying the formula to our example, we have

ECF = 1.40 + (21.50 * -0.03) = 0.755

Finishing Up

We now have all the numbers we need to calculate our total use case points for the project.

Here's the formula:

Use Case Points (UCP) = (RAP+ RUP) * TCF * ECF

Applying the formula to our example and rounding, we get:
UCP = (4 + 30) * 1.07 * 0.755 = 27

Hours/Use Case Point
Now that we have an estimate of size based on use case points, we can try to convert it to an estimate of effort. The original work by Karner suggested a good starting point would be to use 20 hours per use case point. Work since then has suggested that the figure can fall anywhere between 10 and 30 hours per point. My personal experience puts the number between 12 and 15 hours per point. This unfortunately is where you need some project history to calibrate the process for your specific development and estimating processes.

Here's an excel spreadsheet to help you crunch the numbers.

Coming Up Next: Working with the factors

Part 1: What Method to Use
Part 2: Nuts and Bolts
Part 3: Working with the Factors

Thursday, June 02, 2005

Using Query Analyzer to manipulate data

Using Enterprise Manager to view and edit data directly while developing cf apps seems to be a common task. This can cause trouble in a group development environment. Enterprise Manager keeps a connection open while you display the contents of a table. This uses both server and network resources, while you may be off looking at code elsewhere. You can even lock a table so it can't be used by others or your application while you have it open. It's no fun coming back from a late lunch to 3 angry cube-mates who have had to spend their time defacing your picture in the company directory while they waited for you to unlock the "user" table.

There actually is a better way. Use Query Analyzer. You can right click on a table in the object browser and click "Open". The table opens and you can edit the information directly much like you can in enterprise manager without all the network and server traffic.

Plus, you can easily leave it open while you work in another window.