Ví dụ về cách ước lượng dự án bằng phương pháp FPA (phần I)

Giả sử chúng ta cần lượng giá cho ứng dụng My E-books Lib. Đây là một ứng dụng cho phép bạn quản lý những cuốn ebooks mà bạn đã, đang và dự định đọc, hoặc thậm chí là những cuốn bạn chỉ muốn… sưu tập cho đủ số lượng.

Sách không tự sinh ra và cũng không tự mất đi. Do đó, gì thì gì, bạn cũng phải đi mua sách đã. Ứng dụng có chức năng là “Buy an E-book“. Gọi là mua cho oai thôi nhe, đừng tưởng thiệt mà chạy ra ACB, reg một cái Visa Debit card về rồi thì có nước ngồi… ngắm! Chức năng này đơn giản thôi, có 1 field Textbox dùng để nhập Title, ISBN, Author… hay bất cứ gì cũng được. Một cái Button “Search”.

Vậy rồi… search ở đâu, search bằng niềm tin àh! Oh, yeah… quên mất! Chúng ta sẽ sử dụng dịch vụ của Amazon. Okie. Type “gì gì” đó vào textfield, ứng dụng sẽ “tà tà” hoặc “vùn vụt”  (tùy vào sự hào phóng của anh VDC, FPT hay anh Viettel) tới đập cửa Amazon réo “Ê ê, mày có cuốn sách nào mà có cái tên là ‘gì gì‘ đó không?”. Anh Amazon rất là thân thiện, cười nhe hàm răng trắng bóng được chải bằng bàn chải Colgate với kem… Close-up Whitening, miệng nói tay… quăng cho một list dài dằng dặc “Này thì ‘gì gì‘ mà anh cần tìm đấy! Lần sau có nhờ thì nói rõ rõ một xíu nhóa”. Ô hô hô, một đống hầm bà lằng, nào là Title, nào là ISBN, nào là Publisher, nào là Author… thôi kệ, rút kinh nghiệm đợt sau sẽ type chi tiết hơn. Đại loại sẽ type là “Kamasutra” thay vì type mỗi “gì gì“. Hơ hơ. Sau một thôi, một hồi bới tung đống hầm bà lằng cũng tìm được cuốn “Kỹ thuật ‘gì gì‘ “! Nhấn nút “Add to My Lib” để thêm sách vào thư viện thôi.U…raaaaa công viên chơi nào!

À, mà nhớ tick vào cuốn sách “Kỹ thuật gì gì” rồi mới nhấn nút “Add to My Lib” nhé! Vậy là xong quá trình “mua” sách. Oh, yeah! (Anh Amazon chắc cũng tức trào cơm). Makeno, việc thường ngày ở huyện í mà!

Mua sách xong, nếu thấy háo hức quá thì đọc ngay kẻo “nguội”, nếu chưa muốn đọc thì cứ để đấy đợi hôm nào “trời hồng hồng, nắng trong trong” thì đem ra… phơi, còn nếu hôm qua đã xem “cọp” được của thằng bạn mấy “positions” thì cũng bảo là đang đọc nhé. Còn nếu hôm qua đã “trót” xem hết rồi, nhưng cũng muốn mua về để khi “không thuộc bài” thì có thể lấy ra mà nghía, okie, không sao… Cứ thế mà thiết lập trạng thái (Set Status) cho cuốn sách là “Reading“, “Plan to Read“, “Finished” tương ứng.

Trong quá trình đọc, nếu thấy “kỹ thuật” nào hay thì có thể ghi chú (Noting) lại nhé! Ê, này, này! Gì mà “đắm đuối” thế chứ hả! Đừng thấy “hay” quá mà đọc liền một mạch hết cuốn luôn nha! (Hehe) “Tẩu hỏa nhập ma” bây giờ. Đọc mỗi ngày một tí, một tí tẹo thôi, ghi chú đàng hoàng những lời “khắc cốt ghi tâm”, những “bí kíp”, những lời “vàng ngọc”, “giác ngộ chân lý” của mình… Khi nào tạm ngừng đọc, thì đánh dấu (Paging) số trang lại. Hôm sau nếu rãnh thì lôi ra đọc còn không thì hôm sau, nếu hôm sau của hôm sau lại bận thì có thể để hôm sau của hôm kia đọc cũng không muộn! Yeahhh!

Ứng dụng nho nhỏ mà tui mô tả đến đây là hết rồi! Cảm ơn các bạn đã “căng sức” theo dõi! (Vỗ tay). Thấy ứng dụng mà tui mô tả có “trong sáng” và “rõ ràng” chưa nào!

Facebook – Mạng xã hội lớn nhất VN?

