Thứ Tư, 20 tháng 4, 2016


Chào các bạn,
Khi chúng ta nói đến lập trình máy tính (computer programming), ta không chỉ đề cập riêng việc viết code bằng các ngôn ngữ lập trình như Java, C#, C++, Python,... mà còn là cả một quá trình phát triển phần mềm. Chỉ đơn thuần học cách viết mã nguồn bằng ngôn ngữ lập trình là KHÔNG ĐỦ để trở thành một người phát triển phần mềm (software developer) tài giỏi. Bạn cần phải nắm rõ cách thiết kế một chương trình theo phương pháp lập trình hướng đối tượng (object-oriented programming). Khi đó bạn sẽ không chỉ đơn thuần là một coder lúc nào cũng chỉ biết ôm máy tính để lập trình, mà sẽ trở thành một developer hiểu sâu và rộng kiến thức trong nhiều lĩnh vực.
Kỹ nghệ phần mềm - Xu hướng của đa số sinh viên CNTT hiện nay


VỊ TRÍ BẮT ĐẦU TRONG NGÀNH CÔNG NGHỆ PHẦN MỀM

Vậy thì coder, programmer, developer và engineer là gì? Và nó khác nhau chỗ nào?

Về cơ bản, coder (thợ code) chỉ viết các mã lệnh logic với ngôn ngữ lập trình trong phạm vi yêu cầu mà anh ấy không cần biết nhiều về logic của chương trình. Họ được cung cấp định nghĩa về các bussiness logic và flowchart hoặc dễ hiểu hơn là các vấn đề được mô tả bằng ngôn ngữ tự nhiên, mã giả,... và nhiệm vụ của họ là chuyển nó sang mã nguồn lập trình.
Còn Programmer thì cũng tương tự như coder, tuy nhiên anh này là người đề ra giải pháp giải quyết các vấn đề, cung cấp bussiness logic cho coder. 
Tôi đang trên đường trở thành một Engineer, còn bạn thì sao?
Developer là người không chỉ code mà còn tham gia vào tất cả các quá trình của SDLC (Software development life cycle). Nếu dự án có vấn đề mà bạn chưa định hình được nó và hướng giải quyết thì các developer sẽ giúp bạn phân tích vấn đề, và tìm cách giải quyết nó. Vậy developer là người vừa lập trình, vừa định hướng phát triển sản phẩm
Engineer là một thuật ngữ được sử dụng ở mức cao cấp nhất. Anh này hoạt động ở cả phần lập trình, phân tích thiết kế (bussiness level) và bảo trì. Là những developer giỏi, có khả năng phân tích và giải quyết các vấn đề phức tạp. Những anh này thường sẽ được trả lương xấp xỉ với quản lý dự án (Project Manager), tuy nhiên thiên về hướng phát triển kỹ thuật hơn.

Ở bài này mình chỉ nói sơ về các vị trí bắt đầu khi bước vào ngành CNPM, bởi vì kiến thức thực tế còn quá giới hạn nên các vị trí khác đành chờ phần sau vậy :D




QUY TRÌNH PHÁT TRIỂN PHẦN MỀM


Chúng ta xây một ngôi nhà với các giai đoạn được xác định rõ ràng (làm móng, xây nền, dựng cột, xây tường,...), và áp dụng các nguyên tắc kỹ thuật vào tất cả các giai đoạn đó. Làm phần mềm cũng vậy, bạn xây dựng một chương trình qua các công đoạn và áp dụng các phương pháp, qui tắc phát triển phần mềm vào từng công đoạn. Trình tự các công đoạn đó từ giai đoạn ý tưởng (conception) đến vận hành (operation) được gọi là qui trình phát triển phần mềm (Software Development Life Cycle)

Có 5 giai đoạn chính trong qui trình phát triển phần mềm: Phân tích (Analysis), Thiết kế (Design), Cài đặt mã nguồn (Coding), Kiểm thử (Testing) và Vận hành (Operation). Phần mềm ra đời dựa trên yêu cầu của người dùng.


PHÂN TÍCH


Ví dụ: một người muốn có một danh bạ online. Trong giai đoạn phân tích, chúng ta thực hiện nghiên cứu tính khả thi, chúng ta phân tích các vấn đề và xác định xem liệu giải pháp có thực sự khả thi. Và nếu giải pháp đó khả thi, thì kết quả của giai đoạn này sẽ là bảng "Đặc tả yêu cầu"  - requirement specification - để mô tả các chức năng của chương trình. Các tính năng này phải được phát biểu theo những cách có thể kiểm chứng được. Một trong những tính năng của danh bạ online là có khả năng tìm kiếm một người dựa trên first name của họ. Chúng ta có thể kiểm tra tính năng đó bằng cách chạy trực tiếp chương trình và tìm kiếm, và kiểm tra xem chương trình có hoạt đông đúng và cụ thể khi tên của một người có trong danh bạ, và người không có trong danh bạ được gõ vào khung tìm kiếm. Những việc làm đó thuộc pha Kiểm thử, thứ mà mình sẽ nói tới nó sau.


THIẾT KẾ

Trong giai đoạn thiết kế, chúng ta sẽ chuyển bảng đặc tả yêu cầu thành bảng "Thiết kế chi tiết" - detailed design của chương trình. 
Trong giai đoạn này chúng ta sẽ thiết kế các giao diện người dùng của chương trình (User Interface) -  bao gồm các bước: Lập danh sách các màn hình (view, form,...) dựa vào Use Case, vẽ sơ đồ mối quan hệ giữa các màn hình, Thiết kế các đối tượng trên mỗi màn hình (Sắp xếp vị trí các button, textbox,...) theo các qui tắc về thiết kế giao diện, cuối cùng đặc tả, giải tích cách hoạt động của các đối tượng trên từng màn hình đó.
Với một chương trình thiết kế hướng đối tượng (object-oriented design), kết quả của pha này không thể thiếu Danh sách các lớp (class) được dùng để đáp ứng yêu cầu. Chúng ta sẽ thiết kế các lớp đối tượng, dựa vào những yêu cầu cần thiết, các kiến thức về kế thừa, đa hình để thiết kế các lớp đối tượng, và mô hình hóa chung bằng các sơ đồ (ví dụ UML - Unified Modeling Language). Ví dụ: với chương trình danh bạ online ở trên thì chúng ta có thể cần các class như Person, Phone, Group,...
Thiết kế phần mềm - giai đoạn không thể thiếu trong qui trình phần mềm
Ngoài ra ở một số chương trình đặc thù, ta còn cần thiết kế các tầng dữ liệu cho chương trình. Dữ liệu ở đây có thể là hệ thông tập tin đơn giản, đến các hệ  cơ sở dữ liệu phức tạp. Sau đó vẽ sơ đồ mô hình hóa, đặc tả dữ liệu.
Cuối cùng không thể thiếu là thiết kế xử lý cho chương trình. Chi tiết hóa các kịch bản usecase, các luồng logic trong chương trình. Và sử dụng sơ đồ tuần tự để mô tả.


CÀI ĐẶT MÃ NGUỒN

Trong giai đoạn cài đặt mã nguồn, chúng ta triển khai các thiết kế thành một chương trình thực tế bằng các ngôn ngữ lập trình như Java, C#, Python, hay các hàm API,... Chúng ta đã có một bảng thiết kế cấu trúc hoàn chỉnh, thì việc triển khai thành mã nguồn không thực sự quá khó khăn.
Nhiều người hay lầm tưởng làm phần mềm chỉ là ngồi viết code!


KIỂM THỬ

Khi quá trình triển khai mã nguồn hoàn chỉnh, chúng ta sẽ đến với giai đoạn kiểm thử. Trong giai đoạn này chúng ta sẽ chạy chương trình với nhiều bộ dữ liệu để kiểm chứng là chương trình chạy đúng theo đặc tả yêu cầu. Hai loại kiểm thử dành cho các chương trình hướng đối tượng là: kiểm thử đơn vị (unit testing) và kiểm thử tích hợp (integration testing). 
Giai đoạn dễ gây "mâu thuẫn" giữa các thành viên trong team nhất!
Kiểm thử đơn vị thường do lập trình viên thực hiện, kiểm nghiệm từng class riêng biệt, từng hàm trong mã nguồn trong môi trường cô lập. Còn đối với kiểm thử tích hợp chúng ta kiểm tra các class có làm việc đúng khi ghép lại với nhau hay không, và quá trình test diễn ra ngay sau unit testing. Hành động "bất hủ" dùng để phát hiện và loại bỏ lỗi của quá trình  thiết kế và cài đặt gọi là "debugging". Nếu tìm được lỗi, chúng ta phải quay về pha trước đó để sửa chữa và hoàn thiện chương trình.

Bonus cho các bạn 1 câu nói bất hủ của Dijkstra :
"Program testing can be used to show the presence of bugs, but never to show their absence!"

VẬN HÀNH

Cuối cùng sau khi quá trình kiểm thử kết thúc thành công, chúng ta đi vào pha vận hành, khi đó chương trình sẽ được đưa vào sử dụng thực tế. Thứ quan trọng nhất và mất nhiều thời gian nhất trong pha này là bảo trì phần mềm (software maintenace). Ngay cả sau khi phần mềm được đưa vào sử dụng, chúng ta hầu như luôn phải sửa đổi nó. Bởi vì khách hàng có thể yêu cầu thêm tính năng, hoặc các lỗi mới được tìm thấy. 
Thống kê cho thấy, xấp xỉ 70% phí của phần mềm thuộc về công đoạn bảo trì. Vậy nên khi phát một phần mềm chúng ta phải nhắm vào phần mềm dễ bảo dưỡng, bỏ thời gian và công sức ra để phân tích thiết kế và lập trình cẩn thận. Ngay cả nó có mất thời gian, và chi phí giai đoạn đầu, nhưng trong qua trình hoạt động lâu dài, các phần mềm có sự chuẩn bị thiết kế chu đáo sẽ ít tốn kém hơn. Đây là một điểm rất quan trọng mà các bạn nào muốn trở thành một nhà phát triển phần mềm giỏi cần phải lưu ý!

--------------------------------------------------------------------------------------------
Giai đoạn thiết kế luôn là giai đoạn quan trọng nhất trong qui trình phần mềm!

Chào và chúc các bạn học tốt!


0 nhận xét:

Đăng nhận xét

Categories

Sample Text

Được tạo bởi Blogger.

Must Read

Biểu mẫu liên hệ

Tên

Email *

Thông báo *

Popular Posts

Video

Popular Posts

Our Facebook Page