1. Trang chủ
  2. » Công Nghệ Thông Tin

TẢN mạn về CÔNG NGHỆ PHẦN mềm

10 310 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 527,15 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Kể từ lúc những cỗ máy đầu tiên ra đời, chúng như những “món hàng” lạ lẫm đối với những người dân chân chất như chúng ta. Cũng giống như mĩ phẩm, hay các nhu yếu phẩm thiết yếu trong đời sống hằng ngày. Có bao giờ ta tự hỏi rằng nó được sản xuất như thế nào không? Những câu hỏi đại loại như what, how ra đời để thỏa lấp những tò mò của ta về các vấn đề ấy. Máy tính cũng vậy, nó chỉ là những cổ máy vô tri vô giác do trí tưởng tượng của con người tạo nên, nhưng kể từ khi có phần mềm, nó trở thành những cổ máy biết suy nghĩ, hoạt động theo ý muốn con người, và trở thành một trong những “sản phẩm” không thể thiếu trong đời sống hằng ngày. Hàng loạt những phần mềm ra đời, các ứng dụng độc đáo do cá nhân hay những tổ chức nào đó xây dựng lên nhằm thỏa mãn nhu cầu nghiên cứu, sáng tạo, xây dựng những hệ sinh thái nhằm phục vụ các nhu cầu khác nhau. Và như thế, tất cả chúng có lẽ đều thuộc về một thế giới riêng của chúng, chẳng ai biết chúng từ đâu đến, chỉ biết rằng, chúng sinh ra để phục vụ con người.

Trang 1

TẢN MẠN VỀ CÔNG NGHỆ PHẦN MỀM – PHẦN 1

Kể từ lúc những cỗ máy đầu tiên ra đời, chúng như những “món hàng” lạ lẫm đối với những người dân chân chất như chúng ta Cũng giống như mĩ phẩm, hay các nhu yếu phẩm thiết yếu trong đời sống hằng ngày Có bao giờ ta tự hỏi rằng nó được sản xuất như thế nào không? Những câu hỏi đại loại như what, how ra đời để thỏa lấp những tò mò của ta về các vấn đề ấy Máy tính cũng vậy, nó chỉ là những cổ máy vô tri vô giác do trí tưởng tượng của con người tạo nên, nhưng kể từ khi có phần mềm, nó trở thành những cổ máy biết suy nghĩ, hoạt động theo ý muốn con người, và trở thành một trong những “sản phẩm” không thể thiếu trong đời sống hằng ngày Hàng loạt những phần mềm ra đời, các ứng dụng độc đáo do cá nhân hay những tổ chức nào đó xây dựng lên nhằm thỏa mãn nhu cầu nghiên cứu, sáng tạo, xây dựng những hệ sinh thái nhằm phục vụ các nhu cầu khác nhau Và như thế, tất cả chúng có lẽ đều thuộc về một thế giới riêng của chúng, chẳng ai biết chúng từ đâu đến, chỉ biết rằng, chúng sinh ra để phục vụ con người

Cũng giống như Edsger Dijsktra từng nói: “Khi máy tính chưa xuất hiện, thì việc lập trình chưa có khó khăn gì cả Khi mới xuất hiện một vài chiếc máy tính chức năng kém thì việc lập trình bắt đầu gặp một vài khó khăn nho nhỏ Giờ đây khi chúng ta có những chiếc máy tính khổng lồ thì những khó khăn ấy trở nên vô cùng lớn Như vậy ngành công nghiệp điện tử không giải quyết khó khăn nào cả

mà họ chỉ tạo thêm ra những khó khăn mới Khó khăn mà họ tạo ra chính là việc sử dụng sản phầm của họ”

Thế giới khoa học đa sắc màu, và lĩnh vực công nghệ cũng vậy Chính vì quá rộng lớn, nên trong phạm vi chuyên mục này, tôi chỉ xin phép đề cập đến lĩnh vực Công nghệ phần mềm – 1 trong những lĩnh vực mà theo tôi thì khá là hấp dẫn trong những năm gần đây

