小米性寒为什么养胃| 少许纤维灶是什么意思| 放飞自我是什么意思| 纳米是什么| 青光眼什么症状| l5s1椎间盘突出是什么意思| 牙结石用什么牙膏最好| 冉字五行属什么| 右肋骨下方是什么器官| 白内障有什么症状| 男人阴茎硬不起来是什么原因| 180是什么尺码| 喉软骨发育不良有什么症状| 可乐杀精是什么意思| 什么样的大象| 胃功能三项检查是什么| 壁虎的尾巴有什么用| 鸡蛋炒什么菜谱大全| 什么关系| 争先恐后是什么生肖| 反酸吃什么药| 梦见补的牙齿掉了是什么意思| 伏地魔是什么意思| 诸位是什么意思| 无量寿佛是什么意思| 荨麻疹抹什么药膏| 什么也别说| 护法是什么意思| 喉咙老是有白痰是什么原因| 心电图异常q波是什么意思| 白发越来越多是什么原因造成的| 什么是粒子植入治疗| 肾阳不足吃什么中成药| 易激惹是什么意思| april什么意思| opd是什么意思| 头晕挂什么科比较好| 腰间盘突出用什么药好| 徐才厚什么级别| 女性白细胞高是什么原因| 血管炎症状表现是什么| 开普拉多的都是什么人| 银手镯变黑是什么原因| 一什么故事| otc是什么药| 四肢厥逆是什么意思| 晚上睡不着觉是什么原因| 庆大霉素治疗鱼什么病| 尿蛋白吃什么药| 痛风都不能吃什么东西| ce是什么元素| 绿豆汤是什么颜色| 老人脚背肿是什么原因| 菜心是什么菜的心| 什么罗之恋| vc是什么| 5月10号是什么星座| 空调出的水是什么水| 脸上长斑是因为什么原因引起的| 访谈是什么意思| 焱加木念什么| 6.12是什么星座| 区委书记是什么级别| 痛风看什么科| 宝宝吃什么辅食最好| 抖阴是什么| 什么萌| 周莹是什么电视剧| 圣女果是什么水果| 什么是扁桃体| jeans是什么意思| 梦见烧火是什么意思| 怀孕一个月出血是什么情况| 脚老抽筋是什么原因| 胃火旺吃什么好| 珂字五行属什么| 爱的本质是什么| 肾结石有什么表现症状| 然五行属性是什么| 乳腺小叶增生是什么意思| 缺钾是什么原因引起| 什么是螨虫| 耳朵轮廓痒是什么原因| 什么的光华| 狗改不了吃屎是什么意思| 素手是什么意思| 海参吃了有什么好处| 买什么| 大雄宝殿供奉的是什么佛| 肝脾肿大是什么症状| 感冒后咳嗽吃什么药| 氨纶是什么面料| 缩影是什么意思| 现在什么餐饮最火| 冰丝纤维是什么面料| 肺纹理增粗是什么意思| 宋朝之前是什么朝代| 双手抱在胸前代表什么| 气胸是什么原因引起的| 视力矫正是什么意思| 办健康证在什么地方办| 吃什么都拉肚子怎么回事| 抵抗力差吃什么| 梨是什么季节的水果| 277是什么意思| 肚子疼吃什么消炎药| 干冰是什么| 伊拉克是什么人种| 大小脸是什么原因造成的| 梦见入室抢劫意味什么| 十月7号是什么星座| 双手发麻是什么病的前兆| 处女座上升星座是什么| 长孙皇后为什么叫观音婢| alaska是什么意思| 贫血吃什么食物| 精明是什么意思| 双侧颈部淋巴结可见是什么意思| 什么食物含蛋白高| 双一流大学是什么意思| 玉米什么季节成熟| strong什么意思| 什么人适合喝蛋白粉| 60岁男人喜欢什么样的女人| 教师节送老师什么好| 运动不出汗是什么原因| 拔牙后能吃什么| 耳朵热是什么原因| 7月24日是什么星座| 上梁不正下梁歪是什么意思| 什么的游泳| 甲炎是什么病| 吃什么可以修复子宫内膜| 高铁上不能带什么东西| vertu手机为什么那么贵| 反胃想吐是什么原因| 女予念什么| 阴囊潮湿吃什么药| 职称有什么用| 靶点是什么意思| 什么的雪人| 还是什么结构的字| ghost是什么意思| 肝实质回声增强是什么意思| 肝寒吃什么中成药| 脸颊两边长痘痘是什么原因引起的| 梦魇什么意思| 城字五行属什么| 庙会是什么意思| 深海鱼都有什么鱼| 全麦面包是什么意思| 从容不迫是什么意思| 月经过后有褐色分泌物是什么原因| 惊恐症是什么病| 小五行属性是什么| 孕妇拉的屎是黑色的是因为什么| pcl是什么意思| 手脚肿胀是什么原因引起的| 去疤痕挂什么科| 冲代表什么生肖| 癌胚抗原偏高说明什么| 婳是什么意思| 鼻梁有横纹是什么原因| 布洛芬0.3和0.4g有什么区别| 什么是脑白质病| 有什么好听的网名| oa期刊是什么意思| 作陪是什么意思| 尿酸高吃什么蔬菜好| 南宁晚上有什么好玩的地方| 梦见生孩子是什么意思| 小孩尿酸高是什么原因| 李元霸为什么怕罗士信| 什么什么泪下| 米饭配什么菜| 中药什么时候喝效果最好| 生闷气容易得什么病| 人的五官是什么| 耐药性什么意思| min代表什么| 蒙脱石散适合什么腹泻| 2月12日什么星座| 诸葛亮是什么星座| 摸摸头是什么意思| 心如止水是什么意思| 泡脚用什么东西泡最好| 什么是根号| 狗生小狗前有什么征兆| 五月初七是什么星座| 跖疣是什么原因造成的| 壁虎为什么是五毒之一| 体征是什么意思| 五行属木缺什么| 什么叫蛇胆疮| 什么是慢性病| 西安有什么山| ifound是什么牌子| 血少一撇念什么| 风疹病毒是什么病| 晚上睡眠不好有什么办法可以解决| 三凹征是什么| 杨贵妃属什么生肖| 女人湿气太重喝什么茶| 二月初四是什么星座| 人为什么会放屁| 手突然抽搐是什么原因| 核磁是检查什么的| 男人喝什么酒壮阳最快| 数字8五行属什么| 违反禁令标志指示什么意思| 脊灰疫苗是预防什么的| 夜盲吃什么维生素| 歼31为什么没消息了| 被舔下面什么感觉| 四风是什么| 阿魏是什么中药| hpv疫苗什么时候打最好| 一个口一个我念什么| 奶油奶酪可以做什么| 什么叫cd| xg是什么意思| 先天性心脏病是什么原因造成的| vct是什么意思| 玉竹有什么功效| 什么的医生| 冲喜是什么意思| 左脸上长痘痘是什么原因| 办理公证需要什么材料| 五指毛桃不能和什么一起吃| 姐姐的女儿应该叫什么| 7月3日是什么日子| 鸢的俗称是什么| 虾不能跟什么一起吃| 药品经营与管理学什么| 口腔溃疡为什么是白色的| 什么叫不动产| 一吃东西就肚子疼是什么原因| 果酱样大便见于什么病| 鼻子流水是什么原因| upupup是什么意思| 打封闭是什么意思| 手指麻木是什么病的前兆| 梦到被蛇咬是什么预兆| 肺结核是什么原因引起的| 适得其反什么意思| 对付是什么意思| 自然流产是什么症状| 低血压高什么原因| 手掌心发红是什么原因| 大便一粒粒的是什么原因| 晚上睡觉腿酸难受是什么原因| 卡卡西为什么要杀琳| 大土土什么字| 四个月宝宝可以吃什么辅食| 仙人板板 是什么意思| 芙蓉粉是什么颜色| 菊花是什么意思| 甲方是什么意思| 太上老君的坐骑是什么| 插入是什么感觉| 奶茶有什么危害| 病毒五项检查的是什么| 旺夫脸是什么脸型| aqua是什么牌子| 百度Przejd? do zawarto?ci

