What is backfiring?

This method con­sists in deri­ving the num­ber of func­tion points accor­ding to the appli­ca­tion from its phy­si­cal size, mea­su­red in lines of code (LOC), using a cons­tant con­ver­sion fac­tor depen­ding on the pro­gram­ming lan­guage. The idea has much appeal, since the coun­ting of lines of code can be done through auto­ma­tic tools and con­se­quen­tly, the num­ber of func­tion points could be deri­ved imme­di­a­tely. For exam­ple, using a con­ver­sion fac­tor of 80 LOC / FP for Java and having an appli­ca­tion writ­ten in 8,000 lines of Java code, we get to 1,000 func­tion points for that same application.

Howe­ver, often, this tech­ni­que has con­si­de­ra­ble errors when con­fron­ted with a manual count of func­tion points of an appli­ca­tion. This is because it assu­mes a linear rela­ti­onship between func­ti­o­nal size (in func­tion points) and the phy­si­cal size of the pro­gram (in lines of code), which are dif­fe­rent con­cepts. Other aspect is that there is no con­sen­sus in the vari­ous orga­ni­za­ti­ons that publish these rela­ti­onships. The num­bers shown may dif­fer as much as 100%! 

When you have a deve­lo­ped sys­tem sce­na­rio with a mix of pro­gram­ming lan­gua­ges, the issue is more com­pli­ca­ted. The fol­lowing table pro­vi­des an exam­ple of these vari­a­ti­ons for the COBOL language.

Source

Con­ver­sion Fac­tor (COBOL)

Quan­ti­ta­tive Soft­ware Management

77 LOC/PF

Capers Jones

107 LOC/PF

David Con­sul­ting Group

177 LOC/PF

Some of the rea­sons for this wide vari­a­tion are: dif­fe­rent assump­ti­ons in defi­ning what is a line of code, and pro­jects data­ba­ses with many dif­fe­rent fea­tu­res. Hence the neces­sity to cali­brate the con­ver­sion fac­tor for the rea­lity of the pro­jects deve­lo­ped by the orga­ni­za­tion. Howe­ver, to make this adjust­ment, there must be a repre­sen­ta­tive sam­ple of pro­jects deve­lo­ped by the orga­ni­za­tion in a par­ti­cu­lar lan­guage and an expe­ri­en­ced and qua­li­fied pro­fes­si­o­nal to inter­pret the results and unders­tand the rea­sons for this pos­si­ble dis­tor­tion for this con­ver­sion fac­tor.

Due to these fac­tors, apply back­fi­ring to obtain the size in func­tion points from lines of code is a risky tech­ni­que and cha­rac­te­ri­zed by a large mar­gin of error. Hence, IFPUG high­lights in their FAQ, that it can even be used (with cau­tion) in legacy sys­tems, where a manual count is unwor­ka­ble in prac­tice and accu­racy is not a cri­ti­cal fac­tor. Some pro­fes­si­o­nals argue that back­fi­ring is a quick and cheap way to get the size in func­tion points of an orga­ni­za­tion appli­ca­ti­ons port­fo­lio. Others, argue that cheap comes out expen­sive: it is bet­ter to invest in a manual coun­ting of func­tion points and have reli­a­bi­lity of these data, with com­pen­sa­tion in a long term.
On the other hand, many models of soft­ware esti­ma­ting such as COCOMO II, use as pri­mary data their size in lines of code. In these cases, it is very often to do the oppo­site: get the num­ber of lines of code from the size in func­tion points. This is because in the early sta­ges of a soft­ware pro­ject, is easier to esti­mate or mea­sure its size in func­tion points than in lines of code. Even then, the above con­si­de­ra­ti­ons remain valid on back­fi­ring.

Why there are no tools for automatic function points counting of a system?

There are seve­ral soft­ware that from a pro­gram model or its source code, cal­cu­late its size in func­tion points. Howe­ver, com­pa­ri­sons between the result pro­du­ced by dif­fe­rent tools for the same sys­tem, fre­quen­tly have an unac­cep­ta­ble vari­a­tion. These num­bers, also often dif­fer gre­a­tly from a manual count.

The answer to this vari­a­tion is in how these tools cal­cu­late the num­ber of func­tion points. Some are based on files, scre­ens, reports and other ele­ments to derive a num­ber. Although there is often a direct rela­ti­onship between these objects and data func­ti­ons and tran­sac­ti­ons func­ti­ons of Func­tion Point Analy­sis (FPA), it must be remem­be­red that the tech­ni­que mea­su­res only the logi­cal func­ti­ons of the sys­tem. And these tools have dif­fi­cul­ties in dif­fe­ren­ti­a­ting logic func­ti­ons from phy­si­cal func­ti­ons. For exam­ple, not every file or table from a pro­gram file cor­res­ponds to an inter­nal logi­cal file or exter­nal inter­face file. Or even an ele­men­tary pro­cess can be imple­men­ted through mul­ti­ple scre­ens. To do the mea­su­re­ment in a cor­rect way, the soft­ware should have enough intel­li­gence to make this judg­ment. That is, this soft­ware would have to have the skill to read the pro­gram and inter­pret the user´s requi­re­ments. Howe­ver, there is no soft­ware with this arti­fi­cial intelligence.

