October 10th, 2009, 4:40 pm
QuoteOriginally posted by: i386It's hard to assert whether some lib is over-engineered by doing code statistics without making analysis on what the lib is used for.Many libs are simple, blackbox-like and independent because they solve independent problems -- however for more complex or flexible problems you have to adopt those large, self-contained lib systems that often bear its 'internal logic or philosophy' and you have to learn it (not easy).I would assess the engineering quality of such libs from a practical point, which is how flexible you can use the concepts/models provided in the lib to solve problems I am encountered. I personally do not give much credit to classes and member functions having lengthy names (even like a sentence) -- which is often an indication of them being too specialised or trying to do too much in one go.offcourse code statistics is not the only way to know if a library is simple to use or not, but metrics like "Afferent Coupling", "Efferent Coupling",LCOM,LCOMHS,"inheritance depth",Level,abstractness can give an idea if the library is low coupled, with high cohesion and if easily plugable or not.the previous metrics are focused in design and other metrics can be focused in implementation like functions having lengthy names and such metric can't give any indicator of design.and you are right for complex or flexible problems we have to adopt large, self-contained lib systems, but thoses libs must be well designed and low coupled, with high cohesion to avoid a complex design and implementation and some design metrics can help to detect high coupling and low cohesion.