FZN25代理_温州销量好的真空负荷开关价格怎么样

Z Wikipedii, wolnej encyklopedii
百度 类似的夸赞接踵而至,不久后,黄仲圭题赵孟頫《阴符经》楷书卷,称其笔力精到,不减右军这也是同代人首次把他与书圣相提并论,再次强调他在当代书坛的地位和价值。

Metryka oprogramowania – miara pewnej w?asno?ci oprogramowania lub jego specyfikacji. Termin ten nie ma precyzyjnej definicji i mo?e oznacza? w?a?ciwie dowoln? warto?? liczbow? charakteryzuj?c? oprogramowanie[1].

Standard IEEE 1061-1998 okre?la metryk? jako funkcj? odwzorowuj?c? jednostk? oprogramowania w warto?? liczbow?. Ta wyliczona warto?? jest interpretowalna jako stopień spe?nienia pewnej w?asno?ci jako?ci jednostki oprogramowania[2]. Metryki u?ywaj? ró?nych definicji jednostki oprogramowania, opartej zazwyczaj na kodzie ?ród?owym, rozdzielonym na jeden lub wi?cej plików. Istniej? te? metryki, które nie bazuj? na kodzie, lecz pozwalaj? na analiz? specyfikacji oprogramowania (np. punkty funkcyjne) lub przebiegu wykonania programu.

Zastosowanie

[edytuj | edytuj kod]

Celem u?ycia metryk oprogramowania jest otrzymanie dok?adnych warto?ci, które dotycz? wytwarzanych aplikacji. Lord Kelvin, fizyk i matematyk, stwierdzi?: Je?li to o czym mówisz potrafisz zmierzy? i wyrazi? w liczbach – wiesz co? o tym. Inaczej twa wiedza jest mizerna[3], in?ynier oprogramowania Tom DeMarco uwa?a za?, ?e nie mo?na kontrolowa? tego, czego si? nie da zmierzy?[4]. Metryki pozwalaj? na obiektywne spojrzenie na oprogramowanie i porównanie ze sob? poszczególnych jego elementów lub ró?nych produktów. Mierzenie jako?ci aplikacji oraz wydajno?ci pracy bez danych liczbowych staje si? bardzo trudne, a utrzymanie obiektywno?ci jest niemal niemo?liwe.

