软件开发过程中的思维方式 -- 如何分析问题
【這是 ZY 第 16 篇原創(chuàng)技術(shù)文章】
今天這篇文章不談技術(shù),想聊聊軟件開發(fā)過程中的一些思維方式,以及如何去深入挖掘問題的核心,如何去看清問題的本質(zhì)。
一、分析問題的重要性
我們在軟件開發(fā)過程中,往往會遇到很多問題,不管是對需求合理性的探討,還是對開發(fā)過程中 bug 原因的排查,還是對線上問題的追溯,都體現(xiàn)了分析問題的重要性。
只有挖掘出問題的核心和根本,才能 針對性的提出改進或者完善流程,來避免類似的問題再次出現(xiàn)。
其實作者之前對這方面是不在在意的,認為分析問題很簡單,往往是找到最直接的原因即可。直到最近看了一些 case 的分析,了解到了一些分析問題的思維方法,才發(fā)現(xiàn)其實沒有想象的那么簡單。
舉個栗子:
我們在開發(fā)過程中出現(xiàn) bug 是不可避免的。有時候由于測試不充分,還會將 bug 帶入線上。
我們假設(shè)現(xiàn)在有一個 Android 屏幕適配的問題,導(dǎo)致某些機型上控件展示不完整。我們是如何反思問題的呢?
因為不知道大家的情況,這里以作者本人來說,在以前分析問題時,基本上是如下的思維:
因為 Android 碎片化的問題,Android 屏幕適配的問題其實是很多的,這次的原因主要是因為開發(fā)測試過程中對不同機型測試不充分。后面的改進就是盡量測試更多機型,減少適配問題。
讀者朋友們可以對照上面的回答進行反思,看看自己是如何思考這個問題的。
給大家三分鐘的時間思考,然后我們來看看我最近接觸到的幾種分析方法,是如何針對上面的問題進行分析的。
這里想分享給大家兩種思維方式:5WHY 分析法 和 第一性原理。
二、5WHY 分析法
先來看看 5WHY 分析法,這種方法最初是由豐田佐吉提出的,后來,豐田汽車公司在發(fā)展完善其制造方法學(xué)的過程之中也采用了這一方法。
下面內(nèi)容摘自5WHY 分析法。
所謂 5WHY 分析法,又稱“5問法”,也就是對一個問題點連續(xù)以5個“為什么”來自問,以追究其根本原因。雖為5個為什么,但使用時不限定只做“5次為什么的探討”,主要是必須找到根本原因為止,有時可能只要3次,有時也許要10次,如古話所言:打破砂鍋問到底。5why法的關(guān)鍵所在:鼓勵解決問題的人要努力避開主觀或自負的假設(shè)和邏輯陷阱,從結(jié)果著手,沿著因果關(guān)系鏈條,順藤摸瓜,直至找出原有問題的根本原因。
所以 5WHY 分析法的核心是 追究根本原因。
我們可以看一個經(jīng)典的例子:
豐田汽車公司前副社長大野耐一曾舉了一個例子來找出停機的真正原因 問題一:為什么機器停了? 答案一:因為機器超載,保險絲燒斷了。問題二:為什么機器會超載? 答案二:因為軸承的潤滑不足。問題三:為什么軸承會潤滑不足? 答案三:因為潤滑泵失靈了。問題四:為什么潤滑泵會失靈? 答案四:因為它的輪軸耗損了。問題五:為什么潤滑泵的輪軸會耗損? 答案五:因為雜質(zhì)跑到里面去了。經(jīng)過連續(xù)五次不停地問“為什么”,才找到問題的真正原因和解決的方法,在潤滑泵上加裝濾網(wǎng)。 如果員工沒有以這種追根究底的精神來發(fā)掘問題,他們很可能只是換根保險絲草草了事,真正的問題還是沒有解決。 復(fù)制代碼通過上面的例子,可以比較清晰的看出來,針對問題,要層層深入,直到找到最終原因。
實施層面
5WHY 從三個層面來實施:
一、為什么會發(fā)生?從“制造”的角度。
二、為什么沒有發(fā)現(xiàn)?從“檢驗”的角度。
三、為什么沒有從系統(tǒng)上預(yù)防事故?從“體系”或“流程”的角度。
實例分析
我們運用 5WHY 分析法來實戰(zhàn)一下,以文章開頭的例子來看,線上出現(xiàn)屏幕適配問題,如何反思。
問題一:為什么會出現(xiàn)屏幕適配問題? 答案一:因為開發(fā)過程中沒有對多機型進行測試問題二:為什么沒有測試就會出現(xiàn)適配問題? 答案二:因為控件使用了固定的高度問題三:為什么不使用自適應(yīng)高度,而要使用固定高度? 答案三:因為 UI 稿上標注了高度,所以就直接用了問題四:為什么直接使用 UI 稿標注高度,不考慮采用一些適應(yīng)性較強的寫法? 答案四:因為開發(fā)經(jīng)驗不足,開發(fā)時沒有考慮到這個問題 復(fù)制代碼到這里,我們能看出根本問題是由于開發(fā)經(jīng)驗不足,沒有考慮適配的問題。
那我們的解決方法就是,把此次問題就當(dāng)做一個經(jīng)驗教訓(xùn),在后面開發(fā)中 采用普適性較強的寫法 來做,從根本上杜絕適配問題。
如果僅僅根據(jù)文章開始的淺顯分析,我們只是說后面會多測機型,并沒有從根源上重視問題。
然后我們再往下提問。
問題五:為什么不使用現(xiàn)有的適配性較強的組件? 答案五:因為此組件比較簡單,所以沒有進行封裝 復(fù)制代碼到這里,我們可以思考一下,是不是可以對一些適配性的組件進行封裝,避免后續(xù)開發(fā)過程中的問題。
然后我們再往下提問。
問題六:為什么 QA 測試過程中沒有發(fā)現(xiàn)? 答案六:因為 QA 沒有這款設(shè)備問題七:為什么沒有這款設(shè)備? 答案七:因為這款設(shè)備是上市不久,還沒有進行采購問題八:為什么沒有進行設(shè)備采購? 答案八:因為沒有報備 復(fù)制代碼到這里,我們會發(fā)現(xiàn),開發(fā)過程中的問題,在測試階段沒有暴露,是因為測試設(shè)備采購不及時。 那么我們的解決方法就是,盡量提早采購新設(shè)備,盡量提前報備。
然后再往下提問。
問題九:QA 手中其他設(shè)備存在類似問題嗎? 答案九:有其他設(shè)備也存在類似問題問題十:為什么沒有在其他設(shè)備上測試出這個問題? 答案十:因為沒有測試對應(yīng)的用例問題十一:為什么沒有測試對應(yīng)的用例? 答案十一:因為 QA 在設(shè)計測試用例時沒有考慮到類似的情況 復(fù)制代碼到這里我們會發(fā)現(xiàn),因為測試用例設(shè)計不足,導(dǎo)致沒有暴露問題。
那么我們的解決方法就是,測試用例可以讓多人評審,盡可能保證用例覆蓋全面。
然后還能再往下提問。
問題十二:為什么上線前沒有此類問題的檢查? 答案十二:因為目前都是通過 QA 人工確認問題,因為 QA 那邊沒有反饋問題,所以認為不存在問題 復(fù)制代碼到這里我們會發(fā)現(xiàn),目前上線都是通過 QA 人工檢查,畢竟人工總會存在遺漏。
那么我們的解決方案就是,能否通過一些自動化手段,來對這類問題進行檢查。
通過上面十二個問題,我們針對線上的屏幕適配問題,提出了五種對應(yīng)的改進:
相比我們文章開頭的思考,通過 5WHY 分析法 的不斷提問,是不是對問題的理解更加深入,更能逼近問題的根源,也能采取更加針對性的措施。
當(dāng)然,上面的例子中會有虛構(gòu)的成分,目的是想給讀者朋友們展現(xiàn)不斷提問的好處。
而且不止軟件開發(fā)的問題,遷移到生活中學(xué)習(xí)中的問題,也是可以使用 5why 分析法的。
讀者朋友們在后面的工作學(xué)習(xí)中,可以多嘗試,力爭找到問題的根源。
三、第一性原理 (First Principles)
第一性原理是古希臘哲學(xué)家亞里士多德提出的一個哲學(xué)術(shù)語:每個系統(tǒng)中存在一個最基本的命題,它不能被違背或刪除。
馬斯克也不止一次提到過他對第一性原理的思考。
我們運用「第一原理思維」而不是「比較思維」去思考問題是非常重要的。我們在生活中總是傾向于比較——別人已經(jīng)做過了或者正在做這件事情,我們就也去做。這樣的結(jié)果是只能產(chǎn)生細小的迭代發(fā)展。「第一原理」的思考方式是用物理學(xué)的角度看待世界的方法,也就是說一層層剝開事物的表象,看到里面的本質(zhì),然后再從本質(zhì)一層層往上走。這要消耗大量的腦力。
第一性原理解讀
我們這里對第一性原理做些解讀。
摘自:www.huxiu.com/article/250…
在哲學(xué)領(lǐng)域里,第一性原理指的是“先驗”(a priori),也就是不依賴任何經(jīng)驗和邏輯的,也無法用理性推導(dǎo)得到的東西。可以說,它們是理性思考的起點,是公認的、不容被質(zhì)疑、也無法證明的。通常它和認識論有關(guān),康德說的“純粹理性”之所以“純粹”,原因就在這里。 在物理學(xué)里,第一性原理指的是“從頭算”(ab initio),意思是直接來自已經(jīng)建立的物理規(guī)律,而不依賴任何經(jīng)驗?zāi)P汀1热绺鶕?jù)若干公理,用薛定諤方程來計算電子結(jié)構(gòu),而不考慮任何實驗數(shù)據(jù),就可以稱作“從頭算”的計算。
在哲學(xué)和物理學(xué)的領(lǐng)域,第一性原理強調(diào)的是本質(zhì),是公理。 看到這里,其實我們都運用過第一性原理,回想我們初高中時候做數(shù)學(xué)物理證明題,都是基于公理,一步一步推導(dǎo)。
而在馬斯克的的解讀中,第一性原理是和比較思維做對比的。比較思維傾向于看別人怎么做這件事,然后我們在其基礎(chǔ)上去做改進。與此相反的第一性原理,就是要追尋事物的本質(zhì),探尋事物的起源,避免被其他人影響。
軟件開發(fā)中的第一性原理
那第一性原理在軟件開發(fā)過程中有什么用呢?我們也要抓住開發(fā)過程中的本質(zhì)。
主要想從下面 3 點來分享我的思考:
開發(fā)問題的本質(zhì)--官方文檔
先說說我目前觀察到的一些情況,在開發(fā)過程中,我們遇到問題是家常便飯,因此要去查找資料,查找文檔,大多數(shù)情況下,我們會看一些博客文章。但是說實話,現(xiàn)在文章很多,往往看了很長時間,也沒法找到解決方法。
這時我們不如直接去讀官方文檔,去讀 SDK,去讀源碼,往往來的更快一點。這里的官方文檔,SDK,源碼,就相當(dāng)于第一性原理中的公理。 這一點其實我深有體會,所以這里也是給我自己的建議,有問題時,運用第一性原理,多讀官方文檔。
閱讀源碼的本質(zhì)--優(yōu)秀框架背后的設(shè)計模式和架構(gòu)
我們經(jīng)常會讀一些優(yōu)秀的開源項目代碼,往往會發(fā)現(xiàn)一些優(yōu)秀的架構(gòu)或者寫法,這時候我們也可以運用第一性原理,想想這種寫法的原理是什么,根源是什么,往往就會追溯到設(shè)計模式或者架構(gòu)模式上。然后我們就可以去深入了解其根源。而不只停留在表面的模仿上。
開發(fā)的本質(zhì)--滿足需求
我們做為軟件開發(fā)者,工作是寫代碼,開發(fā)軟件,作為對技術(shù)有追求的人,我們往往會執(zhí)著于追求技術(shù)。
但往深處想想,我們作為開發(fā)者,其實工作是在滿足需求。業(yè)務(wù)開發(fā),滿足的是用戶的需求。技術(shù)開發(fā),滿足的是其他開發(fā)者的需求。
當(dāng)了解這個本質(zhì)以后,我們就可以多從需求的角度去思考一些問題,一些難以用技術(shù)解決的問題,可以從需求的角度去解決。
四、對方法論的一些思考
5WHY 分析法 和 第一性原理,就是這篇文章想分享給讀者朋友們的兩個思維方式。
5WHY 分析法重在問題產(chǎn)生后進行分析,通過一系列的層層追問探尋問題的根源和本質(zhì),以針對性的解決問題。
第一性原理,重在探尋事物的本質(zhì),盡量避免他人的干擾。
最后,想談?wù)剛€人對 方法論 的一些思考。
有些公司內(nèi)部會比較強調(diào)方法論。而很多人對此詬病頗多,認為是流于形式,不追求實質(zhì)。
我之前也是這樣認為的,不過最近有了改觀。 個人對方法論的理解是這樣的:方法論必須存在,但是不能拘泥于此。
如何講呢?
首先是方法論必須要存在
方法論是我們觀察事物,處理問題總結(jié)的一套理論體系或者系統(tǒng),是大量實踐以后總結(jié)的經(jīng)驗。為什么必須要存在呢?因為方法論的存在,可以更好的指導(dǎo)后續(xù)的工作學(xué)習(xí)生活。有了方法論的指導(dǎo),后面的探索過程會大大減少。
有些讀者朋友可能會說,我不使用方法論,也可以很好的解決問題。(不瞞大家說,我之前也是這樣想的)。后來我想清楚了這個問題中的關(guān)鍵點,如果解決問題的方式,每次都有一定的套路,一定的流程,其實這個時候已經(jīng)形成了自己的一套方法論,只不過沒有白紙黑字寫出來而已。如果每次解決問題的方式總是在變化,那只能說是運氣使然,解決問題恰好碰到對應(yīng)的方法,就相當(dāng)于段譽的六脈神劍一樣,時而有效時而無效。
不能拘泥于此
方法論的形成,可以指導(dǎo)后續(xù)的工作學(xué)習(xí)生活,但是問題總是在變化,所以不能拘泥于已經(jīng)形成的方法論,而是要在變化中運用,不斷擴充,修改,再具體問題具體對待。
上面就是個人對軟件開發(fā)過程中思維方式的一些思考,希望能幫助到讀者朋友們。
參考資料
baike.baidu.com/item/5why分析…
www.huxiu.com/article/250…
www.woshipm.com/pmd/841189.…
old.geekpark.net/topics/2123…
總結(jié)
以上是生活随笔為你收集整理的软件开发过程中的思维方式 -- 如何分析问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 饥荒海难灯塔有什么用(饥荒中文版下载)
- 下一篇: 欢迎使用CSDN-markdown编辑器