foundation of software development 1
DESCRIPTION
TRANSCRIPT
Software Development for Large and Open Source Projects
Kun-Ta Chuang Department of Computer Science and Information Engineering
National Cheng Kung University
1
Software Development Foundation I
Kun-Ta Chuang Department of Computer Science and Information Engineering
National Cheng Kung University
2
• 版本控制(Revision control) – 維護工程藍圖的標準作法 – 能追蹤工程藍圖從誕生一直到定案的過程 – 軟體工程技巧,藉此能在軟體開發的過程中,確保由不同人所編輯的同一程式檔案都得到同步
4
概述
• 透過文檔控制(documentation control),能記錄任何工程專案內各個模組的改動歷程,並為每次改動編上序號
• 一種簡單的版本控制形式如下:賦予初版一個版本等級「A」。做了第一次改變後,版本等級改為「B」,以此類推。最簡單的例子是,最初的版本指定為「1」,當做了改變之後,版本編號增加為「2」,以此類推。
5
軟體版本控制
• 有時候,一個程式同時存有兩個以上的版本也有其必要性 – 例如:在一個為了部署的版本中程式錯誤已經被修正、但沒有加入新功能;在另一個開發版本則有新的功能正在開發、也有新的錯誤待解決,這使得同時間需要不同的版本並修改
7
軟體版本的控制方法
• 最簡單的版本控制就是保留軟體不同版本的數份copy,並且適當編號。許多大型開發案都是使用這種簡單技巧 – 雖然這種方法能用,但是很沒效率
• 因為保存的數份copy幾乎完全一樣 • 因為這種方法要高度依靠開發者的自我紀律,而常導致錯誤
8
軟體版本的控制方法
• 因此,有人開發出了將部份或全部版本控制工作自動化的版本控制系統。
• Delta encoding – 大部份的版本控制軟體採用Delta encoding:只保留檔案相繼版本之間的差異,這個方法可以更有效的儲存數個版本的檔案。
9
中央式系統 VS 分散式系統
• 中央式系統 – 由中央權威管理存取權限;或是像分散式系統容許多個單位同時進行,包括同時更動同一檔案。
– 傳統上版本控制系統都是採用中央式系統:所有版本控制的工作在一個伺服器進行,由中央權威管理存取權限「鎖上」檔案庫中的檔案,一次只讓一個開發者工作
10
• 分散式系統 – 開發者直接在各自的本地檔案庫工作,並容許多個開發者同時更動同一檔案,而各個檔案庫有另一個合併各個改變的功能。這個方式讓開發者能不靠網路也能繼續工作,也讓開發者有充分的版本控制能力,而不需經中央權威許可。分散式系統仍然可以有檔案上鎖功能。
– 分散式系統Linux kernel的發明人Linus Benedict Torvalds就是分散式版本控制系統的支持者,他開發了目前被開源社群廣泛使用的分散式版本控制系統Git
11
著名的版本控制軟體 • BitKeeper • CVS(Concurrent Versions System) • Micorosoft Visual SourceSafe • Perforce • Rational ClearCase • RCS(GNU Revision Control System) • Serena Dimention • Subversion • SVK • Git • en:Monotone (software) • en:Bazaar (software) • Mercurial • en:SourceGear Vault
12
Initial Setup
• 首先請先下載eclipse – Eclipse IDE for Java Developers
• 若下載其他版本看不到Git – Help>Install New Software>add – http://download.eclipse.org/egit/updates – 貼上以上網址即可安裝EGit
14
Reference
• http://en.wikipedia.org/wiki/Revision_control
34
• Let’s talk about Testing • What is unit testing? • Properties of a Unit Test • Why Unit Test? • Why not Unit Test? • List of unit testing frameworks
Outline
36
Testing • 測試的方法
– 黑箱測試 – 白箱測試
• 測試的類型 – 功能測試 – 系統測試 – 邊界值測試 – 效能測試 – 壓力測試
測試的階段 ◦ 單元測試 ◦ 整合測試 ◦ 系統測試 ◦ 回歸測試
37
• 單元測試是針對程式單元來進行正確性檢驗的測試工作 • 程式單元
– 通常,一個程式單元就是單個程式、函式等 – 對於物件導向語言來說,最小的單元就是method
• 測試案例 – 每個理想的測試案例都應該獨立於其他案例
• 單元測試通常由開發人員編寫,可以手動測試,或是做為建構自動化的一部分 – 以java來說…
• 結合Ant: 建立建構環境與自動化執行的工具。 • 結合Maven: 提供建構環境、慣例與相依管理的工具。 • 通通包在CI中
What is unit testing?
38
• Isolated – 沒必要為了測試輪胎而買台車子
• Repeatable – Tests 不能依賴於執行環境,每個developer都應該要可以run
• Fast – 單元測試的時間較短、快
• Self-Documenting – Testable code is clear and easy to follow – 不需要特別解釋元件如何執行,只需要看測試怎麼跑即可
Properties of a Unit Test
39
• Debugging很花時間 • 當一個新的功能被加進來時,我們要如何確定舊的不會受到影響?
• 從Unit Test你可以看出這個class的功能為何以及如何使用
• Unit Test可以用來量測project的健康度與code的品質
Why Unit Test?
40
Unit Testing Frameworks
• Java
工具名稱 說明
JUnit 一個以逆向Framework測試的Java試工具,開發人員可用來進行Java的單元測試。
JUnitEE JUnit的延伸版,可在J2EE Application Server上執行。
JMock 一個用於Java測試的函式庫,可快速的定義合適模擬物件。
43
Unit Testing Frameworks • C/C++
工具名稱 說明 C unit Test System
以節點的方式測試系統,是一以專為C語言設計的測試工具。
Cgreen 一個純C單元測試工具,整合了測試套件,對於結果及建立新的測試函數有很大的彈性。
CMock 支援模組式/物件式的測試工具,以交談試的方式進行單元測試。 圖片來源: http://www.lastcraft.com/cgreen.php 44
Unit Testing Frameworks
• .Net
工具名稱 說明
ASP Unit Microsoft Active Server Pages (ASP)測試工具。
csUnit 支援C# , VB .Net , managed C++ 。
.NetUnit 對圖形元件進行測試的工具。
圖片來源: http://www.csunit.org/ 45
Unit Testing Frameworks
• PHP
工具名稱 說明
PHPUnit PHP4專用,適用於輕量的軟體開發。
AMock 由EasyMock而來的函式庫。
Izh_test 可在Console底下進行php的測試。
圖片來源: http://php-gtk.eu/en/version/php-gtk-2?page=8 46
Unit Testing Frameworks
• HTML
工具名稱 說明
HTML Tidy 可完美的自動修正Html的語法錯誤。
HtmlTestCase 支援使用高階的API進行自動的功能測試,試用於QA人員。
HtmlUnit Junit的測試Framework之一。
47
Example-Junit
import static org.junit.Assert.*; import org.junit.*; …………. public class CalculatorTest { private Calculator calculator; @Before public void setUp() { calculator = new Calculator(); } @After public void tearDown() { calculator = null; } @Test public void testPlus() { int expected = 5; int result = calculator.plus(3, 2); assertEquals(expected, result); }
public class Calculator { public int plus(int op1, int op2) { return op1 + op2; } public int minus(int op1, int op2) { return op1 - op2; } }
Unit test for class Calculator’s method plus: Class Calculator:
當然,可以配合多種design pattern去設計你的test,像是
Command…,etc
JUnit 4.x中,不用像3.x一般需要繼承TestCase類別,而可以使用@Test標註測試方法,方法只需公開、沒有傳回值、沒有參數,名稱則可以
任意。
48
TDD( Test-driven development)
• 由測試去驅動開發功能 – 在撰寫真正的程式碼前,先將相關測試寫好
• 並不是單純在做 verification,它是一種 spec 確認的活動 – 避免程式寫到最後,與最初的設計差別太大
• TDD全然關乎為特定功能做測試,接著,撰寫程式碼滿足該功能。 – 任何超過該功能的事情,目前對你皆不重要 – 避免浪費時間做了不必要的功能
50
• Head First Software Development – Dan Pilone & Russ Miles
• http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks • http://www.slideshare.net/avalanche123/clean-code-5609451 • http://caterpillar.onlyfun.net/Gossip/JUnit/index.html • http://zh.wikipedia.org/wiki/%E8%BB%9F%E9%AB%94%E6%B8%AC%E8%A9%A6#.
E8.BD.AF.E4.BB.B6.E6.B5.8B.E8.AF.95.E4.BB.8B.E7.BB.8D
Reference
51
HW 1 • Upload your first code to public code host like google code host or github
– With a small code without compilation errors • More than 100 lines ‘source’ • More than 30 lines ‘comment’ to describe your source
– With unit testing file – With a README informing how to execute unit testing for your code
• Evaluated by teams – Each team should have a HW1 contact window in charge of emailing to TA
• 黃首翰 [email protected] • Tell TA where we can check out your code (if you use git, give the URL)
• Deadline 10/24 12:00 pm – if you did not get confirmed email from TA. We say byebye byebye … byebye~~ – You should do it ASAP to ensure your success
52
HW 1
• Remind you – TAs will check your coding style – TAs won’t ask you if he cannot execute your code but
fully comply with your README – The team score is the average score from 4 TAs.
• Like an academic review process, if their scores are highly diverse, I will check and join to determine the score.
– Just four levels • Weak: 50 • Above Average: 70 • Good: 80 • Excellent: 100
53
• 歷史 – 一開始,於command line進行程式碼編譯及連結。
• 程式碼一多就相當麻煩。 – 出現make script language,如GUN make,為建置自動化的開始。
• 支援多個程式模組編譯及連結。 – 隨者建置過程複雜度的提升,便開始出現一些商業化或免費的自動建置軟體。
• 對於Continuous Integration相當有幫助。
介紹
• 什麼是Build automation ? • 將軟體設計師的每日工作,以自動化技術或腳本語言方式,自動加以完成的工具與技術。工作包含 : – 以編譯器將原始碼編譯成二進位碼( Binary code) – 將二進位碼打包成軟體執行檔 – 執行單元測試 – 部署軟體(Software deployment) – 產生文件與 Release notes
介紹
• 於專案軟體開發,使用Build automation 優點 – 提升產品品質 – 加快編譯及連結的效率 – 減少“bad build”發生 – 降低關鍵人員依賴性 – 保留建置歷史記錄 – 節省時間以及成本
介紹
• 和Ant一樣是專案自動化建置的工具 • 和Ant比較起來,Maven有以下額外功能 :
– 集中管理相依性 • Maven使用集中式管理,提供Central repository,你要在設定檔案宣告相依的程式庫等資訊,Maven會為你下載相關的檔案。
– plugin 為基礎的架構 • Maven 提供固定的建構生命周期,每個周期又有幾個階段,每個階段會有一些相連結的plugin,可以在設定檔中依需求宣告想使用的plugin,Maven會自動取得plugin。
相關工具介紹 - Maven