Obliczanie metryk jest istotnym u?atwieniem we wszystkich fazach procesu wytwarzania oprogramowania. W fazie projektowania metodologie takie jak COCOMO za pomoc? rozmaitych metryk pozwalaj? na oszacowanie nak?adu pracy potrzebnego do realizacji pomys?u. Na tym etapie metryki s? przydatne przede wszystkim dla klientów oraz projektantów. W fazie produkcji du?? rol? odgrywaj? metryki statyczne, pomagaj?ce w utrzymywaniu jako?ci kodu ?ród?owego. Korzystaj? na tym programi?ci, którzy dzi?ki metrykom mog? ?atwo odnajdywa? te miejsca w kodzie, które s? potencjalnym ?ród?em nadmiernej z?o?ono?ci, a co za tym idzie, powstaj?cych b??dów. W fazie testów wykorzystywane s? zarówno metryki statyczne, jak i dynamiczne, pozwalaj?ce na badanie przebiegu wykonania programu. Na tym etapie gromadzone s? te? dane liczbowe dotycz?ce wydajno?ci czy niezawodno?ci aplikacji. Wyniki testów s? po?ytecznym ?ród?em informacji dla wszystkich osób zaanga?owanych w projekt, w tym kierowników, programistów i klientów.

Jako?? metryki

[edytuj | edytuj kod]

Istotn? kwesti? jest ocena samej metryki (?meta-metryka”). Aby metryka by?a u?yteczna, powinna by?:

  • prosta i mo?liwa do obliczenia przez komputer
  • przekonuj?ca
  • konsekwentna i obiektywna
  • spójna pod wzgl?dem u?ytych jednostek
  • niezale?na od j?zyka programowania
  • daj?ca przydatne informacje[5].

Linda Westfall wymienia 12 kroków prowadz?cych do opracowania u?ytecznych metryk:

  1. identyfikacja klientów,
  2. ustalenie celów,
  3. zadanie pytań,
  4. wybór metryk,
  5. standaryzacja definicji,
  6. wybór funkcji mierz?cej,
  7. ustalenie metody pomiaru,
  8. definicja kryteriów wyboru,
  9. definicja mechanizmów raportowania,
  10. ustalenie dodatkowych w?asno?ci,
  11. zebranie danych,
  12. aspekt ludzki[1].

Charakterystycznym elementem jest paradygmat Cel – Pytanie – Metryka (GQM(inne j?zyki), GoalQuestionMetrics), wypromowane przez Victora Basiliego z University of Maryland oraz Laboratorium In?ynierii Oprogramowania Centrum Lotów Kosmicznych imienia Roberta H. Goddarda. Polega ono na ustaleniu trzech kroków: pierwszym jest zdefiniowanie celów projektu, drugim ustalenie pytań, na które trzeba odpowiedzie? w trakcie realizacji, trzecim wykonanie odpowiednich pomiarów, dostosowanych odpowiednio do pierwszych dwóch poziomów[6]. Metryka powinna by? ?ci?le dopasowana do tego, jakie informacje s? potrzebne w trakcie procesu tworzenia produktu. U?ywanie wy??cznie metryk ogólnych mo?e by? myl?ce, a nawet niebezpieczne[7].

Podzia?

[edytuj | edytuj kod]

Podstawowy podzia? metryk oprogramowania zwi?zany jest ze sposobem podej?cia do jego analizy i testowania. Podobnie jak testy dziel? si? na testy strukturalne (testy bia?ej skrzynki) oraz testy funkcjonalne (testy czarnej skrzynki), tak te? mo?na podzieli? metryki na zwi?zane z analiz? kodu ?ród?owego metryki statyczne oraz metryki dynamiczne, wyznaczane w oderwaniu od kodu i badaj?ce zachowanie uruchomionego programu. Osobn? kategori? s? metryki niezwi?zane bezpo?rednio z implementacj? oprogramowania, lecz z jego specyfikacj?, wymaganiami klienta, a tak?e z przebiegiem testów.

Inne podej?cie dzieli metryki ze wzgl?du na obiekty i warto?ci je charakteryzuj?ce, jakie s? przez nie mierzone. Mo?na wyró?ni? metryki produktów, takie jak metryki rozmiaru (size metrics), metryki z?o?ono?ci (complexity metrics) czy metryki jako?ci (quality metrics). Innymi metrykami s? metryki procesów (process metrics), metryki zasobów (resource metrics) czy metryki projektu (project metrics)[4]. Wyra?ny jest tu podzia? na metryki produktów, dotycz?ce w?a?ciwo?ci samego oprogramowania, oraz metryki procesów, charakteryzuj?ce proces jego wytwarzania.

Metryki mog? mierzy? warto?ci bezpo?rednio (np. liczba linii kodu) lub po?rednio, najpierw obliczaj?c warto?ci sk?adowe (np. cz?sto?? wyst?powania b??dów = liczba b??dów / ca?kowity rozmiar produktu), mog? te? bazowa? na subiektywnych prognozach (np. punkty funkcyjne)[4].

Metryki statyczne

[edytuj | edytuj kod]

Metryki statyczne pozwalaj? na ocen? jako?ci kodu ?ród?owego i ??cz? si? ?ci?le z analiz? statyczn?, dziedzin? in?ynierii oprogramowania zajmuj?c? si? badaniem struktury kodu ?ród?owego. Metryki te najbardziej przydatne s? dla samych programistów i innych osób bezpo?rednio zaanga?owanych w proces powstawania oprogramowania. Pozwalaj? na bie??ce ?ledzenie jako?ci kodu i zwrócenie uwagi na miejsca, które wymagaj? uproszczenia b?d? szczególnie uwa?nego testowania.

Metryki rozmiaru

[edytuj | edytuj kod]

Linie kodu

[edytuj | edytuj kod]
Przyk?adowy kod w Javie: wszystkich LOC jest 18, bez pustych linii 16, bez komentarzy 9, bez nawiasów 8
 Osobny artyku?: linia kodu.

