20121213 foundation of software development 2 2-ktchuang

49
Software Development for Large and Open Source Projects Kun-Ta Chuang Department of Computer Science and Information Engineering National Cheng Kung University 1

Upload: netdbncku

Post on 29-Nov-2014

466 views

Category:

Documents


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: 20121213 foundation of software development 2 2-ktchuang

Software Development for Large and Open Source Projects

Kun-Ta Chuang Department of Computer Science and Information Engineering

National Cheng Kung University

1

Page 2: 20121213 foundation of software development 2 2-ktchuang

Software Development Foundation II

Kun-Ta Chuang Department of Computer Science and Information Engineering

National Cheng Kung University

2

Page 3: 20121213 foundation of software development 2 2-ktchuang

Issue tracking system

3

Page 4: 20121213 foundation of software development 2 2-ktchuang

• What is issue tracking system?

• Why we need issue tracking system?

• Issue tracking system

Outline

4

Page 5: 20121213 foundation of software development 2 2-ktchuang

• Issue Tracking system – 紀錄、追蹤問題的系統

• 一個好的Issue紀錄應該包含: – 總結

• 以大約一個句子來描述issue(bug),讓人能清楚知道這個issue是什麼

– 重新產生issue(bug)的步驟 • 描述如何找到bug的

– 預期會發生什麼以及實際發生什麼 • 說明你認為應該發生什麼,而實際又發生什麼,對於尋找與使用情節或需求

有關的問題特別有幫助

– 版本、平台、location(地區與語言)資訊 • 使用什麼軟體版本、基於什麼平台等等的基礎資訊

– 嚴重性(severity)與優先權(priority) • 此issue有多嚴重?資料損毀?系統當掉? • 修復此issue的重要性如何? • 優先權與嚴重性是分開的

– ex:有可能對系統嚴重性高,但只會出現在某些特別的操作情形,那可能就是個低優先權高嚴重性的issue

What is issue tracking system?

5

Page 6: 20121213 foundation of software development 2 2-ktchuang

• 在沒有使用issue tracking system前…

–很難知道現在每個人手上正在處理那些issue(bug)

– bug的處理優先權難以紀錄、界定

–無法追蹤過往issue

–沒人知道到底發生了多少bug

Why we need issue tracking system?

6

Page 7: 20121213 foundation of software development 2 2-ktchuang

• 使用issue tracking system後… – 紀錄討論、測試、程式碼修改、驗證、與issue相關決策歷程,藉由追蹤記錄每一件事情,整個團隊知道issue的進展狀況、如何修正、或者原開發者認為該如何修正

– 讓你深入了解專案的實際進度,多數的issue都來自於哪裡? 剩下多少issue尚未被解決?解決了多少issue?

– 有些團隊會在產品釋出以前,尋求zero-bug-bounce,表示所有重要的issue跟bug都在產品釋出前被修復

– 若搭配CI,更可以快速抓到issue,且責任歸屬清楚,issue透明化

Why we need issue tracking system?

7

Page 8: 20121213 foundation of software development 2 2-ktchuang

• Issue tracking的工具很多,有免費也有付費,有的除了issue tracking,也另外整合許多專案管理的內容,比較像是project management system

• Bugzilla

• codeBeamer

• Trac

• JIRA

Issue tracking system

8

Page 9: 20121213 foundation of software development 2 2-ktchuang

• Track bugs and code changes

• Communicate with teammates

• Submit and review patches

• Manage quality assurance (QA)

• Free

• Many companies, organizations and projects use Bugzilla. – Mozilla

– Linux kernel

– Apache Project

– Red Hat

– Facebook

– NASA

– Yahoo!

Bugzilla

9

Page 10: 20121213 foundation of software development 2 2-ktchuang

Bugzilla Login

10

Page 11: 20121213 foundation of software development 2 2-ktchuang

Bugzilla 創建bug record

Status & Email setting

11

Page 12: 20121213 foundation of software development 2 2-ktchuang

Bugzilla

可以編輯你的Bug record,設定重要程度、cc名單等等, etc

12

Page 13: 20121213 foundation of software development 2 2-ktchuang

Bugzilla 當bug被修改後,會依照你設定的名單寄發email,通知相關人員

13

Page 14: 20121213 foundation of software development 2 2-ktchuang

Bugzilla

14

Page 15: 20121213 foundation of software development 2 2-ktchuang

Bugzilla-graphical report

15

Page 16: 20121213 foundation of software development 2 2-ktchuang

Bugzilla-graphical report

16

Page 17: 20121213 foundation of software development 2 2-ktchuang

• Head First Software Development

– Dan Pilone & Russ Miles

• http://en.wikipedia.org/wiki/Bug_tracking_system

• http://en.wikipedia.org/wiki/Comparison_of_issue_tracking_systems#Notification_interfaces

• http://www.bugzilla.org

• http://tw.myblog.yahoo.com/embedded_system_book/photo?pid=0&prev=693&fid=12

Reference

17

Page 18: 20121213 foundation of software development 2 2-ktchuang

HW5

• Open a simple issue track for your project!

• We can see the issue will be been

– Opened (User, QA)

– Assigned (PM)

– Resolved (Programmer, Tech Lead)

• Let the role belongs to different members

• Done before 12/21 11:59pm

18

Page 19: 20121213 foundation of software development 2 2-ktchuang

Software release life cycle

19

Page 20: 20121213 foundation of software development 2 2-ktchuang

• 軟體版本週期是指電腦軟體的發展及發行過程,如右圖 – 開發期

• Pre-alpha(準預覽版本)

• Alpha(預覽版本)

• Beta(測試版本)

• Released candidate (最終測試版本)

– 完成期 • RTM(Release to Manufacturing)

• GA(General Availability)

• Gold(完成版)

20

Page 21: 20121213 foundation of software development 2 2-ktchuang

• Pre-alpha

–有時候軟體會在Alpha或Beta版本前先釋出Pre-alpha版本。

–相對於Alpha或Beta版本,Pre-alpha版本是一個功能不完整的版本

21

Page 22: 20121213 foundation of software development 2 2-ktchuang

• Alpha

– Alpha版本仍然需要測試,其功能亦未完善,因為它是整個軟體釋出周期中的第一個階段,所以它的名稱是「Alpha」

22

Page 23: 20121213 foundation of software development 2 2-ktchuang

• Beta

–軟體最早對外公開的軟體版本,由公眾參與測試

–包含所有功能,但可能有一些已知問題和較輕微的程式錯誤(BUG)

–測試者通常是開發軟體組織的客戶,他們會以免費或優惠價錢得到軟體

23

Page 24: 20121213 foundation of software development 2 2-ktchuang

• Release Candidate(簡稱RC)

–可能成為最終產品的候選版本,如果未出現問題則可釋出成為正式版本

–此階段的產品通常包含所有功能、或接近完整,亦不會出現嚴重問題

–多數開源軟體會推出兩個RC版本,最後的RC2則成為正式版本

–亦稱Gamma(更後期的稱為Delta,及其後的希臘字母)

24

Page 25: 20121213 foundation of software development 2 2-ktchuang

• RTM(Release To Manufacturing)

–意思是:發放給生產商

– RTM版本並不一定意味著創作者制定了軟體所有問題;仍有可能向公眾發布更新的版本。

–另外一種RTM的稱呼是RTW(Release To Web)

• 表示正式版本的軟體發布到 Web 網站上供客戶免費下載

• 這個名詞在ASP.NET元件以及Silverlight的發布上很常見

25

Page 26: 20121213 foundation of software development 2 2-ktchuang

• GA(General Availability)

–正式發佈的版本,在國外都是用GA來說明release版本的

– the point where all necessary commercialization activities have been completed and the software has been made available to the general market

26

Page 27: 20121213 foundation of software development 2 2-ktchuang

Hotfix

• 針對某一個具體的系統漏洞或安全問題而發佈的專門解決該漏洞或安全問題的小程式,通常稱為修補程式

• WindowsXP-KB823980-x86-CHS32λ.exe – Windows XP——產品名稱,說明該補丁適用的作業系統 – KB823980——KB是Knowledge Base的首字母縮寫,意即

基本知識庫,823980是該補丁在微軟知識庫中相應的說明性文章的編號

– x86——處理器平臺的標識,示例中x86說明該補丁應用於Intel 公司的x86構架的處理器平臺

– CHS32λ.exe——語言版本的標識。示例中的CHS表明該補丁應用於中文版的Windows作業系統

Page 28: 20121213 foundation of software development 2 2-ktchuang

Service Pack

• 意即補丁包

• 微軟的作業系統及軟體產品漏洞很多,微軟不得不頻繁地發佈各種Hotfix來進行修補

• 對一般用戶來說,要查看自己的電腦是否安裝了某個Hotfix是一件麻煩事,下載安裝各種Hotfix也很繁瑣 –微軟為了解決問題,就開始發佈SP補丁包,SP補丁包中包含有SP發佈日期前所發佈的所有Hotfix

Page 30: 20121213 foundation of software development 2 2-ktchuang

GNU General Public License

30

Page 31: 20121213 foundation of software development 2 2-ktchuang

Overview

• Software license

– Open-source/free software licenses

• GNU General Public License(GPL)

– GPL歷史

– CPL與Copyright/Copyleft比較

– GPL的優勢

–結論

31

Page 32: 20121213 foundation of software development 2 2-ktchuang

Software license

• 軟體授權條款(Software license)

–具有法律性質的合約或規範,目的在規範受著作權保護的軟體的使用或散佈行為。

–若無授權而徑予使用該軟體,將違反著作權法給予該軟體開發者的專屬保護。

–主要分為

• Proprietary software

• Open source software

32

Page 33: 20121213 foundation of software development 2 2-ktchuang

Open-source/free software licenses

• 自由軟體是開放原始碼的一種

• 自由軟體要視該軟體的授權條件是否合乎Free Software Foundation所下的定義

• Free software licenses – 與GPL 2相容

• Boost Software License, BSD license (modified version) ,Public Domain ,etc.

– 與GPL 2不相容 • Academic Free License (AFL) , Apache License , BSD license

(original version) , Common Public License ,etc.

33

Page 34: 20121213 foundation of software development 2 2-ktchuang

GPL歷史

• 由Richard M. Stallman發起於1983年9月27日的Free Software Mass collaboration

• 目標是建立一套完全自由的作業系統GNU

• GNU是「GNU’s Not Unix」的縮寫

• GPLv1 – 其目的是防止那些阻礙自由軟體的行為

• GPLv2 – 添加了“Liberty or Death”條款

• GPLv3

34

Page 35: 20121213 foundation of software development 2 2-ktchuang

GNU General Public License

• GNU GPL是一種授權聲明 –即有一軟體宣稱是以GPL釋出的,就代表他是完全自由的,有的會提供原始碼供人下載、使用、複製,甚至販賣、修改

• GPL的特別之處 –須先接受GNU GPL的條款才可使用GNU GPL,如果修改了GPL的軟體,但不願釋出,僅僅是失去釋出的權力而已。一旦釋出即代表接受條款,此釋出版本也自動成為GNU GPL軟體,而其他人可以放心使用及修改此軟體

35

Page 36: 20121213 foundation of software development 2 2-ktchuang

GPL和Copyright

• GNU GPL 是一種授權聲明,卻不是Copyright – Copyright 是軟體作者在創作軟體時所產生的權利

– GNU GPL 則是軟體作者所採用的授權條款

– 同一個軟體可以有多種授權,使用者可以從其中挑選一個對自己最有利的授權。軟體作者也可以隨時改變該軟體的授權(需要其著作權擁有者一致同意)

– GNU GPL 本身是無法修改的。當軟體以 GNU GPL 發行時,它就是以完整的 GNU GPL 發行,不能再加上任何其它額外的限制或但書。

36

Page 37: 20121213 foundation of software development 2 2-ktchuang

GPL和Copyleft

• 將 GNU GPL / GNU LGPL / GNU GFDL 的軟體或文件,其著作權稱為 Copyleft

---Richard M. Stallman

http://www.gnu.org/copyleft/copyleft.html

–因為它的授權已回歸於大眾,即使是作者反悔,也無法將授權取回

37

Page 38: 20121213 foundation of software development 2 2-ktchuang

GNU GPL 的優勢

• 採用 GPL 授權的軟體一定會同時公開它的原始碼,所以程式設計師可以自由的在 GPL 軟體中加入新的功能、修正舊有的問題

• 和傳統商業軟體之間最顯著的差異在於:

–自由軟體鼓勵你拷貝

–自由軟體允許你研究、改良

• 「站在巨人的肩膀上」,對於科技的進步有著巨大的影響。

38

Page 39: 20121213 foundation of software development 2 2-ktchuang

結論

• Linus' Law:只要有夠多的眼睛注視,所有的蟲兒 (bugs) 都很淺顯。

• 自由軟體的發展就是在開放網路社群這樣的運作方式下進行,社群人數到達一定的臨界點之後,Linus' Law 就會成立

• 自由軟體的成長循環:社群越大,軟體越好;軟體越好,使用者越多;使用者越多,社群越大。

39

Page 40: 20121213 foundation of software development 2 2-ktchuang

Memory Leak

40

Page 41: 20121213 foundation of software development 2 2-ktchuang

Overview

• 簡介

• C/C++

• Java/C#

• 避免與偵測Memory Leak

41

Page 42: 20121213 foundation of software development 2 2-ktchuang

簡介

• Memory Leak定義

–通常因為人為的程式設計失誤,被配置的memory無法再被使用,也無法被釋放

• 消耗過多內部記憶體會導致

–降低電腦效能

–可能會使得部分或全部裝置停止工作

42

Page 43: 20121213 foundation of software development 2 2-ktchuang

C/C++

• 由於無Garbage Collector(GC)的機制,程式設計師必須在使用完資源後人為釋放。

• 例子

配制memory 但是並無釋放

雖然後面有使用free 但此處memory 並沒有被釋放

43

Page 44: 20121213 foundation of software development 2 2-ktchuang

C發生memory leak 導致記憶體使用量過多

且開始發生swapping

關閉程式

44

Page 45: 20121213 foundation of software development 2 2-ktchuang

Java/C#

• 有Garbage Collector(GC)的機制,不需要人為釋放記憶體,降低發生memory leak的可能性

• 仍有發生memory leak的可能

–例子:

只要memoryLeakArea仍在使用 GC也無法回收沒用到的Integer

45

Page 46: 20121213 foundation of software development 2 2-ktchuang

Java 發生memory leak

Heap memory已被用完

當資料量不大時,有極大的可能是發生memory leak

46

Page 47: 20121213 foundation of software development 2 2-ktchuang

Java發生memory leak的原因

• 其中classA佔了很長的生命週期,當中classA使用了classB的物件,即使便沒再用到,但是classB卻因為classA仍然在使用,所以占了此部分的記憶體,並不會被GC回收

http://www.ibm.com/developerworks/library/j-leaks/

47

Page 48: 20121213 foundation of software development 2 2-ktchuang

避免Memory Leak

• C++除了在每次new配置記憶體後,需要小心的delete之外,C++的STL中,提供smart pointer的概念

• 以偵測工具偵測memory leak

– VC++可使用VLD

改成

無須寫delete

明確指出發生memory leak的行數 可查看未釋放記憶體中的詳細內容 http://eagle-sw.blogspot.tw/2011/11/vc-vldmemory-leak.html

48

Page 49: 20121213 foundation of software development 2 2-ktchuang

Linux下的偵測Memory Leak

• 使用 – Commend line下輸入 valgrind –leak-check=yes [your program]

• 範例: ==6968== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 11 from 1) ==6968== malloc/free: in use at exit: 40 bytes in 1 blocks. ==6968== malloc/free: 1 allocs, 0 frees, 40 bytes allocated. ==6968== For counts of detected errors, rerun with: -v ==6968== searching for pointers to 1 not-freed blocks. ==6968== checked 57,912 bytes. ==6968== ==6968== ==6968== 40 bytes in 1 blocks are definitely lost in loss record 1 of 1 ==6968== at 0x401B7E9: malloc (vg_replace_malloc.c:207) ==6968== by 0x80483E7: f (in /root/test/lm) ==6968== by 0x804841C: main (in /root/test/lm) ==6968== ==6968== LEAK SUMMARY: ==6968== definitely lost: 40 bytes in 1 blocks. ==6968== possibly lost: 0 bytes in 0 blocks. ==6968== still reachable: 0 bytes in 0 blocks. ==6968== suppressed: 0 bytes in 0 blocks.

leak summary中確切寫出definitely lost:40 bytes in 1 block

結論報告

http://daydreamer.idv.tw/rewrite.php/read-18.html

49