上一週我給大家總結分享了軟件工程之美當中的開發編碼篇,這週會繼續分享軟件測試篇中的內容:
31 | 軟件測試要爲產品質量負責嗎?
首先這個問題軟件測試要爲產品質量負責,但並不代表軟件測試要擔所有的責任,因爲在軟件工程當中,我們包含多個環節,比如:
- 需求環節
- 設計環節
- 開發環節
- 測試環節
每個環節都可能導致質量問題,而測試只是負責最後驗收,它不能確保軟件完全不出問題。
我們常說是軟件產品質量是什麼?
- 功能質量(Bug數量、性能、UI/UX等指標)
- 代碼質量(可維護性、可讀性、執行效率、安全性、課測試性)
- 過程質量(是否如期,開發成本可控)
以上的定義相關影響,共同決定軟件的質量。
誰該爲產品質量負責?
不同的角色應該承擔不同的責任:
- 軟件測試:對功能質量負責,產品測試驗收,確保滿足功能需求
- 開發人員:對代碼質量負責,寫測試代碼,通過自動化的方式做功能測試
- 項目負責人:對過程質量負責,起主要責任
最理想狀態:人人都爲產品質量負責。
32 | 軟件測試:什麼樣的公司需要專職測試?
軟件測試的主要工作
- 發現bug
- 報告bug
- 跟蹤bug
如何發現bug?
根據需求設計測試用例,儘可能覆蓋所有用戶操作的可能。除了基本的功能性測試,還需要進行非功能性的測試,包括性能、安全性和用戶體驗等。測試人員通過設計出完整的、有較高覆蓋率的測試用例,逐一測試,這樣就可以做到及時發現bug。
如何報告bug?
發現bug之後,通過bug跟蹤系統跟開發人員創建Ticket,詳細說明bug的內容,包括以下部分:
- 預期和實際效果
- 重現步驟
- 必要的截圖、日誌等輔助信息
如何跟蹤bug?
除了報告bug讓開發去修復,測試人員還應該針對bug的修復驗證。通常就是我們常說的迴歸測試,避免開發者因爲修復一個Bug,引入其他的問題。
關於一些大廠不設置專職測試的話題
比如Facebook、Google和Amazon這些公司之所以能夠做到不設置專職測試,它們都有以下共同的特點:
- 大量優秀的工程師,可以同時兼任開發和測試;
- 有大量的自動化測試代碼覆蓋
- 強大的發佈和監控系統
- 時間進度比較寬鬆
- 用戶對Bug容忍較高
光是第一條,國內很多公司都達不到,我個人覺得人才是最重要的一環,能夠寫自動化測試代碼並且保證覆蓋的工程師本身就稀缺,還要依賴完備的發佈和監控系統;從時間的調性,國內強調KPI,產品競爭激烈,時間會壓得很緊,所以工程師首先壓的就是測試的時間,更別說是寫自動化測試了。
但從未來的趨勢看,開發和測試更多的融合是一種常態,對工程師要求會越來越高;我認爲完全不設置測試崗位不現實,類似一些功能性測試或許會從正式人力變成外包的形式,而正式人力會更多要求有開發能力去開發能提升測試效率的工具和搭建平臺。
33 | 測試工具:爲什麼不應該通過QQ/微信/郵件報Bug?
一個基本的Bug信息包括
- 標題;
- 描述(包括期望結果、實際結果和重現步驟等關鍵信息)
- 優先級;
- 指派人;
- 狀態(New、Open、Rejected、Fixed等);
- 其他。
爲什麼不用QQ、郵件等方式處理Bug?
- 不易檢索和跟蹤
- 效率太低,開發人員容易被消息打斷
- 不夠直觀,比如各種狀態的統計
Bug跟蹤系統的主要功能是用來跟蹤Bug的,不是用來討論和扯皮的。
一些自動化測試的趨勢
- 國外的一些大廠,手工測試職位在減少,轉變招聘能寫自動化測試的軟件測試人員
- 軟件開發人員不僅要能寫功能代碼,還需要實現一定量的自動化測試代碼
關於寶玉老師列的一些軟件測試工具我就不重複貼了,感興趣自己去訂閱看看。
34 | 賬號密碼泄漏成災,應該怎樣預防?
這節課從標題上就能知道有關安全的話題,軟件中的安全問題來源主要分爲以下三大類:
- 第一類:惡意輸入(比如SQL注入、XSS攻擊)
- 第二類:假冒身份(後臺沒有做權限控制)
- 第三類:數據泄露(賬號密碼明文記錄,日誌泄露)
如何應對安全問題?
-
需求階段就明確要求安全需求,做出針對性預防措施;比如用戶權限的,要求有身份的驗證;敏感信息,對數據進行加密等
-
設計階段,從架構層面增加安全方面的評審
- 攻擊面最小化
- 權限最小化
- 縱深防禦
-
開發階段,保證良好的編碼習慣和安全意識
- 編碼規範中加入安全相關內容
- 要有代碼審查
- 增加安全相關的自動化測試
-
測試階段,增加安全性方面的測試
-
上線維護階段
- 不部署源代碼,只對編譯後程序部署;刪除Debug文件
- 對服務器進行安全設置,比如說嚴格限制端口,只保留必須的端口;只對少數服務器開發外放服務;開啓操作日誌;對訪問目錄設置最小的權限。
出現安全問題怎麼辦?
- 設立應急流程,出現問題知道找誰,第一時間恢復生產,避免進一步損失
- 分析漏洞源頭,可以通過分析日誌,找出漏洞所在,針對性修復
- 總結分析原因,吸取教訓,改進流程,避免再次發生
最後
這周主要的學習內容是軟件測試相關的,測試雖然是軟件工程中一個環節,但也是非常重要的環節,它是保證產品質量的一道關卡,需要爲產品最後驗收的質量負責,幫助產品發現更多的bug。以前我們常常把開發和測試獨立劃分開,但隨着研發模式進化,測試也逐漸成爲開發人員也需要兼顧的角色,通過自動化測試的手段來減少手工測試,提升研發效率。這也給我們帶來一些啓示,未來測試的角色的工作會有所變化,開發的邊界也不再侷限於寫代碼這個角色,能夠給產品帶來效能的改進,就不應該設置邊界。人人都應該爲產品質量負責,人人都是產品經理。