Muốn tiếp cận một vấn đề gì, việc đầu tiên chúng ta cần phải biết nó là gì Công nghệ phần mềm cũng vậy, muốn hiểu được nó, cần phải biết nó là gì Ở đây, tôi mạn phép tách ra thành các phần

khác nhau, một là công nghệ và một là phần mềm.

Công nghệ (technology), nó đến trái đất này tự bao giờ? Có lẽ từ thời xa xưa, từ cái lúc mà con

người còn sơ khai, công nghệ đã xuất hiện Phải chăng là lúc con người tạo ra lửa, cũng có thể là từ lúc con người bắt đầu sử dụng các công cụ lao động mà hình thành nên Trong tiếng Hy Lạp cổ đại,

công nghệ được phiên dịch thành từ technologia, techno có nghĩa là thủ công, logia có nghĩa là châm

ngôn, và công nghệ được hiểu là các công cụ và mưu mẹo của con người Quay lại hiện tại, công

nghệ là sự biến đổi, sử dụng các công cụ, máy móc để giải quyết vấn đề nào đó Một khái niệm hàn lâm nhưng cũng dễ hiểu phải không…

Phần mềm (software) thì sao, nếu nói nó là những phần mà “mềm” thì có lẽ cũng đúng, vì bản chất

thì phần mềm thì nó có được “cứng” đâu Bạn đã từng dùng máy tính, hay điện thoại bao giờ chưa nhỉ? Có bao giờ bạn nghĩ rằng trong máy tính của bạn có phần mềm nào không? Ví dụ như game chẳng hạn, nó là phần mềm chứ là gì nữa…Ủa như vậy thì, phần mềm là gì…Nói nôm na đơn giản là

đó là những chương trình máy tính và chấm hết But but but, nói như vậy có đủ chưa nhỉ Khi vào một thư mục game nào đó, bạn có thấy 1 tập tin là README.txt hoặc 1 file word nào không? đó là 1 tài liệu hướng dẫn sử dụng đó Ồ, như vậy phần mềm được định nghĩa đầy đủ là những chương trình máy tính và các tài liệu đi kèm Rõ ràng thì, phần mềm thì thật trừu tượng, và chúng ta chẳng bao giờ có thể cầm, nắm được, chán quá phải không nào…

Khi đi vào siêu thị mua một món hàng nào đó, ví dụ iphone 6S chẳng hạn, đó là 1 product được bán rộng rãi trên thị trường.Những sản phẩm được bán đại trà, được đóng gói bao bì kĩ lưỡng, trải qua

quy trình công nghiệp hiện đại như vậy được gọi là Generic Product Tuy nhiên, đâu phải product

nào cũng được đóng bao bì, sản xuất hàng loạt đâu nhỉ…có những mặt hàng cho dù có hàng tỉ đô thì chưa chắc ta có thể mua được, vì có bán ở ngoài thị trường đâu mà mua Như vậy, một khái niệm mới ra đời, đó là những product được phát triển theo những yêu cầu riêng của khách hàng, và được

Trang 2

gọi là Bespoke Product Chẳng hạn như những bộ bàn ghế được làm từ những vật liệu cao cấp như

gỗ sồi, ta chẳng thể nào tìm được nó trên bất kì siêu thị, nhà triễn lãm hay bất kì viện bảo tàng, tiệm điêu khắc nào cả, nó là sự kết tinh của những tinh túy nơi nghệ nhân, và những yêu cầu khắc nghiệt

từ phía khách hàng Phần mềm máy tính cũng như vậy, nói một cách nôm na, nó chính là 1 product

của công nghệ thông tin ấy!!!

Trang 3

TẢN MẠN CÔNG NGHỆ PHẦN MỀM- PHẦN 2

