intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Chương Vi: Các đặt ood bằng ngôn ngữ lập trình không hỗ trợ hướng đối tượng

Chia sẻ: Trịnh Thị Thoa | Ngày: | Loại File: DOC | Số trang:45

167
lượt xem
14
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Khi biên soạn bản thảo này, chúng tôi đã tham khảo các tài liệu từ nhiều nguồn khác nhau (xem danh sách các tài liệu tham khảo), trong đó hai tài liệu chính được sử dụng là "Object-Oriented and Classical Software Engineering" của Stephen R. Schach và "Software Project Management, a practitioner's approach" của E.M. Bennatan. Cuốn thứ hai đã được dịch ra tiếng Việt...

Chủ đề:
Lưu

Nội dung Text: Chương Vi: Các đặt ood bằng ngôn ngữ lập trình không hỗ trợ hướng đối tượng

  1. CHƯƠNG VI – CÀI ĐẶT OOD BẰNG NGÔN NGỮ LẬP TRÌNH KHÔNG H Ỗ TRỢ HƯỚNG ĐỐI TƯỢNG 1. Tổng quan Khi biên soạn bản thảo này, chúng tôi đã tham khảo các tài liệu từ nhiều nguồn khác nhau (xem danh sách các tài li ệu tham khảo), trong đó hai tài liệu chính được sử dụng là "Object-Oriented and Classical Software Engineering" của Stephen R. Schach và "Software Project Management, a practitioner's approach" của E.M. Bennatan. Cuốn thứ hai đã được dịch ra tiếng Việt bởi PGS. Nguyễn Quốc Toản, Đại học Quốc gia Hà nội, với tiêu đề "Quản lý dự án phần mềm, một cách tiếp cận cho người thực hành". Sở dĩ chúng tôi đã chọn cuốn sách của Schach, vì cách trình bày khá đơn giản và dễ hiểu. Tác giả giới thiệu các vấn đề lý thuyết thông qua các ví dụ cụ thể, bắt đầu từ pha khảo sát yêu cầu, đến phân tích, thiết kế rồi cài đặt, tích hợp và bảo trì. Có thể tìm thấy các cài đặt bằng C++ và Java, cùng một phần của cuốn sách của Schach qua trang Web www.mhe.com/engcs/compsci/schach. Thực ra, khi nghiên cứu môn "Phân tích h ệ thống hướng đối tượng với UML", chúng ta cũng đã làm quen với công nghệ phần mềm. Trong môn học "Công nghệ phần mềm và quản lý dự án CNTT" này, chúng ta sẽ tìm hiểu qui trình xây dựng một phần mềm một cách đầy đủ và toàn diện hơn. Để có thể nắm chắc được kiến thức và sau này áp dụng vào thực tế, thiết nghĩ rằng ngay bây giờ, chúng ta nên tìm hiểu thực tế và thử xây dựng một phần mềm dù đơn giản, nhưng áp dụng những kiến thức đã học, chúng ta sẽ hiểu bài học hơn và dần dần có thể tiếp cận, giải quyết được các bài toán lớn hơn. Vấn đề là nên lựa chọn ngôn ngữ lập trình gì để cài đặt OOD? Có lẽ câu trả lời mà ai cũng nghĩ tới là: nên chọn ngôn ngữ lập trình HĐT như C++ hay Java, vì đó là những ngôn ngữ hỗ trợ HĐT đầy đủ nhất. Tuy nhiên, nếu cài đặt một phần mềm có thao tác cơ sở dữ liệu thì sử dụng C++ và thậm chí Visual C++ sẽ khá phức tạp và ít được dùng; còn Java thì chúng ta chưa được học mà sử dụng cũng không đơn giản. Có một vài ngôn ngữ khác như Visual Foxpro (VF) hay Visual Basic (VB) ch ẳng hạn, cũng hỗ trợ HĐT nhưng không đầy đủ như C++ và Java. Ví dụ trong VB không có kiểu dữ liệu class, chỉ có module kiểu class, VB có nhiều loại đối tượng 163
  2. có sẵn, nhưng chỉ có tính đóng gói, không có tính kế thừa giữa các đối tượng, và vì thế, cũng không có tính đa hình. Trong thực tế, nhiều khi việc chọn ngôn ngữ không phải do người lập trình quyết định mà còn do nhũng yếu tố khác. Ví dụ, khi chúng ta công tác ở một nơi chỉ sử dụng Foxpro for DOS thôi chẳng hạn, và họ yêu cầu chúng ta viết phần mềm bằng ngôn ngữ này thì sao? Rõ ràng, rất khó thuyết phục họ dùng Java, vì Java là ngôn ngữ thông dịch, chương trình Java chỉ chạy được trên máy có cài đặt Java mà thôi, và rất có thể khách hàng không muốn cài đặt Java trên máy của họ để tiết kiệm bộ nhớ. Theo các chuyên gia tin học hàng đầu thế giới, phương pháp hướng đối tượng hiện nay và trong tương lai gần vẫn là phương pháp hiệu quả nhất. Chả lẽ một công cụ mạnh như vậy lại chỉ có thể dùng một vài ngôn ngữ lập trình để thực hiện hay sao? Tóm lại, có một câu hỏi đặt ra là: thiết kế hướng đối tượng có thể được thực hiện (lập trình, cài đặt) bằng một ngôn ngữ lập trình không hỗ trợ hướng đối tượng, ví dụ như C, COBOL, FORTRAN...không? Rất may câu trả lời được cho bởi Schach là: Có. Theo Schach, thì m ột ngôn ngữ lập trình (như COBOL chẳng hạn) không hỗ trợ thậm chí cả lệnh định nghĩa kiểu dữ liệu như type trong Pascal và typedef trong C, cũng có thể cài đặt chương trình theo thiết kế hướng đối tượng. Nếu chúng ta hỏi tiếp: vậy làm như thế nào để cài đặt một OOD bằng một ngôn ngữ không hỗ trợ hướng đối tượng? Các lớp được cài đặt như thế nào khi không có kiểu dữ liệu class? Một lần nữa chúng tôi lại cố công tìm một ví dụ mẫu, trong đó OOD được cài đặt bằng ngôn ngữ không hỗ trợ hướng đối tượng, nhưng không may là cho đến nay chúng tôi chưa tìm được. Nếu không tìm được thì chỉ có cách là chúng ta sẽ làm theo cách mà chúng ta cảm thấy đúng vậy. Sau đây chúng tôi xin đưa ra một vài gợi ý về cách cài đặt một OOD trong ngôn ngữ lập trình không hỗ trợ HĐT như Foxpro for DOS, hoặc có hỗ trợ hướng đối tượng nhưng không đầy đủ như VB, Access. Chúng ta chỉ nên xem đây là các gợi ý. Chúng tôi cũng không dám chắc là sau này trong một môi trường khác nếu cũng thực hiện như vậy thì sẽ được ủng hộ hay không. Hiện nay, việc áp dụng các thành tựu công nghệ thông tin vào thực tế ở Việt nam cũng còn có nhiều vấn đề tranh cãi, điều chúng tôi sắp gợi ý hiện chưa có ai làm, nên có thể không phải đã đuợc chấp nhận ở những nơi khác. Quan điểm của chúng tôi là: 164
  3. Chúng ta cứ học, cứ làm đi. Nếu có gì chưa ổn chúng ta sẽ hiệu chỉnh dần cho ngày một tốt hơn. 2. Cài đặt các lớp và các đối tượng độc lập Trong phân tích và thiết kế HĐT, khái niệm lớp hoặc đối tượng đóng vai trò quan trọng bậc nhất. Công việc cần thực hiện trong bước phân tích là xây dựng ba loại mô hình: Mô hình use-case gồm các biểu đồ use-case (use-case diagram) cung cấp một bức tranh toàn cảnh về những gì đang xảy ra trong hệ thống. Mỗi phần tử của mô hình này thường là một lớp. Mô hình lớp gồm các biểu đồ lớp mô tả các lớp cùng với khả năng cộng tác giữa chúng. Lớp (class) chính là phần tử cơ bản để xây dựng nên biểu đồ lớp. Mô hình động gồm các biểu đồ tương tác (interaction diagram) biểu diễn các hành động được thực hiện bởi (tới) các lớp hoặc các lớp con, ví dụ biểu đồ trạng thái. Như vậy khái niệm lớp tham gia ở mọi nơi trong mô hình HĐT. Trong các ngôn ngữ lập trình HĐT thì lớp (class) là một kiểu dữ liệu, cũng giống như kiểu thực, nguyên...nhưng lại có sự khác biệt là lớp có thể có các thành phần là dữ liệu hoặc hành động. Để dễ hình dung, có người nói rằng lớp là tập hợp các đối tượng, và cụm từ lớp của các đối tượng cũng hay được sử dụng. Tuy nhiên, nếu đòi hỏi tính chặt chẽ thì cách nói này chưa thật chính xác. Ta không thể nói int là tập hợp các số nguyên, còn int x; là m ột thể hiện của lớp số nguyên, mà chỉ có thể nói int là kiểu dữ liệu nguyên, còn int x; có ngh ĩa là biến x có kiểu nguyên được khai báo. Vậy thì khi ta viết class V {...}; V x; thì có nghĩa là V là một kiểu dữ liệu, còn x là một biến có kiểu V. Tuy nhiên, trong thực tế ta vẫn chấp nhận cách nói không hoàn toàn chính xác để vấn đề dễ hiểu hơn. Nếu cài đặt lớp bằng ngôn ngữ lập trình HĐT và sử dụng kiểu dữ liệu class thì dĩ nhiên vấn đề khá đơn giản, ta chỉ cần thực hiện chuyển đổi từ cách mô tả sang các dòng lệnh tương ứng. Tuy nhiên, nếu cài đặt bằng một ngôn ngữ không hỗ trợ HĐT hoặc không dùng kiểu dữ liệu class thì sẽ khó khăn hơn. Trước hết, ta cần làm rõ khái niệm lớp trong mô hình UML. 165
  4. Trong các mô hình UML thì lớp được hiểu là phần tử đại diện không xác định rõ của một tập hợp các đối tượng có chung một số đặc trưng nào đó, các đặc trưng này có thể là thuộc tính hoặc hành động. Như vậy đối tượng chính là một thể hiện của lớp. Giả sử ta có lớp Hàng với các thành phần được mô tả trong bảng sau (cột thứ 2 là giải thích): Tên lớp Hàng MAH Mã hàng TENHANG Tên hàng Nơi cung cấp NOICC Số lượng còn trong kho chưa bán SOLUONG Đơn giá DONGIA Tìm kiếm hàng TimKiem() Nhập mặt hàng mới NhapMoi() Xóa mặt hàng Xoa() Lưu dữ liệu Save() Như cách hiểu trên đây thì có thể hiểu lớp Hàng là một bảng gồm các thuộc tính và hàm như trên nhưng chưa có giá trị, còn đối tượng là bảng đó nhưng đã nhận giá trị cụ thể: Hàng Hàng MAH: MAH: VT TENHANG: TENHANG: Máy vi tính NOICC: NOICC: Công ty FPT SOLUONG: SOLUONG: 21 DONGIA: DONGIA: 6 000 000 TimKiem() TimKiem() NhapMoi() NhapMoi() Xoa() Xoa() Save() Save() a) Lớp Hàng b) Đối tượng Máy vi tính của lớp Hàng 166
  5. Nếu chúng ta đã làm quen với đối tượng Form trong Access, thì có thể thấy rằng Form nhập dữ liệu có dạng như sau là một cài đặt hợp lý của lớp Hàng: a) Lớp Hàng b) Đối tượng Máy vi tính của lớp Hàng Hình 6.1. Dùng Form để cài đặt lớp và đối tượng Có thể thấy rằng, nếu thuộc tính thường thay đổi từ đối tượng này sang đối tượng khác thì hàm lại không như vậy. Thường thì các hàm là như nhau với các đối tượng khác nhau, nghĩa là các hàm thành phần của lớp được xác định ngay khi xây dựng lớp và không thay đổi với các đối tượng khác nhau. Tương tự, chúng ta có thể thấy rằng một số công cụ khác như đối tượng Report cũng có thể dùng để cài đặt các lớp trong mô hình UML. Dữ liệu trong thực tế thường không nằm ngay bên trong đối tượng, mà được lưu trong bảng dữ liệu. Dữ liệu trong đối tượng chỉ là bản ghi hiện thời, hoặc là dữ liệu tạm thời trước khi đưa vào tệp. Khi form nhập dữ liệu có nhiều bản ghi (tức là khi dữ liệu được hiện lên theo chiều ngang) thì form có thể được xem là đối tượng ứng với bản ghi hiện thời. Trong VF hoặc VB có rất nhiều kiểu biến đối tượng được định nghĩa sẵn (tức là các lớp) như các lớp Form, CommandButton, ToolBar... và chúng ta nên tận dụng các lớp này để tạo các đối tượng mới. Phần quan trọng thể hiện sự tương tác thực sự giữa các lớp trong một OOD là mô hình động. Trong mô hình này các đối tượng đóng vai trò chủ đạo, ví dụ như trong biểu đồ tuần tự, biểu đồ cộng tác. Khi cài đặt chương trình thì ranh giới giữa lớp và đối tượng đôi khi không thật rõ ràng, và nhiều khi chúng ta cũng không cần bận tâm quá đó là lớp hay đối tượng. 167
  6. Với lớp Hàng nói trên, nếu ngôn ngữ chúng ta lựa chọn chỉ có thể tạo được các hàm thì có thể lập trình để tạo ra biểu nhập dữ liệu cùng các chức năng đi kèm như tìm kiếm, nhập mới, xóa, lưu trữ. Tất cả các hàm này được đưa vào một module riêng (ví dụ một tệp chương trình chẳng hạn) có tên như tên lớp. Về sau này khi dùng lại cho phần mềm khác thì chúng ta chuy ển cả module này sang phần mềm mới. Tóm lại, trong những ngôn ngữ lập trình có các đối tượng thì chúng ta có thể dùng các đối tượng này để cài đặt lớp và đối tượng trong các mô hình UML mà không cần đưa ra một kiểu dữ liệu mới giống như class. Còn trong ngôn ngữ lập trình không hỗ trợ hướng đối tượng thì chúng ta có thể dùng nhóm các hàm và các hàm con để biểu diễn lớp và đối tượng. 3. Cài đặt các lớp và các đối tượng có tính kế thừa Giả sử ta phải cài đặt lớp báo cáo và hai lớp thừa kế từ nó là báo cáo nhân sự và báo cáo thu nhập. Lớp báo cáo chỉ có hai thuộc tính là từ ngày và đến ngày, dều có kiểu ngày tháng (Date). Hai lớp con không chứa các thuộc tính này (tất nhiên là mỗi lớp có thể có nhiều thuộc tính riêng) mà sử dụng luôn các thuộc tính của lớp cha. Báo cáo hµng Báo cáo Báo cáo nhân sự thu nhập Hình 6.2. Tính thừa kế trong mô hình UML Nếu trong một ngôn ngữ lập trình HĐT có hỗ trợ tính thừa kế thì các lớp được cài đặt đúng như tính chất của thừa kế: hai lớp con được sử dụng các thành phần của lớp cha, chỉ cần bổ sung thêm các thuộc tính mới. Với ngôn ngữ lập trình không hỗ trợ tính thừa kế thì chúng ta cài đặt cả ba lớp một cách độc lập và cả ba đều có các thuộc tính từ ngày và đến ngày. Tuy nhiên các dữ liệu thành phần này chỉ nhập trong lớp cha (lớp báo cáo), còn trong lớp con thì luôn luôn nhận giá trị từ lớp cha. Ví dụ, mỗi lần gọi đối tượng báo cáo nhân sự thì đối tượng này gọi đến đối tượng tương ứng thuộc lớp cha (lớp báo cáo) và lấy thông tin từ ngày, đến ngày trong lớp cha để cập nhật cho các thuộc tính từ ngày, đến ngày của chính nó. Thực ra cài 168
  7. đặt kiểu như thế này thì mới đúng với thực tế. Thật vậy, giả sử anh Quang được thừa hưởng từ ông nội mái tóc xoăn tít và vàng hoe. Rõ ràng mái tóc của anh Quang giống hệt mái tóc của ông, nhưng là mái tóc của riêng anh ta (chứ không dùng chung mái tóc v ới ông như định nghĩa thừa kế trong ngôn ngữ lập trình HĐT). Có thể một đôi lần nghe theo bạn bè anh ta nhuộm thành tóc đen, nhưng khi làm công việc họ hàng như tập trung để giỗ chạp gì đó, anh ta lại muốn chứng tỏ mình đúng là giòng giống của ông nội nên lại làm lại tóc theo đúng hình mẫu tóc của ông. Trở lại ví dụ trên đây, chúng ta có thể làm một form để nhập thông tin từ ngày, đến ngày. Mỗi lần làm báo cáo nhân sự hay báo cáo thu nhập, chúng ta sẽ gọi tới form này để nhập thông tin từ ngày, đến ngày cho báo cáo. Một số thuật ngữ và cách viết tắt Viết tắt Nghĩa tiếng Anh Nghĩa tiếng Việt Số liệu dùng để thử phần mềm, ví dụ Test case input và output mẫu. Người xây dựng phần mềm Software developer Công nghệ phần mềm sử dụng trợ CASE Computer aided software engineering giúp của máy tính Phần mềm đóng gói COTS Commercial-off-the-shelf software software Shrink-wrapped software Click-wrapped software Biểu đồ dòng dữ liệu DFD Data flow diagram Mô hình thực thể-liên kết ERM Entity-relationship modeling Biểu đồ phân cấp chức năng FD Functional diagram IEEE Institute of Electrical and Electronic Engineers Hệ thông tin quản lý MIS Management information system Phân tích hướng đối tượng OOA Object-oriented analysis Thíet kế hướng đối tượng OOD Object-oriented design Ngôn ngữ mô tả chương trình (mã PDL Program description language giả) Đặc tả chức năng P-spec Process specification Mô hình cơ sở dữ liệu quan hệ RDM Rerational database model Yêu cầu về hồ sơ mời thầu RFP Requirement for proposal RFT Requirement for tender Phân tích có cấu trúc SA Structured analysis kế hoạch quản lý dự án phần mềm SPMP Software project management plan Kế hoạch quản lý dự án phần mềm SPMP Software project management plan Nhóm bảo đảm chất lượng phần SQA group Software quality assurance group mềm 169
  8. Ngôn ngữ mô hình hóa thống nhất UML Unified modeling laguage Black-box testing: khi kiểm thử đặc tả, ta xem chương trình như một hộp đen (che kín những gì có bên trong hộp), nghĩa là không quan tâm đến chương trình được viết như thế nào mà chỉ quan tâm xem nó làm được cái gì. Vì vậy, phép thử như thế này gọi là phép thử hộp đen. White-box testing: khi kiểm thử các lệnh (code), ta cần xem cấu trúc bên trong chương trình. Như vậy, nếu xem chương trình là một chiếc hộp thì hộp này phải trong suốt để có thể nhìn thấy. Người ta gọi phép thử như thế này là phép thử hộp trắng, để đối lại với hộp đen. Có tác giả gọi là phép thử hộp thủy tinh (glass-box testing) cho sát nghĩa hơn. Regression testing: Dùng các dữ liệu mẫu cũ để thử lại các chức năng không liên quan đến phần chương trình vừa sửa đổi được gọi là phép thử lùi lại hay phép thử hồi quy. CÂU HỎI VÀ BÀI TẬP Chương 1. Tổng quan về công nghệ phần mềm 1. Máy tính điện tử đầu tiên dùng cho mục đích thương mại là máy UNIVAC-1, được sản xuất vào năm 1951 ở Mỹ. Từ năm 1955 thì bắt đầu có phần mềm (tức là các chương trình chứa các mã lệnh được viết bằng ngôn ngữ mà máy tính có thể đọc và thực hiện). Từ đó đến nay có thể chia quá trình phát triển phần mềm thành ba giai đoạn: 1955-1970, 1971-1985, 1986 đến nay. Hãy nêu vắn tắt đặc điểm của từng giai đoạn, mỗi giai đoạn trong vài ba dòng. 2. Có thể nêu ra ba lý do chính khiến cho việc làm phần mềm cũng cần được thực hiện theo những quy tắc chặt chẽ như kỹ nghệ truyền thống. Các ý chính của ba lý do này là: ngày nay phần mềm thường được xây dựng theo đơn đặt hàng, phần mềm do nhiều người tham gia xây dựng, và phần mềm cần tuân thủ nguyên tắc thị trường là sản phẩm phải độc lập với nhà sản xuất. Hãy giải thích rõ hơn những lý do này, đồng thời chỉ ra rằng mặc dầu vậy, kỹ nghệ phần mềm vẫn có những nét đặc trưng khác với các kỹ nghệ truyền thống. 3. Thuật ngữ "kỹ nghệ phần mềm" (software engineering) được ai đưa ra và bao giờ? 170
  9. 4. Vòng đời phần mềm là gì? Cho ví dụ. 5. Cho đến những năm 70 của thế kỷ trước, việc sản xuất một phần mềm được coi là kết quả của hai giai đoạn nối tiếp nhau. Hai giai đoạn này có tên là gì và công việc cần thực hiện trong từng giai đoạn là gì? Vì sao cách phân chia như vậy đã trở nên không thích hợp và được thay thế bằng cách phân chia khác trong những năm 70? 6. Nếu một sản phẩm khác như vô tuyến, máy tính,... phải bảo trì nhiều thì được coi là chất lượng kém. Điều này có đúng với phần mềm không, vì sao? 7. Thường trong thực tế ta thấy rằng một công việc được thực hiện nhiều người thì sẽ nhanh hơn ít người, ví dụ như việc xây nhà hay đào ao chẳng hạn. Với phần mềm thì điều này có đúng không? tức là phần mềm do nhiều người làm sẽ chắc chắn nhanh hơn ít người không? Hãy minh họa bằng ví dụ. 8. Cho đến những năm 70, hay chính xác hơn là đến trước năm 1975 thì việc làm phần mềm chưa sử dụng một kỹ thuật đặc biệt nào. Từ năm 1975 thì phương pháp cấu trúc ra đời, đánh dấu sự phát triển đáng kể trong kỹ thuật làm phần mềm. Phương pháp cấu trúc bao gồm: phân tích hệ thống có cấu trúc, phân tích dòng dữ liệu và lập trình và kiểm thử theo cấu trúc. Phương pháp này tỏ ra có nhiều hứa hẹn và được áp dụng khá hiệu quả cho đến khoảng năm 1985. Tuy nhiên khi độ lớn của phần mềm tăng lên thì phương pháp cấu trúc bộc lộ những nhược điểm. Hãy nêu một số nguyên nhân chính làm hạn chế khả năng ứng dụng của phương pháp này. 9. Hãy nêu điểm khác biệt cơ bản giữa phương pháp cấu trúc và phương pháp hướng đối tượng. 10.Người ta nói rằng trong phương pháp hướng đối tượng sự chuyển tiếp giữa các pha mịn hơn so với phương pháp cấu trúc, do đó giảm được các lỗi trong quá trình xây dựng phần mềm. Hãy giải thích rõ hơn điều nhận xét này. Chương 2. Các mô hình vòng đời phần mềm 1. Mô hình xây dựng-và-hiệu chỉnh (build-and-fix model) có thể biểu diễn Xây dựng phiên trong sơ đbản au: tiên ồ sđầu Hiệu chỉnh cho đến khi khách hàng chấp nhận 171 Sử dụng và bảo trì Thôi sử dụng
  10. Hãy dựa vào sơ đồ và giải thích rõ hơn cách thức làm phần mềm theo mô hình này, đồng thời nêu những mặt ưu điểm, nhược điểm của nó. 2. Mô hình thác đổ (waterfall model) có thể biểu diễn trong sơ đồ sau: Xác định yêu cầu Thay đổi yêu cầu Phân tích Thiết kế Cài đặt Tích hợp Bảo trì Thôi sử dụng Hãy dựa vào sơ đồ và giải thích rõ hơn cách thức làm phần mềm theo mô hình này, đồng thời nêu những mặt ưu điểm, nhược điểm của nó. 3. Mô hình bản mẫu (rapid prototyping model) có thể biểu diễn trong sơ đồ sau: Bản mẫu Thay đổi yêu cầu Phân tích Thiết kế Cài đặt Tích hợp Bảo trì Thôi sử dụng Bên cạnh sơ đồ này còn có sơ đồ biểu diễn mô thức làm bản mẫu. Hãy vẽ sơ đồ đó, rồi giải thích rõ hơn cách thức làm phần mềm theo mô hình này, đồng thời so sánh với mô hình thác đổ. Vì sao người ta khuyên rằng không nên sửa chữa bản mẫu thành phần mềm chuyển giao? 172
  11. 4. Mô hình tăng dần (incremental model) có thể biểu diễn trong sơ đồ sau: Xác định yêu cầu Phân tích Thiết kế kiến trúc Với mỗi build thực hiện: Thiết kế chi tiết, lập trình, tích hợp, kiểm thử rồi chuyển giao cho khách hàng Bảo trì Thôi sử dụng Hãy dựa vào sơ đồ và giải thích rõ hơn cách thức làm phần mềm theo mô hình này, đồng thời nêu những mặt ưu điểm, nhược điểm của nó. 5. Mô hình tăng dần đồng thời (concurrent incremental model) có thể biểu diễn trong sơ đồ sau: Cài đặt& Chuyển giao cho Phần 1 Phân tích Thiết kế Tích hợp khách hàng Cài đặt& Chuyển giao cho Phần 2 Phân tích Thiết kế Tích hợp khách hàng ... Cài đặt& Chuyển giao cho Phần k Phân tích Thiết kế Tích hợp khách hàng Hãy dựa vào sơ đồ và giải thích rõ hơn cách thức làm phần mềm theo mô hình này, đồng thời nêu những mặt ưu điểm, nhược điểm của nó. 6. Hãy mô tả cách thức làm phần mềm theo mô hình đồng bộ và ổn định (synchronize-and-stabilize model), đồng thời nêu những mặt ưu điểm, nhược điểm của nó. 7. Hãy mô tả cách thức làm phần mềm theo mô hình xoắn ốc (spiral model), đồng thời nêu những mặt ưu điểm, nhược điểm của nó. Chương 3. Quản lý dự án phần mềm 1. Hãy trình bày các khái niệm: dự án, quản lý dự án, quản lý dự án công nghệ thông tin và cho ví dụ. 173
  12. 2. Để trở thành người quản lý dự án tốt thì kiến thức và kỹ năng về phát triển phần mềm chưa đủ. Cần có những kỹ năng về quản lý như: giám sát và kiểm tra, quy hoạch, quan hệ với khách hàng và vai trò lãnh đạo kỹ thuật. Hãy giải thích rõ hơn về các kỹ năng này và cho ví dụ minh họa nếu thấy cần thiết. 3. Người ta cho rằng quản lý dự án phần mềm thường khó khăn hơn việc quản lý các dự án khác. Hãy nêu một số lý do và ví dụ cho nhận định này. 4. Ba mục tiêu cần đạt tới của một dự án phần mềm là: lịch trình, trong phạm vi ngân sách và đúng yêu cầu khách hàng. Nếu một vài mục tiêu trên đây không đạt được thì có nghĩa là dự án thất bại không, vì sao? Yếu tố quan trọng nhất quyết định sự thành công của một dự án phần mềm là gì? 5. Từ những dự án phần mềm thất bại, người ta đã rút ra một số sai lầm chủ yếu thường gặp trong quản lý dự án phần mềm. Hãy nêu ra một số sai lầm như vậy. 6. Một trong những trở ngại mà người quản lý dự án thường gặp là thiếu sự ủng hộ của quản lý cấp trên về việc áp dụng công nghệ mới. Vì sao thường có điều này và người quản lý dự án nên khắc phục như thế nào? 7. Trong quá trình phát triển dự án phần mềm có thể có nhiều vấn đề phát sinh cần giải quyết, trong đó có những vấn đề xảy ra khá bất ngờ nhưng cũng có những vấn đề có thể dự đoán trước và có thể phòng ngừa. Hãy nêu một số biện pháp phòng ngừa chủ yếu. 8. Hãy nêu một số tình huống (nguyên nhân) thường làm nảy sinh các vấn đề đối với dự án phần mềm. 9. Từ thực tế có thể thấy rằng phần lớn lỗi phần mềm có nguồn gốc từ lỗi ở pha đặc tả. Vai trò của pha đặc tả là mô tả sản phẩm phần mềm cần xây dựng. Nếu đặc tả không đầy đủ thì phần mềm rất khó đáp ứng được yêu cầu khách hàng. Một số nguyên nhân làm cho đặc tả nghèo nàn là: quên các đặc điểm, có những đặc điểm không cần thiết được đưa vào, đặc điểm hoạt động không đúng như khách hàng mong đợi, những đặc điểm cần thiết nhưng không ai nghĩ đến. Hãy mô tả rõ hơn và cho ví dụ minh họa về các nguyên nhân này. 10.Hãy giải thích về hội chứng "mục tiêu di động" trong quản lý dự án phần mềm. 174
  13. 11. Hãy nêu một số vấn đề liên quan đến dự toán của một dự án phần mềm như các loại dự toán: ngân sách, lịch trình, tài nguyên, kỹ thuật, những sai lầm thường gặp... 12.Vì sao nên cập nhật dự toán theo một định kỳ đều đặn? 13. Thường thì mọi yếu tố liên quan đến dự án còn phụ thuộc vào các nguồn lực bên ngoài. Hãy nêu ra một số nguồn như thế và các vấn đề thường nảy sinh bởi sự phụ thuộc này. 14.Trong dự án phần mềm thì vấn đề tuyển dụng được các thành viên phát triển có chất lượng và giữ được đội ngũ ổn định là yếu tố quan trọng nhất để bảo đảm sự thắng lợi. Nếu không giữ được đội ngũ ổn định, để cho sự thuyên chuyển và xáo trộn xẩy ra thường xuyên thì sẽ nẩy sinh những vấn đề gì? 15.Vì sao việc theo dõi và giám sát tiến độ thực hiện dự án được xem là một trong những hoạt động quản lý quan trọng nhất? Làm thế nào để nhà quản lý có thể lấy được những thông tin chính xác về dự án? 16. Những vấn đề thường nảy sinh khi kết thúc dự án là gì? Người quản lý dự án phải làm gì để bảo đảm cho việc kết thúc dự án có trật tự và thắng lợi? 17.Trong quản lý dự án thì phân tích rủi ro là một phương tiện hiệu quả để chống lại các vấn đề tiềm ẩn. Hãy nói rõ phân tích rủi ro trong dự án phần mềm là gì? Những ưu điểm và nhược điểm của kỹ thuật này. 18.Hợp đồng phí cộng thêm là gì? Những ưu điểm và nhược điểm của loại hợp đồng này đối với nhà phát triển cũng như đối với khách hàng. 19.Hợp đồng giá cố định là gì? Những ưu điểm và nhược điểm của loại hợp đồng này đối với nhà phát triển cũng như đối với khách hàng. 20.Ngoài hai loại hợp đồng chính là phí cộng thêm và giá cố định, còn có dạng quan hệ khác giữa khách hàng và nhà phát tri ển như: phối hợp phí cộng thêm và giá cố định, liên doanh, thỏa thuận bản quyền, cam kết quan hệ lâu dài. Hãy giải thích rõ hơn các dạng quan hệ này. 21.Trước khi đưa ra một dự án phần mềm cần trả lời được một số câu hỏi. Hãy nêu một số câu hỏi quan trọng nhất. 22.Phát triển phần mềm theo hợp đồng thường bắt đầu từ việc khách hàng lựa chọn người phát triển. Trước hết tổ chức cần có phần mềm phải chuẩn bị một hồ sơ giới thiệu dự án và gửi cho các công ty, tổ chức hay cá nhân có thể tham gia phát triển phần mềm. Hồ sơ này được gọi là hồ sơ mời thầu (requirement for proposal - RFP, hoặc requirement for tender - RFT). Một RFP bao gồm 8 phần: (1) Mô tả vấn đề và mục tiêu 175
  14. của dự án, (2) Các yêu cầu kỹ thuật, (3) Thông tin về quản trị, (4) Yêu cầu về chi phí, (5) Tài liệu tham khảo, (6) Những sản phẩm cần chuyển giao khi kết thúc dự án, (7) Định dạng cho hồ sơ dự thầu, (8) Lịch trình và lịch quyết định. H•y giải thích rõ hơn ý nghĩa của từng phần. 23.Có ba cách để phân phát RFP, đó là những cách nào? 24.Một công ty phần mềm có thể kiến nghị với khách hàng về việc phát triển phần mềm. Có ba lý do để kiến nghị: do yêu cầu, không do yêu cầu hoặc tổ hợp của hai loại. Hãy giải thích rõ hơn từng trường hợp. 25.Khi nào thì một công ty phần mềm tự đề xuất với khách hàng về vấn đề xây dựng phần mềm và một kiến nghị như vậy có những phần cơ bản nào? Nói chung một bản kiến nghị xây dựng phần mềm phải nhằm trả lời cầu hỏi gì của khách hàng? 26.Một bản kiến nghị đáp lại RFP được gọi là hồ sơ dự thầu. Một kiến nghị tốt phải trả lời được sáu câu hỏi: ai, cái gì, tại sao, thế nào, khi nào, bao nhiêu. Hãy nêu các câu hỏi một cách rõ ràng, chi tiết hơn. 27.Hãy trình bày một số đặc trưng của quá trình xét duyệt lựa chọn hồ sơ dự thầu. 28.Các kỹ sư phần mềm có đặc trưng gì khác so với các kỹ sư ở các lĩnh vực công nghệ khác, ví dụ như năng suất làm việc chẳng hạn. 29.Hãy vẽ và giải thích sơ đồ vắn tắt biểu diễn cơ cấu nhân sự của một dự án lớn. 30.Hãy nêu các vai trò của một lãnh đạo nhóm làm việc trong một dự án phần mềm. 31. Hãy nêu một số đặc trưng của kiểu nhóm dân chủ. 32.Hãy nêu một số đặc trưng của kiểu nhóm kỹ sư trưởng. 33. Khi nào thì một nhóm chuyên gia được thành lập và chức năng của nó là gì? Vì sao cách tổ chức tốt nhất của nhóm chuyên gia là theo hình th ức dân chủ? 34.Với người quản lý dự án thì điều chủ yếu là thường xuyên nhận được báo cáo về tình hình thực hiện dự án. Điều này được thực hiện nếu luôn luôn đảm bảo được luồng thông tin chính xác đều đặn từ các nhóm phát triển. Hãy trình bày một số cách thu thập thông tin thông qua báo cáo. 35.Một số nguyên tắc được sử dụng trong quản lý kỹ sư phần mềm là: Quản lý thỏa thuận tốt hơn quản lý chỉ thị, trách nhiệm phải đi đôi với thẩm quyền, quy tắc chung là chỉ với sai lầm rõ ràng mới phải bắt buộc 176
  15. hiệu chỉnh, thẩm quyền không những liên quan đến nhiệm vụ mà còn liên quan đến lịch trình, và động cơ là yếu tố quan trọng nhất. Hãy giải thích rõ hơn các nguyên tắc này. 1. Hãy trình bày kỹ thuật phân giải dự án phần mềm: kỹ thuật tinh chỉnh từng bước, kỹ thuật phân giải chức năng, phân giải thiết kế và mối quan hệ giữa chúng. Chương 4. Tổng quan về UML và phương pháp hướng đối tượng 1. UML là gì? UML có phải là một ngôn ngữ lập trình không? Nếu không phải thì có điểm gì giống ngôn ngữ lập trình? 1. Hãy giải thích khái niệm mô hình trong UML. 2. Khái niệm hướng nhìn trong UML có phải là một thành phần biểu diễn có thể nhìn thấy được như biểu đồ không? Hãy giải thích thuật ngữ "các hướng nhìn của một phần mềm?" 3. Hãy giải thích các khái niệm "hướng nhìn theo trường hợp sử dụng" (use-case view) và "hướng nhìn logic" (logical view) và sự khác biệt giữa chúng. 4. Hãy giải thích các khái niệm biểu đồ, phần tử mô hình và hệ thống con trong UML. 5. Use-case là gì và cách ký hiệu trong UML? 6. Tác nhân (actor) và cách ký hiệu trong UML? 7. Hãy giải thích biểu đồ use-case là gì và nêu một vài mục đích của nó. 8. Hãy giải thích kết hợp (association) generalization giữa các actor, cách ký hiệu và cho ví dụ minh họa. 9. Hãy giải thích kết hợp generalization giữa các use-case, cách ký hiệu và cho ví dụ minh họa. 10. Hãy giải thích ý nghĩa của hình sau và nói rõ lo ại kết hợp nào được sử dụng: Gửi tiết kiệm Gửi không kỳ hạn Gửi ký hạn 6 tháng 177
  16. 11. Hãy giải thích ý nghĩa của hình sau và nói rõ lo ại kết hợp nào được sử dụng: Sinh viên Sinh viên khoa CNTT 12.Hãy giải thích quan hệ (relationship) include giữa các use-case, cách ký hiệu và cho ví dụ minh họa. Quan hệ này có được dùng cho tác nhân không? Vì sao? 13. Hãy giải thích ý nghĩa của hình sau: Gửi tiết kiệm < include> < < include> < > > Nộp tiền Ghi phiếu gửi tiền và nói rõ sự khác biệt của hình ở bài 10 và hình ở bài 13. 14.Hãy giải thích ý nghĩa của hình sau: < extend> < > Gửi tiết Trúng thưởng kiệm qua đó hãy nêu sự khác biệt của quan hệ và . 15.Điểm mở rộng (extension point) của một use-case là gì?, được dùng khi nào? ý nghĩa của hình sau đây là gì? Bán hàng < extend> < > Ký hợp đồng Các điểm mở rộng: bảo hành Bán các thiết bị tin h ọc 16. Hãy so sánh sự khác biệt giữa generalization, extend và include thông qua hình sau đây: Giao hàng Bán hàng Bán hàng < include> < < include> < < extend> < > < extend> < > > > Giao ở cửa Mang In hóa đơn Xuất hàng Hết hàng Nhập hàng từ đến tận hàng nhà cung cấp 17.Hãy xác định cácnuse-case trong đoạn văn sau và đặt tên chosau hà < extend> đó xác định thêm các mối liên quan: 178
  17. Khi có khách đến cửa hàng bán quần áo, người bán hàng có thể tìm kiếm bộ quần áo thích hợp với dáng người của khách rồi thuyết phục họ mua. 18.Hãy trình bày vắn tắt cách xây dựng mô hình use-case (tức là tập hợp của các biểu đồ use-case) và áp dụng để xây dựng biểu đồ use-case mức đơn giản cho bài toán quản lý bán hàng. 19.Một lỗi thường gặp là quá nhiều use-case được đưa vào mô hình. Hãy nêu ví dụ về trường hợp không nên đưa vào mô hình use-case. 20.Hãy mô tả cách thức cân chỉnh lại mô hình use-case bằng cách xuất phát từ mô hình đơn giản ban đầu. 21.Bản thân các use-case mới chỉ có tên gọi về một công việc nào đó. Để có thể hiểu rõ hơn công việc này người ta phải bổ sung bên cạnh use- case phần mô tả. Có những cách gì được sử dụng để mô tả use-case? Hãy mô tả use-case "Đăng ký làm thẻ bạn đọc" ở một thư viện nào đó theo hiểu biết của bạn. 22.Lớp là gì? Biểu đồ lớp là gì? Đối tượng là gì? 23.Trong biểu đồ lớp, lớp và đối tượng được biểu diễn như thế nào? 24.Giữa các lớp có một số kết hợp là: kết tập (aggregation), hợp thành (composition) và kế thừa (generalization). Hãy giải thích xem mỗi hình sau đây ứng với loại kết hợp nào và ý nghĩa của chúng là gì? 1 a) * Hành khách Hành khách Chuyến bay Chuyến bay 1 b) * Section Section Document Document c) Thư ký Nhân viên 25.Các biểu đồ lớp được phân làm hai loại: biểu đồ lớp khái niệm (conceptual class diagram) và biểu đồ lớp thiết kế (design class diagram). Hãy giải thích hai loại biểu đồ này và chúng được sử dụng trong các giai đoạn nào (pha nào) trong quá trình xây dựng phần mềm? 26.Việc xây dựng mô hình lớp (tức là xây dựng các biểu đồ lớp) được bắt đầu bằng việc xác định các lớp. Có các kỹ thuật nào để xác định các lớp. 179
  18. 27.Hãy trình bày kỹ thuật trích danh từ (noun extraction) để xác định lớp. Hãy minh họa bằng việc xác định các lớp trong chương trình quản lý sinh viên đơn giản. 28.Hãy giải thích biểu đồ lớp sau đây: 0..n 1 Hang BangGia TaiKhoan 1 1 1 0..n HangMua HoaDon No Co 0...20 1 9. Biểu đồ hoạt động (activity diagram) mô tả sự chuyển tiếp giữa các hoạt động hoặc trạng thái bắt đầu từ một trạng thái (hoặc hoạt động) xuất phát đến trạng thái (hoặc hoạt động) kết thúc. Hãy giải thích các khái niệm hoạt động (activity), trạng thái (state) và chuyển tiếp (transition) và ký hiệu biễu diễn chúng. 30.Hãy viết kịch bản cho thao tác "đăng ký làm thẻ thư viện", sau đó vẽ biểu đồ trạng thái biểu diễn thao tác này. 31. Hãy giải thích ý nghĩa của các hình sau: (ví dụ như chuyển đổi từ trạng thái sang hoạt động hay một kiểu khác, chuyển đổi có biến cố hay không, vì sao?). Yêu cầu trả tiền Chờ trả tiền Tiền đến Chờ trả tiền Quá trình trả tiền 32.Điểm quyết định (decision point) trong biểu đồ hoạt động là gì? Cho ví dụ minh họa. 33. Có những loại biểu đồ tương tác (interaction diagram) nào? ý nghĩa của chúng và cách sử dụng. 34. BiÓu ®å sau lµ lo¹i biÓu ®å g×?, nã m« t¶ ho¹t ®éng g× vµ qu¸ tr×nh thùc hiÖn nh thÕ nµo? :WordProcessor file:=open(name) :PrinterFile write(document) 180 close()
  19. 35. H·y so s¸nh hai biÓu ®å sau vµ h·y ® a ra lËp luËn chøng tá c¶ hai m« h×nh ®Òu m« t¶ mét dßng c«ng viÖc. Tªn gäi cña mçi lo¹i biÓu ®å lµ g×? :Computer :PrinterServer :Printer :Queue Print(file) [Printer Print(file) free] Print(file) [Printer busy] Store(file) :Computer :Printer [Printer free] 1. Print(file) 1.1:Print(file) [Printer busy] :PrinterServer :Queue 1.2: Store(file) Chương 5. Quy trình làm phần mềm 1. Hãy nêu định nghĩa của hai khái niệm quy trình làm phần mềm và vòng đời phần mềm và mối quan hệ giữa chúng. Hãy nêu một vài lý do khiến cho quan điểm cho rằng nên biên soạn tài liệu đầy đủ cho từng pha là hợp lý và nên làm. 2. Hãy mô tả vắn tắt những công việc cần thực hiện trong pha yêu cầu. 3. Thường thì pha yêu cầu có thành công không? vì sao? Kỹ thuật gì thường được sử dụng trong pha yêu cầu để giúp khách hàng và người phát triển xác định được chính xác các yêu cầu? 4. Bản mẫu được dùng để xác định yêu cầu khách hàng, và nó được hiệu chỉnh cho đến khi khách hàng cho rằng mọi yêu cầu về phần mềm của họ đã được thể hiện. Như vậy có vẻ như bản mẫu đã đáp ứng được 181
  20. yêu cầu của khách hàng và có thể chuyển giao cho họ sử dụng. Điều suy nghĩ này có đúng không? vì sao? 5. Hãy mô tả vai trò và các công việc cần thực hiện trong pha đặc tả. Nếu nói gọn trong một câu thì pha đặc tả trả lời câu hỏi gì về phần mềm? 6. Vì sao bản kế hoạch quản lý dự án phần mềm nên xây dựng vào giai đoạn cuối của pha đặc tả mà không nên xây dựng sớm hơn? 7. Pha đặc tả được kiểm thử như thế nào? Tài liệu trong pha đặc tả gồm những gì? 8. Hãy mô tả vắn tắt các công việc cần thực hiện trong pha thiết kế. Nếu nói gọn trong một câu thì pha thiết kế trả lời câu hỏi gì về phần mềm? 9. Vì sao khi phân chia phần mềm thành các module cần ghi chép lại các bước thực hiện? 10.Người ta nói rằng một phần mềm tốt phải có tính mở. Hãy giải thích rõ hơn về điều này. 11. Một tính chất quan trọng mà một tài liệu về một pha nào đó trong quá trình làm phần mềm cần có là tính theo dõi được (traceable). Điều này nghĩa là gì? Hãy giải thích cho trường hợp pha thiết kế. 12.Pha thiết kế được kiểm thử như thế nào và do ai thực hiện? Vì sao thường thì khách hàng không có mặt trong quá trình kiểm thử pha thiết kế? Tài liệu trong pha thiết kế gồm những gì? 13. Hãy giải thích đôi điều về pha cài đặt: cài đặt nghĩa là gì, kiểm thử trong pha này được thực hiện như thế nào, báo cáo của pha cài đặt gồm những gì? 14.Hãy nêu công việc cần làm trong pha tích hợp. Khi nào nên thực hiện tích hợp, có phải khi mọi module của chương trình đều hoàn tất không? 15.Công việc kiểm thử tích hợp bao gồm: kiểm tra tích hợp, kiểm thử phần mềm (product testing), kiểm thử tính ổn định của chương trình, kiểm thử chấp nhận. Hãy giải thích rõ hơn những việc mà các phép thử trên đây thực hiện. 16. Phần mềm đóng gói là gì? Phiên bản alpha hay phiên bản beta của phần mềm đóng gói là gì? 17.Pha bảo trì là gì? Vì sao việc cập nhật tài liệu trong pha bảo trì là hết sức quan trọng? 18.Vì sao khi sửa chữa chương trình người ta không những kiểm thử phần chương trình vừa sửa, mà còn kiểm thử cả những phần còn lại? Kiểm thử hồi quy (regression testing) nghĩa là gì? 182
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2