Theo thống kê từ trang http://o.pe/227, cho tới ngày 20.7.2009, lượng người dùng Facebook ở VN đã vượt qua ngưỡng 400.000. Con số này quả thật là một con số ấn tượng nếu như biết rằng nó đã tăng gấp 3 lần so với thời điểm 5.6.2009 (140,000) chỉ trong vòng  1,5 tháng.

Thống kê về độ tuổi cho thấy số người sử dụng trong độ tuổi 18 – 21 chiếm đa số (32%), từ 0-17 tuổi  chiếm 17%, 22-24 chiếm 20%, 24-29 chiếm 21%. Điều này có nghĩa là lượng người sử dụng dưới 30 tuổi chiếm tới 90%. Trong đó, lượng học sinh – sinh viên chiếm 49%, 41% còn lại (có thể) là nhân viên văn phòng. Một điểm cũng khá thú vị đó là lượng người dùng Facebook là nữ cũng chiếm nhiều hơn nam (khoảng 5%).

Vậy đâu là điểm thu hút của Facebook với người dùng VN nói riêng và thế giới nói chung? Có thể nói điểm mạnh của facebook chính là những applications, và chính điều này đã tăng cường mức độ tương tác giữa người dùng với nhau. Thông qua các game, quizz, chế độ loan tin wall… giúp mọi người dễ dàng kết nối, theo dõi, chia sẻ thông tin về nhau… rất dễ lôi cuốn nữ giới vốn phụ trách những công việc văn phòng, ít di chuyển, được tiếp xúc máy tính, internet, tán gẫu nhiều hơn nam giới! (Dễ hiểu vì sao số lượng người dùng nữ nhiều hơn nam giới).  Đó là ở góc độ người dùng cuối, còn ở góc độ hạ tầng công nghệ, việc phát triển các ứng dụng cũng khá dễ dàng trên nền tảng Cloud Computing, đó mới chính là điều quan trọng làm nên một Facebook luôn mới mẻ…

Còn riêng ở thị trường VN, sự ra đi gần như “tất yếu” của Yahoo!360 bỗng dưng trở thành một “đường chuyền” dọn sẵn cho Facebook ghi bàn vào khung thành bỏ ngõ!

Vậy liệu Facebook có trở thành mạng xã hội lớn nhất ở VN hay không?

Theo World Map of Social Networks, vào thời điểm 6.2009, mạng xã hội lớn nhất VN là Zing (www.zing.vn). Còn hiện tại (7.2009) chưa có công bố nào cho thấymạng xã hội nào chiếm vị thế độc tốn ở VN. Tuy nhiên, với những con số phát triển cực kỳ ấn tượng dựa trên  một nền tảng hệ thống mở, có thể dự đoán được Facebook sẽ sớm trở thành mạng xã hội lớn nhất VN chỉ trong vòng 6 tháng cuối năm.

Yahoo! 360 to Shut Down – cái chết của một ngôi sao!

Với cộng đồng dân cư mạng VN, đúng ra vào thời điểm này Yahoo!360 sẽ kết thúc sứ mạng “lịch sử” của mình, chấm dứt hơn 4 năm khoấy động giới trẻ VN.

yahoo!360 to shut down“Yahoo!360 – memories” – trào lưu mới hiện nay

Ra đời vào những ngày cuối tháng 3/2005  và chính thức mở cửa với cộng đồng sử dụng Internet trên thế giới vào tháng 6, Yahoo!360 đã có những ảnh hưởng cực kỳ lớn đối với đời sống của đại bộ phận giới trẻ VN. Tuy những tính năng mà Yahoo!360 cung cấp chỉ ở mức “làng nhàng”,  “thường thường bậc trung”, song nhờ công cụ chat Yahoo Messenger “chống lưng”, Yahoo!360 dễ dàng và nhanh chóng chiếm lĩnh thị trường và trở thành  mạng xã hội hàng đầu ở VN. Thậm chí, sau đó, hàng loạt Mạng xã hội ra đời, trong nước có, ngoài nước có…, với những tính năng nổi trội hơn, song cũng không phải là kẻ đối trọng của Yahoo!360…

Vì một số lý do, Yahoo!360 tuyên bố chính thức đóng cửa sau nhiều lần ra… “đòn gió”. Quyết định này không quá bất ngờ với dân cư mạng, bởi suốt một năm nay, người dùng luôn phải “chịu đựng” những lỗi khó chịu từ một hệ thống quá “đát”, thiếu sự chăm sóc và quan tâm đúng nghĩa từ phía nhà cung cấp. Đại bộ phận đã “lục tục” tìm cho mình một ngôi nhà mới trên 360plus, facebook… Dù vậy, dân cư mạng VN vẫn dành một tình cảm nhất định cho Yahoo!360 cho  tới khi…

