發表文章

目前顯示的是 十一月, 2012的文章

如何做個好的測試工程師

你心目中的測試工程師是做什麼的?或許很多人的答案是「 按照測試文件的步驟進行,並且產出報告 」。事實上,我相信這是大部分的老闆心中所想像的畫面,無怪乎想到測試工程師的時候都直接聯想到廉價的工作(恩,聽說某家科技公司把所有的QA部門都裁了 ...)。講真的,這樣想的人,也太小看測試工程師了。下面我列出我心中對測試工程師的標準,這樣以後再有新進同事近來擔任測試工程師的時候可以拿來當作教材。話先說在前面,這只是我個人的經驗所整理出來的文章,所以難免會有缺漏,以後有想到的話再補充吧(還要加上我有動力的話 ... ) 要做出有用、明確的報告。 什麼叫作有用、明確的報告?先講一下我之前的故事(之前好像也在 Blog 提過了,不過發生過很多遍,人物也都不同)。有人找我處理電腦上的問題(這似乎是念CS的原罪),只留下一句話:「電腦無法上網了,會不會是中毒了啊?」 這是我最討厭聽到的問題! (不過已經見怪不怪了,所以還是可以控制情緒)為什麼討厭這樣的問題,因為理由太多了!!就好像跟醫生說肚子痛,可能發生的原因從脹氣、拉肚子,一直到胃癌都有可能,一句肚子痛,你是要醫生給你什麼答案。電腦無法上網,可能是電信公司的問題(我最常 推卸 的對象,真是對不起電信公司,不過這可以讓我用最短的時間結束對話)、網路設定問題、家用網路設備的問題,當然也有可能是中毒。那不公平,一般人沒有相關的專業知識啊,所以醫生要負責做檢查的工作!沒錯,醫生要負責做檢查, 在軟體產品上,做檢查的責任就是在測試工程師身上 。 我在這邊說的報告,不是那種紙本,要寫的很囉哩囉唆滿足客戶需求的那種文件(當然這個技能非常重要),而是在跟開發工程師回報的時候,要很明確的講出到底發生了什麼狀況!死亡信息(Log)有哪些?是 Kernel Panic 還是 Segmentation Fault? 請不要以一句「系統掛了」來總結所有的 Bug! 並且還要根據 Log 做出初步的判斷,不要把開機以來的幾千行 Log 看也不看就直接貼給開發工程師。 這不公平,我只是小小的測試工程師,我又搞不懂那些 Log 在寫什麼,整個產品的功能是什麼、架構如何?Well,一般來說,Log 寫的是英文吧?雖然我不否認很多開發工程師,包含我在內,Log寫的很爛,但還是可以讀吧?不了解整個產品?那你憑什麼擔任測試工程師?要重複操作,我找個國中生來就好了。測

UDP Broadcast Socket Programming Example

今天要紀錄的程式是 UDP Broadcast Socket Programming。其實理論上只要設定 Option 就好了,根本不需要把整個程式碼放上來,但是呢?因為之前紀錄了 TCP 的 Socket Programming,因為偷懶沒有寫一個  UDP 的版本,所以就用這東西來代替吧! Server: # include < stdio.h > // for printf() and fprintf() # include < sys/socket.h > // for socket(), bind(), and connect() # include < arpa/inet.h > // for sockaddr_in and inet_ntoa() # include < stdlib.h > // for atoi() and exit() # include < string.h > // for memset() # include < unistd.h > // for close() # include < fcntl.h > // for fcntl() # include < errno.h > # include < sys/epoll.h > # define BUFSIZE 1024 // Size of receive buffer static int make_socket_non_blocking ( int sfd ) { int flags , s ; flags = fcntl ( sfd , F_GETFL , 0 ) ; if ( flags = = - 1 ) { perror ( " fcntl " ) ; return - 1 ; }

靈修心得~上帝的榮耀