Other tools are based on the back­fi­ring tech­ni­que, which is to derive the num­ber of func­tion points from the pro­gram num­ber of lines of code, based on a pre­vi­ous rela­ti­onship esta­blished between LOC and FP. Howe­ver, this is a tech­ni­que that has been widely cri­ti­ci­zed, and whose appli­ca­tion is restricted.

There are soft­ware to sup­port the pro­cess of coun­ting func­tion points that auto­mate a part of the pro­cess, but the deci­sion and analy­sis of that should be con­si­de­red, remains as the res­pon­si­bi­lity of a human user who enters the data, and not of the software.

Two functions, that are significantly different in the implementation effort, are scaled with the same number of function points. Doesn´t it take out much of the value of the Function Point Analysis (FPA)?

Func­tion Point mea­su­res the func­ti­o­nal size of the soft­ware and not the effort invol­ved in its design and cons­truc­tion. The higher the line­a­rity found between func­ti­o­nal size and this effort (pro­duc­ti­vity), higher the prac­ti­cal value of the mea­su­re­ment obtai­ned. The more this rela­ti­onship is linear, more easily other mea­su­res can be extra­po­la­ted from the func­ti­o­nal size, as the cost and effort, for example.

If it’s loo­ked at a micro level, in asses­sing the size of two spe­ci­fic tran­sac­ti­ons, cer­tainly the poten­tial for devi­a­tion in deri­ved pro­duc­ti­vity is high, but as we expand our sam­ple size, we rea­lize that the extreme situ­a­ti­ons com­pen­sate them­sel­ves and, on ave­rage, we can observe higher line­a­rity in the rela­ti­onship between effort and func­ti­o­nal size.

Let’s think about some alter­na­tive metrics to the func­tion point, eva­lu­a­ting the impact of these con­si­de­ra­ti­ons on these metrics, for exam­ple, Lines Of Code. In the Orga­ni­za­tion as a whole, or even in a spe­ci­fic pro­ject, there are also situ­a­ti­ons where the coun­ting of lines of code num­ber is not direc­tly rela­ted to the effort invol­ved in the spe­ci­fi­ca­tion, docu­men­ta­tion and tes­ting of the pro­ject. In other words, there are two pro­jects with dif­fe­rent qua­lity requi­re­ments or incre­a­sed demand in the spe­ci­fi­ca­tion, where in spite of one being more “com­plex” and require more effort of deve­lop­ment, the resul­ting soft­ware has fewer code lines than the other. Not to men­tion the other limi­ta­ti­ons inhe­rent in the LOC metric.

Is it possible to apply the Function Point Analysis (FPA) on tasks that are not organized as projects?

In gene­ral this kind of work invol­ves a very limi­ted scope. As a con­se­quence, it is dif­fi­cult to esta­blish a rela­ti­onship between the func­ti­o­nal size and others metrics such as effort, time and cost. Howe­ver it´s impor­tant to remem­ber that Func­tion Point Analy­sis (FPA) is not sim­ply a tool for gene­ra­ting esti­ma­tes, used in pro­ject plan­ning. The nature of the work invol­ved in this ques­tion is cha­rac­te­ri­zed not as a pro­ject, but as a con­ti­nu­ous operation.

Take as an exam­ple the sys­tems main­te­nance with esti­ma­ted effort up to 200 hours. Sepa­ra­tely, the sizing of orders that repre­sent the requi­re­ments (not always func­ti­o­nal) object main­te­nance may not have a linear rela­ti­onship with the effort invol­ved on its achi­e­ve­ment. Howe­ver, accoun­ting the uni­verse unders­tood by all these requests at a big­ger period of time, we can reach at dif­fe­rent conclusions.

For exam­ple, a given main­te­nance request did not involve the addi­tion, modi­fi­ca­tion or exclu­sion of a cer­tain sys­tem fea­tu­res. In this case, it is use­less to know that the main­te­nance func­ti­o­nal size will have no func­tion points. But the sys­tem that gives main­te­nance has a func­ti­o­nal size. You can moni­tor the amount of main­te­nance hours per func­tion points of this sys­tem. This trend helps to appre­ci­ate if it is time to replace this sys­tem with a new one.

