軟件工程網絡15我的閱讀做業2-提出問題

提出問題

快速通讀教材《構建之法》,並參照提問模板,提出5個問題。html

1.複雜性、易變性是什麼意思?怎麼樣的編程做業纔算加入了軟件特性?

我看了這一段文字程序員

軟件工程的編程做業,不只僅是程序,而是要加入軟件工程的要素(複雜性、易變性和其餘),有價值的軟件工程的做業必需要觸及者兩個基本要素!編程

                             ——引用於教材第2章-2.4 實踐—設計有實際意義的軟件工程做業網絡

經過這段話,我直接想要提出的問題是:複雜性、易變性是什麼意思?怎麼樣的編程做業纔算加入了軟件特性?
接着看了書上關於軟件特殊性的介紹(複雜性、易變性等是軟件特性),它是這麼介紹複雜性和易變性的:架構

複雜性——軟件能夠說是人類創造的最複雜的系統類型。大型軟件(操做系統、辦公軟件、搜索引擎)有超過百萬行的源代碼,上萬個不一樣的文件。……軟件的各個模塊之間有各類顯性或隱性的依賴關係,隨着系統的成長和模塊的增多,這些關係的數量每每以幾何級數的速度增加。而理解運用這些複雜性的人並無太大的變化。
易變性——軟件看上去很容易修改,修改軟件比修改硬件容易多了。……可是與此同時,正確地修改軟件是一件很困難的事情。框架

                                      ——引用自教材第1章-1.2.1 軟件的特殊性工具

在2.4接着閱讀了例舉的兩個軟件設計原則以及各方面的擴展舉例,單元測試

咱們以兩個軟件設計原則爲例,第一,單一職責原則(Single Responsibility Principle,SRP)指出
      一個模塊(類)應該只有一個致使它變化的緣由,一個模塊應該徹底對某個功能負責。
……
另外一個重要的軟件設計原則是開放-封閉原則(Open-Close Principle,OCP):
      軟件實體應該是能夠擴展的,同時是不可修改的。
……
那麼如何引入學生能承受的複雜度呢?如何引入「變化的軸線」呢?咱們能夠把簡單的程序從幾個維度逐步擴展,增長複雜度,引入不一樣的需求,提升需求的易變性,在這個過程當中,鍛鍊程序員對各類軟件設計原則、軟件工程原則的理解和應用,軟件的適應性也獲得增強。
……測試

                             ——引用於教材第2章-2.4 實踐—設計有實際意義的軟件工程做業搜索引擎

大概瞭解如何使軟件編程加入軟件特性,簡單來講就是,根據需求把簡單的程序從幾個維度逐步擴展。
除此以外,我還想要知道的是:
(1)有「超過百萬行的源代碼,上萬個不一樣的文件」這樣特徵的軟件就具備複雜性了嗎?還有沒有什麼其它的特色呢?
(2)易變性是指軟件自己是容易修改的,由於軟件是由衆多的源代碼構建出來的,源代碼容易被改變?(好像有點傻)

2.RUP是什麼?

當我看到教材第5章-5.3.4 Rational Unified Process 統一流程(RUP)時,最直接的,我想問RUP是什麼?
書上說

從瀑布模型開始的各類模型都有一個共同點:重計劃,重事先設計,重文檔表達。這一類的方法中集大成者要算Rational統一流程(Rational Unified Process,RUP)。RUP把軟件開發的各個階段整合在一個統一的框架裏。

                           ——引用於教材第5章-5.3.4 Rational Unified Process 統一流程(RUP)

教材還介紹了RUP的工做流和開發過程,但我沒有看到有對RUP含義的介紹,因而我查了度娘,

RUP(Rational Unified Process),統一軟件開發過程,統一軟件過程是一個面向對象且基於網絡的程序開發方法論。
瑞理統一過程(RUP)是Rational軟件公司(Rational公司被IBM併購)創造的軟件工程方法。RUP描述瞭如何有效地利用商業的可靠的方法開發和部署軟件,是一種重量級過程(也被稱做厚方法學),所以特別適用於大型軟件團隊開發大型項目。

                                          ——引用於RUP_百度百科

這使我知道了RUP是一種軟件工程方法,它能夠爲全部方面和層次的程序開發提供指導方針,模版以及事例支持;RUP的本質是一個流程定義平臺,是一個流程框架。
我還想知道的是:迭代開發具備不少優勢,但怎樣的開發項目不適合採用迭代式開發呢?

3.敏捷開發與RUP有什麼不一樣之處?

教材第6章全章都在寫敏捷,

在軟件工程的語境裏,「敏捷流程」是一系列價值觀和方法論的集合。

                                    ——引用於教材第6章-6.1 敏捷的流程簡介

