管ç†è½¯ä»¶çš„éšè—å¤æ‚性
今天在bbs上看到一篇帖å,里é¢è®²äº†è¿™ä¹ˆä¸€å¥è¯ï¼šæœ‰ä¸¤ç§æ–¹å¼æž„建软件设计:一ç§æ˜¯æŠŠè½¯ä»¶åšå¾—很简å•ä»¥è‡³äºŽæ˜Žæ˜¾æ‰¾ä¸åˆ°ç¼ºé™·ï¼›å¦ä¸€ç§æ˜¯æŠŠå®ƒåšå¾—很å¤æ‚以至于找ä¸åˆ°æ˜Žæ˜¾çš„缺陷。很有æ„æ€çš„一段è¯ã€‚ä¼ è¯´è¿™æ®µè¯æ¥è‡ªäºŽã€ŠA Byte of Python》,没看过,但是å¯ä»¥æƒ³è±¡ï¼Œæ—¢ç„¶æ¥è‡ªäºŽpython的社区,作者应该是倾å‘于å‰é¢åŠå¥è¯çš„。
OK,现在是æ问时间:为什么人们都在追求简å•ï¼Ÿæ£å¦‚这段è¯å½“ä¸æ‰€è¯´ï¼šè½¯ä»¶åšçš„简å•çš„目的是为了能够å‡å°‘ç¼ºé™·ã€‚ç©¶å…¶åŽŸå› å°±æ˜¯äººç±»æ€è€ƒèƒ½åŠ›çš„é™åˆ¶ï¼šäººä»¬è®¡ç®—(1+100)*100/2和计算1+2+3+…+100的出错概率是ä¸å¯ä»¥åŒæ—¥è€Œè¯çš„。如果我们快速的过一下软件开å‘的历å²ï¼Œä»Žæœ€æ—©çš„打å”纸带和汇编è¯è¨€ï¼Œåˆ°Cè¯è¨€å’Œä¼—多的具有ä¸åŒè®¾è®¡å“²å¦çš„高级è¯è¨€ï¼Œå†åˆ°ä»Šæ—¥è“¬å‹ƒå‘展的脚本è¯è¨€ï¼Œä¼¼ä¹Žéƒ½åœ¨åšåŒä¸€ä»¶äº‹ï¼šè®©ç¨‹åºå˜å¾—简å•ã€‚è¿™ç§ç®€å•æºäºŽè¯è¨€å¯¹äºŽç‰¹å®šæ¦‚念的抽象和众多å¯ä»¥å¤ç”¨çš„库和框架,在这ç§è½¯ä»¶ç®€å•æ€§ï¼ŒæºäºŽå°è£…èµ·æ¥çš„å¤æ‚性,在其背åŽï¼Œä¹Ÿè®¸æ˜¯æ›´åŠ å¤æ‚部分的逻辑。这ç§å¤æ‚性,也就是软件的éšè—å¤æ‚性。
显然,软件的éšè—å¤æ‚性是一把åŒåˆƒå‰‘,一方é¢ï¼Œå¯¹äºŽä¸å¿…è¦å¤æ‚性的å°è£…,让程åºæœ¬èº«å˜å¾—简å•ï¼Œèƒ½å¤Ÿæ›´åŠ 直接 地表明业务的逻辑;å¦ä¸€æ–¹é¢ï¼Œä½œä¸ºè½¯ä»¶ä¸€éƒ¨åˆ†çš„它们,本身也是一个软件,也有å˜åœ¨ç¼ºé™·çš„å¯èƒ½ï¼Œè€Œä¸€æ—¦æ¥è‡ªè¿™ç§éšè—çš„å¤æ‚性当ä¸çš„缺陷出æ¥ï¼Œå´ä¹Ÿä¼šå¸¦æ¥æŽ’错的巨大难度。从实际当ä¸æ¥è¯´ï¼Œè¿™ç§éšè—çš„å¤æ‚性æºäºŽå¾ˆå¤šåœ°æ–¹ï¼šæ“作系统,è¿è¡Œåº“,第三方库,以åŠæ¡†æž¶ã€‚如何处ç†éšè—çš„å¤æ‚性,以åŠå†³å®šæ˜¯å¦è¦å¼•å…¥ä¸€ç§éšè—çš„å¤æ‚性,这是一个项目的领导者必须åšçš„一个决定。æ¯ä¸ªéšè—çš„å¤æ‚性都å¯ä»¥å¼•å…¥æ›´ç®€å•çš„设计和更多的潜在的缺陷。
ä¸¾å‡ ä¸ªä¾‹åå§ï¼Œæˆ‘们在åšæœ€è¿‘的一个产å“的时候,出现了内å˜æ³„æ¼ï¼Œç»è¿‡ä¸€ä¸ªæ˜ŸæœŸçš„分æžå’ŒæŽ’错,最终å‘现内å˜æ³„æ¼å‘生在微软的CRT库的istream当ä¸ï¼›åœ¨åŒä¸€ä¸ªäº§å“当ä¸ï¼Œbeta客户处出现了程åºhangä½çš„情况,最终å‘现问题出在第三方的icu库当ä¸ã€‚使用C++ iostream库和icuåº“æ¯«æ— ç–‘é—®ä½¿å¾—ç¨‹åºå˜å¾—简å•ï¼Œä½†æ˜¯ä¸€æ—¦å‡ºçŽ°äº†ç¼ºé™·ï¼Œå´ä¹Ÿæ˜¯éžå¸¸éš¾ä»¥æŽ’除的。
还有其他的éšè—å¤æ‚性å´æœ‰æ›´éšæ™¦çš„æ½œåœ¨é—®é¢˜ï¼Œæœ‰äº›é—®é¢˜ç”šè‡³æ— æ³•è§£å†³ã€‚å¦ä¸€ä¸ªå°ç»„æ£åœ¨åšçš„项目当ä¸å‡ºçŽ°äº†å¦ä¸€ä¸ªé—®é¢˜ï¼Œtomcat在特定的情况下å¯èƒ½å´©æºƒã€‚ç»è¿‡è¿‘åŠä¸ªæœˆçš„排查å‘现,问题出现在JREçš„socket对于solarisæ“作系统的socketå°è£…问题:JREçš„socketå¯èƒ½åœ¨ç³»ç»Ÿå·²ç»å°†socketå…³é—之åŽå†å¯¹å…¶è¿›è¡Œæ“作,这导致了tomcat的崩溃。这也是æ“作系统和è¿è¡Œåº“所带æ¥çš„éšè—å¤æ‚性的代价。
但是这并ä¸åº”该æˆä¸ºæ‹’ç»å¼•å…¥éšè—å¤æ‚性的ç†ç”±ï¼Œå¦åˆ™å°±æ˜¯æŠŠå©å和洗澡水一起泼掉了。这里æåˆ°çš„å‡ ä¸ªä¾‹å都是æºäºŽè‘—åçš„è¿è¡Œåº“,虽然出现了问题,但是它们所带æ¥çš„便利也是毋庸置疑的。我们需è¦åšçš„,就是在这ç§ç®€å•æ€§å’Œéšè—çš„å¤æ‚性之间åšå‡ºæƒè¡¡ã€‚
å…¶å®žæˆ‘è®¤ä¸ºæ ‡å‡†å€’æ˜¯æ¬¡è¦çš„ï¼Œå› ä¸ºå³ä½¿æœ‰æ ‡å‡†ä¹Ÿä¼šæœ‰ä¸åŒçš„实现。更é‡è¦çš„是如果决定引入一ç§éšè—çš„å¤æ‚性的è¯ï¼Œæœ€å¥½ä½¿ç”¨ä¹…ç»è€ƒéªŒçš„æŠ€æœ¯å’Œç¬¬ä¸‰æ–¹åº“ã€‚è½¯ä»¶çš„æ ¸å¿ƒä»·å€¼åœ¨äºŽæ—¶é—´ä¸Šçš„ç§¯ç´¯ï¼Œè¿™ç‚¹æˆ‘æ·±ä¿¡ä¸ç–‘。
至于对于SDK的测试,我觉得对于产å“没有什么必è¦ã€‚当然,对于构建SDKçš„å…¬å¸ï¼Œå¦å½“别论。
我倾å‘于完善下层支æŒè®©è½¯ä»¶ç®€å•ã€‚iostream人人都用,如果有错终有一天会被å‘现;如果cout的代ç 需è¦å¼€å‘员自行编写,100个人会写出100ä¸ªæ¨¡æ ·ï¼ŒèŠ±è´¹äº†å¤šå°‘æ—¶é—´åˆæœ‰å¤šå°‘个错就更难说了。
是的。而且更多的å¯å¤ç”¨çš„组件的å˜åœ¨ä¹Ÿåº”该是软件å‘展的方å‘。
æˆ‘å†™è¿™ç¯‡æ–‡ç« çš„åŠ¨æœºå°±åœ¨äºŽï¼Œå®žé™…çš„é¡¹ç›®å½“ä¸ï¼Œä»»ä½•çš„第三方组件都是å¯èƒ½å¸¦æ¥é£Žé™©çš„,而这ç§é£Žé™©ï¼Œéƒ½åº”该纳入到软件开å‘的风险管ç†å½“ä¸ã€‚