20121213 foundation of software development 2 2-ktchuang
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 II
Kun-Ta Chuang Department of Computer Science and Information Engineering
National Cheng Kung University
2
Issue tracking system
3
• What is issue tracking system?
• Why we need issue tracking system?
• Issue tracking system
Outline
4
• Issue Tracking system – 紀錄、追蹤問題的系統
• 一個好的Issue紀錄應該包含: – 總結
• 以大約一個句子來描述issue(bug),讓人能清楚知道這個issue是什麼
– 重新產生issue(bug)的步驟 • 描述如何找到bug的
– 預期會發生什麼以及實際發生什麼 • 說明你認為應該發生什麼,而實際又發生什麼,對於尋找與使用情節或需求
有關的問題特別有幫助
– 版本、平台、location(地區與語言)資訊 • 使用什麼軟體版本、基於什麼平台等等的基礎資訊
– 嚴重性(severity)與優先權(priority) • 此issue有多嚴重?資料損毀?系統當掉? • 修復此issue的重要性如何? • 優先權與嚴重性是分開的
– ex:有可能對系統嚴重性高,但只會出現在某些特別的操作情形,那可能就是個低優先權高嚴重性的issue
What is issue tracking system?
5
• 在沒有使用issue tracking system前…
–很難知道現在每個人手上正在處理那些issue(bug)
– bug的處理優先權難以紀錄、界定
–無法追蹤過往issue
–沒人知道到底發生了多少bug
Why we need issue tracking system?
6
• 使用issue tracking system後… – 紀錄討論、測試、程式碼修改、驗證、與issue相關決策歷程,藉由追蹤記錄每一件事情,整個團隊知道issue的進展狀況、如何修正、或者原開發者認為該如何修正
– 讓你深入了解專案的實際進度,多數的issue都來自於哪裡? 剩下多少issue尚未被解決?解決了多少issue?
– 有些團隊會在產品釋出以前,尋求zero-bug-bounce,表示所有重要的issue跟bug都在產品釋出前被修復
– 若搭配CI,更可以快速抓到issue,且責任歸屬清楚,issue透明化
Why we need issue tracking system?
7
• Issue tracking的工具很多,有免費也有付費,有的除了issue tracking,也另外整合許多專案管理的內容,比較像是project management system
• Bugzilla
• codeBeamer
• Trac
• JIRA
Issue tracking system
8
• 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
– NASA
– Yahoo!
Bugzilla
9
Bugzilla Login
10
Bugzilla 創建bug record
Status & Email setting
11
Bugzilla
可以編輯你的Bug record,設定重要程度、cc名單等等, etc
12
Bugzilla 當bug被修改後,會依照你設定的名單寄發email,通知相關人員
13
Bugzilla
14
Bugzilla-graphical report
15
Bugzilla-graphical report
16
• 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
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
Software release life cycle
19
• 軟體版本週期是指電腦軟體的發展及發行過程,如右圖 – 開發期
• Pre-alpha(準預覽版本)
• Alpha(預覽版本)
• Beta(測試版本)
• Released candidate (最終測試版本)
– 完成期 • RTM(Release to Manufacturing)
• GA(General Availability)
• Gold(完成版)
20
• Pre-alpha
–有時候軟體會在Alpha或Beta版本前先釋出Pre-alpha版本。
–相對於Alpha或Beta版本,Pre-alpha版本是一個功能不完整的版本
21
• Alpha
– Alpha版本仍然需要測試,其功能亦未完善,因為它是整個軟體釋出周期中的第一個階段,所以它的名稱是「Alpha」
22
• Beta
–軟體最早對外公開的軟體版本,由公眾參與測試
–包含所有功能,但可能有一些已知問題和較輕微的程式錯誤(BUG)
–測試者通常是開發軟體組織的客戶,他們會以免費或優惠價錢得到軟體
23
• Release Candidate(簡稱RC)
–可能成為最終產品的候選版本,如果未出現問題則可釋出成為正式版本
–此階段的產品通常包含所有功能、或接近完整,亦不會出現嚴重問題
–多數開源軟體會推出兩個RC版本,最後的RC2則成為正式版本
–亦稱Gamma(更後期的稱為Delta,及其後的希臘字母)
24
• RTM(Release To Manufacturing)
–意思是:發放給生產商
– RTM版本並不一定意味著創作者制定了軟體所有問題;仍有可能向公眾發布更新的版本。
–另外一種RTM的稱呼是RTW(Release To Web)
• 表示正式版本的軟體發布到 Web 網站上供客戶免費下載
• 這個名詞在ASP.NET元件以及Silverlight的發布上很常見
25
• 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
Hotfix
• 針對某一個具體的系統漏洞或安全問題而發佈的專門解決該漏洞或安全問題的小程式,通常稱為修補程式
• WindowsXP-KB823980-x86-CHS32λ.exe – Windows XP——產品名稱,說明該補丁適用的作業系統 – KB823980——KB是Knowledge Base的首字母縮寫,意即
基本知識庫,823980是該補丁在微軟知識庫中相應的說明性文章的編號
– x86——處理器平臺的標識,示例中x86說明該補丁應用於Intel 公司的x86構架的處理器平臺
– CHS32λ.exe——語言版本的標識。示例中的CHS表明該補丁應用於中文版的Windows作業系統
Service Pack
• 意即補丁包
• 微軟的作業系統及軟體產品漏洞很多,微軟不得不頻繁地發佈各種Hotfix來進行修補
• 對一般用戶來說,要查看自己的電腦是否安裝了某個Hotfix是一件麻煩事,下載安裝各種Hotfix也很繁瑣 –微軟為了解決問題,就開始發佈SP補丁包,SP補丁包中包含有SP發佈日期前所發佈的所有Hotfix
Reference
• http://en.wikipedia.org/wiki/Software_release_life_cycle
• http://forum.icst.org.tw/phpbb/viewtopic.php?t=3953
29
GNU General Public License
30
Overview
• Software license
– Open-source/free software licenses
• GNU General Public License(GPL)
– GPL歷史
– CPL與Copyright/Copyleft比較
– GPL的優勢
–結論
31
Software license
• 軟體授權條款(Software license)
–具有法律性質的合約或規範,目的在規範受著作權保護的軟體的使用或散佈行為。
–若無授權而徑予使用該軟體,將違反著作權法給予該軟體開發者的專屬保護。
–主要分為
• Proprietary software
• Open source software
32
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
GPL歷史
• 由Richard M. Stallman發起於1983年9月27日的Free Software Mass collaboration
• 目標是建立一套完全自由的作業系統GNU
• GNU是「GNU’s Not Unix」的縮寫
• GPLv1 – 其目的是防止那些阻礙自由軟體的行為
• GPLv2 – 添加了“Liberty or Death”條款
• GPLv3
34
GNU General Public License
• GNU GPL是一種授權聲明 –即有一軟體宣稱是以GPL釋出的,就代表他是完全自由的,有的會提供原始碼供人下載、使用、複製,甚至販賣、修改
• GPL的特別之處 –須先接受GNU GPL的條款才可使用GNU GPL,如果修改了GPL的軟體,但不願釋出,僅僅是失去釋出的權力而已。一旦釋出即代表接受條款,此釋出版本也自動成為GNU GPL軟體,而其他人可以放心使用及修改此軟體
35
GPL和Copyright
• GNU GPL 是一種授權聲明,卻不是Copyright – Copyright 是軟體作者在創作軟體時所產生的權利
– GNU GPL 則是軟體作者所採用的授權條款
– 同一個軟體可以有多種授權,使用者可以從其中挑選一個對自己最有利的授權。軟體作者也可以隨時改變該軟體的授權(需要其著作權擁有者一致同意)
– GNU GPL 本身是無法修改的。當軟體以 GNU GPL 發行時,它就是以完整的 GNU GPL 發行,不能再加上任何其它額外的限制或但書。
36
GPL和Copyleft
• 將 GNU GPL / GNU LGPL / GNU GFDL 的軟體或文件,其著作權稱為 Copyleft
---Richard M. Stallman
http://www.gnu.org/copyleft/copyleft.html
–因為它的授權已回歸於大眾,即使是作者反悔,也無法將授權取回
37
GNU GPL 的優勢
• 採用 GPL 授權的軟體一定會同時公開它的原始碼,所以程式設計師可以自由的在 GPL 軟體中加入新的功能、修正舊有的問題
• 和傳統商業軟體之間最顯著的差異在於:
–自由軟體鼓勵你拷貝
–自由軟體允許你研究、改良
• 「站在巨人的肩膀上」,對於科技的進步有著巨大的影響。
38
結論
• Linus' Law:只要有夠多的眼睛注視,所有的蟲兒 (bugs) 都很淺顯。
• 自由軟體的發展就是在開放網路社群這樣的運作方式下進行,社群人數到達一定的臨界點之後,Linus' Law 就會成立
• 自由軟體的成長循環:社群越大,軟體越好;軟體越好,使用者越多;使用者越多,社群越大。
39
Memory Leak
40
Overview
• 簡介
• C/C++
• Java/C#
• 避免與偵測Memory Leak
41
簡介
• Memory Leak定義
–通常因為人為的程式設計失誤,被配置的memory無法再被使用,也無法被釋放
• 消耗過多內部記憶體會導致
–降低電腦效能
–可能會使得部分或全部裝置停止工作
42
C/C++
• 由於無Garbage Collector(GC)的機制,程式設計師必須在使用完資源後人為釋放。
• 例子
配制memory 但是並無釋放
雖然後面有使用free 但此處memory 並沒有被釋放
43
C發生memory leak 導致記憶體使用量過多
且開始發生swapping
關閉程式
44
Java/C#
• 有Garbage Collector(GC)的機制,不需要人為釋放記憶體,降低發生memory leak的可能性
• 仍有發生memory leak的可能
–例子:
只要memoryLeakArea仍在使用 GC也無法回收沒用到的Integer
45
Java 發生memory leak
Heap memory已被用完
當資料量不大時,有極大的可能是發生memory leak
46
Java發生memory leak的原因
• 其中classA佔了很長的生命週期,當中classA使用了classB的物件,即使便沒再用到,但是classB卻因為classA仍然在使用,所以占了此部分的記憶體,並不會被GC回收
http://www.ibm.com/developerworks/library/j-leaks/
47
避免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
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