【賀!正式成為 JetBrains Training Partner】
能成為 JetBrains 的 Training Partner,其實對我來說是個重要的認同。
雖然,我們一直都不是關注在工具上,而是關注在 #商業價值。
在怎樣的限制底下,透過怎樣的組合、怎樣的工具、怎樣的解決方案、怎樣的方法論、怎樣的協作方式,能幫助我們獲得最大的 ROI,那才是我們關注的點。
軟體產品開發,就像大家說的「又快又好又便宜」是不存在的,那麼我們的目標就該放在「讓我們產品能做得又快又好,自然產品跟服務的售價就可以跟著價值成正比。」
每每聽到團隊在哀時間不夠、技術債太多、產品太難維護,但是:
1) 很少看到團隊在想辦法縮短交付需要的時間(都是在抱怨交付需要更多時間),仍用著土法煉鋼、土砲式的開發工具跟開發方式,喜歡人工處理一切事務再來承擔時間、風險、成本帶來的負面影響。
2) 很少看到避免欠債與定時清理技術債(其實大部分的人 #只懂得欠債的開發方式,而不是時間或環境限制了他們)
3) 很少看到有人在寫完產品代碼的前後馬上加入對應的 #自動測試程式 (不論是單元測試還是驗收測試),然後進行 #持續重構、#即時重構(他們把時間拿來抱怨前人的遺留代碼有多髒多臭多重)
我們擅長用高科技的工具或產品來幫助我們更快交付更高的價值,就跟現代戰爭一樣,一顆巡弋飛彈這麼貴,但只要能達到更高的戰略價值,減少犧牲、增加勝算、縮短需要的時間,那就是個足夠好的投資。
有好工具,也要搭配對的開發方式、正確的方法,才能加乘整體的綜效。
※ JetBrains Training Partners: https://www.jetbrains.com/company/partners/#countries=Taiwan&profession=TrainingPartner
--
成為 training partner 最大的好處是,至少上課的時候,能 request 專門上課用的短暫有效 license,讓大家在上課時能更關注在目標和學習的內容上。
同時也有1部Youtube影片,追蹤數超過18萬的網紅公視新聞網,也在其Youtube影片中提到,促轉會今天公布中正紀念堂轉型的規劃構想,將以「反省威權歷史公園」為主軸,改造威權空間與重構紀念敘事,並對園區內主要威權象徵有三大處置措施,包括移除大廳銅像,改造堂體功能及外觀,以及破除園區整體崇拜軸線。 詳細新聞內容請見【公視新聞網】 https://news.pts.org.tw/article...
即時重構 在 91 敏捷開發之路 Facebook 八卦
很多人以為,測試人員「只靠測試」,來測出 bug,但事實上他們負責的是「品質」,他們的價值不只是測試本身,更多的是:
☆ 找出哪一些東西需要測試
☆ 說明哪一些東西不測試可能會有什麼樣的風險
☆ 哪一些東西雖然在開發人員的定義不是 bug,卻影響到使用者用起來的感受與品質
☆ 甚至他們需要在短時間內快速探索、學習「新產品」或「新領域」的能力,了解這樣的產品提供了怎樣的功能,是為了解決使用者的什麼問題。
這是我覺得「真正專業的測試/品質工程師」所具備的專業價值與能力,而且這很吃天賦、個人特質,不是每個人都適合或做好的。
很多專業的 QA 才是真正的 domain expert,他們的天性是發散、建立關聯、探索、聚焦、學習。
然而,如果把一般功能的驗證,產品開發的邏輯 bug,也都交給 QA 來一概承擔,那我覺得這產品的極限可能是「沒有 bug」,但「品質」不一定是高水準的,因為 QA 的能力被用在低效的產出上。
▍開發人員怎麼跟測試人員相輔相成
開發上大部分的 bug,都是因為「寫的跟想的不一樣」,想的沒 bug,寫出來卻有 bug。
※ QA 是幫忙解決:「想錯」的 bug。
這問題適合用「#單元測試」來解決,夠多扎實、涵蓋程度夠廣的單元測試,可以避免這類「低級錯誤」。
當正式環境產品出錯的時候,透過單元測試可以快速定位出問題的位置與原因。
※ 如何在賺錢的 legacy code 上,優雅地加入【單元測試】,請參考:https://dotblogs.com.tw/…/201905-unit-testing-effectively-w…
另一種 bug 是每個人寫的都沒問題,但串起來的部份沒做好。這類就適合依靠「#驗收測試」來模擬,站在使用者的角度,用使用者的情境,自動化的去「走」這些情境,驗證功能、情境、資料是否如同預期。
該怎麼確認我們的「驗收測試」沒有想法上的問題,會不會我們覺得是對的,但跟需求單位想要的不一樣?
當然有可能,而且很常發生。這問題通常透過「#實例化需求」來避免。在實例化需求過程,有需求單位、有 BA、有 QA、有 Dev (當然,這只是指團隊有人可以 cover 該角色所具備的技能即可)
那有沒有可能, #實例化需求 仍然不夠?例如:開發團隊做出來的,既符合當初的驗收情境,也通過 QA 的品質要求,PO 也認為這是當初講的東西,但看完之後,PO 覺得當時想錯了,他有更好的想法,或是需要更好的想法呢?
當然有可能!而且這才是「正常」。在看不到實際的功能、使用的情境,只有空想、文字、圖片或雛型,事實上是很難出現「更好的想法」。
但一旦看到了產品功能,一旦試著使用,就更容易激發出更好的想法、更多改善的方式。
所以,Agile 的「#快速迭代交付產品增量」、「#MVP / #MMF」、ATDD/TDD 的「#可行走的骨架」、「#曳光彈式開發」,都是為了能用最小的付出,獲得最大的 outcome。(這個 outcome 不只是功能本身,也包含了發現我們的功能根本是無用的廢物,或是發生了不同的 event 而產出更棒的作法)
最後,有沒可能上面的理想狀況都做好了,但產品卻因為功能頻繁修改,而越來越慢、越來越肥、問題越來越多?
當然有可能!所以,從一開始的設計,就要 #即時重構,要重構前要有測試的保護,如果一樣都要寫測試,那 #TDD 會比候補測試來得更加「事半功倍」,用測試來描述情境、驅動開發、維持易用性,搭配重構來穩定設計、確保彈性、夯實品質,讓開發與維護的成本曲線是緩慢上升、斜率趨近於0的直線。
※ 想要用測試描述需求、探索需求、分析需求,並找到核心的情境,適當的開發順序,請參考【TDD與持續重構】:https://dotblogs.com.tw/…/201907-evolutionary-development-t…
※ 想要從軟體架構設計上達到「職責、關注點分離」,讓團隊能依循這樣的設計規範來達到「消除重複」,可以善用【DI與AOP】的設計,請參考:https://dotblogs.com.tw/…/201905-dependency-injection-and-a…
如果該具備的基礎建設都有,該了解的功能實踐基本也都能掌握,但你的產品開發的瓶頸,最後是卡在「時間不夠」、「時程太趕」,那其實問題有兩種。
第一種,需求沒照價值的優先順序排列,且不具備「捨棄」低價值功能的勇氣,想要的太多,需要的太少,當然快不起來。另外這一類問題常見的還有,無法把需求 end-to-end 的切細切小。
第二種,就是開發能量的不足。老話一句,加人是沒用的。在產品開發的領域,scale-up 遠比 scale-out 實際多了。三四個精英可以抵得上兩三個團的戰力。
如我最近最常講的一句話:「我認同沒有時間是個問題,那你做了什麼來改善這個問題呢?」
※ 很多人的開發方式、開發環境、開發工具,根本是原始人等級的,想要往【極速開發】的領域邁進,請參考:https://dotblogs.com.tw/…/2…/11/29/201905-extreme-developing
最後,有沒可能講了那麼多,都只有自己會,但團隊不買單、老闆不買單?
當然有可能,導入變革本來就是軟硬技能的綜合體,如何發揮影響力,如何幫助大家無感,如何找到對的 roadmap,如何讓大家嚐到甜頭,如何讓大家自己想要?
這是敏捷教練+技術教練的職能範圍。
※ 想要 train 出自己團隊的 internal coach? 請參考【工程實踐與流程規範導入實務】https://dotblogs.com.tw/…/engineering-practice-and-process-…
▍Road Map
上述雖然好像是打廣告,但我真心希望各位產品開發的朋友們想一想,整個產品開發事實上真的要具備很多專業的技能。
我在 2018 年、2019 年所開立的課程,就是希望把這條 road map 拉出來,幫助大家打通。
每一塊都是不可缺少的拼圖,一環扣一環,你能找到兩塊拼圖拼起來,就可以獲得 1+1 > 2 的綜效。
最後,還有幾門主題是這條 road map 上我正在準備的內容:
① 實例化需求
② 敏捷落地 (agile, scrum, lean, kanban, XP 揉在一起的綜合技)
③ Exception and Error handling
希望能在 2019 年下半年,幫助大家開地圖,帶著大家一起砍怪升級練技能。
即時重構 在 91 敏捷開發之路 Facebook 八卦
對作者怎麼會去挑那種沒在實務上用TDD就像吃飯喝水一樣自然的人來當例子,感到疑惑。
幾點不同角度的補充:
1. TDD 導致效率低下,那是人的問題。
也是有人可以因此效率、生產力拉高。
我認同大部分人會效率低下,那是因為大部分人根本沒搞懂「測試驅動開發」、搭配正確的工具使用方式與開發順序,能發揮多大的效果。
2. 手動測試再自動化模擬,以及最後講的BDD很完美,可以知道作者其實在挑的是 classic TDD 的毛病,他個人也是贊同 ATDD 當切入點。
他同時也贊同先想清楚再寫測試或是定好目標再寫功能,差異只在目標如果清楚,可以不用先寫測試,也能寫功能。
但這也有另外一個盲點,正常來說測試寫起來非常快,幾乎就是目標情境明確之後,大腦的想法轉變成測試程式,趨近於講話的速度,有個「可以快速取得反饋」的自動測試擺在那邊,絕對比寫好之後手動測試要來得好多了。
而且別忘了,沒有自動測試就無法有效即時重構,而先有了產品代碼,寫測試就很花時間。
個人覺得作者有這種感受,是對拆分需求情境到每個情境都很小和單純還有些卡點。
TDD 只是一種把想法目標具現化出來後,朝向「simple design」的手段。
ATDD 則是以使用者需求情境為切入點,以終為始的聚焦做法,一開始就把方向定了,搭配「跟情境無關的都先不做」,就能瞬間提升幾倍的功率,避免複雜與過度設計。
BDD 則是希望更站在 domain 的角度、使用端的角度來關注、描述情境與功能使用,甚至能做到連非技術人員都看得懂你的程式要表達的情境,藉此更快速的取得「使用者或領域專家的反饋」
最後,TDD 為啥聽起來很棒,但實務上卻很少看到人家落實、內化、養成習慣?
因為TDD是多門軟硬技能都須具備的綜合戰技,少了一塊效果就會打折。當然,換另外一個角度,把這些基本功等練到十分扎實之後,用對方式一起發揮時,產生的綜效會是數十倍。
要舉個例子的話,就像獵人裡面的:「凝」、「堅」、「周」、「隱」、「流」、「圓」。
基礎功要夠扎實、要能靈活正確結合這些基礎功,還要能持續努力練習、改善與建立習慣,本來就不是每個人都做得到。當然,有個好的 mentor 來帶領著修行,還是很有效果的。
想體會、見識一下怎麼用 TDD 來獲得爆發性的效果,想有人帶著讓你知道你少了哪些基本技能、可以怎麼鍛鍊才能獲得結合之後的綜效:https://dotblogs.com.tw/hatelove/2019/06/22/201912-evolutionary-development-tdd-and-continuous-refactoring
—
我就是那個很自然 TDD 的開發人員,ATDD/BDD/TDD, 可以去問問客戶端一起 pair 過的工程師,我們是怎麼在實務上打通這一整條路的,我是怎麼不斷提問、引導、舉例、示範、動手完成產品功能的。
作者應該來問我,或是跟我 pair 一下的。
--
順便一提,我從來不「要求」開發人員要用「TDD」,我只是會在他們提出某些「問題」時,告訴他們我是用「TDD」來避免或解決這問題的。
TDD 只能是種習慣,不該是種開發規範。
TDD 是用來解決問題的手段,如果你不存在著這些問題,當然不一定需要用 TDD 來開發。如果你的問題有更剛好的解決方案(也就是對你來說,不成問題了),那你也不一定需要 TDD。
即時重構 在 公視新聞網 Youtube 的評價
促轉會今天公布中正紀念堂轉型的規劃構想,將以「反省威權歷史公園」為主軸,改造威權空間與重構紀念敘事,並對園區內主要威權象徵有三大處置措施,包括移除大廳銅像,改造堂體功能及外觀,以及破除園區整體崇拜軸線。
詳細新聞內容請見【公視新聞網】 https://news.pts.org.tw/article/543855
-
由台灣公共電視新聞部製播,提供每日正確、即時的新聞內容及多元觀點。
■ 按讚【公視新聞網FB】https://www.facebook.com/pnnpts
■ 訂閱【公視新聞網IG】https://www.instagram.com/pts.news/
■ 追蹤【公視新聞網TG】https://t.me/PTS_TW_NEWS
■ 點擊【公視新聞網】https://news.pts.org.tw
#公視新聞 #即時新聞
即時重構 在 面對重構的風險 - iThome 的相關結果
重構 必須是在了解原有程式邏輯的前提下進行修改,使得程式邏輯保持不變的情況下,提高程式碼的內部品質。但若修改者對原有邏輯的了解不夠全面、不夠完整、 ... ... <看更多>
即時重構 在 [Book] 重構:改善既有程式的設計| PJCHENder 未整理筆記 的相關結果
Chapter 6:第一組重構. Extract Function(提取函式). 時機. 作者認為,提取函式的時間不是依照程式碼的長度、也不是只有在程式碼會被重複使用 ... ... <看更多>
即時重構 在 即時空間重構| Bottom up 的片段日常 - 東海大學建築系 的相關結果
這個平台因應自動化科技/空間共享趨勢及新的土地利用模式在不同的基地中提供使用者依時間預訂空間使用,同時媒合空間使用需求時段,使單位面積的空間達到最高效率使用。在 ... ... <看更多>