Ở phần trước, tôi cũng đã có nhắc qua các khái niệm cơ bản của

phần mềm, cũng như là phần mềm chia làm 2 loại: Generic

product và bespoke product (một số tài liệu còn gọi là

customize product) Cũng như các loại sản phẩm khác, phần mềm

cũng có những đặc tính riêng và hết sức quan trọng, bao gồm:

Khả năng bảo trì (Maintainability): phần mềm có khả năng

thay đổi theo nhu cầu của khách hàng

Độ tin cậy (dependability): tính ổn định và bảo mật

Hiệu quả(efficiency): sử dụng hiệu quả tài nguyên trong máy

tính

Dễ dùng (Usability): giao diện dễ dùng, đáp ứng nhu cầu sử

dụng.

Như vậy, khi nhắc đến phần mềm, người ta không khỏi nhắc đến ngành công nghệ phần mềm Nó là gì? Và nó có sự khác biệt gì so với khoa học máy tính?

Một cách khái quát, công nghệ phần mềm là những quy tắc công

nghệ (engineering discipline), có liên quan đến các khía cạnh của

quá trình sản xuất phần mềm Và như vậy thì, nó có gì khác biệt so với khoa học máy tính, ta cùng điểm qua vài sự khác biệt thông qua định nghĩa của chúng:

 Công nghệ phần mềm: đề cập đến các hoạt động xây dựng và cho ra một sản phẩm có giá trị

 Khoa học máy tính: đề cập đến lý thuyết và những vấn đề cơ bản

Về bản chất, công nghệ phần mềm chỉ là một phần của công nghệ

hệ thống (system engineering) Công nghệ hệ thống có liên quan

đến tất cả khía cạnh của quá trình phát triển hệ thống Còn công nghệ phần mềm thì liên quan đến việc phát triển hạ tầng phần mềm, điều khiển ứng dụng và cơ sở dữ liệu trong hệ thống.

Như vậy thì, để tạo ra một phần mềm, các kĩ sư phần mềm đã phải trải qua những quy trình nào? Khi đề cập đến vấn đề này, ta lập tức thắc mắc: ủa vậy “quy trình” là gì??? Hiểu một cách đơn giản thôi, quy trình là tập hợp những hành động mà mục đích là xây dựng và phát triển phần mềm Một phần mềm khi được xây dựng thường phải trải qua nhiều quy trình, và cuối cùng là, một sản phẩm ra đời với đầy đủ các chức năng thỏa mãn mục dich và nhu cầu người sử dụng Các quy trình phần mềm bao gồm:

Trang 4

 Đặc tả phần mềm (software specification): chức năng nào sẽ được thực hiện, những ràng buộc nào cần phải có, tất cả phải được xác định một cách đầy đủ và chi tiết

Thiết kế và cài đặt (software design and implementation): đơn giản và dễ hiểu,

đó là quá trình xây dựng hệ thống phần mềm, code code code

để cho ra được sản phẩm theo bản đặc tả

 Đánh giá phần mềm (software validation): ở bước này, ta sẽ thẩm định lại xem phần mềm đã thỏa mãn các chức năng mà người

sử dụng đặt ra hay chưa

 Cải tiến phần mềm (software evolution): các phần mềm phải được cải tiến, điều chỉnh để phù hợp với những yêu cầu của hệ thống Nhìn chung, đa số các phần mềm đều trải qua 4 quy trình này Tuy nhiên, tùy thuộc vào việc chọn loại mô hình để phát triển, các bước này cũng có thể bị xáo trộn khác nhau.

Như vậy thì, làm phần mềm, không hề đơn giản là chỉ code, code và code, mà nó còn phải trải qua một quá trình dài với hàng loạt quy trình và nghiệp vụ Kiếm tốt, chỉ có thể trải qua quá trình tôi luyện; phần mềm muốn chất lượng, phải trải qua quy trình dài và chuyên nghiệp.

Trang 5

TẢN MẠN VỀ CÔNG NGHỆ PHẦN MỀM – PHẦN 3

Như đã đề cập từ trước, quy trình để sản xuất ra được một sản phẩm bao gồm 4 bước: đặc tả phần

mềm (software specification), thiết kế và cài đặt (software design and implementation), đánh giá phần mềm (software validation), cải tiến phần mềm (software evolution).

Có bao giờ bạn tự hỏi rằng, khi nhận một dự án, tôi sẽ làm gì đầu tiên không? Nếu xét ở góc độ 1 coder nghiệp dư thì đó là: code, code và code Một anh coder thì chẳng bao giờ quan tâm đến những thứ khác ngoài code cho xong để tạo ra được sản phẩm theo ý của bản thân Code xong rồi thì sao,

úi cha ơi, lỗi tè le, hoặc là chẳng ăn nhập gì với cái dự án mà anh ta đang làm Tuy nhiên, mọi việc thì chẳng bao giờ đơn giản như vậy, một cái bánh chất lượng muốn được làm ra phải trải qua bao nhiêu quy trình, và điều này lại càng đúng đối với phần mềm Ngạn ngữ Nga có câu : ‘Ai làm bằng gió thì sẽ được trả lương bằng khói’ quả là không sai trong trường hợp này

Và như vậy, giai đoạn đầu tiên là đặc tả phần mềm, cũng là giai đoạn cực kì quan trọng Có thể nói rằng, không có bước này, thì tỉ lệ thất bại của dự án sẽ là rất cao Vậy đặc tả phần mềm là gì mà làm cho bàng dân thiên hạ phải hoang mang, điên đảo như thế? Nói nôm na, đó là quy trình tìm hiểu, phân tích các dịch vụ, các ràng buộc trong quá trình xây dựng, vận hành hệ thống Quy trình đặc tả phần mềm sẽ gồm 4 pha chính :

Nghiên cứu tính khả thi (feasibility study) : ý tưởng thì mênh mông như sông Trường Giang,

dự án cũng vậy, nhiều không kể siết Nhưng mà có bao giờ ta nghĩ rằng làm xong dự án rồi,

ai dùng, và máy tính có chịu nỗi hay không? Hay là làm xong rồi, dự án đó sẽ được đem lên thư viện mà trưng bày Chính vì vậy, nghiên cứu xem dự án mà ta đảm nhận từ đối tác, khách hàng đưa ra có thỏa mãn những công nghệ hiện tại không, hay là hư cấu, rồi xong dẹp luôn Xét dưới góc độ 1 start-up, dự án mà chính ta đề ra sẽ đem lại lợi ích về mặt tài chính chứ ? Một việc dễ hiểu là ‘không tiền thì cạp đất mà ăn à’

Phân tích và rút ra các yêu cầu (requirements elicitation and analysis) :Chà, đây là phần mà

thần dân IT cảm thấy vui nhất Các team sau khi nhận dự án, sẽ yêu cầu 1 người đẹp trai, đẹp gái đến gặp khách hàng, lê lết cả ngày ở công ty khách hàng để quan sát quy trình làm việc, thu thập thông tin thông qua các biễu mẫu, các đơn, hoặc thông qua những cuộc trò chuyện, phỏng vấn với nhân viên công ty Bằng mọi giá, có thể là mĩ nhân kế, nam nhân kế hay gì cũng được để thu thập thông tin một cách tốt nhất, thông tin phải có giá trị nhất để phục vụ việc xây dựng về sau

Đặc tả yêu cầu (requirements specification) : cho ra bản đặc tả chi tiết các thông tin thu

được từ khách hàng, có 2 loại yêu cầu :

1 Yêu cầu người dùng :thông thường loại này do khách hàng cung cấp Thông tin trong này có thể là biểu đồ về dịch vụ, kết hợp với ngôn ngữ tự nhiên

2 Yêu cầu hệ thống :cung cấp tài liệu mô tả chi tiết về các chức năng, dịch vụ hay các ràng buộc Thông thường, loại yêu cầu này sẽ cho biết được những gì cần phải xây dựng trong hệ thống Và đây có thể sẽ là bản hợp đồng giữa đối tác và bên thầu sản phẩm

Đánh giá yêu cầu (requirement validation): đánh giá lại xem các yêu cầu đã thỏa mãn chưa.

Trang 7

TẢN MẠN VỀ CÔNG NGHỆ PHẦN MỀM – PHẦN 4

Ở phần trước, tôi đã điểm qua giai đoạn đặc tả phần mềm Tiếp theo

sẽ là giai đoạn thiết kế phần mềm và cài đặt (software design and

implementation) Giai đoạn này có thể chia tách thành 2 giai đoạn

nhỏ hơn đó là “thiết kế” và “cài đặt”.

Có bao giờ bạn tự nghĩ rằng:”tôi chẳng cần thiết kế, tôi vẫn có thể cài đặt được chương trình, đơn giản thôi mà!!!” Cũng đúng thôi, nhưng thử nghĩ lại xem, cái mà bạn gọi là “chương trình” đó, nó sẽ

ra sao, ai sẽ sử dụng bây giờ???

Thiết kế phần mềm (software design): là quá trình mô tả cấu trúc (structure) phần mềm dựa trên các tài liệu được đặc tả từ trước

Thiết kế phần mềm bao gồm:

 Thiết kế kiến trúc:xác định kiến trúc tổng thể của hệ thống, các thành phần chính (đôi lúc cũng được gọi là các hệ thống con

(sub-system) hoặc các module), và mối quan hệ

(relationship) giữa chúng

 Đặc tả trừu tượng: đặc tả về các dịch vụ và các ràng buộc khi

các hệ thống con (sub-system) vận hành.

 Thiết kế giao diện: thiết kế giao diện giữa các thành phần của

hệ thống, và cho ra bản đặc tả giao diện Bản đặc tả giao diện này phải dễ hiễu, đơn giản.

 Thiết kế thành phần:các giao diện tương tác giữa các thành phần, các dịch vụ cung cấp

 Thiết kế cấu trúc dữ liệu: cấu trúc dữ liệu sử dụng trong hệ thống

 Thiết kế thuật toán:các thuật toán sử dụng để cung cấp các dịch vụ trong hệ thống.

Trang 8

Sau khi có đầy đủ các bản đặc tả hệ thống, công việc tiếp theo là cài đặt phần mềm, người lập trình sau khi nhận bản đặc tả, sẽ chuyển đổi chúng thành hệ thống thực tế, và đương nhiên hệ thống này phải

là hệ thống chạy được, ít lỗi nhất có thể và thỏa mãn những tính năng được đặc tả trong bản đặc tả.

Lập trình là công việc cá nhân, và như thế thì không có quy trình chung chung nào ở đây cả Vài lập trình viên thì bắt đầu lập trình từ những thành phần đơn giản, hoặc những thành phần mà họ am hiểu nhất, sau đó đến các thành phần khó hơn Một số khác thì đi ngược lại quy trình này, cũng có thể họ là dân chuyên nghiệp rồi…

Trong quá trình lập trình, các coder cần phải kiểm tra ngay các

phương thức, các module mà họ xây dựng xem có bug nào không Một điều hiển nhiên là, không ai mà lập trình ra chương trình không

có bug Có bug thì mới kiểm tra, kiểm tra ra bug rồi thì tìm cách loại

nó ra khỏi module đó.

Trang 9

TẢN MẠN VỀ CÔNG NGHỆ PHẦN MỀM – PHẦN 5

Phần này, tôi xin mạn phép đề cập khái quát đến giai đoạn đánh giá phần mềm (software validation)

và giai đoạn cải tiến phần mềm (software evolution) Đầu tiên, tôi sẽ đề cập đến giai đoạn đánh giá phần mềm (software validation) Hãy thử tưởng tượng xem, sau khi code code và code xong, ok,

bàn giao cho khách hàng thôi Và sau khi khách hàng nhận sản phẩm, ok failed rồi nhé, hợp đồng chấm dứt tại đây, lỗi quá nhiều, thật không thể chấp nhận được Và như vậy thì, giai đoạn đánh giá phần mềm cũng là một trong những giai đoạn khá quan trọng và không thể thiếu trong công đoạn thiết kế

Đánh giá phần mềm (software validation) được sử dụng để chỉ ra xem hệ thống đã được thực hiện

theo đúng các đặc tả và thỏa mãn theo các yêu cầu của khách hàng Giai đoạn này gồm 3 công đoạn chính: kiểm tra, xem xét lại và kiểm thử hệ thống Quy trình kiểm thử gồm 3 công đoạn:

Kiểm thử thành phần (unit testing): các thành phần được kiểm thử 1 cách độc lập

Kiểm thử hệ thống (software testing): kiểm thử toàn bộ hệ thống

Kiểm thử chấp thuận (acceptance testing): kiểm thử dựa trên dữ liệu mà khách hàng cung

cấp

Khi chuyển giao cho khách hàng thì quy trình kiểm thử beta sẽ được triển khai Khách hàng sẽ dùng thử và phản hồi lỗi về cho technical Các lỗi này sẽ được fix và tiếp tục quy trình kiểm thử, sau đó sẽ chuyển giao phiên bản cuối cùng cho khách hàng

Ổ đây, ta cũng cần chú ý sự khác biệt giữa 2 khái niệm: software validation và software verification:

Software verification: thẩm tra xem coi phần mềm được phát triển có phù hợp với bản đặc

tả của nó hay chưa Nói đơn giản dễ hiểu là: “Are we building the product right?”

Software validation: đánh giá xem phần mềm có phù hợp với yêu cầu khách hàng Nói cách

khác, đó là: ”Are we building the right product?”

Giai đoạn cuối cùng là cải tiến phần mềm (software evolution) Phần mềm sau khi chuyển giao cho

khách hàng, sau một thời gian, cơ cấu công ty của khách hàng có sự thay đổi, các nghiệp vụ cũng có thể thay đổi; đồng thời các chức năng của phần mềm có phần lỗi thời, không đáp ứng tốt nhu cầu khách hàng, hoặc có trường hợp xảy ra bug Cũng giống như máy móc, trang thiết bị sử dụng hằng ngày, dùng lâu thì dễ sinh ra hỏng, hỏng thì phải bảo trì, đem ra tiệm để được sửa chữa, và phần mềm cũng tương tự như thế

Khi các yêu cầu hệ thống thay đổi theo sự thay đổi của các yêu cầu nghiệp vụ thì phần mềm phải cải tiến và thay đổi để hỗ trợ khách hàng Chi phí để bảo trì và cải tiến thường đắt hơn so với chi phí xây dựng phần mềm

Nếu nói như vậy thì, tại sao tôi không xây dựng một phần mềm mới luôn, mà lại phải bảo trì phần mềm, rõ ràng là chi phí bảo trì cao hơn so với mua mới mà!!! Không đơn giản như bạn nghĩ, một phần mềm muốn xây dựng mới thì phải mất một khoảng thời gian khá dài, trải qua nhiều giai đoạn

Trang 10

và quy trình phức tạp Trong khi đó, khách hàng đã có sẵn phần mềm, họ chỉ cần ta cải tiến, bảo trì lại cho phù hợp với nhu cầu hiện tại, và như thế thì sẽ mất ít thời gian hơn, chưa kể thời gian để chuyển giao và training lại cho đội ngũ nhân viên cũng được tiết kiệm khá lớn

Ngày đăng: 02/11/2016, 20:18

TỪ KHÓA LIÊN QUAN

w