Summary
Software Industry, an industry which sells logical things. The advantage of buying a software is automation, better analyzing of business, thus making life easier. As we are into logical selling, it makes difficult to come with a costing to an accurate level. Customer can see the benefits of buying only when he uses the software for quiet a period of time and then says 'Aah its worth of it'. When customer sees accountants performing better, invoices been made with least errors etc., customer gets convinced. So to convince the customer at the primary stage is really a big nut to crack. If you give more quote you lose the project, if you give less quote you will end up doing social service to clients and probably also loss. In this tutorial, we will discuss mainly "Function Point" from practical point of view.
Acronyms and Abbreviation
Through out the tutorial i have been using lot of acronyms. Knowing them before hand will make your comfortable while reading.
- FP : Function Point
- ILF : Internal Logical File.
- EIF : External Interface file
- EI : External Inputs
- EO : External Outputs
- EQ : External Enquiries
- RET : Record Element Type
- DET : Data Element Type
- FTR : File Type Reference
- GSC : General System Characteristic
- VAF : Value Added Factor
- LOC : Line of code
Scope
This article will give a practical approach to using "Function point". Function point is a very vast topic and it will be complete injustice to say that this tutorial will accommodate everything. So at the end i have put links to different websites which you can review for details further. This article will deal with how function point calculation is done. So just make your mathematician head out while reading this tutorial. The religious war of how to evaluate a software is from years. So if i say function point is perfect way my email box will be full with contradiction. Software cost evaluation techniques (LOC, Function point etc) have there own advantage and disadvantage. So this tutorial will deal with only function point calculation and a small customer screen sample for getting a feel of function point. When you are going through my article you will do see some math's equations coming across. You may also wonder there is no way software can be evaluated using formula's.
Theory
If said to analyze cost of any physical product, example a simple pen, I can pin point to a good extent the cap's cost, the ink cost etc., and come out with a rough estimation. Even the customer is equally convinced as he can see those physical products. Software industry also has practices of evaluating cost, the following are 2 major ones:
- Lines of code.
- Function points (FP).
I personally do not believe in lines of code. In this software world of reusability, 1000 lines of code can become 200 lines, thus leading to complete misjudgment. Just wondering during design phase how can you know the total lines of code. For some reason, I feel Lines of Code favor the software company more than its clients. Just imagine i want to make simple window based customer GUI in C language and the same in Visual basic. The Lines of code will differ a lot and hence the costing. In short lines of code are programming language dependent." Lines of code would have been fair if there was one programming language in the world". Just my 2 cents Programmers output is not Quantity (Lines of code) but the logic what he has written. If you want to evaluate a house cost do we ever measure the bricks and nails. Well i stop here talking about LOC or else the whole tutorial will look like i am against LOC.
But with FP, I see the quote coming out fair for both customer as well as the software company and is language independent to a very good extent Note not completely independent). I was very convinced with FP in one of my clients' place where the client handed us a huge book of use case and said to come out with estimation. We where a team of 4 people. We divided in team of 2 and said let's come out with some quote and then tally our results. After 2 days continuously counting every element, we saw both teams coming to the same value of "Function Points", that means consistency even after different people sitting on it.
Definition of Function Point and History
They are units of software measurement, like for distance we have kilometer.Theres a favorite saying - You can't control what you can't measure. Breaking the system into smaller systems, and analyzing them and coming out with cost for every unit. Finally, we total all the smaller units to come out with final total. Function points measure system from functionality perspective and are independent of technology.
Does not it sound cool? Dear customer, we are issuing a invoice of 1000 function points for these functionality.
Function Point Analysis was developed first by Allan J. Albrecht in the mid 1970s. It was an attempt to overcome difficulties associated with lines of code as a measure of software size, and to assist in developing a mechanism to predict effort associated with software development. The method was first published in 1979, then later in 1983 . In 1984 Albrecht refined the method and since 1986, when the International Function Point User Group (IFPUG) was set up, several versions of the Function Point Counting Practices Manual have been coming out.For best practicec and live example
Sections of Function Point
There are basic 4 section. All the below four section of function point can either reside inside application or outside application boundary.
Data section: Data section is further divided into:
|
Transaction Section: Transaction section uses data section, that is, it maintains information of ILF and EIF. Excuse me for the short acronyms I am using everywhere, like the ILF and EIF there's acronym list at top for everything. All the down 3 components adds,modifies,deletes,retrieves or process information contained in ILF and EIF so are termed as Transaction Section.
|
Sub sections: These are subsections which can either be a subset of either transaction section or data section.
|
General System Characteristic Section (GSC): This section is the most important section. All the above 3 sections are counting sections. They relate only to application. But there are other things also to be considered while making a software, like are you going to make it an N-Tier application, what's the performance level the user is expecting etc. These are external factors which affect the software a lot and also the cost of it. When you submit a function point to a client, he normally will skip everything and come to GSC first. GSC gives us something called as VAF (Value Added Factor). There are 14 points considered to come out with VAF (Value Added factor).
All the GSC have ratings from 0 to 5. So, the VAF formulae is something like this: VAF = 0.65 + ((sum of all GSC factor)/100). |
Scope document
Function point evaluation depends on how much functionality your system provides.So you have to know the functionality before you start using Function point. In this tutorial we will be evaluating the customer GUI. So i will just scope what the customer GUI is all about.
Following is the scope of the customer screen :-
- Customer screen will be as shown below.
- After putting the customer code and Customer name. They will be verified credit card check.
- Credit Card check is a external system.
- Every Customer can have multiple addresses.
- Customer will have add, update functionality
Let's Start Counting
As said, this is a practical guide to FP and to make Quick start. This section will discuss the practical way of counting the FP and coming out with a Man/Days on a project.
Steps for coming out with a FP |
|
Now we know our steps, we can start counting. But hang in, here're all our charts which we will refer during counting. These chart are ranking charts and decide the complexity of the section.
EI Rating Table | |||
| Data Elements | ||
FTR | 1 to 4 | 5-15 | >15 |
Less than 2 | 3 | 3 | 4 |
2 | 3 | 4 | 6 |
>2 | 4 | 6 | 6 |
This table says that in any EI (External Input), if your DET count (Data Element) and FTR (File Type Reference) exceed these limits, then this should be the FP (Function Point). Example, if your DET (data element) exceeds >15 and FTR (File Type Reference) is greater than 2, then the Function Point count is 6. The rest down tables also show the same things. These tables will be there before us when we are doing function point count. The best is put these values in Excel with formulae so that you have to only put quantity in the appropriate section and you get the final value.
EO Rating Table | |||
| Data Elements | ||
FTR | 1 to 5 | 6-19 | >19 |
<> | 4 | 4 | 5 |
2 or 3 | 4 | 5 | 7 |
>3 | 5 | 7 | 7 |
EQ Rating Table | |||
| Data Elements | ||
FTR | 1 to 5 | 6-19 | >19 |
<> | 3 | 3 | 4 |
2 or 3 | 3 | 4 | 6 |
>3 | 4 | 6 | 6 |
ILF Rating Table | |||
| Data Elements | ||
RET | 1 to 19 | 20-50 | 51 or more |
1 RET | 7 | 7 | 10 |
2 to 5 | 7 | 10 | 15 |
>6 | 10 | 15 | 15 |
EIF Rating Table | |||
| Data Elements | ||
RET | 1 to 19 | 20-50 | 51 or more |
1 RET | 5 | 5 | 7 |
2 to 5 | 5 | 7 | 10 |
>6 | 7 | 10 | 10 |
The following table says what we have to see: for every transaction which subsection is eligible.If you see the table below EI will have FTR and DETs,So while counting we will have to count in that way.
Section | RETs | FTRs | DETs |
EI | | 1 | 1 |
EO | | 1 | 1 |
EQ | | 1 | 1 |
EIF | 1 | | 1 |
ILF | 1 | | 1 |
Simple Customer Project
This is a simple project requirement where we are supposed only to do the customer form and with address details of it. Following is the screen.
There are 2 ILFs in the above screen:
- The customer ILF.
- The Customer Address ILF.
- There are no EIFs in the above form.
ILF Customer | ||
Description | Number of DET | Number of RET |
There are total 10 DETs, all add and update buttons, even the credit check button, the address list box, check box active, all text boxes. There is only one RET, the customer addresses. Note i have not included the credit check as RET as they are not Sub-elements(Child elements of Customer ILF). | 10 | 1 |
So according to the above ILF ranking table | Total function | 7 |
ILF Customer addresses | ||
Description | Number of DET | Number of RET |
There are total 3 DETs, all the column names in the list box, city name, street name and pin code. | 3 | 0 |
| Total FP | 7 |
EIF Credit card Information | ||
Description | Number of DET | Number of RET |
The credit card information referenced is EIF.Note this file is only referenced for credit card check. There's only one textbox credit card number and hence one DET is put in the side column. and RET 0.Looking at the above rating table the total FP is 5. | 1 | 0 |
| Total FP | 5 |
EI Customer | ||
Description | Number of DET | Number of FTR |
There are total 10 DETs, all add and update buttons, even the credit check button, the address list box, check box active, all text boxes. There are 2 FTRs, one is the address and the second is the credit card information. | 10 | 2 |
Referring ranking table above | Total Function | 4 |
While counting EI i have seen many people multiplying it by 3.That means we are going to do all CRUD functionality(ADD,UPDATE,DELETE).This is not fair as it just shows laziness of the Cost estimation team. Here the customer screen has add and update. I can say the 2 * 4 that's = 8 FP for this EI customer. But i adjust this factor in my buffer. If you start multiplying for every master screen like this it will be not fair for the customer. So make a genuine count at the first half and later in buffer add the extra FPs.So over here i count this as 1 EI and not multiply by any factor.
EO Customer |
No EO for this screen. As Customer system is not sending any information to external system which will add or update the external system. |
EQ Customer |
No EQ for this screen.At this moment there is no reports section here.Please note the display of cutomer addresses is not counted as EQ. |
So now, let's add the total function point got from above tables :
Section Name | Function Point Counted |
ILF Customer | 7 |
ILF Customer Address | 7 |
EIF credit card information | 5 |
EI Customer | 5 |
Total Unadjusted Function Points | 24 |
So all function point comes to 24.Please note i have said this as Unadjusted function as we have not accounted other variance factor of project (Programmers leaving job, Language we will use, What architecture etc etc).
In order to make it adjusted function point, we have to calculate and tabulate the GSC and come out with the VAF.
GSC | Value(0-5) |
Data communications | 1 |
Distributed data processing | 1 |
Performance | 4 |
Heavily used configuration | 0 |
Transaction rate | 1 |
On-Line data entry | 0 |
End-user efficiency | 4 |
On-Line update | 0 |
Complex processing | 0 |
Reusability | 3 |
Installation ease | 4 |
Operational ease | 4 |
Multiple sites | 0 |
Facilitate change | 0 |
Total | 22 |
So using formulae:
VAF = 0.65 + ((sum of all GSC factor)/100). = 0.65 + (22/100) = 0.87.
This factor affects the whole FP like anything, be very particular with this factor. So now, calculating the
adjusted FP = VAF * Total unadjusted
FP = 0.87 * 24 = 20.88 = rounded to 21 FP.
Now we know that the complete FP for the customer GUI is 21 FP. Now calculating the efficiency factor, we say that we will complete 3 FP per day, that is 7 working days. So, the whole customer GUI is of 7 working days (Note do not consider Saturday and Sundays in this). I know upper manager people will say make it 7 FP per day and over load the programmer. Thats why programmer works at night.
Other Practical Factors
I hope the above example has made clear how to use function point. But if the software industry was straightforward, FP would be enough. How much ever i say software costing is still a very grey area. Function point can just help you in getting things organized and bring it to almost close figure. Many things while implementing and counting function point will be common sense (which is not so common) . Experience is the only thing that comes to rescue in software costing and evaluation.
But also have these practical things in mind:
- To the total FP, add a buffer FP in case the customer will say any changes or extra features. As, during the negotiation period, definitely the customer will either bring down the cost so that you are at safe side while negotiating.
- Well this worked for me lot. Look at the customer how much can he spend which will make things clear. And then just judge yourself, will this cost fit in or will it go for rejection.
- Second, how critical is the software for him, if the criticality is high and he cannot stay with out it, make the quote according to that. This is one of my friends' experience, he was a freelancer. He was once called to make a small cash maintenance program. It was one form and one report saying how much amount got today, and maintenance form. Well, one form, one report, he quoted it quiet less. He completed the project in one day and got the money on a week's time. But then, client called him after 2 days and told him: "Your this small program has saved my hell money and time. The amount what you quoted is nothing, I was ready to pay above it. He said never quote on the quantity basis or size, but how frequently we will use the software". I have seen billion dollar projects not used and small projects made by one person running the whole company automation.
- Is the client looking for maintenance point of view, which means the client can be permanent source of income, then quote in such a way that you get your share during maintenance. FP does not take into account maintenance. The best way to come out with maintenance cost is how much programmers you will require on the site after the product is launched plus your profit share.
- After evaluating his business sign a scope document with him saying that this is what we will do. Anything more than this will be charged. So customer is pretty aware of what's going on.
- Issue invoices regularly for changes and modifications. So that customer understands that there's cost factor associated to whatever changes he says.
The above points are useful to make plus or minus on the calculated FP.
No comments:
Post a Comment