軟件工程第一次做業補充

軟件工程第一次做業補充

  • 花20分鐘寫一個能自動生成小學四則運算題目的「軟件」,要求:除了整數之外,還要支持真分數的四則運算。將代碼上傳至coding.net,並將地址發佈至本身的博客。

四則運算代碼linux

  • 在一週以內快速看完《構建之法》,列出你不懂的5-10個問題,發佈在本身的博客。
  • 1.單元測試應該覆蓋全部代碼段,如何肯定是否覆蓋了全部代碼段?單元測試又該何時去寫?
    我看了第二章關於單元測試的內容後,我有個想法,單元測試如此重要,可是有沒有有效的辦法確認單元測試是否覆蓋了全部代碼段呢,單元測試又該何時去寫呢?我查了資料,資料上說在實際的工做中,能夠沒必要過度強調先什麼後什麼,重要的是高效和感受溫馨。先編寫產品函數的框架,而後編寫測試函數,針對產品函數的功能編寫測試用例,而後編寫產品函數的代碼,每寫一個功能點都運行測試,隨時補充測試用例。所謂先編寫產品函數的框架,是指先編寫函數空的實現,有返回值的隨便返回一個值,編譯經過後再編寫測試代碼,這時,函數名、參數表、返回類型都應該肯定下來了,所編寫的測試代碼之後需修改的可能性比較小。可是我不多看到具體介紹如何判斷單元測試是否覆蓋了全部代碼段,書上還說「100%的代碼覆蓋率並不等同於100%的正確性」,這讓我有些困惑。
  • 2.軟件=軟件工程+程序,那麼軟件工程和程序哪一個更重要?軟件工程的側重點又是什麼?
    書上第一章P4說軟件=軟件工程+程序,可是軟件工程和程序哪一個更重要?軟件工程的側重點又是什麼?我查了資料,百科上說軟件工程是研究和應用如何以系統性的、規範化的、可定量的過程化方法去開發和維護軟件,以及如何把通過時間考驗而證實正確的管理技術和當前可以獲得的最好的技術方法結合起來的學科。它涉及到程序設計語言、數據庫、軟件開發工具、系統平臺、標準、設計模式等方面。可是定義太過抽象,我有些困惑,看了這本書後,我只有一個隱約的感受,軟件工程彷佛側重人際交往,合做,那麼程序是否不比軟件工程重要呢。
  • 3.敏捷流程是不是現代軟件開發的主流?
    我看了第六章敏捷流程後,發現如今敏捷開發愈來愈火,愈來愈多的人使用這個模式,由於它是以人爲核心,注重交流和協做,強調軟件可持續發展,實現頻繁交付對客戶最重要的價值的開發模式。書上列舉了不少敏捷流程的優勢,我也以爲敏捷流程是大勢所趨,由於軟件開發是以人爲本,這種模式十分試用。可是這種模式沒有什麼缺點嗎,書上只是略加點出,我有些疑惑。另外,是否還有其餘模式適合當今的軟件開發呢?能夠多個模式相結合嗎?
  • 4.軟件團隊的模式對軟件開發的影響?軟件團隊的模式是否指的是集體主義?
    我看了第五章第二節軟件團隊的模式以後,以爲大部分軟件團隊的模式都是大同小異,都是有一箇中央領導者,統籌全局,剩下的人各自分工,最終完成一個項目,那麼這是否意味着只要保證上述分工,那麼軟件團隊的模式對軟件開發的影響能夠降至最低,這樣看來,爲何還要劃分不一樣的模式呢?另外,團隊合做主要在於團結互助,這和集體主義相似,那麼軟件團隊的模式是否意味着集體主義?
  • 5.用戶體驗應該何時開始考慮?工程師和設計師的區別又是什麼?它們之間的交互方式又如何判斷?
    我看了第五章用戶體驗後,有了疑問,用戶體驗應該何時開始考慮,是在軟件開發的開始就進行,仍是等到代碼寫的差很少了再進行呢?書上P245講述了一個GE公司的故事,他們由於沒有注重用戶體驗,最後付出了極大的代價,這是否意味着一開始就應該進行用戶體驗,杜絕這一點呢?另外,我從網上查了一下設計師的區別,設計師有不少,如用戶體驗設計師、UI 設計師和交互設計師等,這些設計師都有細微的差異,可是他們的側重點都是用戶體驗,而工程師注重的是軟件的質量,可是不多有介紹到二者之間的交互方式,書上也沒有具體說起,這點我有些疑惑。
  • 軟件有不少種:包裝在盒子裏的軟件、基於網頁的軟件、企業或學校或某組織內部的軟件、遊戲、手機應用、操做系統、工具軟件,選取三種軟件,請分析它們各自的特色。
    1)這些軟件開發者是怎麼說服你(陌生人)成爲他們的用戶的?他們的目標都是盈利麼?他們的目標都是賺取用戶現金麼麼?仍是別的?
    2)這些軟件是如何到你手裏的(郵購,下載,互相拷貝)
    3)這些軟件是如何處理Bug的?又是如何更新新的版本的?
    4) 同一類型的軟件之間是如何競爭的?
  • 手機應用:
  1. QQ,微信,淘寶,學堂在線,餓了麼,WPS等都是手機應用,因爲它們的功能強大,適用於用戶需求,方便用戶學習、生活,因此用戶會主動使用它們。
  2. 這些手機應用主要目的是爲用戶服務,再此基礎上會衍生出更高效、方便的功能,可是這些功能通常都須要付費使用,開發者經過這些功能盈利,並對軟件進行進一步的優化。此外,在用戶註冊這些手機應用時,開發者會獲取用戶信息用做其餘用途,或經過用戶反饋的信息優化軟件。
  3. 手機應用通常經過手機自帶的軟件商店、百度或應用寶等下載而來。
  4. 通常都是經過打補丁的方式,將更新的資源包發送給用戶,讓用戶去安裝更新。
  5. 同一類型的軟件之間的競爭主要依靠取長補短,向用戶宣傳它的優勢,將付費的功能免費向用戶開放,來吸引用戶。
  • 操做系統:
  1. 像windows, UNIX ,linux ,android ,ios 等操做系統,分別應用於移動端和pc端。
  2. 開發者會將這些系統軟件安裝於買到的手機或計算機中,讓用戶使用,用戶在購買手機或計算機的時候,就至關於給這些操做系統間接付款。
  3. 讓客戶經過操做系統使用這些智能工具,真正實現工具的價值。正版的操做系統通常都須要付費購買,這些都被算在手機或計算機的價值以內。
  4. 能夠經過網上下載,相互拷貝,或者在買智能工具的時候直接安裝。
  5. 操做系統做爲一個很大型的軟件,與硬件直接接觸,確定會存在Bug,或者會有組成部分進行更新,正版的操做系統會收到更新通知,而後自動下載,或者能夠本身去官網上下載安裝。
  6. 通常操做系統的競爭主要是經過良好的界面,方便人機交互,讓計算機系統全部資源最大限度地發揮做用,讓用戶得到更好的使用體驗以及儘可能少的Bug。
  • 工具軟件:
  1. 殺毒軟件、備份軟件等都屬於工具軟件,這些軟件功能較爲單一,但都是針對用戶需求設計,有些在用戶購買電腦時直接安裝,有些則是用戶在須要時會主動去網上下載安裝。
  2. 大部分工具軟件都是無償使用。開發者經過用戶反饋的信息優化軟件。
  3. 幾乎全部的工具軟件均可以在網絡上直接下載使用。
  4. 去官網下載安裝包,或在接收更新提醒時直接更新。
  5. 同一類型的軟件之間的競爭主要依靠軟件質量決定,讓用戶得到更好的使用體驗以及儘可能少的Bug。
  • 列舉你在使用上述軟件時觀察到的「特殊」現象,它們和硬件有什麼不一樣?這些能說明軟件的某些本質特性麼?
  1. 軟件就是程序,存在於硬件中,調動硬件的執行,是硬件的頭腦和靈魂。
  2. 硬件產品設計定型後能夠批量生產,產品質量經過質量檢測體系能夠獲得保障。可是生產、加工過程一旦失誤,硬件產品可能就會由於質量問題而報廢。而軟件生產是「定製」的,只能針對特定問題進行設計或實現。一旦實現後,其生產過程只是複製而已,而複製生產出來的軟件質量是相同的。設計出來的軟件即便出現質量問題,產品也不會報廢,經過修改、測試,還能夠將「報廢」的軟件「修復」,投入正常運行。可見軟件的質量保證機制比硬件具備更大的靈活性。
  3. 軟件五花八門,實現同一種功能會有不少不一樣的軟件,可是同一種器件,組裝它的硬件卻不會有不少種。
  4. 硬件產品存在老化和折舊問題。當一個硬件部件磨損時能夠用一個新部件去替換他。硬件會由於主要部件的磨損而最終被淘汰。對於軟件而言,不存在折舊和磨損問題,若是須要的話能夠永遠使用下去。可是軟件故障的排除要比硬件故障的排除複雜得多。軟件故障主要是由於軟件設計或編碼的錯誤所致,必須從新設計和編碼才能解決問題。
相關文章
相關標籤/搜索