好久沒寫靈修分享了。這到不是說沒有靈修的收穫,或是沒有值得紀錄的亮光,但總歸一個字:「懶」。今天晚上因為要靈修分享的關係,所以就把前一陣子的靈修心得整理紀錄如下。希望下一篇不會隔這麼久 ... 經文:以弗所書第一章 有時候聖經讀久了,看到某些經文、某些章節,常常就有一種直覺說:「這段就是在說 ...」而沒有好好的去思想。最近因為靈修進度的關係,我來到了以弗所書,直覺就想,這是一卷談論「合一」的書信,也沒想太多,事實上,有段時間的靈修甚至只是為靈修而靈修。沒想到開始讀第一章的時候,有幾個字不停的浮現出來:「 神的榮耀 」 1 奉 神旨意,作基督耶穌使徒的保羅,寫信給在以弗所的聖徒,就是在基督耶穌裡有忠心的人。 2 願恩惠、平安從 神我們的父和主耶穌基督歸與你們! 3 願頌讚歸與我們主耶穌基督的父 神!他在基督裡曾賜給我們天上各樣屬靈的福氣: 4 就如 神從創立世界以前,在基督裡揀選了我們,使我們在他面前成為聖潔,無有瑕疵; 5 又因愛我們,就按著自己意旨所喜悅的,預定我們藉著耶穌基督得兒子的名分, 6 使 他 榮耀 的恩典得著稱讚;這恩典是他在愛子裡所賜給我們的。 7 我們藉這愛子的血得蒙救贖,過犯得以赦免,乃是照他豐富的恩典。 8 這恩典是 神用諸般智慧聰明,充充足足賞給我們的; 9 都是照他自己所預定的美意,叫我們知道他旨意的奧祕, 10 要照所安排的,在日期滿足的時候,使天上、地上、一切所有的都在基督裡面同歸於一。 11 我們也在他裡面得(或作:成)了基業;這原是那位隨己意行、做萬事的,照著他旨意所預定的, 12 叫 他的 榮耀 從我們這首先在基督裡有盼望的人可以得著稱讚。 13 你們既聽見真理的道,就是那叫你們得救的福音,也信了基督,既然信他,就受了所應許的聖靈為印記。 14 這聖靈是我們得基業的憑據(原文作:質),直等到 神之民(原文作:產業)被贖,使 他的榮耀 得著稱讚。 15 因此,我既聽見你們信從主耶穌,親愛眾聖徒, 16 就為你們不住的感謝 神。禱告的時候,常題到你們, 17 求我們主耶穌基督的 神, 榮耀的父 ,將那賜人智慧和啟示的靈賞給你們,使你們真知道他, 18 並且照明你們心中的眼睛,使你們知道他的恩召有何等指望, 他在聖徒中得的基業有何等豐盛的榮耀 ; 19 並知道他向我們這信的人所顯的能力是何等浩大, 20 就是照他在基督身上

Linux FD Handler 以及 Timer 機制

好久沒寫文章了 ... 怎麼覺得每次要寫東西都有這種感慨 ... 今天要紀錄的東西是為了工作上的案子所打造的 API。這個案子講穿了就是要實作一個 Protocol。既然是 Protocol,毫無疑問就要去處理封包收送啊、Timer啊,這一類的問題。以前在開發的時候是把這些問題全部丟給 Quagga (Quagga Software Routing Suite) 提供的工具來處理,在更早以前有用過另外一套忘記哪個案子裏面提供的 event loop。現在,龜毛如我,嫌 Quagga 太肥,另外一套又找不到(沒看到我連名字都忘了嗎?),所以只好自己來囉。 整個架構預計採用 epoll 的機制,這樣 socket的處理就完成了;那 Timer 呢?根據研究以後,Linux 有提供 Timerfd 的接口,簡單來說, 就是設定定時器,時間到的時候, Linux Kernel會主動送出資料給 Timerfd 的 File Descriptor ,所以有收到東西就知道有 Timeout 的事件發生 。這個機制最大的好處是可以配合所有的 FD 處理機制,不管是 poll、select 或是今天我採用的 epoll。 下面就是我設計的 API: # include < unistd.h > # include < stdlib.h > # include < stdio.h > # include < string.h > # include < sys/epoll.h > // For epoll # include < sys/timerfd.h > // For timerfd # include " fd_handler.h " // Static Variables static int epfd = -1; // EPOLL File Descriptor. static int epfdMax; // Max no of FD. static struct epol