可是,敏捷究竟是什麼?同上面一個問題同樣,我對這樣的術語仍是不理解(專業知識的底子到底仍是太差了,求推薦相關的基礎書目),網絡資源就這樣派上了用場……

敏捷開發以用戶的需求進化爲核心,採用迭代、按部就班的方法進行軟件開發。在敏捷開發中,軟件項目在構建初期被切分紅多個子項目,各個子項目的成果都通過測試,具有可視、可集成和可運行使用的特徵。換言之,就是把一個大項目分爲多個相互聯繫,但也可獨立運行的小項目,並分別完成,在此過程當中軟件一直處於可以使用狀態。

                                          ——引用於敏捷開發_360百科

再貼上一張圖

       

但是,看着這個概念,再對比一下跟RUP的含義,我有點懵:敏捷開發與RUP有什麼關係?他們的不一樣之處在哪裏?
看着書上的介紹,他們看起來好像不一樣,可是看着網絡上找到的含義,他們又都是迭代式開發?!我只好帶着疑問搜索。

RUP是一個通用的過程框架,適用於大型軟件的開發。它的突出特色是用例驅動,以架構爲中心,採用迭代和增量的開發策略。從軟件工程的觀點看,RUP的核心體如今:迭代的開發軟件,管理需求,使用基於組件的架構,爲軟件可視化建模,驗證軟件質量,控制對軟件的變動。RUP爲軟件開發團隊提供指南,文檔模板和工具,但同時缺少靈活性(必須嚴格遵循9個工做流,而敏捷開發則是「能用則用,能不用則不用」)。
敏捷是輕量級的軟件開發方法,適用於小型軟件的開發,它很是注重瞭解團隊每一個成員的優勢,缺點。發揮隊員的長處,幫助隊員克服弱點,互相幫助,共同成長,最終整個團隊的能力獲得提升。但其缺點是不正規,沒有粒度較細的需求文檔以及客戶反饋的意見文檔。也沒有具體一點的體系結構。

                                          ——引用於RUP與敏捷開發之比較

它們的異同但願老師上課會涉及到。

4.咱們在開發軟件的時候,要用到哪些測試方法?什麼階段用什麼方法?

第13章 軟件測試 介紹了許許多多的測試方法,也介紹了它們的分類、功能以及用法(這裏不一一列出),但我想知道的是:這些方法都要在咱們進行軟件測試時採用嗎?那什麼階段應該用什麼方法呢?
經過蒐集資料,我瞭解到軟件開發過程當中經常使用的軟件測試方法有:單元測試[程序內部數據測試],集成測試[單元測試以後],效能測試[單元測試,整合測試以後],迴歸測試[發生修改以後從新測試],驗收測試[軟件測試過程的最後一步]。(好像漏了些什麼)
而且這一章讓我想到第一節課老師佈置做業時說到的團隊做業中的Alpha階段、Beta階段,當時我還不知道什麼意思,如今看來,Alpha階段應該指的是α測試階段?!Beta階段階段應該指的是β測試階段?!

Alpha測試是由一個用戶在開發環境下進行的測試,也能夠是公司內部的用戶在模擬實際操做環境下進行的受控測試,Alpha測試不能由該系統的程序員或測試員完成。
β測試是軟件的多個用戶在一個或多個用戶的實際使用環境下進行的測試。開發者一般不在測試現場,Beta測試不能由程序員或測試員完成。

(看到第15章,發現不太對)

Alpha階段是指集成了主要功能的第一個試用版本。
Beta階段是指功能基本完備,穩定性較Alpha版本高,用戶能夠在實際工做中小範圍使用。

                                         ——引用第15章-15.1 從代碼完成到發佈

5.爲何領域外更有創新者?

這個問題來自第16章 IT行業的創新-16.1.5 迷思之五:要成爲領域的專家,才能創新。這一小小節中列出了兩個不是領域內專家卻得到創新成果的人的例子。小節結尾提出的問題引起了個人興趣,根據做者的推薦,我參考了《像外行同樣思考,像專家同樣實踐:科研成功之道》這本書(沒看完)。
個人一點點想法:某領域的專家通常會用這個領域的思惟模式對他接觸的事情進行思考,而領域外的人看待某個領域的這個事情是多方面的,幾乎不受侷限性的,提出任何本身想到的想法,在這個領域中可謂是創新。


問題暫提到這裏,但願你們批評指正。(感受本身的問題有點怪怪的,尚未學會提好問題)

附加題

請將問題提交至豆瓣:https://book.douban.com/subject/27069503/, 並在博客中給出連接
在豆瓣頁面的最下方 「讀書筆記」 那裏發言, 《構建之法》的做者會親自答覆問題

(看了讀書筆記的內容,但本身尚未想到哪些能夠提出的好問題。~. ~)

相關文章
相關標籤/搜索