Najprostsz? metryk? rozmiaru oprogramowania jest liczba linii kodu ?ród?owego, oznaczana jako LOC (lines of code) lub SLOC (source lines of code). Wielko?? ta daje ogólne poj?cie o skali programu, nie jest jednak wystarczaj?ca do bardziej szczegó?owych analiz. Warto?? LOC jest silnie zale?na od u?ytego j?zyka programowania – ten sam algorytm w j?zyku wysokiego poziomu b?dzie mia? wielokrotnie mniej linii kodu ni? w asemblerze.

Istotny jest te? sposób zliczania linii kodu – ich liczba mo?e si? zdecydowanie zmienia?, zale?nie od tego, czy wliczane s? puste linie, komentarze czy linie zawieraj?ce jedynie nawiasy klamrowe (m.in. w j?zykach C, Java czy PHP) b?d? s?owa kluczowe begin i end (w Pascalu). Liczba linii z pomini?ciem wymienionych elementów jest okre?lana jako eLOC (effective lines of code).

Alternatyw? dla zliczania fizycznych linii kodu jest miara logicznych linii kodu, oznaczana jako lLOC (logical lines of code). Miara ta jest zale?na od u?ytego j?zyka programowania, np. w C zliczane s? linie zakończone ?rednikami[8].

W wi?kszych projektach u?ywane s? jednostki pochodne takie jak KLOC (kilo-LOC).

Liczba tokenów

[edytuj | edytuj kod]

Podstawow? wad? liczby linii kodu jako metryki jest fakt, ?e nie odró?nia ona w ?aden sposób trudnych i ?atwych cz??ci kodu ?ród?owego oraz premiuje rozwlek?y styl pisania programów. Aby nada? odpowiednie wagi mniej i bardziej skomplikowanym liniom kodu, mo?na zastosowa? inn? metryk?, mierz?c? liczb? tokenów – czyli podstawowych jednostek sk?adni j?zyka programowania. Schemat takiej metryki zosta? u?yty po raz pierwszy w 1977 przez Maurice’a Howarda Halsteada w jego rodzinie metryk zwanej metrykami Halsteada[9], a przez niego samego nazwanych Software Science. Halstead rozró?ni? dwa typy tokenów, na które mo?na podzieli? ca?o?? kodu ?ród?owego (bez komentarzy). S? to operatory (symbole i s?owa kluczowe symbolizuj?ce pewn? akcj?) i operandy (zmienne, sta?e itp.). Na ich podstawie mo?na okre?li? podstawowe metryki:

  • – liczba unikatowych operatorów
  • – liczba unikatowych operandów
  • – ca?kowita liczba wyst?pień operatorów
  • – ca?kowita liczba wyst?pień operandów.

Regu?y klasyfikowania symboli jako operatorów i operandów s? zale?ne od j?zyka programowania. Na podstawie tych podstawowych warto?ci mo?na okre?li? kolejne, bardziej z?o?one:

  • = s?ownictwo (vocabulary)
  • = d?ugo?? (length)
  • = obj?to?? (volume)[9].

Badania wskaza?y, ?e warto?ci N i V s? liniowo powi?zane z liczb? linii kodu, mierz? wi?c t? sam? wielko??. Charakteryzuje je jednak wy?sza odporno?? na ma?e zmiany w kodzie. Halstead zaproponowa? te? kolejne metryki, dotycz?ce ju? nie tylko rozmiaru, ale i z?o?ono?ci programu, o których jest mowa poni?ej.

Inne metryki

[edytuj | edytuj kod]

Szeroko stosowane s? jednostki rozmiaru programu wi?ksze ni? linie kodu. Dla wi?kszych aplikacji cz?sto stosowanymi metrykami s? liczba modu?ów czy liczba funkcji. Poniewa? obecnie dominuj?cym paradygmatem programowania jest podej?cie obiektowe, wytworzono wiele metod mierzenia oprogramowania dla niego specyficznych (zob. metryki obiektowe). Podstawowymi metrykami rozmiaru dla projektów obiektowych s? np. liczba klas i interfejsów.

Na podstawie linii kodu mo?na wyliczy? wiele metryk pochodnych, takich jak produktywno?? (KLOC / osobomiesi?c), jako?? (b??dy / KLOC), koszt (koszt / KLOC) czy ilo?? dokumentacji (strony dokumentacji / KLOC)[10]. Nale?y pami?ta?, ?e zawsze b?d? one mia?y jedynie charakter pomocniczy i niedopuszczalne jest np. ocenianie pracowników wy??cznie na podstawie liczby napisanych linii kodu[11].

Podstawowe metryki z?o?ono?ci

[edytuj | edytuj kod]

Sam rozmiar programu jest informacj? przydatn?, jednak daje zbyt ma?o wiedzy na jego temat. Aby scharakteryzowa? oprogramowanie pod wzgl?dem jego z?o?ono?ci, trzeba u?y? innych metod. Je?li u?yte s? wyrafinowane algorytmy, cenn? miar? b?dzie ich z?o?ono?? obliczeniowa. Warto?? ta ma kluczowe znaczenie w badaniu wydajno?ci, cz?sto daje jednak informacje o ma?ym wycinku kodu ?ród?owego. Metryki mierz?ce z?o?ono?? opieraj? si? na strukturze kodu ?ród?owego.

Z?o?ono?? cyklomatyczna McCabe’a

[edytuj | edytuj kod]
Przyk?ad funkcji o niskim CC:
8 w?z?ów, 8 kraw?dzi,
CC = 8 – 8 + 2 = 2
 Osobny artyku?: z?o?ono?? cyklomatyczna.

Jedn? z najbardziej podstawowych metryk z?o?ono?ci jest z?o?ono?? cyklomatyczna (cyclomatic complexity number, ozn. CC lub v(G)), zaproponowana przez Thomasa J. McCabe’a w 1976[12]. Pierwotnie pomy?lana by?a jako metryka dla programów strukturalnych, nadaje si? jednak równie dobrze do programów obiektowych, dzi?ki czemu jest popularna tak?e dzisiaj. Z?o?ono?? cyklomatyczna jest liczb? charakteryzuj?c? funkcj? lub metod? i odzwierciedlaj?c? jej poziom skomplikowania.

Pocz?tkowo z?o?ono?? cyklomatyczna mia?a mierzy? liczb? niezale?nych ?cie?ek przebiegu programu, co bezpo?rednio przek?ada si? na ?atwo?? jego przetestowania. Poniewa? skoki wstecz mog? spowodowa? nieskończony wzrost takich ?cie?ek, mierzy si? liczb? prostych ?cie?ek bez uwzgl?dniania cykli.

Z?o?ono?? cyklomatyczn? dla danej funkcji mo?na policzy?, maj?c do dyspozycji graf przebiegu programu. Wówczas wyra?a si? ona wzorem

gdzie oznacza liczb? kraw?dzi, a liczb? wierzcho?ków w grafie. Inny wzór podaje prost? zale?no?? CC od liczby w?z?ów, w których podejmujemy decyzje:

gdzie to liczba w?z?ów decyzyjnych, w których podejmowana jest decyzja o charakterze binarnym (tak/nie).

Taki wzór pozwala na szybkie wyznaczanie warto?ci CC – wystarcza tu zliczy? liczb? wyst?pień s?ów kluczowych if, while, for czy case.

Niska warto?? CC wskazuje na ?atwo?? zrozumienia danej funkcji czy metody. Warto?? powy?ej 20 charakteryzuje z?o?ony kod i wi??e si? z du?ym ryzykiem wyst?pienia b??dów.

Zaletami metryki CC s? m.in. ?atwo?? jej obliczenia i mo?liwo?? wskazania elementów aplikacji, które nale?y przeprojektowa?. Liczba rozga??zień przep?ywu programu nie daje jednak pe?nej informacji, poniewa? nie rozró?nia zagnie?d?onych i niezagnie?d?onych p?tli oraz prostych instrukcji case, a tak?e nie bierze pod uwag? skomplikowanych warunków w w?z?ach decyzyjnych. Istniej? modyfikacje definicji CC, które pozwalaj? zredukowa? lub wyeliminowa? te wady[13].

Z?o?ono?? Halsteada

[edytuj | edytuj kod]

Wspomniane wy?ej metryki Halsteada dotycz?ce rozmiaru programu pozwalaj? na zdefiniowanie bardziej skomplikowanych metryk z?o?ono?ci. Wyró?nia si? w?ród nich:

trudno?? (difficulty), czyli podatno?? na b??dy, proporcjonalna do liczby unikatowych operatorów a tak?e do stosunku pomi?dzy wszystkimi a unikatowymi operandami
poziom programu (program level), im ni?szy, tym bardziej aplikacja jest podatna na b??dy
wysi?ek (effort) potrzebny do zaimplementowania programu, proporcjonalny do trudno?ci oraz obj?to?ci
czas (time) potrzebny do zaimplementowania, wyra?ony w sekundach – wspó?czynnik 18 zosta? wyznaczony eksperymentalnie i jest modyfikowalny indywidualnie dla danego programisty
szacunkowa liczba b??dów (number of delivered bugs) – warto?? ta jest zale?na od u?ytego j?zyka programowania, jest na przyk?ad wy?sza dla aplikacji w C lub C++

Niniejsze warto?ci mimo oczywistej niedok?adno?ci stanowi? cenn? informacj? podczas etapu testowania aplikacji – przyk?adowo warto?? w porównaniu z rzeczywist? liczb? znalezionych b??dów mo?e da? wskazówki na temat efektywno?ci przeprowadzonych testów.

Metryki obiektowe

[edytuj | edytuj kod]

Z powodu wzrostu popularno?ci programowania obiektowego w latach 90. nale?a?o wprowadzi? metryki adekwatne do tego podej?cia.

Zestaw metryk CK

[edytuj | edytuj kod]

Popularnym zestawem metryk jest grupa sze?ciu metryk autorstwa Shyama R. Chidambera i Chrisa F. Kemerera, zaprojektowana specjalnie dla oprogramowania obiektowego w 1991 i ulepszona w 1994[14]. Od nazwisk autorów metryki te nazywane s? zestawem metryk CK. Opisuj? one relacje pomi?dzy klasami oraz ich z?o?ono?? i jej wp?yw na utrzymywalno?? kodu. Poniewa? bazuj? one na analizie drzewa dziedziczenia oraz pojedynczych klas, nie nadaj? si? do przewidywania czasu czy wysi?ku koniecznego do implementacji, s?u?? raczej projektantowi programi?cie jako informacje wskazuj?ce potencjalne s?abe punkty architektury systemu. Zestaw zawiera nast?puj?ce metryki:

  • Weighted Methods per Class (WMC)
  • Depth of Inheritance Tree (DIT)
  • Number of Children (NOC)
  • Coupling Between Objects (CBO)
  • Response For a Class (RFC)
  • Lack of Cohesion of Methods (LCOM).

Metryka Weighted Methods per Class (WMC, t?um. na polski: u?rednione metody na klas?) zlicza metody wyst?puj?ce w danej klasie:

gdzie jest pewn? miar? z?o?ono?ci metody ( to kolejne metody w klasie). Je?li za wstawimy sta?? 1, wynik b?dzie prostym zliczeniem wszystkich metod. W wariancie tej metryki za nale?y wstawi? z?o?ono?? cyklomatyczn? danej metody.

Metryka Depth of Inheritance Tree (DIT, g??boko?? drzewa dziedziczenia) pozwala na okre?lenie stopnia dziedziczenia – dla danej klasy warto?ci? DIT jest liczba kolejnych klas, po których dziedziczy dana klasa. Je?li wyst?puje dziedziczenie wielokrotne, to warto?ci? DIT jest najd?u?sza ?cie?ka do korzenia (w przypadku j?zyka Java korzeniem tym jest klasa Object, a wszystkie klasy maj? DIT równe co najmniej 1).

Wynik tej metryki mo?e by? ró?nie interpretowany. Z jednej strony dziedziczenie pozwala na ponowne u?ycie kodu, z drugiej klasy o wysokim DIT mog? by? prze?adowane dziedziczonymi metodami. Rekomendowane jest DIT nieprzekraczaj?ce 6[15].

Metryka Number of Children (NOC, liczba dzieci) polega na zliczaniu – w zale?no?ci od definicji – wszystkich lub tylko bezpo?rednich podklas danej klasy. Podczas gdy DIT mierzy g??boko?? hierarchii dziedziczenia, NOC mierzy jej szeroko??. Z powodu mo?liwo?ci powtórnego u?ycia kodu lepsze jest g??bokie drzewo dziedziczenia, dlatego wysoka warto?? NOC mo?e ?wiadczy? o nieprawid?owym u?yciu tego mechanizmu. Prawid?owe warto?ci NOC wahaj? si? w przedziale od 2 do 5, warto?ci wy?sze powoduj? problemy z piel?gnacj? systemu.

Metryka Coupling Between Objects (CBO, zale?no?? mi?dzy obiektami) pozwala na okre?lenie stopnia zale?no?ci klasy z innymi klasami nieb?d?cymi jej przodkami ani klasami potomnymi. Jej warto?ci? jest liczba odwo?ań do innych klas w obr?bie metod i atrybutów danej klasy. Nie zalicza si? tutaj odwo?ań do typów prymitywnych (int czy boolean) oraz podstawowych typów systemowych (w Javie: java.lang.*).

Wysoka warto?? CBO wskazuje na nieprawid?owo?ci – obiekty staj? si? wówczas zbyt zale?ne od innych.

Response For a Class (RFC, odpowiedzialno?? danej klasy) jest miar? potencjalnej komunikacji pomi?dzy klas? a jej ?rodowiskiem:

gdzie oznacza ca?kowit? liczb? metod w klasie (total methods), – liczb? podklas (total subclasses), a – ca?kowit? liczb? metod w podklasie Jest to wi?c liczba metod, które mog? potencjalnie zosta? wys?ane w odpowiedzi na dowolny komunikat wys?any do obiektu danej klasy. Wysoka warto?? RFC oznacza wi?ksz? funkcjonalno??, ale zarazem i wy?sz? z?o?ono??. Nale?y unika? zbyt wysokich warto?ci RFC, które zazwyczaj utrudniaj? weryfikacj? i testowanie klasy.

Lack of Cohesion of Methods (LCOM, brak spójno?ci metod) jest metryk? wskazuj?c? na brak po??danej w?asno?ci klas, jak? jest ich spójno??. Klasa powinna mie? ?ci?le okre?lone pole dzia?ania i pe?ni? jedn? dobrze wybran? funkcj?. Brak spójno?ci oznacza, ?e klasa wykonuje wi?cej ni? jedn? funkcj? i powinna zosta? podzielona, aby umo?liwi? prawid?ow? hermetyzacj?.

Wyst?puj? cztery warianty metryki LCOM[16]:

LCOM1 (Chidamber & Kemerer)
Pierwotna wersja metryki LCOM. Dla ka?dej pary metod w klasie sprawdzamy, czy maj? one dost?p do roz??cznych zbiorów zmiennych instancyjnych. Je?li tak jest, nale?y zwi?kszy? o 1, w przeciwnym razie nale?y zwi?kszy? o 1. Warto?ci? LCOM b?dzie
Metryka LCOM1 by?a krytykowana ze wzgl?du m.in. na ma?o dok?adne wyniki i b??dne pojmowanie spójno?ci klasy, dlatego zaproponowano kolejne wersje metryki.
LCOM2 oraz LCOM3 (Henderson-Sellers, Constantine & Graham)
Metryki LCOM2 i LCOM3, podobnie jak LCOM1, mierz? poziom spójno?ci klasy i w nich tak?e po??dana jest niska warto??. LCOM2 przyjmuje warto?ci z zakresu [0, 1], za? LCOM3 z zakresu [0, 2]. W metrykach tych u?yte s? definicje:
= liczba metod w klasie
= liczba atrybutów w klasie
= liczba metod maj?cych dost?p do atrybutu
= suma warto?ci po wszystkich atrybutach
Wówczas a
LCOM4 (Hitz & Montazeri)
Metryka LCOM4 pozwala na zmierzenie liczby spójnych sk?adowych cz??ci klasy. Ka?da spójna sk?adowa to pewien zbiór powi?zanych ze sob? metod i atrybutów. Metody s? ze sob? powi?zane, je?li maj? dost?p do tego samego atrybutu lub je?li jedna z nich wywo?uje drug?.
Optymaln? warto?ci? LCOM4 jest 1. Wy?sze warto?ci wskazuj? na konieczno?? podzia?u klasy, za? warto?? zerowa oznacza brak jakichkolwiek metod.

