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.
Through out the tutorial i have been using lot of acronyms. Knowing them before hand will make your comfortable while reading.
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.
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:
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.
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
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). |
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 :-
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 |
< 2 |
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 |
< 2 |
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 |
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.
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. For the customer address ILF there are no RET.Please note if this customer address screen is any where else and they have RET then make changes accordingly. |
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.
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:
The above points are useful to make plus or minus on the calculated FP.
Tutorial Links
Free Function point Software
"Do not quote too less that programmers work for over night, you lose the project or end doing social service, or loss. Do not quote too high that you lose the project. Be fair to yourself and your customer."