ã¯ã©ã¹ã®èšèšã«é¢ããŠ
Basili BriandãšMeloãã«ããç 究
1996幎ã«Basili BriandãšMeloããªããžã§ã¯ãæèã«é¢ããç 究ãè¡ãã次ã®çµæãæãããšãªã£ãŠããŸãã
- ã¯ã©ã¹ã®ãšã©ãŒçºççã¯ã¯ã©ã¹å ã®é¢æ°ã®æ°ãå¢ããã»ã©äžæããã
- ã¯ã©ã¹ã䜿çšããã¯ã©ã¹ã®æ°ãå¢ããã°å¢ããã»ã©ãšã©ãŒçºççãäžæãã(ãã¡ã€ã³ã¢ãŠã)
ã¯ã©ã¹å ã§åŒã³åºãããé¢æ°ã®æ°ãæ·±ãç¶æ¿ããªãŒãã¯ã©ã¹éã®å¯çµåãšãã£ãèŠå ãäžèšäºã€ãããšã©ãŒçãšã®çžé¢ãé«ãããšãããã£ãŠããŸãã
åèïŒA Validation of Object-Oriented Design Metrics as Quality
äžå®å®å å
ã¯ã©ã¹ã®ãã¡ã³ã¢ãŠããšãã¡ã³ã€ã³ã®æ°ãçšããããšã§ããã®ããã±ãŒãžã®äžå®å®å åïŒInstability factorïŒãæ±ããããšãã§ããŸãã
I = f_o / (f_i + f_o)
- ãã¡ã³ã€ã³: ä»ã®ã¯ã©ã¹ã«äŸåããŠããã¯ã©ã¹æ°ãããã¡ã³ã€ã³ãé«ãããšãã®ã¯ã©ã¹ã䜿çšããŠããã¯ã©ã¹ãå€ããšããããšãæå³ãã
- ãã¡ã³ã¢ãŠã: ãã®ã¯ã©ã¹ã䜿çšããŠããä»ã®ã¯ã©ã¹æ°ãé«ããã¡ã³ã¢ãŠãïŒäžè¬çã«ã¯7ã€ä»¥äžïŒãšã¯ã¯ã©ã¹ã䜿çšããã¯ã©ã¹ã®æ°ãå€ãããšãæå³ãã
Iã¯ããã±ãŒãžã®äžå®å®ãã瀺ããŠããã0ã«è¿ã¥ãã»ã©å®å®ãã1ã«è¿ã¥ãã»ã©äžå®å®ãªããã±ãŒãžãªããšãæå³ããŠããŸããããªãã¡ãä¿®æ£ãå ããããšã«ãããªã¹ã¯ãé«ããã瀺ããŠããŸãã
äœããã¡ã³ã¢ãŠããã€é«ããã¡ã³ã€ã³ãçæ³ã§ããããã¡ã€ã³ã€ã³ãé«ãããŠãäŸåé¢ä¿ãé«ãŸãã ããªã®ã§ãã©ã³ã¹ãéèŠãšãªããŸãã
åèïŒKevlin Henneyæ°ã«ããThings Every Programmer Should Know: Collective Wisdom from the Experts
ãã¡ãã«ã®æ³å
ãã¡ãã«ã®æ³åãšã¯ãããŒã¹ã€ãŒã¹ã¿ã³å€§åŠã§äœæããããœãããŠã§ã¢ã®èšèšïŒç¹ã«ãªããžã§ã¯ãæåããã°ã©ã ã®èšèšïŒã«ãããã¬ã€ãã©ã€ã³ã§ããªããžã§ã¯ãã¯ãèªå以å€ã®ã¯ã©ã¹ã»æ§é ã»ããããã£ã«é¢ããŠã¯ãæå°éã®ã¢ã¯ã»ã¹æš©éããã€ãšããããšã§ãã
//bad case
class.subClass().object
// good case
class.getObject()
ãªããžã§ã¯ãAã¯å¥ãªããžã§ã¯ãBã«å¯ŸããŠèŠæ±ããããšã¯ãããããªããžã§ã¯ãBãçµç±ããŠãªããžã§ã¯ãCã«å¯ŸããŠèŠæ±ããããšã¯ãã¡ãã«ã®æ³åã«åããããšã«ãªããŸããçç±ã¯ãªããžã§ã¯ãAããªããžã§ã¯ãBã®å éšæ§é 以äžã®ç¥èãèŠæ±ãããŠããŸãããã§ãã
ããããã¯äž»èŠ³çãªæèŠã«ãªããŸãããå ±éããŠéèŠã ãšæããããšã¯ãæ±ãæ å ±éã¯æå°éã«æããããšã ãšæããŸããã¯ã©ã¹é¢æ°ããµããã°ãã¡ããæ±ãæ å ±ãå€ããªããŸãããã¯ã©ã¹ãäŸåããŠããšãšãªããšãã®ã¯ã©ã¹ã®å éšæ§æãå€æŽã«ãã圱é¿ç¯å²ãç解ããå¿ èŠããããŸãããã ãäžèšã®çµæãã¬ã€ãã©ã€ã³ãªã©ã¯ãããŸã§ææšã§ãã£ãŠããµãŒãã¹ã倧èŠæš¡ã«ãªã£ãŠãã«ã€ãå šãŠã«åŸãã®ã¯é£ãããªã£ãŠããŸããå¿ èŠãªæ å ±ã¯å¿ èŠãªç®æã«å¿ èŠãªã ãæ±ããããã«å¿ãããããšãéèŠã§ã¯ãªãã§ãããããäžèšã®ããšãããçšåºŠé ã«ããã€ã€ãã©ã³ã¹ããèšèšãããããšãéèŠã ãšæããŸãã
ãŸãšãããšãæ°ãã€ããããšã¯ä»¥äžã®ç¹ã§ãã
- ã¯ã©ã¹å ã®é¢æ°ã»ã¯ã©ã¹ã®æ°ã¯æå°éã«ãã
- ããããã£ãé¢æ°ã¯å¿ èŠãªãã®ä»¥å€ã¯privateã«ãã
- çŽæ¥çã»éæ¥çãªåŒã³åºããé¿ãã
é¢æ°ã«é¢ããŠ
é©åãªå矩èªã®åœåããã
äžè¬çã«é¢æ°åã¯ãèšèªã®ç¹æ§ã«åããããšå ±ã«ãé©åãªå矩èªãã€ããããšãéèŠã§ãããäžè²«æ§ãä¿ããå¯èªæ§ãåäžããã
- add / remove
- increment / decrement
- open / close
- begin / end
- insert / delete
- show / hide
- create / destory
- lock / unlock
- source / target
- first / last
- min / max
- start / stop
- get / put
- next / previous
- up / down
- get / set
- old / new
é¢æ°ã®ãµã€ãºãšãšã©ãŒã»ä¿®æ£ã³ã¹ã
é¢æ°ã®ãµã€ãºïŒã³ãŒãã®è¡æ°ïŒãšãšã©ãŒã»ä¿®æ£ã³ã¹ãã«ã€ããŠããéå»æ§ã
ãªç 究ãè¡ãããŠããŸãã
以äžãããã€ãã®ç 究çµæã玹ä»ããŸãã
- é¢æ°ã®ãµã€ãºãšãšã©ãŒãåæ¯äŸãããé¢æ°ã®ãµã€ãºãå¢ããã«ã€ãã³ãŒã1è¡ãããã®ãšã©ãŒæ°ã¯æžå°ããã(Basili and Perricone)
- é¢æ°ã®ãµã€ãºãšãšã©ãŒã«çžé¢ã¯ãªãããè€éããããŒã¿éããšã©ãŒã«é¢ä¿ããŠãããšããçµæãã§ãŠãã(Shen et al 1985)
- ã³ãŒãã32è¡ä»¥äžã®é¢æ°ã¯ãã³ã¹ãã»ãšã©ãŒæžå°ãšã®çžé¢ã¯ãªããã³ãŒãã65è¡ä»¥äžã®ã³ãŒãã§ã¯1è¡ãããã®éçºã³ã¹ããæžå°ãã(Card, Church and Agresti 1986; Card and Glass 1990)
- å°ããªãµã€ãºã®(143è¡æªæº)ã®é¢æ°ã¯ããã以äžã®å€§ãããµã€ãºã®é¢æ°ãã1è¡ãããã®ãšã©ãŒçã23%é«ãããä¿®æ£ã³ã¹ãã2.4åäœã(Selby and Basili)
- ã³ãŒãã®ä¿®æ£ãæãçºçãã«ããã®ã¯ã100~150è¡ã®é¢æ°ã§ãã(Lind and Vairavan 1989)
- IBMã®èª¿æ»ã§ã¯ãæããšã©ãŒãçºçããããé¢æ°ã¯ã500è¡ä»¥äžã®ãã§ããã500è¡ãè¶ãããšãšã©ãŒçºççã¯é¢æ°ã®è¡æ°ãšæ¯äŸãã(Jones 1986)
äžèšã®çµæãããé¢æ°ã®ãµã€ãºãšãšã©ãŒçã¯å¯æ¥ã«é¢ãã£ãŠãããšãããŸãããµã€ãºã ãã§ã¯ãªãå¯èªæ§ãããŒã¿éãªã©ã®è€éããšãªãèŠå ã倧ãã«é¢ä¿ããŠããšæããŸãã
ã³ãŒããå°ãªãã»ãããšã©ãŒçãäœããšæãããã¡ã§ããããã®ãããªçµæã瀺ããŠããã®ã¯ãããããŸãšãŸãããã£ãã³ãŒãããšã©ãŒãçºçãã«ããããšããããšã§ã¯ãªãã§ããããã
äŸãã°ãåŠçã®ãŸãšãŸããå°åãã«é¢æ°åããŠãããããäžã€ã®é¢æ°ãåŒã³åºããšãããšãã³ãŒããæ£ãã°ã£ãŠããŸãã®ã§ã³ãŒããè¿œãã³ã¹ããããããŸããåŒã³åºãé åºãªã©ãèæ
®ããªããŠã¯ãªããŸããããé©åãªé¢æ°åãã¢ã¯ã»ã¹ã¬ãã«ãèšå®ããå¿
èŠãã§ãŠããŸãããã®ãããªå Žåã¯ãäžã€ã®ãŸãšãŸããæã£ãé¢æ°ãšããŠå®çŸ©ããã®ããããšèããããŸãã
ãšã¯ãããé¢æ°ã倧ãããªããããå Žåããéãç®æã§åãåŠçãäœåºŠãããŠãå Žåãªã©ãæ°ãã«é¢æ°ãå®çŸ©ããæ¹ãããå Žåãããã®ã§ãããã¯ã±ãŒã¹ã«ãã£ãŠäœ¿ãåããå¿
èŠããããšããããŸããã³ãŒããµã€ãºã倧ãããªããšã¹ã³ãŒããã§ãããªã£ãŠããŸãã®ã§ã泚æãå¿
èŠã§ããã
é¢æ°ã®åŒæ°ã¯å šãŠäœ¿çšãã
ãªãã¡ã¯ã¿ãªã³ã°ããä»æ§å€æŽãªã©ã§æªäœ¿çšã®åŒæ°ãæ¶ãå¿ããŠããŸãããšã¯ãªãã§ããããïŒæªäœ¿çšã®åŒæ°ã¯å¿
ãæ¶ãããã«å¿ãããŸããããåœããåãªã®ã§ã¯ïŒãšæãæ¹ãå€ããšæããŸãããæªäœ¿çšã®åŒæ°ãšãšã©ãŒçã¯å€§ãã«é¢ä¿ããããŸãã
Card, Church and Agrestiãã«ãã£ãŠè¡ãããç 究ã§ã¯ãæªäœ¿çšã®åŒæ°ããã€é¢æ°ã®46%ã¯ãšã©ãŒããªãã£ãã®ã«å¯Ÿããæªäœ¿çšã®å€æ°ããã€é¢æ°ã®ãã¡ããšã©ãŒããªãã£ãã®ã¯17%~29%ãšããçµæãã§ãŠããŸãã
軜ããã¹ã ãšæã£ãŠè»œèŠãããã¡ã ãšæããŸãããæªäœ¿çšãªåŒæ°ã«ã¯æ³šæããŸããã
åèæç®
CODE COMPLETE 第2ç äž å®å šãªããã°ã©ãã³ã°ãç®æããŠ