Yahoo!360 tuyên bố người dùng VN sẽ được gia hạn tới ngày 19/8 cho những nỗ lực “chuyển nhà cuối cùng”! (Yahoo! 360 gia hạn thời gian đóng cửa đến 19/8Dân Trí) Một thiện chí từ phía nhà cung cấp chăng?  Tuy nhiên, sau ngày 13/7 người sử dụng sẽ không cập nhật được các bài viết trên blog của mình. “Thà biến mất vào thời điểm này còn chút gì đó lưu luyến. Giờ cho thêm 1 tháng nữa cũng chả làm dc cái gì.” hay như “Tạm biệt cho đã giờ kiu gia hạn. Bó tay” – Pikachu, một blogger nhận xét.

Tuy nhiên, ngoài chuyện “dời nhà”, đây là cơ hội để bạn tham gia trào lưu “Yahoo!360 Memories”, tranh thủ chụp lại những thời khắc cuối cùng trên blog cá nhân.

yahoo!360 memories

Một cái chết tốn nhiều giấy mực!!!

PHP Test tools: How to use SimpleTest in Eclipse (part 1)

Cài đặt SimpleTest trong Eclipse

  • Cài đặt từ Remote Site

  • Cài đặt từ Local Site

Cấu hình SimpleTest trong Eclipse

  1. Chọn Window > Preferences… trên menu bar
  2. Chọn “Simple Test” trong danh mục liệt kê bên tay trái.
  3. Nhập hoặc chọn đường dẫn tới file php.exe
  4. Nhập định dạng file cho file dùng để test. Ví dụ “.php” hooặc “.test.php”.
  5. Click OK.

Sử dụng SimpleTest trong Eclipse

  • Tạo mới một PHP Project với tên là Test gồm các thư mục con:
    • Test\classes: dùng chứa các class cần test.
    • Test\test: chứa các file test.
  • Tạo files Calculator.php trong thư mục ‘classes’.
<?php
class Calculator{
  function add($x, $y){
    return $x + $y;
  }

  function subtract($x, $y){
    return $x - $y + 1; // Hiện thực sai
  }
}
?>
  • Tạo file testCalculator.php trong thư mục ‘test’.
<?php
require_once(dirname(__FILE__). '/../classes/Calculator.php');
class testCalculator extends UnitTestCase {
	function test_exists(){
		$url = dirname(__FILE__);
		$this->assertTrue(file_exists($url . '/../classes/Calculator.php'),"File not existed at $url");
	}

	function test_add(){
		$cal = new Calculator();
		$result = $cal->add(1,2);
		$this->assertEqual(3, $result, "Passed");

	}

	function test_subtract(){
		$cal = new Calculator();
		$result = $cal->subtract(1,2);
               $this->assertEqual(-1, $result, " Value what we expected is '-1' is not equal '$result' which is returned from subtract function");
	}

}
?>
  • Chọn Run As > Simple Test (hoặc tổ hợp phí Alt+Shift+X, G). Hộp thoại kết quả sẽ xuất hiện như sau:
Failed Testing

Failed Testing

  • Cửa sổ kết quả cho thấy phần hiện thực hàm “subtract” của lớp Calculator đã hiện thực sai. Sửa lại file Calculator.php như sau:
<?php
class Calculator{
  function add($x, $y){
    return $x + $y;
  }

  function subtract($x, $y){
    return $x - $y + 1; // Hiện thực sai
    return $x - $y;
  }
}
?>
  • Chọn Run As > Simple Test, kết quả như sau:
Passed Testing

Passed Testing

Một số lưu ý:

  • Không có yêu cầu cụ thể đối với việc đặt tên file dùng để test (nhưng nên theo chuẩn).
  • Tên function trong file test (cụ thể là testCalculator.php) phải bắt đầu bằng tiền tố “test” (không phân biệt chữ viết hoa hay chữ viết thường).
  • Có thể test trực tiếp qua browser, khi đó:
    • Download và giải nén gói simpletest ở trang http://simpletest.org/en/download.html
    • Chép thư mục simpletest vào trong thư mục Test/test/ chung với file testCalculator.
    • Thêm dòng lệnh sau vào đầu file testCalculator.php:
          require_once(dirname(__FILE__) . '/simpletest/autorun.php');
    • Mở browser (IE, Firefox, Safari…) gõ vào url  sau đây, trường hợp của mình file testCalculator nằm trong thư mục /demo/Test/test/:
          http://localhost/demo/test/test/testCalculator.php
    • Kết quả sẽ như sau:

    Passed Testing in Safari Browser

    Passed Testing in Safari Browser

Resource:

  • http://simpletest.org/eclipse/readme.html

PHP test tools: SimpleTest or PHPUnit