Zestaw metryk MOOD

[edytuj | edytuj kod]

Zestaw MOOD (Metrics for Object-Oriented Design) zosta? utworzony nieco pó?niej (1995) przez Fernando Brito e Abreu. Metryki te maj? s?u?y? ca?o?ciowej ocenie systemu, a wyra?one s? w procentach oznaczaj?cych stopień wykorzystania mechanizmów charakterystycznych dla programowania obiektowego. Zestaw MOOD jest niezale?ny od j?zyka programowania oraz jest dobrze skalowalny.

Metryki MOOD mierz? nast?puj?ce elementy:

  • polimorfizm
    • Polymorphism Factor (PF)
  • hermetyzacja
    • Attribute Hiding Factor (AHF)
    • Method Hiding Factor (MHF)
  • dziedziczenie
    • Attribute Inheritance Factor (AIF)
    • Method Inheritance Factor (MIF)
  • przekazywanie komunikatów
    • Coupling Factor (CF).

W pó?niejszym okresie powsta?y metryki MOOD2 – rozszerzenie standardowego zestawu MOOD. Wykorzystywane przez ten wariant metryki to:

  • OHEF: Operation Hiding Effectiveness Factor
  • AHEF: Attribute Hiding Effectiveness Factor
  • IIF: Internal Inheritance Factor
  • PPF: Parametric Polymorphism Factor[17].

Metryki pakietów

[edytuj | edytuj kod]

Metryki pakietów badaj? oprogramowanie na poziomie pakietów – s?u?? do oceny prawid?owo?ci ich powi?zań.

Tree impurity

[edytuj | edytuj kod]

Warto?? metryki tree impurity (w wolnym t?umaczeniu ?czysto?? drzewa”) powstaje na bazie grafu powi?zań mi?dzy poszczególnymi pakietami. Warto?? ta waha si? od 0 do 1 i wskazuje, jak bardzo graf jest zbli?ony do drzewa. Wysokie tree impurity jest oznak? z?ego podzia?u oprogramowania na pakiety.

Je?li jako oznaczymy liczb? kraw?dzi w grafie, a jako liczb? w?z?ów (pakietów), warto?? metryki wyniesie Warto?? 0% oznacza, ?e graf jest pe?nym drzewem, za? 100% – klik?.

Metryki Roberta C. Martina

[edytuj | edytuj kod]

Popularnym zestawem metryk pakietów jest grupa pi?ciu metryk zaprojektowana w 1994 przez Roberta Cecila Martina.

Efferent coupling
[edytuj | edytuj kod]

Metryka efferent coupling (w wolnym t?umaczeniu ?zale?no?? od?rodkowa”, tak?e fan-out), oznaczana symbolem Ce, mierzy zale?no?ci wychodz?ce dla danej klasy lub danego pakietu. Jej warto?? to liczba klas, od których rozpatrywany obiekt jest zale?ny. Miara ta wskazuje, które klasy i pakiety s? najbardziej zale?ne od innych i tym samym nara?one na niestabilno?? wobec zmian zachodz?cych w innych miejscach kodu. Optymalne warto?ci wynosz? od 0 do 20, wy?sze liczby powoduj? problemy zwi?zane z rozwojem i piel?gnacj? danego komponentu. Przyk?adem elementów o wysokim jest interfejs u?ytkownika, który musi odzwierciedla? wszelkie zmiany w logice systemu.

Afferent coupling
[edytuj | edytuj kod]

Metryka afferent coupling (?zale?no?? do?rodkowa”, fan-in, ozn. Ca) jest przeciwieństwem efferent coupling. Warto?? ta oznacza liczb? klas, które s? zale?ne od badanej klasy (pakietu). Im wi?ksza jest warto?? tym wi?cej odpowiedzialno?ci spoczywa na autorze zmian w kodzie danego komponentu. Wysokie w niejawny sposób oznacza wy?sz? stabilno??, poniewa? wymusza ograniczenie zmian i wysoki poziom przetestowania. Liczba ta nie powinna przekracza? 500 – wy?sze warto?ci sprawiaj?, ?e jakiekolwiek zmiany w elemencie staj? si? trudne do wykonania. Wysokim afferent coupling charakteryzuj? si? np. kontrolery we wzorcu projektowym MVC.

Poziom niestabilno?ci
[edytuj | edytuj kod]

Warto?ci i pozwalaj? wyznaczy? niestabilno?? (instability, ozn. I) danej klasy lub pakietu:

Niestabilno?? oznacza w tym wypadku podatno?? na zmiany w danym komponencie. Waha si? ona pomi?dzy 0 (dla elementów o wysokim afferent coupling) a 1 (dla elementów o wysokim efferent coupling). Wed?ug Roberta C. Martina klasy i pakiety dziel? si? na dwie grupy – komponenty stabilne winny mie? warto?? pomi?dzy 0 a 0,3, natomiast niestabilne pomi?dzy 0,7 a 1. Nie nale?y natomiast tworzy? klas i pakietów o ?redniej niestabilno?ci (od 0,3 do 0,7).

Poziom abstrakcji
[edytuj | edytuj kod]

Kolejn? metryk? zwi?zan? z w?asno?ciami pakietów jest poziom abstrakcji (abstractness, ozn. A). Warto?? tej metryki to odsetek klas abstrakcyjnych w stosunku do wszystkich klas, znów wahaj?cy si? pomi?dzy 0 a 1. Wskazane jest, by to klasy abstrakcyjne cechowa?y si? niskim poziomem niestabilno?ci, poniewa? jest od nich zale?nych wiele podklas.

Odleg?o?? od ci?gu g?ównego
[edytuj | edytuj kod]

Maj?c dane niestabilno?? i abstrakcyjno??, mo?liwe jest obliczenie istotnego wska?nika, jak? jest znormalizowana odleg?o?? od ci?gu g?ównego (distance from main sequence, D):

Warto?? ta odpowiada poziomowi zaburzenia równowagi pomi?dzy poziomami abstrakcji i niestabilno?ci. Klasy abstrakcyjne powinny charakteryzowa? si? stabilno?ci?, za? niestabilne powinny by? klasy konkretne. Dla dobrze zaprojektowanych klas warto?? powinna by? niska, poniewa? wspó?czynniki oraz powinny si? wzajemnie kompensowa?, sumuj?c si? do 1. Wysoka warto?? (powy?ej 0,2) jest oznak? ?le zaprojektowanego podzia?u klas.

Zobacz te?

[edytuj | edytuj kod]

Przypisy

[edytuj | edytuj kod]
  1. a b Linda Westfall: 12 Steps to Useful Software Metrics. [dost?p 2025-08-14]. (ang.).
  2. IEEE Std 1061-1998 (Revision of IEEE Std 1061-1992). [dost?p 2025-08-14]. (ang.).
  3. Cyt. za: Ryszard Kacprzyk: Wybrane zagadnienia badań ?adunku i jego zaniku w dielektrykach sta?ych. s. 3. [dost?p 2025-08-14].
  4. a b c Anthony Finkelstein: Advanced Software Engineering Course Structure. University of London. [dost?p 2025-08-14]. (ang.).
  5. Object-Oriented Software Engineering. Topic 14: Software Characteristics and Metrics. [dost?p 2025-08-14]. (ang.).
  6. Jaros?aw Kuchta: Jako?? systemów informatycznych. Goal Question Metrics. [dost?p 2025-08-14]. [zarchiwizowane z tego adresu (9 pa?dziernika 2010)]. (pol.).
  7. Kazimierz Subieta: Wytwarzanie, integracja i testowanie systemów informacyjnych. Jako??, z?o?ono?? i miary oprogramowania. [dost?p 2025-08-14]. [zarchiwizowane z tego adresu (21 lipca 2006)].
  8. Source lines of code – Knowledgerush. [dost?p 2025-08-14]. (ang.).
  9. a b Halstead metrics. [dost?p 2025-08-14]. (ang.).
  10. Software metrics. [dost?p 2025-08-14]. [zarchiwizowane z tego adresu (21 pa?dziernika 2008)]. (ang.).
  11. Por. np. Lionel C. Brand, Isabella Wieczorek: Resource Estimation in Software Engineering. s. 36. [dost?p 2025-08-14]. [zarchiwizowane z tego adresu (17 czerwca 2013)].
  12. Thomas J. McCabe: A Complexity Measure. [dost?p 2025-08-14]. (ang.).
  13. Complexity metrics. [dost?p 2025-08-14]. (ang.).
  14. Ewan Tempero, Emilia Mendes: The ?CK” Metrics. [dost?p 2025-08-14]. [zarchiwizowane z tego adresu (31 marca 2010)]. (ang.).
  15. NDepend. Metrics definitions. [dost?p 2025-08-14]. (ang.).
  16. Cohesion metrics. [dost?p 2025-08-14]. (ang.).
  17. MOOD and MOOD2 metrics. [dost?p 2025-08-14]. (ang.).

Bibliografia

[edytuj | edytuj kod]
去皱纹用什么方法最好和最快 89是什么意思 听什么音乐容易入睡 疝气是什么原因引起的 母慈子孝下一句是什么
金益什么字 下眼睑肿胀是什么原因 七宗罪是什么 鬼一般找什么人压床 什么汤是清热去火的
眼睛疼滴什么眼药水 什么可以保护眼睛 地下党是什么意思 性病是什么病 美国白宫是干什么的
刚怀孕有什么特征 青青子衿什么意思 10.8号是什么星座 累得什么 低置胎盘有什么危险
ccu是什么意思hcv9jop2ns4r.cn 手麻脚麻是什么原因引起的0297y7.com 太息是什么意思hanqikai.com 海南简称是什么hcv8jop1ns2r.cn 多梦是什么原因造成的hcv9jop3ns2r.cn
小孩用脚尖走路是什么原因hcv7jop4ns8r.cn 金戊念什么hcv8jop9ns9r.cn 暖气是什么意思hcv8jop1ns3r.cn 咖喱是什么做的baiqunet.com 肠炎吃什么药效果好huizhijixie.com
依从性是什么意思hcv8jop1ns5r.cn 什么情况下需要做肠镜hcv9jop3ns2r.cn 甲流吃什么药xinjiangjialails.com feno是什么检查hcv9jop5ns1r.cn 悠着点是什么意思hcv8jop9ns2r.cn
头晕四肢无力是什么原因hcv7jop9ns4r.cn 杨公忌日是什么意思hanqikai.com 铝中毒有什么症状onlinewuye.com kbs是什么意思hcv8jop5ns0r.cn 回不到我们的从前是什么歌hcv9jop0ns7r.cn
百度