Thứ Bảy, 22 tháng 10, 2022

Bài tập Class Diagram - Tuần 4

Họ tên: Trần Văn Kiệt

MSSV: 20110665

Công ty có yêu cầu xây dựng 1 chương trình quản lý đồ họa (graphic editor) có hỗ trợ chức năng grouping (gom nhóm).Một tài liệu (document) sẽ có nhiều sheet. Trong mỗi sheet có nhiều đối tượng đồ họa (drawing objects) có thể bao gồm text, hình học (geometry) và group các đối tượng này. Group có thể tập hợp nhiều group khác nhau. Group phải có ít nhất 2 đối tượng. Mội đối tượng đồ họa chỉ thuộc 1 group. Một sheet thuộc 1 document và 1 đối tượng đồ họa chỉ thuộc 1 sheet.

Hãy vẽ lược đồ class diagram cho các đối tượng đồ họa trên (sử dụng tên class tiếng Anh) thể hiện các mối quan hệ, các constraint cần thiết. 









 

Thứ Tư, 21 tháng 9, 2022

Structures of the Cloud

Structures of the Cloud

 

Câu hỏi:

1. Trình bày các khái niệm trong mô hình AWS Global Cloud Infrastructure.

2. Trình bày, so sánh các kiểu mô hình cloud service trên AWS (https://aws.amazon.com/types-of-cloud-computing/) và lấy ví dụ minh họa cho từng kiểu. Bạn đã sử dụng những kiểu dịch vụ nào.

3. Hãy tạo rubric (template: https://www.smartsheet.com/sites/default/files/2020-04/IC-Simple-Business-Plan-Rubric-10785_PDF.pdf) để đánh giá các tiêu chí Aws cost, Availability of service, Speed or latency, Resilency of AWS components, Data rights, Audience khi bạn được yêu cầu lựa chọn Region để deploy dịch vụ cloud. 

Bài làm:

    AWS Global Cloud Infrastructure là nền tảng đám mây an toàn, rộng rãi và đáng tin cậy nhất, cung cấp hơn 200 dịch vụ đầy đủ tính năng từ các trung tâm dữ liệu trên toàn cầu. Cơ sở hạ tầng đó được tạo thành từ nhiều thành phần khác nhau bao gồm:

        Regions

Một khu vực nơi dữ liệu được lưu trữ. Lưu trữ dữ liệu ở Regions gần bạn nhất là một trong những lý do khiến nó có thể được truy cập với tốc độ cực nhanh.

AWS có khái niệm về Regions là một vị trí thực tế trên khắp thế giới, nơi mà AWS tập hợp các trung tâm dữ liệu. Mỗi nhóm trung tâm dữ liệu logic được gọi là là Availability Zones. Mỗi AWS Regions bao gồm nhiều AZ riêng biệt, biệt lập và riêng biệt về mặt vật lý trong một khu vực địa lý.

        Availability Zones

Availability Zone (AZ) là một hoặc nhiều trung tâm dữ liệu rời rạc có nguồn, mạng và kết nối dự phòng trong Vùng AWS. AZ cung cấp cho khách hàng khả năng vận hành các ứng dụng sản xuất và cơ sở dữ liệu có tính khả dụng cao, khả năng chịu lỗi và khả năng mở rộng cao hơn so với khả năng có thể từ một trung tâm dữ liệu duy nhất. Một khu vực có sẵn được biểu thị bằng mã khu vực theo sau là một số nhận dạng chữ cái.

Ví dụ: us-east-1a.

AZs làm cho các ứng dụng phân vùng để có tính khả dụng cao trở nên dễ dàng.

        Edge Location 

Là các vị trí trung gian, lưu trữ và nhận các yêu cầu từ người dùng, giúp tăng tốc cho việc xử lí thông tin cho hệ thống AWS. Các Edge Location không gần các Region mà gần các trung tâm đô thị lớn – nơi có nhiều người dùng. 

        Local Zones

AWS Local Zones đặt máy tính, kho lưu trữ, cơ sở dữ liệu và các dịch vụ AWS chọn lọc khác gần hơn với end-users. Với AWS Local Zones, bạn có thể dễ dàng chạy các ứng dụng có yêu cầu cao đòi hỏi độ trễ mili giây một chữ số cho end-users, chẳng hạn như tạo nội dung đa phương tiện và giải trí, chơi trò chơi thời gian thực, mô phỏng hồ chứa, tự động hóa thiết kế điện tử và học máy.

        Wavelength Zones

Wavelength cho phép các nhà phát triển xây dựng các ứng dụng cung cấp độ thấp cho thiết bị di động và end-users

Các nhà phát triển AWS có thể triển khai ứng dụng của họ tới Wavelength Zones, triển khai cơ sở hạ tầng AWS nhúng các dịch vụ lưu trữ và tính toán AWS trong trung tâm dữ liệu của nhà cung cấp viễn thông ở rìa mạng 5G và truy cập liền mạch vào phạm vi rộng của các dịch vụ AWS trong khu vực.

    Có 3 mô hình chính dành cho điện toán đám mây bao gồm IaaSPaaS và SaaS. Mỗi mô hình đại diện cho các phần khác nhau của cụm điện toán đám mây.

        Cơ sở hạ tâng dưới dạng dịch vụ (IaaS) 

Là viết tắt của “Infrastructure as a Service”, bao gồm các khối dựng cơ bản dành cho nền tảng Công nghệ thông tin (CNTT) đám mây và thường cung cấp quyền truy cập các tính năng mạng, máy tính (phần cứng ảo hoặc trên phần cứng chuyên dụng) và dung lượng lưu trữ dữ liệu. Cơ sở hạ tầng dưới dạng dịch vụ sẽ đem đến cho bạn mức độ linh hoạt cũng như khả năng kiểm soát quản lý tài nguyên CNTT cao nhất và gần giống nhất với các tài nguyên CNTT hiện hữu quen thuộc với nhiều bộ phận CNTT và nhà phát triển hiện nay.

Trong vài năm trở lại đây, các ứng dụng đòi hỏi cần phải có không gian lưu trữ lớn và khả năng tính toán tốt do đó Iaas đang có xu hướng phát triển tốt. Điển hình là Google Compute Engine (GCE), nền tảng được dùng để lưu cở sở dữ liệu lớn và xây dựng các ứng dụng trên đám mây bằng máy ảo.

        Nền tảng dưới dạng dịch vụ (PaaS)

Nền tảng dưới dạng dịch vụ, hay Platform as a Service, giúp bạn không cần quản lý cơ sở hạ tầng ngầm của tổ chức (thường là phần cứng và hệ điều hành) và cho phép bạn tập trung vào công tác triển khai cũng như quản lý các ứng dụng của mình. Điều này giúp bạn làm việc hiệu quả hơn do bạn không cần phải lo lắng về việc thu mua tài nguyên, hoạch định dung lượng, bảo trì phần mềm, vá lỗi hay bất kỳ công việc nặng nhọc nào khác có liên quan đến việc vận hành ứng dụng.

AWS Elastic Beanstalk là một điển hình của Paas. Là một nền tảng web để triển khai và quản lý phần mềm, được cung cấp bởi Đám mây AWS. Người dùng tải các ứng dụng của họ lên dịch vụ và nó sẽ tự động theo dõi hiệu suất, khả năng tải và kiểm tra các lỗi triển khai.

        Phần mềm dưới dạng dịch vụ (SaaS)

Phần mềm dưới dạng dịch vụ (Software as a service - SaaS) là mô hình phân phối phần mềm trong đó nhà cung cấp bên thứ ba cung cấp các ứng dụng cho khách hàng qua Internet. SaaS được gọi là "phần mềm theo yêu cầu" và trước đây được gọi là "phần mềm cộng với dịch vụ". SaaS là mô hình cấp phép và phân phối phần mềm trong đó phần mềm được cấp phép trên cơ sở đăng ký (mua license) và được lưu trữ và quản lý tập trung. 


Microsoft Office 365 là một phần mềm được phát triển bởi Microsoft. Hiện nay người dùng đã có thể truy cập tài liệu của mình để chỉnh sửa dễ dàng thông qua trình duyệt internet thay vì phải cài đặt các ứng dụng như trước. Một loạt các dịch vụ web cung cấp cho các chủ doanh nghiệp và cá nhân quyền truy cập vào các công cụ chính của Microsoft Office trực tiếp từ trình duyệt của họ. Người dùng có thể truy cập các công cụ chỉnh sửa của Microsoft, email doanh nghiệp, công cụ liên lạc và phần mềm tài liệu.

    Bản thân tôi đã và đang sử dụng ứng dụng của Microsoft Office 365 bởi nó cung cấp các ứng dụng dùng để soạn thảo văn bản hay trình chiếu rất tốt. Ngoài ra còn có thể sử dụng thông qua internet.

    Cloud Deployments (Triển khai đám mây) gồm có 3 loại chính: Private Cloud, Public Cloud, Hybrid Cloud 

    Đám mây công cộng (Public cloud): Là mô hình điện toán đám mây mà các tài nguyên dịch vụ được sở hữu và vận hành bởi một bên thứ ba cụ thể là nhà cung cấp dịch vụ điện toán đám mây. Với mô hình này, tất cả tài nguyên bao gồm phần cứng, phần mềm và cơ sở hạ tầng hỗ trợ khác đều do nhà cung cấp đám mây sở hữu và quản lý. Người sử dụng chỉ có thể truy cập các dịch vụ này và quản lý tài khoản của mình bằng trình duyệt web hoặc các công cụ chuyên dụng từ xa.

        Ví dụ : AWS, Microsoft Azure, Google Cloud Platform.

     Đám mây riêng tư (Private cloud): Là mô hình điện toán đám mây mà các tài nguyên được sở hữu riêng, thường là doanh nghiệp hoặc tổ chức. Một số công ty cũng trả chi phí để thuê các nhà cung cấp dịch vụ bên thứ ba để lưu trữ đám mây riêng tư của họ. Đối với mô hình này, các dịch vụ và cơ sở hạ tầng thường được duy trì, vận hành trên một mạng riêng tư.

        Ví dụ : VMware, Microsoft, RedHat, OpenStack.

    Đám mây kết hợp (Hybrid cloud): Là mô hình kết hợp giữa hai mô hình đám mây công cộng (public cloud) và đám mây riêng tư (private cloud) được ràng buộc, liên kết với nhau bằng mộ số công nghệ để có thể chia sẻ dữ liệu và ứng dụng giữa chúng. Bằng cách cho phép dữ liệu và ứng dụng có thể chia sẻ lẫn nhau giữa hai mô hình, đám mây kết hợp mang lại cho doanh nghiệp sự linh hoạt, nhiều tùy chọn triển khai hơn và giúp tối ưu hóa cơ sở hạ tầng, bảo mật và quy trình hiện có.

    Ngoài ra còn có Community Cloud: Nó cho phép một nhóm tổ chức có thể truy cập các hệ thống và dịch vụ.

     Để hiểu hơn về các loại mô hình cloud, ta có một bảng đánh giá sơ bộ sau:

Public cloudPrivate CloudHybrid CloudCommunity cloud
Dễ dàng thiếp lập và sử dụngDễYêu cầu trình độ CNTTYêu cầu trình độ CNTTYêu cầu trình độ CNTT
Bảo mật dữ liệu và quyền riêng tưThấpCaoCaoTương đối cao
Kiểm soát dữ liệuKhông đáng kểCaoTương đối caoTương đối cao
Độ tin cậyThấpCaoCaoTương đối cao
Khả năng mở rộng và tính linh hoạtCaoCaoCaoCông suất cố định
Hiệu quả chi phí
Rẻ nhất
Tốn kém chi phí, mô hình đắt nhất
Rẻ hơn mô hình private nhưng đắt hơn mô hình public
Chi phí được chia sẻ giữa các thành viên cộng đồng
Nhu cầu về phần cứngKhôngTùy thuộcTùy thuộcTùy thuộc

AWS Evaluated

    Để đánh giá các tiêu chí Aws cost, Availability of service, Speed or latency, Resilency of AWS components, Data rights, Audience khi bạn được yêu cầu lựa chọn Region để deploy dịch vụ cloud, chúng ta sẽ tham khảo qua một bài đánh giá của mình đề xuất:     

https://docs.google.com/spreadsheets/d/1aTcEvfFWAubEHWXSCFa1D7tlxYP4Z8XW-7SrY41zgPM/edit?usp=sharing

    Trong bài viết này, mình đã trình bày qua cách khái niệm về môi trường điện toán đám mây của Amazon cũng như giới thiệu qua về cơ sở hạ tầng của môi trường này. Việc hiểu được các khái niệm này sẽ giúp ít cho các bạn khi theo học các ngành học về công nghệ thông tin, đặc biệt khi xây dựng một sản phẩm công nghệ sẽ không thể thiếu việc sự dụng các dịch vụ Cloud và AWS đang là một trong những nhà cung cấp Cloud lớn nhất thế giới.












Thứ Ba, 20 tháng 9, 2022

Đạo đức trong phát triển phần mềm

Đạo đức trong phát triển phần mềm

Câu 1: Trình bày lại các quy định bằng tiếng Việt, trình bày theo cách hiểu của sinh viên, không sử dụng các công cụ dịch như google translate để dịch lại nội dung và copy phần dịch vào bài làm. Sinh viên cho ví dụ minh họa (có thể lấy thực tế hoặc tự nghĩ ra các tình huống có thể xảy ra trong thực tế)

Câu 2: Lấy 5 ví dụ bạn biết được, hoặc đọc trên báo chí về các trường hợp vi phạm nguyên tắc đạo đức khi phát triển phần mềm và phân tích chi tiết điều luật trong IEEE/ACM Code of Ethics bị vi phạm.

Bài làm

    Trong việc phát triển phần mềm, kỹ sư phần mềm không chỉ phải áp dụng các kĩ năng của mình vào công việc mà còn phải tuân theo các đạo đức - đạo đức trong phát triển phần mềm. Đạo đức trong phát triển phần mềm không đơn giản chỉ là tuân theo luật pháp mà còn liên quan đến các bộ nguyên tắc đúng đắn về mặt đạo đức. Các nguyên tắc bao gồm:

Principle 1: PUBLIC (Tính cộng đồng)

    Các kỹ sư phần mềm phải hành động nhất quán vì lợi ích cộng đồng. Mọi hành động gây hại đến người khác đều bị ngăn cấm. 

1.01. Nhận hoàn toàn trách nhiệm về lỗi mà mình gây ra.

VD: Khi mình tạo ra một phần mềm mạng xã hội cho người dùng nhưng lại bị để lộ lỗ hỏng cho hacker lợi dụng đánh cắp thông tin của người dùng thì mình phải biết nhận lỗi và phải thực hiện vá lỗi.

1.02. Đặt lợi ích của khách hàng và lợi ích của cộng đồng lên hàng đầu những vẫn bảo toàn lợi ích của cá nhân - kỹ sư phần mềm.

VD: Khi tham gia một dự án, với cương vị của mình là một kỹ sư phần mềm thì mình phải đặt lợi ích của khách hàng lên hàng đầu, có nghĩa là phải hoàn thành dự án tốt nhất để mang lại lợi ích cho tất cả các bên.

1.03. Chỉ phê duyệt các phần mềm khi nó đã vượt qua các bài kiểm tra về thông số kỹ thuật và không làm giảm chất lượng cuộc sống hoặc gây hại cho môi trường. Mục đích cuối cùng của phần mềm là vì lợi ích cộng đồng.

VD: Khi mình có cương vị là một người kiểm thử thì mình có trách nhiệm phải kiểm thử kỹ càng tất cả mọi mặt, mọi vấn đề có thể xảy ra với phần mềm của mình, tránh có lỗi bất lợi cho cộng đồng.

1.04. Bày tỏ quan điểm của mình khi thấy một phần mềm có thể gây hại cho mọi người xung quanh.

VD: Khi xây dựng phần mềm, mình phát hiện phần mềm đó có thể làm hỏng hệ điều hành của người dùng thì mình phải góp ý ngay vào việc đó để làm cho phần mềm tốt hơn.

1.05. Phải biết hợp tác cùng nhau, làm việc nhóm để giải quyết những vấn đề nghiêm trọng do phần mềm gây ra.

VD: Với các phần mềm khó hoặc đòi hỏi thời gian dài để thực hiện thì mình phải biết cách làm việc nhóm có hiệu quả nhất để đem lại tốc độ hoàn thành nhanh và độ chính xác cao.

1.06. Thành thật với chính mình và chính phần mềm mình làm ra.

VD: Khi phát hành một phần mềm, thì khi công bố chúng thì mình phải thông báo thật những thứ mình làm ra, không lừa đảo hoặc nói quá lên về các chức năng của phần mềm.

1.07. Tạo mọi điều kiện để mọi người được tiếp cận với lợi ích của phần mềm một cách tốt nhất.

VD: Khi mình tạo ra một trò chơi mang lại kiến thức tốt và phần thưởng hấp dẫn thì mình phải tạo mọi điều kiện tốt nhất để mọi người tham gia.

1.08. Khuyến khích mọi người sử dụng các kỹ năng đóng góp cho các mục đích tốt, vào sự nghiệp giáo dục cộng đồng liền quan đến ngành học.

VD: Khi mình là một kỹ sư dày dặn kinh nghiệm thì mình phải khuyến khích mọi người biết tuân theo đạo đức trong phát triển phần mềm, khuyến khích mọi người cống hiến hết sức mình cho công việc và ngành nghề này.

Principle 2: CLIENT AND EMPLOYER (Khách hàng và Chủ lao động)

    Các kỹ sư phần mềm phải làm việc theo một cách có lợi nhất cho khách hàng, dự án và chủ lao động phù hợp với lợi ích của cộng đồng

2.01. Cống hiến hết mình cho dự án của mình và thẳng thắng khi mình có bất cứ hạn chế nào về kinh nghiệm hay trình độ học vấn của mình.

VD: Với một dự án khó, mình phải thẳng thắng bày tỏ về hạn chế của mình, sự thiếu hụt kiến thức của mình để mọi người có thể giúp đỡ, cùng với đó mình cũng phải không ngừng học hỏi thêm để hoàn thành dự án một cách tốt nhất.

2.02. Không sử dụng các phần mềm lậu, vi phạm pháp luật.

VD: Khi sử dụng các phần mềm để lập trình hay soạn thảo, mình phải sử dụng các ứng dụng bản quyền để vừa ủng hộ các kỹ sư phần mềm đã tạo ra sản phẩm mình sử dụng, vừa không đi ngược với đạo đức.

2.03. Sử dụng tài sản của công một cách hợp lý và chỉ sử dụng khi có sự đồng ý của khách hàng hoặc chủ lao động.

VD: Trong lúc làm việc, ta thấy một người khác sử dụng máy tính của công ty để chơi game đánh bài trên mạng, ta phải ngăn cản ngay vì làm như vậy là sử dụng tài sản công cho mục đích riêng và điều đó là điều cấm kỵ.

2.04. Đảm bảo tất cả tài liệu đều đã được phê duyệt bởi người có thẩm quyền chuyên môn.

VD: Khi làm xong một phần mềm, thì nó cần phải được kiểm thử kỹ càng và phải được duyệt bởi người có thẩm quyền trước khi tung nó ra thị trường.

2.05. Bảo mật thông tin về khách hàng và chủ lao động trong trường hợp các thông tin đó là hợp pháp.

VD: Trong khi làm việc, mọi thông tin của khách hàng và dự án đều là tuyệt mật, không được tiết lộ với bất cứ ai.

2.06. Bảy tỏ ý kiến với khách hàng và chủ lao động khi thấy dự án có khả năng thất bại hay vi phạm luật sở hữu trí tuệ hoặc có vấn đề.

VD: Google đã sử dụng trái phép hơn 11000 dòng code API của Oracle nhưng vẫn cho nó là hợp pháp.

2.07. Khi có bất kể thay đổi gì trong dự án, kỹ sư có trách nhiệm phải báo cáo với khách hàng và người chủ lao động.

VD: Trong dự án tạo ra trò chơi điện tự, với chức năng di chuyển của trò chơi sử dụng các phím "a, w, s, d" nhưng nó bất tiện cho người chơi, ta thực hiện thay đổi nó thành các phìm mũi tên thì lúc thay đổi ta phải báo cáo với cấp trên để xin ý kiến và báo cáo sự thay đổi đó.

2.08. Không chấp nhận các công việc bên ngoài có gây bất lợi cho công việc mà họ đang thực hiện cũng như chủ lao động.

VD: Anh A vừa là lập trình viên và vừa làm part-time nhân viên quán cafe, khi anh nhận dự án lơn thì anh phải tập trung vào công việc của mình, dự án của mình, không được để các công việc khác phân tâm, tức phải bỏ qua công việc part-time.

2.09. Nếu phát hiện dự án không mang lại lãi suất cho khách hàng và chủ lao động thì phải báo ngay cho họ.

VD: Trong một dự án tạo ứng dụng mạng xã hội, ta cảm thấy ứng dụng của ta khi ra mắt không thể cạnh tranh với các mạng xã hội khác như Facebook, Zalo,... thì ta phải bảy tỏ ý kiến của bản thân để dừng tạo ra phần mềm khi cần thiết

Principle 3: PRODUCT (Sản phẩm)

    Các kỹ sư phần mềm phải đảm bảo rằng sản phẩm của họ phải đạt được chất lượng chuyên môn cao nhất có thể.

3.01. Cố gắng đạt được sản phẩm chất lượng cao, chi phí thấp nhất và vạch ra lịch trình làm việc hợp lý để đạt được mục tiêu ấy.

VD: Trong một dự án phát triển game, ta phải cố gắng cải thiện hiệu năng của trò chơi để nó tương thích tốt nhất với máy của mọi người.

3.02. Đề xuất và đảm bảo các mục tiêu có thể đạt được trong bất kỳ dự án nào.

VD: Trong dự án, ta chỉ đề xuất các chức năng mà phần mềm của mình có thể đạt được và có trách nhiệm hoàn thành chúng.

3.03. Giải quyết tất cả các vấn đề về đạo đức, kinh tế, văn hoá, luật pháp và môi trường liên quan đến dự án, sản phẩm.

VD: Trong một dự án X, anh A có nhiệm vụ phải hạn chế kinh phí, làm cho sản phẩm thân thiệt với môi trường.

3.04. Đánh giá đúng năng lực của mình để nhận công việc. Nếu không đủ có thể đề xuất vừa làm việc vừa đào tạo thêm kinh nghiệm

VD: Trong cuộc phỏng vấn, việc anh A nói quá về kỹ năng làm việc của mình là trái với đạo đức vì dễ làm cho dự án không thành công.

3.05. Đảm bảo sử dụng phương pháp thích hợp cho dự án mà họ làm việc.

VD: Trong dự án Y, khi tạo ra phần mềm trò chơi, anh A đề xuất sử dụng phím di chuyển là "a, w, s, d" cho thuận tiên với người chơi.

3.06. Làm việc tuân theo các quy định chuyên môn và đạo đức.

VD: Anh A làm việc trong công ty thì phải tuân theo các quy định làm việc của công ty và đạo đức nghề nghiệp của mình.

3.07. Cố gắng hiểu các thông số kỹ thuật, cách hoạt động mà phần mềm họ làm ra.

VD: Với một phần mềm mà mình làm ra, mình phải là người hiểu rõ về phần mềm nhất.

3.08. Đảm bảo phần mềm đáp ứng đầy đủ các yêu cầu và đã qua phê duyệt.

VD: Khi nhận được đơn hàng từ khách hàng thì phải nghiên cứu hết tất cả chức năng cần có.

3.09. Bảy tỏ ý kiến cá nhân về sản phầm một cách có chuyên môn.

VD: Khi được giao một sản phẩm thì nên tính toán ước lượng trước nguồn chi phí để làm việc không bị thiếu hụt.

3.10. Đảm bảo kiểm tra, bảo trì các phần mềm và các tài liệu liên quan mà chúng hoạt động dựa vào đó.

VD: Khi phát hành một ứng dụng game, người lập trình viên nên thường xuyên theo dõi để kiểm soát lỗi của nó.

3.11. Chuẩn bị các giải pháp khi các vấn đề nghiêm trọng có thể xảy ra.

VD: Khi phát hành ứng dụng game thì nên hướng dẫn cách làm giảm độ lag, tăng độ mượt, độ chi tiết...

3.12. Tôn trọng quyền riêng tư của người khác có thể bị ảnh hưởng tới phần mềm đó.

VD: Khi chúng ta xây dựng một ứng dụng để bán hàng, chúng ta chỉ sử dụng thông tin cá nhân khi cần thiết, không đánh cắp và bán cho bên thứ 3.

3.13. Chỉ sử dụng các dữ liệu sau thi thông qua các phép lọc có chuyên môn và phù hợp với lợi ích cộng đồng.

VD: Khi làm dự án xử lý thông tin, phải lọc các thông tin bằng các phương pháp chuyên môn.

3.14. Duy trì tính toàn vẹn của dữ liệu.

VD: Trong dự án làm việc với dữ liệu nhiều, thì ta có nghĩa vụ phải quản lý tốt dữ liệu để tránh hao hụt.

3.15. Bảo trì phần mềm thường xuyên để có được hiệu năng tốt nhất.

VD: Với các người máy AI thì người lập trình cần bảo trì phần mềm suy nghĩ của nó thường xuyên để nó có hiệu năng tốt nhất.

Principle 4: JUDGMENT (Đánh giá)

    Các kỹ sư phần mềm phải đánh giá một cách độc lập, khách quan nhất theo chuyên môn của mình.

4.01. Tiết chế các đánh giá kỹ thuật và duy trì các giá trị con người

VD: Khi đóng góp từ thiện thì không nên hiển thị thông tin chi tiết của người đóng góp để duy trì các giá trị nhân văn.

4.02. Chỉ phê duyệt các tài liệu liên quan đến chuyên môn.

VD: Trong các phép lọc dữ liệu, người kỹ sư có nhiệm vụ lọc những dữ liệu chỉ liên quan đến chuyên môn của mình.

4.03. Đánh giá khách quan và độc lập với bất kỳ phần mền hay tài liệu nào.

VD: Đánh giá phần mềm của người quen hay người lạ thì phải đánh giá nó bằng cách khách quan nhất có thể.

4.04. Không tham gia vào các hoạt động tài chính lừa đảo.

VD: Lập trình ra các web-site đánh bạc qua mạng là sai trái.

4.05. Tránh xảy ra các cuộc xung đột không đáng có vì phần mềm và dự án.

VD: Trong các cuộc thảo luận của dự án, các kỹ sư không nên làm theo cách riêng của mình mà phải thống nhất ý kiến, tránh các xung đột vật lý.

4.06. Từ chối tham gia các tổ chức tư nhân mà trong đó chủ lao động và khách hàng có những xung đột.

VD: Công ty X và công ty Y có xung đột với nhau, công ty X mới anh A về làm việc thì anh A phải từ chối.

Principle 5: MANAGEMENT (Quản lý)

    Khi là quản lý hay lãnh đạo của một dự án, các kỹ sư phần mềm thúc đấy các nhân viên mình làm việc một cách tốt nhất, phù hợp với đạo đức trong việc quản lý, bảo trì và phát triển phần mềm.

5.01. Đảm bảo quản lý tốt dự án, hoàn thành tốt công việc mình được giao.

VD: Với tư cách là một người quản lí thì nên xây dựng một quy trình sao cho quá trình sản xuất phần mềm thuận lời, đạt hiệu quả cao nhất.

5.02. Thông báo với các kỹ sư phần mềm khác về tiêu chuẩn của dự án.

VD: Vơi tư cách là một người quản lý thì ta phải có nhiệm vụ nhắc nhở mọi người về tiêu chuẩn của dự án kĩ càng.

5.03. Đảo bảo các thành viên trong đội phải am hiểu về các chính sách và quy trình của dự án được đề ra.

VD: Khi làm trong công ty ngân hàng thì kỹ sư phải am hiểu về các chính sách để tránh vi phạm pháp luật.

5.04. Giao công việc cho những người phù hợp với công việc đó.

VD: Trong dự án, việc tối ưu hiệu năng là công việc khó nên nó phải được giao cho người giỏi nhất hoặc một nhóm hoạt động tốt.

5.05. Thông báo với các thành viên về các định lượng thực tế của dự án.

VD: Một số công ty đăng thông tin tuyển dụng sai lệch với thực tế về mức lương, môi trường làm việc.

5.06. Đưa ra các thông tin chính xác, mô tả đầy đủ các điều khoản của dự án.

VD: 2 người ở cùng một công ty, một chức bậc, một vị trí, một công việc, một thời gian làm việc và có cùng một năng lực thì số tiền nhận được thì sẽ không chênh nhau là bao.

5.07. Trả lương công bằng và chính đáng cho các thành viên.

VD: Với cương vị là quản lý thì ta phải trả lương theo năng lực của nhân viên một cách chính đáng.

5.08. Không vô cớ ngăn cản ai đó đảm nhận vị trí mà người đó đủ tiêu chuẩn.

VD: A muốn ứng cử lên làm quản lí đội phát triển, nhưng B ganh tị và không muốn A đạt được chức vụ này.

5.09. Đảm bảo rằng có các thoả thuận công bằng giữa chủ lao động, khách hàng và kỹ sư phần mềm.

VD: Khi bắt đầu làm việc, ta phải đảm bảo hợp đồng làm việc của ta với chủ lao động và khachs hàng phải công bằng cho mọi bên.

5.10. Đưa ra các hình phạt phù hợp cho các thành viên vi phạm.

VD: Khi có 1 thành viên vi phạm, ta phải đưa ra hình phạt hợp lý với cương vị là quản lý dự án.

5.11. Không yêu cầu các kỹ sư phần mềm làm điều gì trái với quy tắc đạo đức.

VD: Anh A - quản lý dự án bắt anh B qua phần mềm đánh cắp thông tin của khách hàng để bán cho công ty tài chính.

5.12. Không trừng phạt ai một cách vô lý khi họ bày tỏ quan điểm về dự án.

VD: Khi anh A bày tỏ quan điểm về dự án, mặc dù nó đúng nhưng nó bất lợi với mình, mình đuổi việc anh ấy. Việc đó là sai với đạo đức nghề nghiệp.

Principle 6: PROFESSION (Chuyên nghiệp)

    Các kỹ sư phần mềm phải nâng cao danh tiếng nghề nghiệp của mình, không được làm ô uế và phải phù hợp với lợi ích cộng đồng. 

6.01. Góp phần phát triển một môi trường làm việc tốt, thuận lợi.

VD: Góp phần tạo ra môi trường để cho mọi người có thể cư xử đạo đức với nhau hơn, không thuốc lá khi làm việc,...

6.02. Thúc đẩy kiến ​​thức của công chúng về kỹ thuật phần mềm.

VD: các lập trình viên tạo ra các diễn đàn, các video, các blog chia sẻ về kiến thức công nghệ phần mềm cho cộng đồng

6.03. Mở rộng kiến thức của bản thân bằng cách tham gia vào các tổ chức chuyên nghiệp.

VD: Anh A tham gia các buổi hội thảo, họp báo về công nghệ để mở rộng kiến thức.

6.04. Hỗ trợ đồng nghiệp khi cần.

VD: Khi anh A gặp trục trặc trong việc lập trình các chức năng, anh B là người có kinh nghiệm trong phần này, lập tức hỗ trợ anh A

6.05. Không vụ lợi cho bản thân.

VD: Công ty trả cho chúng ta 30.000 cho 1 tiếng làm việc, nên cố gắng cống hiến trong khoảng thời gian đó thay vì phí phạm thời gian đó.

6.06. Tuân thủ các điều khoản, ngoại lệ khi nó không phù hợp với lợi ích cộng đồng.

VD: Khi tham gia 1 dự án, ta phải tuân thủ các điều khoản mà nó đề ra.

6.07. Thành thật với chính phần mềm mình làm ra.

VD: Khi phát hành một phần mềm, thì khi công bố chúng thì mình phải thông báo thật những thứ mình làm ra, không lừa đảo hoặc nói quá lên về các chức năng của phần mềm.

6.08. Chịu trách nhiệm bảo trì, sửa lỗi khi phần mềm xảy ra vấn đề.

VD: Khi phát triển phần mềm, với cương vị là một lập trình viên thì phải liên tục bảo trì, sửa lỗi chúng.

6.09. Đảm bảo rằng mọi người đều biết về quy tắc đạo đức trong phát triển phần mềm.

VD: Tuyên truyền cho mọi người về đạo đức trong phát triển phần mềm

6.10. Tránh liên kết với các tổ chức khác có thể gây hại cho chủ lao động và khách hàng.

VD: Anh A làm trong công ty X, nên anh A không được làm việc cho công ty Y đang cạnh tranh với công ty X

6.11. Nhận thức được các hành vi vi phạm đạo đức.

VD: Anh A đang lập trình thì anh A phải tự nhận thức được mình phải làm cho thật tốt công việc của mình.

6.12. Bảy tỏ mối quan ngại với những người không tôn trọng quy tắc này.

VD: Anh B không tôn trọng quy tắc này, anh A có trách nhiệm giảng giải thêm để anh B hiểu biết thêm về quy tắc này

6.13. Báo cáo các hành vi vi phạm nguyên tắc này với các cơ quan có thẩm quyền

VD: Anh B thấy anh A sử dụng phần mềm không bản quyền, lập tức báo cáo với cơ quan có thẩm quyền.

Principle 7: COLLEAGUES (Đồng nghiệp)

    Các kỹ sư phần mềm phải biết hỗ trợ đồng nghiệp của mình và hỗ trợ theo cách công bằng nhất.

7.01. Khuyến khích các đồng nghiệp tuân theo quy tắc này.

VD: Trong môi trường làm việc, ta có trách nhiệm khuyến khích mọi người tuân theo đạo đức trong phát triển phần mềm.

7.02. Hỗ trợ đồng nghiệp trong chuyên môn.

VD: Anh B gặp rắc rối, anh A lập tức giúp đỡ.

7.03. Ghi chú đầy đủ về công việc và không nhận hối lộ.

VD: Anh A đang làm việc cho công ty X, khi được công ty Y đề xuất nhận hối lộ để tiết lộ cơ mật của công ty X, anh A từ chối.

7.04. Xem lại dự án một cách chi tiết nhất.

VD: Trong dự án, mình có trách nhiệm kiểm kê thì mình phải xem lại một cách kỹ càng nhất.

7.05. Công bằng khi lắng nghe và đánh giá các thành viên khác.

VD: Lúc thảo luận nhóm, mình phải lắng nghe mọi ý kiến trước rồi mơi nhận xét điểm chung và riêng, lợi và hại của từng ý kiến

7.06. Hỗ trợ đồng nghiệp nhận thức đầy đủ về mục tiêu và các quy trình làm việc.

VD: Trong dự án, ta phải phổ biến cho đồng nghiệp các mục tiêu đã đề ra của phần mềm.

7.07. Không can thiệp quá sâu vào vấn đề cá nhân của đồng nghiệp khác.

VD: Anh B có vấn đề trong chuyện yêu đương, anh A không được can thiệp vào

7.08. Trong các tình huống vượt ngoài lĩnh vực làm việc, hãy lằng nghe ý kiến từ các chuyên gia khác có chuyên môn hơn.

VD: Ta đang gặp vấn đề về hình ảnh trong phần mềm thì ta cần lắng nghe thêm ý kiến ở mảng đồ hoạ.

Principle 8: SELF (Bản thân)

    Các kỹ sư phần mềm phải không ngừng học hỏi, nâng cao tay nghề.

8.01. Không ngừng nâng cao kiến thức chuyên môn của mình.

VD: Thế giới hiện nay càng ngày càng phát triển, ta phải không ngừng học hỏi trau dồi thêm kiến thức.

8.02. Cải thiện khả năng của mình đẻ tạo ra các phần mềm tốt hơn, tin cậy hơn và an toàn hơn.

VD: Không ngừng học tập để phát triển, tạo ra phần mềm tốt hơn phần mềm đã có.

8.03. Nâng cao khả năng của mình để tạo ra phần mềm, tài liệu chính xác, đẩy đủ.

VD: Trau dồi kiến thức để viết ra cuốn sách lập trình hay.

8.04. Nâng cao hiểu biết của họ về các phần mền và tài liệu liên quan.

VD: Sử dụng nhiều phần mềm, đọc nhiều sách để biết thêm về công nghệ, phần mềm.

8.05. Nâng cao kiên thức về các tiêu chuẩn liên quan đến phần mềm.

VD: Mình tham gia các hội thảo về phần mềm để nâng cao kiến thức của mình về công nghệ, các tiêu chuẩn mới.

8.06. Nâng cao kiến thức về quy tắc và cách giải thích quy tắc này.

VD: Ta không chỉ học mà phải thấm nhuần và phát huy hơn nữa đạo đức trong phát triển phần mềm

8.07. Không đối xử bất công với bất kỳ ai vì có định kiến không phù hợp.

VD: Anh A có định kiến với phần mềm của mình, mình đánh anh A. Như vậy là trái với đạo đức.

8.08. Không được can thiệp công việc của người khác.

VD: Anh B có vấn đề trong chuyện yêu đương, anh A không được can thiệp vào,

8.09. Nhận thức được vi phạm các quy tắc về đạo đức trong phát triển phần mềm là đang cản trở bản thân trở thành một kỹ sư phần mềm chuyên nghiệp.

VD: Khi mình thấm nhuần đạo đức này, có thể nhận thức được các việc trái với đạo đức, giúp mình tiến xa hơn trên con đường công nghệ phần mềm.

    Đạo đức trong công nghệ phần mềm là điều đầu tiên mà mỗi kỹ sư lập trình phải học và thấm nhuần chúng, nhưng một số trường hợp hy hữu vẩn xảy ra:

(1) Sự kiện cỗ máy Therac-25 gây ra 6 tai nại thảm khốc trong những năm từ 1985 đến 1987 chính là câu chuyện nổi tiếng nhất về việc những dòng code giết người. Therac-25 là một cỗ máy xạ trị cho bệnh nhân ung thư được sản xuất vào năm 1982. Do sai lầm trong việc code và kiểm thử, máy chiếu phóng xạ quá liều, làm chết 4 người, bị thương 2 người.

    Theo như các điều luật trong IEEE/ACM đã vi phạm các nguyên tắc sau:

- Nguyên tắc 1: Gây ra lỗi nghiêm trọng đến cộng đồng.

- Nguyên tắc 5: Người quản lý đã phê duyệt máy chiếu mà không kiểm thử kỹ càng.

- Nguyên tắc 3: Sản phẩm chưa đạt được hiệu quả cao nhất, thiếu sót dẫn đến hậu quả nghiêm trọng.

(2) Tháng 6 năm 2010, con worm máy tính Stuxnet được các chuyên viên Semactec tìm thấy. Con worm “vô hại” này được biết là có khả năng thâm nhập và phá hoại các lò phản ứng hạt nhân. Stuxnex lây lan khá rộng ở Iran, nhưng chưa rõ có lò phản ứng nào bị nổ hay thiệt hại vì nó chưa.

    Theo như các điều luật trong IEEE/ACM đã vi phạm các nguyên tắc sau:

- Nguyên tắc 6: Với 1 con worm thì các kỹ sư phải thừa biết nó có thể gây hại cho cộng đồng những vẫn làm ngơ. 

(3) Cơ quan quản lý thực phẩm và dược phẩm Hoa Kỳ (FDA) đã xác nhận sự liên quan giữa các vấn đề phần mềm của máy bơm thuốc tiêm truyền với hơn 700 ca tử vong và 20 000 ca bị thương nặng từ năm 2005 đến 2009

    Theo như các điều luật trong IEEE/ACM đã vi phạm các nguyên tắc sau:

- Nguyên tắc 1: Ảnh hưởng đến cộng đồng.

- Nguyên tắc 3: Máy bơm chưa đạt kết quả tốt mà đã đem ra sử dụng dẫn đến hậu quả nghiêm trọng

- Nguyên tắc 5: Quá trình kiểm thử còn sơ sài.

(4) Mới đây, đầu những nằm 2018, Facebook bị người dùng cáo buộc vi phạm về quyền riêng tư khi chia sẽ dữ liệu của họ với bên thứ 3, bao gồm cả Công ty tư vấn Cambridge Analytica của Anh. Kể từ vụ bê bối này, Facebook đã xoá quyền truy cập dữ liệu khỏi hàng ngàn ứng dụng bị nghi ngờ lạm dụng, đồng thời hạn chế lượng thông tin có sẵn cho các nhà phát triển và giúp người dùng dễ dàng điều chỉnh các hạn chế về chia sẽ dữ liệu cá nhân.

    Theo như các điều luật trong IEEE/ACM đã vi phạm các nguyên tắc sau:

- Nguyên tắc 1: Không tuyên bố với mọi người về lỗi của mình vì để thông tin người dùng bị chia sẽ.

- Nguyên tắc 2: Làm lộ thông tin người dùng làm ảnh hưởng cuộc sống, tiền bạc của họ.

(5) Google đã ăn cắp hơn 11000 dòng mã API Java của Oracle để sử dụng trong quá trình phát triển hệ điều hành Android  thuộc về "sử dụng hợp pháp" và không vi phạm bản quyền. Tranh chấp bản quyền này bắt nguồn từ việc Google phát triển nền tảng Android. Vào thời điểm đó, Google đã sao chép tên và kiểu tham số các hàm Java để Android tương thích với Java, những mã này có thể hiểu đơn giản là giao diện JavaAPI

    Theo như các điều luật trong IEEE/ACM đã vi phạm các nguyên tắc sau:

- Nguyên tắc 1: Google đã lừa dối Oracle khi tuyên bố các dòng mã API đó là hợp pháp và không vi phạm bản quyền

Thứ Hai, 12 tháng 9, 2022

Tìm hiểu về công nghệ phần mềm




Tìm hiểu về công nghệ phần mềm

1. Phần mềm là gì?

    Phần mềm (Software) là tập các chương trình máy tính, tài liệu và dữ liệu liên quan chặt chẽ với nhau, đảm bảo thực hiện một số nhiệm vụ, chức năng nào đó trên thiết bị điện tử. Các sản phẩm phần mềm có thể được phát triển cho một khách hàng cụ thể hoặc có thể được phát triển cho một thị trường chung. 

    Nó đối lập với phần cứng, nơi mô tả các khía cạnh vật lý của máy tính và thực thi các công việc. Nó có thể được coi là phần biến của máy tính, trong khi phần cứng là phần bất biến. Vậy nên, phải có phần cứng thì phần mềm mới thực thi được.

    Một phần mềm tốt phải cung cấp được những chức năng cần thiết, hiệu năng tốt cho người dùng, dễ dàng bảo trì và đáng tin cậy. 

2. Công nghệ phần mềm là gì?

    Công nghệ phần mềm (Software engineering) là một nhánh của khoa học máy tính liên quan đến thiết kế, phát triển, thử nghiệm và bảo trì một cách có hệ thống, có kỷ luật và định lượng. Cụ thể, ngành học này tập trung nghiên cứu về các hạ tầng phần mềm, cơ sở dữ liệu và cũng như sự phát triển của các ứng dụng và hệ thống.

    Khác với khoa học máy tính, công nghệ phần mềm không chỉ đề cập tới lý thuyết và các vấn đề cơ bản, mà nó còn tập trung vào hoạt động xây dựng chế tạo các sản phẩm phần mềm hệ thống hay phần mềm ứng dụng hữu ích với con người

3. Tại sao phải học Công Nghệ Phần Mềm?

    Ngày này khi xã hội phát triển, thời đại của công nghệ thông tin lên ngôi thì các nghề nghiệp về lĩnh vực công nghệ thông tin trở nên "hot" hơn bao giờ hết. Vì thế, theo học ngành công nghệ thông tin sẽ mở rộng nhiều cơ hội việc làm nhất. 

    Trong số đó thì ngành công nghệ phần mềm là một trong 5 ngành "hot" nhất hiện nay của công nghệ thông tin vì tính ứng dụng thực tế rất cao, nhu cầu thị trường rất lớn và không có dấu hiệu hạ nhiệt. Vì cuộc sống hiện đại của chúng ta luôn bị chi phối bởi các ứng dụng công nghệ điển hình như các mạng xã hội (Facebook, Instagram, ...), các ứng dụng Office (Word, Powerpoint, Excel, ...), các trình duyệt web (Edge, Chrome, Firefox).

    Với ngành công nghệ phần mềm, bạn không chỉ có thể làm việc trong nước mà còn có nhiều cơ hội làm việc và hợp tác xuyên quốc gia hoặc làm việc trong các tập đoàn lớn về công nghệ thông tin. Song song với cơ hội làm việc thì mức lương cực kỳ hậu hĩnh với chế độ đãi ngộ cao.

Vậy nên Công nghệ phần mềm là một ngành học cực kỳ xứng đáng để theo học.

4. Hãy lấy ví dụ 5 phần mềm khác nhau và phân tích các đặc điểm tốt, chưa tốt của phần mềm đó.

(1) Phần mềm thư điện tử Gmail: Hiện nay, Gmail không còn quá xa lạ với chúng ta. Chúng được sinh ra để thay thế hệ thống gửi và nhận thư bằng giấy theo như truyền thống. Nó đóng vai trò quan trọng trong việc giữ liên lạc cá nhân cũng như trao đổi thông tin giữa các tổ chức, doanh nghiệp. Một số ưu và nhược điểm có thể kể qua như:

- Ưu điểm:

+ Gửi và nhận thư cực kỳ nhanh so với cách gửi thư truyền thống.

+ Có thể gửi thư ở bất cứ thời điểm nào

+ Mọi thiết bị có kết nối với internet đều có thể sử dụng

+ Tiết kiệm chi phí

+ Thư điện tử có thể gửi đi cho nhiều người cùng một lúc

- Nhược điểm:

+ Để gửi hoặc nhận thì người dùng phải có internet

+ Virus có thể phát tán qua các tập tin đính kèm

+ Có thể bị đánh cắp các thông tin quan trọng 

(2) Phần mềm quản lý doanh nghiệp ERP: Viết tắt của Enterprise Resource Planning, là giải pháp quản lý tổng thể dành cho các doanh nghiệp, được dụng để hoạch định tài nguyên trong doanh nghiệp. Một số ưu và nhược điểm:

- Ưu điểm:

+ Hợp nhất dữ liệu giữa các phòng ban và quản lý dữ liệu tập trung đó.

+ Là công cụ hỗ trợ đắc lực trong việc quản lý nhân viên

+ Giảm thiểu rủi ro xuống mức thấp nhất

- Nhược điểm:

+ Chi phí đầu tư lớn

+ Thời gian triển khai kéo dài

+ Yếu tố con người

(3) Microsoft visual studio: Là một IDE được các lập trình viên sử dụng nhiều nhất thế giới, với mục đích ban đầu là để lập trình C++ và C#. Nhưng hiện nay, nó còn hỗ trợ cho nhiều ngôn ngữ hiện đại. Một số ưu và nhược điểm của nó:

- Ưu điểm: 

+ Hỗ trợ nhiều ngôn ngữ như C/C++, C#, JavaScript,...

+ Debug trực quan, dễ sử dụng thông qua breakpoints

+ Tính năng nhắc lệnh IntelliSense cực kỳ hữu ích

+ Cho phép người dùng sử dụng plug-in bên thứ 3

+ Hỗ trợ hầu hết các dòng máy

+ Số lượng người sử dụng nhiều nên cộng đồng hỗ trợ cực kỳ lớn

- Nhược điểm:

+ Khá khó khăn cho người mới bắt đầu học lập trình sử dụng.

+ Vì là một IDE nên nó cần sử dụng nhiều tài nguyên khác nữa để vận hành.

(4) Zalo: Là một mạng xã hội rất phổ biến ở Việt Nam. Mặc dù là ứng dụng ra đời muộn hơn so với các ông lớn như Facebook hay Twitter nhưng Zalo đã khẳng định được chỗ đứng nhất định trên thị trường. Một số ưu và nhược điểm có thể kể qua:

- Ưu điểm:

+ Sự phổ biến không kém cạnh các ông lớn

+ Sự phát triển từ một app chat thành một mạng xã hội 

+ Giao diện đơn giản nhưng đẹp mắt, ưa nhìn

+ Hỗ trợ đa nền tảng, chuyển file chất lượng cao

+ Có thể mua sắm và thanh toán trực tuyến trên Zalo

+ Bảo mật thông tin cho người dùng

- Nhược điểm:

+ Thiếu các tính năng giải trí

+ Khả năng lưu trữ dữ liệu còn kém

+ Là ứng dụng tốn phí

(5) Google Chrome: Là trình duyệt web Internet nguồn mở miễn phí được phát triển bởi Google. Google chrome hiện nay đang được sử dụng phổ biến nhắm truy cập các thông tin trên internet. Một số ưu và nhược điểm của nó:

- Ưu điểm:

+ Sự đơn giản của ứng dụng và tốc độ duyệt internet

+ Các add-on và tiện ích mở rộng tiện lợi cho các mục đích khác nhau

+ Khả năng đồng bộ vô cùng tiện lợi

+ Tìm kiếm đơn giản hơn với Omnibox

+ Khả năng tuỳ chỉnh theo ý thích của người dùng

- Nhược điểm:

+ Tiêu thụ tài nguyên

+ Luôn có các tiến trình chạy ngầm trong nền

+ Sử dụng nhiều dung lượng bộ nhớ (RAM)

+ Đóng tab mà không cần cảnh báo đến người dùng

Bài tập Class Diagram - Tuần 4

Họ tên: Trần Văn Kiệt MSSV: 20110665 Công ty có yêu cầu xây dựng 1 chương trình quản lý đồ họa (graphic editor) có hỗ trợ chức năng grouping...