Trang opensourcetesting.org giới thiệu 9 công cụ hỗ trợ tiến trình Unit Test đối với lập trình PHP gồm có:

  • Amock
  • izh_test
  • PHP Assertion Unit Framework
  • PHPUnit (dựa trên nền tảng JUnit)
  • PHPUnit (trong gói PEAR)
  • Simple Test
  • Spike PHPCheckstyle
  • Spike PHPCoverage
  • Testilence.

Tuy nhiên, căn cứ vào số lượng download, có thể thấy nổi bật lên trong số đó chính là Simple Test (>100k lượt) và PHPUnit (>35k lượt).

Simple Test chủ yếu được phát triển bởi Marcus Barker và một số thành viên khác trong khi đó PHPUnit được phát triển bởi  Sebastian Bermann dựa trên nền tảng của JUnit nên có vẻ phát triển ổn định và được hỗ trợ bởi một cộng đồng lớn hơn so với Simple Test. Điều này thể hiện qua việc việc PHPUnit đã đưa ra phiên bản 4.0 so với phiên bản 1.0.1 của Simple Test.

Vậy chúng ta cần gì ở một PHP test tools:

  • Hỗ trợ mô hình test tăng dần, cho phép tạo các test case trước khi triển khai.
  • Hỗ trợ quá trình test qua browser hoặc command-line.
  • Có thể thực hiện cả việc test độc lập, theo nhóm và các bài test tổng thể
  • Có thể customize phần hiển thị kết quả.
  • Cho phép kiểm tra cấu trúc của lớp.
  • Kiểm tra các biệt lệ và sự kiểm soát biệt lệ.
  • Cung cấp các plug-in để tích hợp với IDE

May thay, cả SimpleTest và PHPUnit đều đáp ứng được hầu hết những yêu cầu đó. Tuy nhiên, mỗi công cụ cũng có những ưu và nhược điểm riêng:

Về phía PHPUnit.

  • Ưu điểm:
    • Được sử dụng và hỗ trợ rộng rãi từ cộng đồng  Zend: Cập nhật thường xuyên, mức độ lỗi ít, tài liệu chi tiết.
    • Có thể tạo nhiều loại report khác nhau.
  • Khuyết điểm:
    • Mock Objects được đưa ra trong phiên bản PHPUnit 3 song vẫn chưa thể sánh bằng SimpleTest
    • Không thực thi trực tiếp từ browser.
    • Ít chức năng hơn Simple Test

Về phía SimpleTest.

  • Ưu điểm:
    • Hỗ trợ Mock Objects mạnh mẽ
    • Hoạt động chung với PHPUnit
    • Có thể thực thi trực tiếp từ browser lẫn command-line.
    • Có thể test cả hành vi lẫn trạng thái của đối tượng.
    • Người dùng  Drupal có thể cài đạt module để sử dụng SimpleTest
  • Khuyết điểm:
    • Phần tài liệu không bằng PHPUnit
    • Cần thêm sự bổ sung mở rộng để dùng chung với Zend Framework

Mock Objects mô phỏng lại các đối tượng thực sự trong ứng dụng, chúng cũng có các phương thức giống như các đối tượng mà nó mô phỏng, chính vì vậy nó thường được tạo ra nhằm kiểm tra tính đúng đắn của một đối tượng phụ thuộc vào đối tượng mà nó mô phỏng.

Như chúng ta đã biết, trong các ứng dụng, một đối tượng thường phụ thuộc vào sự tồn tại của một (hay nhiều) đối tượng khác, chính vì vậy sẽ gây ra trở ngại khi phải thực hiện công đoạn Unit Test (mục đích là cách ly các thành phần của ứng dụng).

Giả sử có class StudentBSO cung cấp các business services cho các đối tượng Student và sử dụng StudentDAO để lưu dữ liệu vào database. Khi muốn test class StudentBSO, chúng ta chỉ cần gọi đối tượng mock object mô phỏng đối tượng StudentDAO, thực hiện triệu gọi các phương thức với các đối số tương ứng (đã được xác định) nhằm đạt được kết quả mong muốn thay vì phải gọi trực tiếp tới đối tượng StudentDAO.

Về mặt tính năng, giữa chúng có nhiều tính năng tương đồng và dễ dàng tích hợp với người dùng Eclipse. Nếu như trước đây người dùng PHPUnit cảm thấy yếu thế hơn khi mà PHPUnit không hỗ trợ Mock Object thì giờ đây, từ phiên bản 3 đã hỗ trợ Mock Object (tuy vẫn còn rất hạn chế) và nhiều tính năng khác như Database Testing… Tuy nhiên, người dùng SimpleTest có thể thực sự thấy quá trình Test thực sự “Simple” bởi những tính năng mà nó đem lại.

Resource: