天天看點

【軟體工程】提問回顧與個人總結

一、提問回顧

  在學期剛開始的時候,我們閱讀了鄒欣老師的《建構之法》這本書,對其中不太了解的地方提出了幾個問題,當時提出的問題在部落格: 【軟體工程】第1次個人作業 。問題如下:

  1. 如何選擇專和精?需要結合哪些方面考慮?

   我在當時認為不應該隻結合自身情況考慮專和精的方向,也應該結合目前時代的熱點領域和科技的發展狀況等等,但現在看來是像書中所說的那樣優先考慮自身情況。如果盲目的去學習和專精社會的熱門領域,比如目前大資料和人工智能比較熱門,但是計算機領域的技術變革是相當快的,這樣盲目的追求熱門領域是不切實際的。而是應該結合自身的情況,發現自己的優點長處和缺點弱勢,再結合自身的興趣來決定未來的專精領域,這樣才能讓個人的能力得到更好的發展和進步。

  2. 最好的程式設計語言是否存在?

  說實話,現在這個問題我也不太清楚答案。不同的程式設計語言都有自己的長處和弱點,在某些特定情況下,某個語言能發揮出更好的作用而已。但是對于同一個任務,如果任何程式設計語言都能解決問題,但是對于某個人來說比較熟練某個特定的語言,那麼這個語言對這個人來說就是最好的程式設計語言。是以書中說,最好的程式設計語言是一個意見,并不是事實。

  3. 結對程式設計中角色互換是否有必要?

  在沒有進行結對作業之前,我認為角色互換是沒有必要的,因為一旦熟悉了一個位置的工作,那麼互換工作會造成不必要的麻煩,例如重新熟悉目前角色的任務,熟悉對方的代碼等等。但是在實際進行過結對程式設計之後,我發現了角色互換的重要性。一是更好地全面地發現程式設計過程中的不足之處,如果從頭到尾一直處于同一個角度,那麼是很難發現問題的存在的;另外一點是可以緩解開發人員的壓力,如果開發工作都是由一個人完成,那麼壓力無疑是巨大的,容易造成觀察力和判斷力的大幅度下降而造成不可避免的後果。事先設定好代碼規範和代碼注釋等要求,就可以避免熟悉代碼這個過程。

  4. goto的作用?

  助教在之前的部落格中已幫助我解答了這個問題,goto是一種語言習慣,目的是為了實作不同代碼間的靈活跳動,但是缺點在于加入了goto後代碼會變得更加複雜而難以讀懂,是以一般情況下不推薦使用goto函數。

  5. 如果結合模組化和代碼實作?

  在這學期沒有經曆過團隊開發之前,我認為模組化的工作和代碼實作的工作都是由一個人獨立完成的,是以工作量巨大,難以很好地銜接和實作。但是在團隊開發過程中,模組化的過程是由PM來完成的,因為PM需要把握項目的目标和功能,是以在開發過程中,我們是由PM來設定模型,回報給前端和後端來進行開發和代碼實作,同時設定好規格和接口文檔,是以巨大的任務量配置設定到每個人身上就不是很重了。這樣既能夠很好地銜接模組化和代碼實作功能,又能夠更好地節省時間。

  6. 為何在學校沒有接觸到創新理念相關的課程?

  問出這個問題來,确實是沒有參與過團隊工程的開發。創新對于一個開發團隊來說是至關重要的,但是創新理念是無法教給一個人的,在團隊開發過程中,我深刻意識到,創新理念的出現往往來源于例會和brain storm,是需要團隊每個人參與的。一個人的智力和精力是有極限的,但是一個團隊的人在一起思考和努力,會起到1+1>3的效果,進而出現很有創新意義的點子。

二、在項目的需求/設計/實作/測試/釋出/維護階段都學到的“知識點”

  1. 需求階段

  在需求階段,我認識到光是理論上考慮使用者的需求是不夠的,更多的應該是深入進行調查,比如問卷調查的形式,來聽取使用者們的需求和建議。我們小組通過問卷調查和回報得到了不少極其有用的建議。

  2. 設計階段

  設計階段給我的最深的體驗就是,一定要花大量的時間和精力在這上面,不然在開發過程必然會遇到不少問題。一個項目或者産品在擁有良好設計的基礎上,才能夠更好的擴充和開發,否則可能會遇到需要重新設計的問題。

  3. 實作階段

  PM雖然沒有參與到開發實作階段,但是其作用也是十分重要的,比如把控進度。實作階段的進度必須是按時推進的,這樣才能給開發人員時間去深入測試産品的各方面。同時實作階段如果出現了問題,必須溝通團隊成員馬上解決,如果一個bug擱置,可能會起連鎖反應産生更多的bug,這就得不償失了。

  4. 測試階段

  在團隊開發過程中,測試這個部分教給我的就是:單元測試一定要緊跟實作階段。在開發人員完成一個階段的代碼任務時,測試人員需要同步進行單元測試,一是為了立刻發現代碼中存在的問題,而是為了後續的整體測試留出足夠的時間。如果都累到一周的時間完成,那麼工作量太過于巨大。

  5. 釋出階段

  明确釋出前的目标,也就是必須實作哪些功能才能釋出。在設計功能時,我們小組設定了幾個需要完成功能的優先級,優先級高的任務,要麼是核心功能,要麼是極大提高使用者體驗的功能,是以優先實作。在釋出前,必須先将這些主要任務完成,同時測試必須不出現問題,這樣才能去釋出産品。

  6. 維護階段

  可能很多人認為開發測試釋出後,就沒有任務了。這是明顯錯誤的想法,維護階段也是極其重要的,最基本需要做到的是規格文檔、接口的維護,其次比如我們的項目是網站,那麼伺服器維護也是必須的。我們團隊在beta階段開發過程中,伺服器被黑導緻使用者資料丢失,一方面是因為前端開發人員在設定時未考慮周全,另外一方面也是沒有做好項目的維護。是以維護階段不能懈怠,更應該注重。

三、軟體工程心得體會

  在這門課開始以前,其實是不太明白軟體工程能教給我們什麼知識,因為計組、OO這些課程把大部分知識已經傳授給我們了,但是經過一個學期的學習之後,才發現軟工這門課的魅力。經曆過結對作業以後,我們對軟體的開發過程和結對的好處有了一定的了解,在團隊開發的過程中,我和我的隊友們更是一起努力,做出了一個visual pytorch的網站。這種從無到到有,經過團隊協作,共同努力,各抒己見的過程,最後完成一件事的成就感是無與倫比的。這個過程中,我們的默契逐漸提高,我們的項目逐漸完善,大腦的知識得到了充實,也提高了責任心。雖然這門課也有一些不足的地方,比如強制換小組成員,不過相信會越來越好。