Sup­pose that there is a pro­cess in this orga­ni­za­tion where, after the ser­vice order has been ser­ved by the main­te­nance team, the pro­duct goes through an appro­val pro­cess. The fea­ture set in the appro­val may be sca­led in terms of func­tion points. Likewise, the amount of iden­ti­fied defects in the pro­cess can be docu­men­ted. Moni­to­ring the inter­play of these two metrics — Func­tion Point and Defects — during a period of time can bring out pro­blems in the main­te­nance pro­cess. Based on this trend it is pos­si­ble to take acti­ons to reduce this relation.

What is the price of one function point ($/FP)?

The value of $/FP will vary in accor­dance with the work requi­red for the deli­very of soft­ware func­ti­o­na­lity, in accor­dance with the tech­ni­cal stan­dard and qua­lity requi­red by cus­to­mers, as well as the amount of deli­ve­ra­bles (arti­facts, docu­ments, models, etc) requi­red by the cus­to­mer. In short, everything that affects sig­ni­fi­can­tly the cost but has no direct rela­tion to the size mea­su­red by the Func­tion Point Analy­sis (FPA), is com­pu­ted on the func­tion point price.

Exam­ple 1: when you hire a com­pany just for coding and tes­ting a sys­tem, it is expec­ted that the func­tion point price is lower than if you hire the same firm to con­duct the entire lifecy­cle of a soft­ware deve­lop­ment, from requi­re­ments sur­vey through deve­lop­ment.

Exam­ple 2: the func­tion point price only for soft­ware deli­very is cer­tainly les­ser than the func­tion point price where, besi­des the soft­ware, must be deli­ve­red seve­ral papers (sub­pro­ducts) as : UML models, user’s manual, online help­desk, pro­toty­pes, test plans and cases, etc.

Exam­ple 3: Nowa­days the range of avai­la­ble tech­no­lo­gies for deve­lo­ping sys­tems is huge, and each one can direc­tly influ­ence in the pro­duc­ti­vity (either posi­ti­vely or nega­ti­vely) of the work to be done. Thus it is quite com­mon in the mar­ket the dif­fe­ren­ti­a­tion of $/FP accor­ding to the tech­no­lo­gi­cal plat­form (main­frame, web, client-server, etc) and/or pro­gram­ming lan­guage (COBOL, C, Java,. Net, etc).

Exam­ple 4: Func­tion Point Analy­sis, accor­ding to the IFPUG stan­dard, mea­su­res the main­te­nance igno­ring the size of the main­te­nance that the func­tion will suf­fer. Usu­ally the effort to main­tain a func­tion tends to be lower than to deve­lop it. Thus, there may be func­tion point price dif­fe­ren­ti­a­tion in impro­ve­ment pro­jects for new, modi­fied and dele­ted fea­tu­res.

In sum­mary, there is not a uni­que price for func­tion point and also there is no public upda­ted price list avai­la­ble, where the func­tion point price could be seen. Even because this infor­ma­tion is con­si­de­red pro­pri­e­tary or stra­te­gic for most orga­ni­za­ti­ons. But it is pos­si­ble to obtain price infor­ma­tion from govern­ment con­tracts through a rese­arch on the bid­dings that occur­red, in the bra­zi­lian offi­cial gazette or direc­tly with the govern­ment organ .

Another pos­si­bi­lity to get this price list is using orga­ni­za­ti­ons that main­tain the his­to­ri­cal basis of soft­ware pro­jects (e.g. ISBSGwww.isbsg.org) and do a deli­very rate indi­ca­tors con­ver­sion (H/PF) to price ($/FP). But even if we could get a list of $/FP value, the vari­a­tion in num­bers is so sig­ni­fi­cant that it is easy to find a range of values whose vari­a­tion between mini­mum and maxi­mum can be up to 10 times, for exam­ple $ 100/FP to $ 1.000/FP.

For a more rea­lis­tic price infor­ma­tion (or cost) of the FP is bet­ter to get this in the pro­jects alre­ady under­ta­ken. For pro­jects alre­ady com­ple­ted, a infor­ma­tion that is cer­tainly avai­la­ble is how much was paid or char­ged for each pro­ject and what acti­vi­ties were inclu­ded. If the pro­jects func­ti­o­nal size (FP) is not avai­la­ble, it could be got­ten through a mea­su­re­ment or an esti­mate, just revi­ewing the requi­re­ments. Having the price of the pro­ject and its size in func­tion points, could be got­ten the price per func­tion point ($/FP). Howe­ver it is likely that your orga­ni­za­tion under­ta­kes pro­jects of dif­fe­rent types. In this case, an analy­sis of the $/FP should be done for each cate­gory of pro­jects, cause a sin­gle price is har­dly repre­sen­ta­tive for pro­jects of dif­fe­rent types.

Follow

Get every new post on this blog delivered to your Inbox.

Join other followers: