Home Blog Page 114

Dự án chạy trên Ipad

Dự án chạy trên Ipad

Bài viết được sự cho phép của tác giả Tin Tran

Phát triển ứng dụng mobile hay ipad thời bấy giờ rất đang là thịnh. Người người dùng smart phone nhà nhà dùng ipad. Tụi Nhật họ còn đi trước nước mình khá lâu nên việc phát triển ứng dụng để chạy trên Ipad là bình thường, không có gì để bàn cãi.

  "Dân làm Product khác hoàn toàn 180 độ với dân làm outsourcing"
  10 bước để bắt đầu áp dụng kiểm thử tự động vào dự án

Từ sau khi vào công ty thì tôi đã trải qua hai dự án maintenance, maintenance là gì thì tôi đã giải thích ở phần 5 . Lần đầu tiên tôi được làm một cái dự án mà tạo mới từ đầu, không phải đọc source code của người khác viết nữa. Dự án lần này khách hàng yêu cầu công ty chúng tôi phát triển ứng dụng chạy trên hệ điều hành iOS (Ipad), về công nghệ sử dụng thì khách hàng họ muốn viết bằng jquery mobile, html và css. Lý do sử dụng cái này là vì họ đã có sẵn một hệ thống để build source code ra ứng dụng để chạy trên iOS.

Về javascript, jquery thì tôi khá là gà mờ, chứ đừng nói gì tới jquery mobile. Từ khi đi học đến khi đi làm cũng chỉ đụng sơ sơ, làm vài cái cơ bản, chứ chưa làm chuyên sâu, kinh nghiệm về mảng này chưa có nhiều. Dự án lần này vẫn là anh leader cũ quản lý, hiện tại tôi đang thuộc team này nên các dự án mà anh nhận về thì tôi đều phải chịu sự quản lý anh ấy. Như thường lệ buổi đầu tiên vẫn là kick off dự án, dự án chúng tôi không tính anh leader thì có bốn người, có một anh vào trước tôi sáu tháng và hai đứa đã thử việc xong vừa mới được nhận vào, một đứa nam và một đứa nữ. Anh leader phổ biến về dự án, những thông tin về khách hàng, về công nghệ sử dụng, về các thông tin liên quan khác của dự án. Lần này thì dự án sẽ có thêm một giai đoạn làm mockup màn hình. Có nghĩa là chúng tôi sẽ làm giao diện, chưa có xử lý nghiệp vụ bên trong, sau khi làm xong tất cả màn hình thì sẽ gửi lại cho bên phía Nhật họ xác nhận lại, cần chỉnh sửa gì thì sẽ chỉnh lại theo ý của họ. Sau khi xác nhận xong thì chúng tôi sẽ tiến hành coding nghiệp vụ của màn hình đó. Thiết kế chi tiết thì cũng đã được họ cung cấp sẵn cho chúng tôi, tài liệu thì hoàn toàn bằng tiếng nhật, cũng như những dự án khác thì sẽ có phiên dịch dịch lại sang tiếng việt.

Như đã nói thì bên Nhật họ sẽ cung cấp thiết kế chi tiết màn hình cho chúng tôi, trong thiết kế này họ sẽ mô tả toàn bộ các nghiệp vụ xử lý của các control bên trong màn hình. Nếu các bạn đã học quy trình phát triển phần mềm thì chắc các bạn cũng đã biết một quy trình thì bắt đầu từ việc lấy yêu cầu, thiết kế, code, test. Tuy nhiên tại sao những dự án tôi làm thì toàn bắt đầu từ giai đoạn code, test. Còn việc lấy yêu cầu, thiết kế tại sao lại không có. Vì những dự án đó chúng tôi nhận từ các công ty bên Nhật mà các công ty đó cũng là công ty phần mềm, họ sẽ lấy yêu cầu từ khách hàng (end user) của họ, rồi thiết kế. Sau đó sẽ đưa cho các nước như Việt Nam, Trung Quốc để gia công, do số tiền các nước này so với bên Nhật thì sẽ rẻ hơn. Chúng tôi gọi như vậy là oursource.

Trở lại với dự án thì việc đầu tiên chúng tôi sẽ lên layout cho toàn bộ màn hình, số lượng màn hình cũng gần chục cái. Mỗi người sẽ đảm nhận khoảng hai cái màn hình, trước giờ tôi chỉ code backend, còn frontend ngu lắm, trước kia làm thì toàn những màn hình đơn giản hoặc có những màn hình tương tự thì sẽ copy lại để chỉnh sửa. Lần này thì chúng tôi phải làm giao diện từ đầu nên để hoàn thành một màn hình thì tôi tốn khá nhiều thời gian. Trong team thì có một đứa con gái rất giỏi về khoản làm html, css, làm rất lẹ. Tôi đã từng hỏi nó vì sao lại chọn công nghệ thông tin thì nó trả lời là trước kia có thằng nào nói con gái học công nghệ thông tin ngu lắm, thế là nó theo học để chứng tỏ cho thằng kia biết :)).

Trong thời gian code giao diện cho màn hình thì khách hàng yêu cầu nâng version của jquery mobile, trước đó thì họ đã chỉ định sử dụng một version khác. Các màn hình làm thì đã gần xong hết, việc nâng version lên đã ảnh hưởng đến màn hình tôi đảm nhận, mà màn hình này thì đã làm xong rồi. Sau khi đưa version jquery mobile mới vào thì nó làm bể hết layout. Vì tôi đang sử dụng các class của jquery mobile để làm giao diện cho màn hình, lúc này tôi lại tốn thêm mớ thời gian nữa để sửa lại.

Sau khi làm xong các màn hình thì chúng tôi gửi source code cho bên khách hàng để họ xem, dĩ nhiên là code sẽ được build ra ứng dụng để chạy trên ipad, việc di chuyển giữa các màn hình, hiệu ứng di chuyển này nọ phải trơn tru hết, giao hàng cho khách mà có bug hay chạy không được thì rất là phiền toái.

Trong thời gian phía khách hàng họ xem màn hình mockup thì chúng tôi cũng tiến hành coding cho màn hình, ai đảm nhận code giao diện màn hình nào thì cũng code xử lý nghiệp vụ cho màn hình đó luôn. Ứng dụng này quản lý thông tin của những công trình, khi ứng dụng được chạy trên ipad thì những công trình sẽ được chụp hình lại và gửi về server. Lần này tôi được làm với API, từ trước giờ tôi chưa làm về cái này bao giờ. Về API là gì thì tôi xin giải thích thêm cho những bạn chưa biết, ở đây tôi không định nghĩa về nó mà chỉ nói về cách làm việc cho các bạn dễ hiểu. API thực chất là một web service, nơi mà nhận yêu cầu từ phía client và trả về thông tin mà client muốn lấy thông qua json (đối với restful web service). Ví dụ thực tế với dự án của tôi, khi ứng dụng của tôi chạy, tôi muốn lấy thông tin từ server để hiển thị ra Ipad, thì tôi sẽ xử dụng ajax để gửi một yêu cầu (request) đến một địa chỉ của server, tại server sẽ xử lý yêu cầu và trả về một chuỗi json cho ứng dụng của tôi để hiển thị ra màn hình, cơ chế của nó là như vậy.

Trở lại với màn hình của tôi, một màn hình khi hiển thị thông tin được lấy từ server về thì không phải là có mỗi một yêu cầu (request) mà là sẽ có nhiều yêu cầu(request) lên phía server để lấy dữ liệu về. Màn hình của tôi khi hiển thị ra thì sẽ hiển thị những thông tin trong dropdownlist, thông tin trong table… Việc gửi yêu cầu liên tục như vậy bằng ajax theo cơ chế bất đồng bộ như vậy thì khi một yêu cầu gửi lên server thành công thì lúc này thì mới thực hiện yêu cầu tiếp theo và cứ liên tục lặp lại cho đến khi tất cả các yêu cầu được thực hiện thành công. Sau khi coding xong thì vẫn là anh leader review lại source code, xem có gì phải chỉnh sửa hay không, code thừa, code thiếu, code không logic, code không đẹp. Nói chung khi nào được review thì vẫn phải sửa thôi, lần này tôi mắc một lỗi khá là nghiêm trọng đó là thiết kế có vấn đề mà không phát hiện ra, tới khi anh leader review thì gọi lại hỏi thì mới lòi ra nhiều vấn đề hơn tôi tưởng. Lúc này thì anh leader kêu tôi viết câu hỏi để đi hỏi khách hàng. Đây cũng là lần đầu tôi tự viết, sau khi viết xong thì anh leader cũng sẽ review lại, cảm thấy ổn thì sẽ đưa phiên dịch để dịch và gửi khách hàng. Tuy nhiên, đây là lần đầu tôi viết câu hỏi, như các bạn đã biết phần trước tôi đã nói anh leader quản lý tôi khó, tôi viết câu hỏi về câu cú không đúng ý anh ta, bắt tôi sửa lại cho đúng ý, ok tôi sửa lại, sau đó tôi lại đưa review, lại chưa đúng ý, tiếp tục bắt tôi sửa, sửa đến khi nào đúng ý thì thôi. Tôi sửa đâu bốn, năm lần gì đó. Việc viết câu hỏi đúng là một thảm họa và tốn thời gian kinh khủng, có những lúc không biết ghi như thế nào. Sau khi gửi cho khách hàng thì tùy theo thời gian thì khách hàng sẽ hồi đáp câu hỏi của bạn, có những câu hỏi khách hàng họ trả lời liền, có câu họ ngâm ba bốn ngày mới trả lời, lúc này thì deadline vẫn trôi và màn hình chưa được hoàn thành. May mắn thay là câu hỏi của tôi cũng được trả lời sớm và màn hình cũng được hoàn thành.

Khi toàn bộ coding xong hết thì đến giai đoạn viết testcase, và vẫn cách làm của anh leader như phần 5 tôi đã nói thì tôi vẫn tiếp tục trải qua những ngày tháng OT xuyên màn đêm không có hồi kết. Việc testing ở dự án này có khác một chút với những dự án khác là chúng tôi sẽ test trên Ipad, mà công ty chỉ cho được có một máy Ipad để test mà thôi. Sau khi test xong thì chụp ảnh màn hình kết quả lại sau đó copy vào máy tính và đưa vào file excel để làm bằng chứng. Tuy nhiên ở công ty này rất là bựa, tất cả các cổng USB của máy bàn đều được khóa hết, không thể cắm Ipad vào để chép hình sau khi test vào máy. Muốn mở phải xin phép IT, mà IT chỉ cho mở được có một máy, vì vậy test ở dự án này rất chi là cực khổ.

Và dự án thì cuối cùng cũng đã xong, như những bài trước thì sau khi kể về dự án thì tôi sẽ rút ra những bài học cho các bạn như sau.

1. Không phải thiết kế nào cũng đúng hoàn toàn, việc đọc và lý giải thiết kế rất là quan trọng để dự án của bạn hoàn thiện, tránh sau này khách hàng phải sửa tới sửa lui.
2. Khi bạn đặt câu hỏi thì bạn hãy đặt mình vào người đang được nhận câu hỏi. Chữ viết câu cú, hình ảnh phải đầy đủ, phải làm sao để khách hàng họ hiểu rõ nhất về nội dung mà bạn muốn hỏi. Đôi khi trong đầu bạn hiểu là bạn hỏi gì, tuy nhiên khách hàng họ lại không hiểu bạn muốn nói gì. Về việc tôi bị cho sửa đi sửa lại như vậy đó là việc hỏi không rõ ràng, tránh tình trạng trao đổi qua lại mà không bên nào hiểu nhau.

Các bạn nhớ like fanpage để theo dõi những bài viết mới nhất nhé.

Bài viết gốc được đăng tải tại chickencodes.com

Có thể bạn quan tâm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Định vị bản thân thời suy thoái

Định vị bản thân thời kỳ suy thoái

Bài viết được sự cho phép của BQT Kinh nghiệm lập trình

Suy thoái kinh tế (là sự tụt giảm hoạt động kinh tế trên cả nước, kéo dài nhiều tháng – NBER Mỹ), thì bạn biết rồi đấy. Để lại nhiều hệ lụy, hậu quả, ảnh hưởng xấu tới hầu hết mọi người.

  "Những sản phẩm bạn làm được ra mới là thước đo chính xác cho năng lực của bạn"
  10 Bí quyết tuyển dụng giúp bạn tăng tỉ lệ nhận offer tức thì!

Chúng ta nên làm gì trong lúc này?

1. Xem xét lại nguồn lực, năng lực của bản thân.
Nghe thì cũng không thuyết phục lắm, nhưng bạn có thể kiếm mấy bài test mà làm (MBTI, DISC, bài test chuyên ngành của bạn, test IQ, EQ, AQ…) để nhìn nhận lại 1 số khía cạnh năng lực.

Kể cả hiện tại CV vẫn yên ổn, chưa cần đi tìm việc thì cứ thử tìm CV mới, apply, rải CV, kết nối job, xem có bên nào “ngắm” bạn không, và mức lương bạn kỳ vọng có được đáp ứng không? Đi Pv nếu có thời gian để xem tình hình công ty khác như thế nào? Thị trường lao động hiện tại ra sao?
Bạn sẽ thấy nhiều cái hay đấy, đừng để nước đến chân mới nhảy! Hãy để những người khác khách quan đánh giá về bạn.

2. Xem xét lại mục tiêu, career path, hướng đi nghề nghiệp của mình.
Có mục tiêu rõ ràng cụ thể chưa? Cần điều chỉnh gì không?
Hiện tại có đang đi đúng hướng không?
Điều chỉnh tốc độ của bạn như thế nào?

Định vị bản thân thời suy thoái

3. Nâng cao năng lực bản thân, rèn luyện kỹ năng mới, học kiến thức mới…
Cái này thì khỏi phải bàn, nhiều người nói rồi, chính tôi cũng viết nhan nhản ở page này và public ở Linkedin, FB của tôi rồi.

4. Tìm hiểu kiến thức về thị trường lao động, luật lao động, các luật, chính sách liên quan.
Rất có ích để bảo vệ quyền lợi của ta trong những thời kỳ rủi ro, bấp bênh nhé.
Nhiều ngành sẽ trụ vững sau suy thoái, nhiều ngành sẽ bùng nổ và nhiều ngành bão hòa, lụi dần.
Đi kèm đó là nhiều người sẽ được săn đón, nhiều người vẫn dậm chân tại chỗ, nhiều người khác dần bị đào thải…

5. Luôn luôn cập nhật tình hình Kinh tế, chính trị, xã hội trong nước và Quốc tế.
Bắt được thông tin sớm là người khôn ngoan. Và bạn sẽ được lợi, nhiều là khác.
Không hề ít ví dụ, về những người, nhóm người có thể kiếm được những khoản tiền kếch sù sau mỗi cuộc khủng hoảng. (Đến nỗi mà ta phải phát sợ với những con số của họ nữa cơ – Tự tìm đọc thêm nhé)

6. Bonus: Bạn nên tìm hiểu về các học thuyết của Lão Tử, Trang Tử, Triết học khắc kỷ, Bạn sẽ thấy sáng ra nhiều điều vô cùng. Mình đảm bảo điều này.
(Các Học thuyết khác mình chưa tiếp cận nên mình không thể đưa ra được. Nếu bạn biết hãy chia sẻ thêm)

Vân D.

kinhnghiemlaptrinh.com

Bài viết gốc được đăng tải tại kinhnghiemlaptrinh.com

Có thể bạn quan tâm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Refresh trang web với Selenium webdriver

Refresh trang web với Selenium webdriver

Bài viết được sự cho phép của tác giả Tô Thị Vân Anh

Để refresh một trang web bạn thường hay dùng cách nào? Các cách nào cũng đều đơn giản lắm nè, nhấn vào cái biểu tượng xoay tròn ở trên thanh địa chỉ nhé, không thì chọn vào link trên thanh địa chỉ rồi nhấn enter, hay là nhấn nút F5 liên tùng tục :v

  Selenium là gì? Giới thiệu chi tiết về Selenium Automation Testing
  Làm việc với table trong Selenium Webdriver

À đấy là khi chúng ta làm bằng tay, còn với Selenium webdriver thì nó sẽ làm như thế nào? Có thể dùng được những cách trên kia không? Tất nhiên, tương tự thôi, bạn không cần phải code gì đặc biệt đâu, chỉ cần gọi những hàm có sẵn mà Selenium đã cho mình rồi thôi 😀 Mấy cái này bạn gõ tìm kiếm nhẹ nhàng trên Google cũng ra cả lố.

Refresh trang web với Selenium webdriver

Hôm nay mình sẽ tổng hợp lại mấy cách mà bạn có thể sử dụng để refresh lại một trang web với Selenium webdriver nhé.

1. Sử dụng method navigate.refresh()

driver.get("https://accounts.google.com/SignUp"); 

driver.navigate().refresh();

2. Sử dụng method navigate.to()

driver.get("https://accounts.google.com/SignUp"); 

driver.navigate().to(driver.getCurrentUrl());

3. Sử dụng method get()

driver.get("https://accounts.google.com/SignUp"); 

driver.get(driver.getCurrentUrl());

4. Sử dụng method sendkeys.Keys

driver.get("https://accounts.google.com/SignUp");

//ta có thể sử dụng textbox bất kỳ nào trên trang web, ở đây của mình là first name.
driver.findElement(By.id("firstName")).sendKeys(Keys.F5);

5. Sử dụng method sendKeys() với tham số là ASCII code của phím F5.

driver.get("https://accounts.google.com/SignUp");

driver.findElement(By.id("firstName")).sendKeys("\uE035");

6. Sử dụng class Action

Actions actions = new Actions(driver);

actions.keyDown(Keys.CONTROL).sendKeys(Keys.F5).perform();

Các bạn thoải mái áp dụng và để lại ý kiến đóng góp cho mình ở phần bình luận phía dưới nhé.

Không liên quan, nhưng mà hình như các bài cứ ngày càng bị ngắn đi thì phải. 😀 Không phải là do lười đâu, mà do vì cái giọng văn của mình nó không được cuốn hút như người ta, mặc dù tập tành viết lách cũng được đến gần 3 quý rồi, thế nhưng mà hình như chưa cải thiện được mấy. Chẳng hi vọng nữa, vì có hi vọng mà không làm gì thì cũng không có gì cải thiện được cả. Mà sẽ là bắt tay vào làm luôn, mình tin là viết đến bài thứ 100 thì chất lượng nó sẽ khác. Kaka.

Không nhân dịp gì cả, chỉ là do bài này ít nội dung quá nên lan man tí cho dài dài. Với cả đôi khi thì chúng ta sẽ gặp phải những bế tắc, mình bây giờ là đang trong cái mớ bế tắc đó đây. Loay hoay mãi chưa thoát ra được. Thôi nghe nhạc nhé.

Bài viết gốc được đăng tải tại vananhtooo.wordpress.com

Có thể bạn quan tâm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Windows Terminal sẽ được cập nhật UI cho phần cài đặt

Windows Terminal sẽ được cập nhật UI cho phần cài đặt

Bài viết được sự cho phép của tác giả Kiên Nguyễn

Tuy luôn là hệ điều hành máy tính phổ biết nhất trên thế giới nhưng có một sự thật rằng, Windows 10 không được các lập trình viên sử dụng nhiều như các đối thủ macOS và Linux.

Nguyên nhân vô cùng đơn giản, Windows từ xưa tới nay chỉ có Command Prompt (CMD) và Windows PowerShell chứ không hỗ trợ bashshell – một trong những công cụ quan trọng của các lập trình viên – giống các hệ điều hành sử dụng nhân Linux như macOs, Ubuntu, Elementary OS,…

  10 điều bạn có thể làm với Linux mà bạn không thể làm với Windows
  40 phím tắt dành cho người dùng Windows

Bạn nào có học về lập trình, server thì sẽ hiểu vấn đề này nghiêm trọng ra sao, cái này mình sẽ giải thích chi tiết hơn ở một bài viết khác cho các bạn.

Windows Terminal sẽ được cập nhật UI cho phần cài đặt

Và để bắt kịp xu thế, Microsoft đã tung ra Windows Subsystem for Linux (WSL) và ứng dụng Windows Terminal để giúp tương tác dễ dàng hơn với WSL.

Windows Terminal nhận được khá nhiều đánh giá tích cực đến từ giới lập trình nói riêng và đa số người dùng nói chung. Và mới đây thì Microsoft đã hé lộ những hình ảnh đầu tiên về giao diện đồ họa (UI) cho phần cài đặt của ứng dụng này.

#1. Windows Terminal sắp có giao diện đồ họa cho phần cài đặt

Windows Terminal là một phần mềm được tạo ra bởi Microsoft, cho phép người dùng làm việc với WSL, PowerShell và Command Prompt ngay trong một cửa sổ phần mềm.

Bên cạnh đó, nó cũng nâng cao trải nghiệm sử dụng với tính năng mở nhiều tab, shell, phím tắt và một giao diện người dùng được thiết kế theo phong cách fluent design vô cùng đẹp mắt và cuốn hút.

Có được điều này là nhờ Windows Terminal sử dụng công nghệ Hardware Accelerated GPU, DirectWrite/ DirectX để render các ký tự trên màn hình nên nó thực sự đẹp hơn Command Prompt hay PowerShell rất nhiều.

Windows Terminal sẽ được cập nhật UI cho phần cài đặt

Khác với những ứng dụng khác của Microsoft, Windows Terminal là một ứng dụng mã nguồn mở và được đăng trên GitHub.

Link tại đây: https://github.com/microsoft/terminal

Nghĩa là mọi người đều có có được mã nguồn của ứng dụng, đề xuất thay đổi sửa chữa các chức năng, đóng góp ý kiến cho đội ngũ phát triển phần mềm của Microsoft để ứng dụng này tốt hơn.

Mình cũng đã có hướng dẫn cài đặt Windows Terminal chi tiết ở trên blog rồi, các có thể xem lại bài viết đó tại đây nha !

Windows Terminal sẽ được cập nhật UI cho phần cài đặt

Quay trở lại với vấn đề chính, ngày 22/1/2021 vừa qua, Kayla Cinnamon – Giám đốc chương trình (Program Manager) của Microsoft đã hé lộ những hình ảnh đầu tiên về giao diện người dùng cho phần cài đặt của ứng dụng Terminal mới trên trang Twitter cá nhân của mình.

Nếu như bạn đã từng hoặc đang dùng Windows Terminal thì sẽ đều biết, mọi cài đặt của ứng dụng này đều được lưu trữ và chỉnh sửa thông qua một tập tin có tên settings.json.

Bạn có thể mở nó lên bằng tổ hợp phím Ctrl + , ở cửa sổ Windows Terminal hoặc click vào dấu mũi tên chọn Settings.

File này chứa tất cả những cài đặt về giao diện, profile shell, thiết lập các phím tắt và nhiều thứ khác nữa, và để sửa được thì bạn cần có chút kiến thức về lập trình còn không buộc phải lên Google hoặc diễn dàn hỗ trợ để tìm kiếm mà thôi.

Thực tế là nó cũng không quá phức tạp và đều có hướng dẫn ở ngay trong file settings.json rồi !

Windows Terminal sẽ được cập nhật UI cho phần cài đặt

Còn ở trên phiên bản mới nhất của Terminal, khi bạn mở Windows Settings thì phần cài đặt sẽ xuất hiện như một tab thông thường của Windows Terminal thay vì mở file settings.json như trước đây.

Thiết kế giao diện thì hoàn toàn tương tự của Windows Settings và những ứng dụng khác của Windows 10, mục đích là để tạo cảm giác quen thuộc cho người dùng.

Nói chung thì Microsoft vẫn đang nỗ lực mang lại cho người dùng một trải nghiệm sử dụng liền mạch và đồng bộ hóa về mặt giao diện.

Vẫn thiết kế với phong cách Fluent Design : thanh điều hướng được làm trong suốt, các góc cạnh của cửa sổ nay đã được bo tròn hơn thay vì vuông vức như trước kia.

Và mình để ý thấy tất cả những ứng dụng mới của Microsoft đều như vậy, tất nhiên mình không thích điều này lắm.

Windows Terminal sẽ được cập nhật UI cho phần cài đặt

Với phần cài đặt mới này, bạn sẽ có thể nhanh chóng truy cập và thay đổi tất cả các thiết lập như giao diện, profile mặc định, màu sắc, định dạng văn bản theo ý muốn với một thanh điều hướng ở bên trái cửa sổ cài đặt.

Phần thiết lập các profile Terminal, PowerShell, WSL hay Azure sẽ được tác ra riêng và nhờ giao diện đồ họa thì việc chỉnh sửa nay trở nên vô cùng dễ dàng và nhanh chóng.

Windows Terminal sẽ được cập nhật UI cho phần cài đặt

Được cập nhật giao diện đồ họa không có nghĩa là file settings.json ban đầu sẽ biến mất, tuy bạn không cần phải chỉnh sửa trực tiếp trong file này nữa nhưng nó vẫn chịu trách nhiệm lưu tất cả các thiết lập mà bạn đã thay đổi bằng giao diện đồ họa.

Nhưng có vẻ phần cài đặt với giao diện này phù hợp với người mới làm quen với Windows Terminal hơn, vì nó rất trực quan và dễ sử dụng.

Còn nếu bạn là một người đã có kinh nghiệm thì có lẽ cũng không cần thiết với bạn lắm, nhưng nếu cảm thấy việc thiết lập bằng file settings.json tiện hơn thì bạn cứ áp dụng thôi, tội gì.

Cách mở file settings.json rất đơn giản, nếu để ý bạn sẽ thấy ở dưới cùng thanh điều hướng bên trái có dòng Open JSON file => bạn bấm vào đó để mở file settings.json và chỉnh sửa như bình thường.

Ngoài ra, bạn có thể chỉnh sửa trực tiếp file mà không cần mở Windows Terminal bằng cách truy cập vào thư mục bên dưới nha.

%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\ 

Windows Terminal sẽ được cập nhật UI cho phần cài đặt

Tất nhiên, mọi thứ mình chia sẻ ở trên đây đều chỉ mới có trên phiên bản Windows Terminal thử nghiệm nội bộ chứ không phải bản thử nghiệm có trên Microsoft Store.

Vậy nên có lẽ chúng ta phải chờ một khoảng thời gian khá lâu nữa mới có thể trải nghiệm được. Dù sao mình cũng rất mong đến ngày đó 😛

#2. Lời kết

Như vậy là mình và các bạn đã cùng dạo một vòng về giao diện UI mới trong phần cài đặt Windows Terminal rồi.

Nó sẽ rất hữu ích và phù hợp với những anh em mới tiếp cận ứng dụng này, còn người dùng lâu năm thì mình không chắ có hữu ích hơn cho họ hay không, nhưng dù sao, giao diện người dùng mới này vẫn rất tuyệt phải không các bạn.

Bạn thấy như thế nào về diện mạo mới của Windows Terminal? Đừng quên để lại bình luận bên dưới để chia sẻ và thảo luận với mọi người nhé.

CTV: Nguyễn Thanh Tùng – Bài viết gốc được đăng tải tại blogchiasekienthuc.com

Có thể bạn quan tâm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Tại sao PHP lại chậm? Vậy có những cách nào để tối ưu PHP?

Tại sao PHP lại chậm? Vậy có những cách nào để tối ưu PHP?

Bài viết được sự cho phép của tác giả Lê Chí Dũng

Một thời gian làm việc trên PHP mình nhận thấy rằng về phương diện sử dụng là rất tốt và dễ dàng sử dụng viết sau cũng chạy kiểu dữ liệu tự do nhưng về perfomance thì thật sự chưa tốt. Chính vì thế sau một thời gian sử dụng sẽ thấy perfomance giảm rõ rệt, tuy nhiên ta cũng có một số cách để cải thiện vấn đề này.

Tại sao PHP lại chậm?

Để trả lời vấn đề này ta sẽ quay lại cơ chế hoạt động cơ bản của ngôn ngữ server này. PHP là ứng dụng execute từ PHP script sang ngôn ngữ máy (Assembly -> mã nhị phân) để xử lý mà trước khi đến execute thì phải qua bộ core của PHP để parse PHP script và compiler nửa chính vì qua nhiều bước để đến execute nên nếu quá nhiều xử lý thì sẽ rất chậm với lại web hiện nay thì lượng truy cập tăng rất nhanh nên chậm là điều khó tránh khỏi.

Tại sao PHP lại chậm? Vậy có những cách nào để tối ưu PHP?

Vậy có những cách nào để tối ưu PHP?

1. Dùng kết hợp Cache OpCode (APC Cache) và Cache data (Memcached, Redis,…)

Cache Opcode điển hình là APC Cache, Opcache. Nó là cache file được tạo ra và lưu trên ổ đĩa, sau khi compile xong hiểu nôm na là thay thế 2 bước (Parse + Compile) thay vì phải qua 3 bước nặng nề để chuyển PHP thành ngôn ngữ máy để chạy thì mình chỉ tốn 2 bước nhẹ nhàn lấy cache ra chuyển thành ngôn ngữ máy để chạy. Nên tốc độ sẽ nhanh hơn đến 50%.

Tại sao PHP lại chậm? Vậy có những cách nào để tối ưu PHP?

Cache data điển hình là Memche, memched, redis,… Nó là cache data được lưu trên Ram (bộ nhớ tạm) sau khi truy vấn đến Database. Nếu ai dùng PHP với database thì sẽ hiểu.

Tìm việc làm PHP đãi ngộ tốt trên TopDev

2. Dùng HHVM

HHVM được viết tắt từ “HipHop Virtual Machine” là một nền tảng xử lý PHP (tương tự như PHP-FPM) được phát triển bởi Facebook. HHVM giúp tăng tốc PHP nhờ sử dụng máy xử lý ảo dựa trên trình biên dịch just-in-time (JIT).

Cơ chế hoạt động của HHVM khác nhiều so với PHP-FPM.

Theo cơ chế của PHP-FPM (VM):

Parsing toàn bộ PHP script khủng lồ -> Compile toàn bộ PHP script đã parse -> Execute toàn bộ PHP script đã compile

=> Vì phải xử lý lượng lớn script nên tốc độ khá ì chờ xử lý lớn.

Theo cơ chết JIT trong HHVM:

Parsing từng PHP script nhỏ -> Compile từng PHP script đã parse -> Execute từng PHP script đã compile.

=> Vì xử lý lượng script nhỏ nên tốc độ nhanh.

Tuy nhiên ở PHP7 thì PHP7-FPM đã có nhiều cải tiến theo cơ chế HHVM nên tốc độ khá nhanh.

  10 Frameworks tốt nhất hiện nay cho PHP
  11 cách tăng tốc nhanh cho WordPress bằng file wp-conig.php

3. Dùng framework Yaf Framework hoặc Phalcon PHP Framework

Yaf Framework hoặc Phalcon là PHP Framework được viết bằng ngôn ngữ lập trình C, sau đó được biên dịch thành một PHP extension(thành phần mở rộng cho PHP).

Tại sao PHP lại chậm? Vậy có những cách nào để tối ưu PHP?

Tổng kết

Từ các cách tối ưu trên bạn có thể phối hợp tất cả lại với nhau để tối ưu từ một hệ thống nền PHP tồi tàn chậm chạp trở nên nhanh như tia chóp.

Bài viết gốc được đăng tải tại lcdung.top

Có thể bạn quan tâm:

Xem ngay những tin đăng tuyển dụng IT mới nhất trên TopDev

Tổng hợp một số cách mở 1 link trong tab mới với Selenium Webdriver

Tổng hợp một số cách mở 1 link trong tab mới với Selenium Webdriver

Bài viết được sự cho phép của tác giả Tô Thị Vân Anh

Trong bài viết này chúng ta sẽ cùng nhau xem lại một vài cách để thực hiện mở 1 link trong tab mới, trong tiếng anh là “Open a link in new tab”, quá quen thuộc khi mà chúng ta nhấn chuột phải ở trang web đang làm việc để mở đường dẫn trong một tab khác. Và vì thế nên là mình sẽ đi vào giải quyết vấn đề luôn mà không nói lan man nữa. 😀

  JavaScript Executor trong Selenium Webdriver
  Selenium là gì? Một số kinh nghiệm làm việc với Selenium

1.  Sử dụng javascript với cú pháp như sau:

((JavascriptExecutor) driver).executeScript
                   ("window.open('http://accounts.google.com/','_blank');");

Muốn mở đến đường dẫn nào thì bạn chỉ cần thay đường link trên bằng 1 đường dẫn tương ứng khác là được. Nhưng mà cái này sẽ gặp vấn đề khi chạy với trình duyệt IE – IE nó sẽ hiện một dòng hỏi bạn là có muốn mở tab khác hay không, nên là sẽ không tiện nếu như mà dùng cách này với IE. :3

2. Sử dụng cách dưới này 😀

Cú pháp như sau:

String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,Keys.RETURN);
driver.findElement(By.linkText("urlLink")).sendKeys(selectLinkOpeninNewTab);

Hoặc tách bước ở dòng thứ 2 ra như này thì sẽ sáng sủa hơn:

WebElement urlLink = driver.findElement(By.linkText("Overview"));
String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,Keys.RETURN);  
urlLink.sendKeys(selectLinkOpeninNewTab);

Với cách này thì chạy ok với trình duyệt Firefox, Chrome nhưng không focus vào tab mới mở ra – còn trên trình duyệt IE thì bật ra cửa sổ mới – cũng “don’t know why!” 😀

Để nó focus sang cửa sổ mới thì các bạn thêm đoạn code phía dưới này vào, và chúng ta có được đoạn code đầy đủ như này nhé:

//Linktext của đường dẫn mới
WebElement urlLink = driver.findElement(By.linkText("Overview")); 

//Mở đường dẫn mới ở một tab mới
String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL, Keys.RETURN); 
urlLink.sendKeys(selectLinkOpeninNewTab);

//Focus sang tab mới
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles()); 
driver.switchTo().window(tabs.get(1));

3. Sử dụng robot class:

Như chúng ta đều đã nghe nói đến Robot class trong Selenium rồi, đơn giản dễ hiểu thì robot được sử dụng để giả lập các sự kiện liên quan đến thao tác trên bàn phím, hay các thao tác click của chuột, nên là với trường hợp này ở đây, ta có thể tưởng tượng như đang làm bằng tay và giả lập cho code của chúng ta cũng sẽ làm như vậy nhờ Robot. Đầu tiên nhấn Control + t để mở tab mới, sau khi tab mới được mở ra thì ta sẽ chuyển focus chuột vào tab mới này và mở link mới ở tab đó thôi.

Các bạn có thể tham khảo đoạn code phía dưới để hình dung rõ hơn nhé! Ban đầu dùng đoạn code dưới này để chạy thì nó chỉ chạy được đến bước là mở tab mới có focus vào tab mới này, nhưng không thể nào mở được cái link mới, không thể hiểu tại sao dù đã google tìm rất nhiều thì code cũng chỉ có vậy – vấn đề đối với cả FF và Chrome. :3

Chạy đi chạy lại nhiều lần, bỗng dưng vẫn đoạn code đó thì Chrome lại được, và mình nhanh chóng thử lại với FF thì lại không được, vẫn chết đoạn get(index), quay lại với Chrome thì lại không chạy được nữa, lúc này mới nhớ ra nhét thử sleep() vào, thì lại ngon lành cho cả hai! 😀 – Không thể tin được =))

//Ra lệnh cho rô-bốt mở tab mới      
Robot r = new Robot();                           
r.keyPress(KeyEvent.VK_CONTROL);  
r.keyPress(KeyEvent.VK_T);  
r.keyRelease(KeyEvent.VK_CONTROL);  
r.keyRelease(KeyEvent.VK_T);  
   
//Đoạn này để nhảy sang tab mới 
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles()); 
driver.switchTo().window(tabs.get(1)); 

//Sleep thần thánh
Thread.sleep(2000);

//Mở link mới trên tab mới
driver.get("https://jmeter.apache.org/usermanual/index.html");

4.    Sử dụng class Action

Mình đã test trên IE11, FF58,59 và Chrome 66 , với FF, Chrome thì không chạy được, mà đối với IE thì nó lại mở ra một cửa sổ mới, không hiểu tại sao. :3

Dưới đây là đoạn code các bạn có thể tham khảo và góp ý cho mình:

WebElement link = driver.findElement(By.linkText("Installing Apache JMeter in Windows XP"));
Actions act = new Actions(driver);
act.contextClick(link).sendKeys(Keys.ARROW_DOWN).
                       sendKeys(Keys.ARROW_DOWN).
                       sendKeys(Keys.ENTER).build().perform();

5. Bonus thêm 1 cách khác – cách này thì chạy ngon…

Đầu tiên sử dụng Javaexecutor để mở 1 tab trống mới,

((JavascriptExecutor)driver).
executeScript(“window.open(‘about:blank’, ‘-blank’)”);

Sau đó, thực hiện nhảy sang tab mới với cú pháp:

 ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
 driver.switchTo().window(tabs.get(1));

Và cuối cùng là dán cái link mới vào cái tab này là được:

driver.get("https://jmeter.apache.org/usermanual/index.html");

Và trên đây là những cách mà mình đã đào bới được trên google, phát hiện ra là những cái này khá là phụ thuộc vào trình duyệt mà chúng ta sử dụng vì thế các bạn có thể linh động với trình duyệt để lựa chọn các cách cho phù hợp nhé!

Bài viết tham khảo và tổng hợp từ tè le các nguồn thu thập được trên internet điển hình là từ stackoverflow và nhiều trang khác nữa 😀

Bài viết gốc được đăng tải tại vananhtooo.wordpress.com

Có thể bạn quan tâm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Chuẩn bị gì khi phỏng vấn vị trí kỹ sư kiểm thử phần mềm?

Chuẩn bị gì khi phỏng vấn vị trí kỹ sư kiểm thử phần mềm?

Bài viết được sự cho phép của vntesters.com

Phỏng vấn là việc không thể tránh khỏi, do đó hãy chuẩn bị cho thật tốt các bạn nhé. Vậy thực sự là cần chuẩn bị những gì? Dưới đây là kinh nghiệm của riêng mình, các bạn góp ý thêm nhé.

  10 tuyệt kĩ từ trang web nhanh nhất thế giới (phần 1)
  3 workhack để duy trì năng lượng tích cực tại công sở cho kĩ sư phần mềm

Chuẩn bị cho cuộc phỏng vấn!!

Điều hiển nhiên là bạn cần phải có kiến thức về kiểm thử phần mềm, bên cạnh đó bạn cũng cần cập nhật các công cụ hỗ trợ kiểm thử và xu hướng mới nhất trong ngành công nghiệp kiểm thử phần mềm.

Hãy nhớ rằng, đây là một lĩnh vực dễ thay đổi, do đó, những điều mà bạn đã học trong chương trình đào tạo có thể đã trở nên lỗi thời vào thời điểm phỏng vấn.

Kiểm tra kỹ lưỡng trước khi xuất hiện trong các cuộc phỏng vấn và tạo ra một sơ yếu lý lịch/CV tốt, sẽ giúp bạn gây ấn tượng tốt cho nhà tuyển dụng.

Chuẩn bị trước câu trả lời cho những câu hỏi mà bạn rất có thể sẽ phải đối mặt.

Những câu hỏi này không thể đảm bảo sự thành công của bạn trong phỏng vấn, nhưng chắc chắn có thể cung cấp cho bạn một cái nhìn tổng quát về một cuộc phỏng vấn có thể sẽ như thế nào.

Thử nghiệm trên sản phẩm (On Product Testing)

  • Các trường hợp kiểm thử (test cases) để kiểm thử sản phẩm (project testing)?
  • Đâu là những lợi thế khi kiểm thử sản phẩm của công ty so với kiểm thử như là dịch vụ cho công ty khác?
  • Sự khác biệt giữa kiểm thử dựa trên sản phẩm (product based testing) và kiểm thử dựa trên dự án (project based testing)?
  • Kế hoạch kiểm thử (test plan) là gì? Hãy đưa ví dụ kế hoạch kiểm thử cho màn hình đăng nhập?
  • Hãy phân biệt kiểm thử 1 sản phẩm và kiểm thử ứng dụng web (web-based application) bất kỳ?
  • Sự khác biệt giữa web based testing và client server testing?
  • Giải thích ý nghĩa của mô hình thác nước trong việc phát triển một sản phẩm phần mềm.

Về đảm bảo chất lượng (On Quality Assurance)

  • Làm thế nào để đảm bảo chất lượng của sản phẩm phần mềm?
  • Bạn sẽ làm gì nếu bạn không có đủ thời gian để kiểm thử?
  • Các hoạt động bình thường của các chuyên gia bảo đảm chất lượng là gì?
  • Sự khác biệt giữa high level design và low level design?
  • Sự khác biệt giữa QC & QA?
  • Các thành phần chính của nguy cơ (risk) là gì?
  • Khi nào bạn nói dự án kiểm thử của bạn hoàn thành? Nêu tên các yếu tố.
  • Các thủ tục (procedures) để kiểm tra nút tìm kiểm của một ứng dụng web thủ công (manually) và sử dụng công cụ kiểm thử tự động (automation test tool)
  • Hãy giải thích: Release Acceptance Testing, Forced Error Testing, Data Integrity Testing, System Integration Testing.
  • Kiểm tra khả năng tương thích (compatibility testing) trên IE & FF khác nhau như thế nào?

Kịch bản thử nghiệm (On Testing Scenarios)

  • Làm thế nào để bạn biết rằng tất cả các kịch bản thử nghiệm được bao phủ (covered)?
  • Hãy giải thích: kịch bản thử nghiêm (Testing Scenario), kiểm thử dựa trên kịch bản (Scenario based testing). Đưa ví dụ.
  • Sự khác biệt giữa kịch bản và trường hợp kiểm thử (scenario vs test case)?
  • Sự khác biệt giữa smoke testing và sanity testing?
  • Giải thích end to end scenario

Kiểm thử tự động (On Automated Testing)

  • Bạn biết những công cụ kiểm thử tự động nào?
  • Mô tả vài vấn đề/khó khăn mà bạn đã gặp phải khi làm việc với công cụ kiểm thử tự động
  • Thủ tục để bạn lập kế hoạch kiểm thử tự động là gì?
  • Ý kiến của bạn về quan điểm “kiểm thử tự động nâng cao hiệu quả kiểm thử phần mềm”
  • Hãy nêu và giải thích những thuộc tính chính của kiểm thử tự động.
  • Bạn có nghĩ rằng kiểm thử tự động có thể thay thế kiểm thử thủ công?
  • Làm thế nào để 1 công cụ kiểm thử tự động được lựa chọn?
  • Làm thế nào để bạn đánh giá các công cụ kiểm thử tự động?
  • Theo bạn lợi ích chính của kiểm thử tự động là gì?
  • Mô tả những vấn đề chung của kiểm thử tự động
  • Những hoạt động kiểm thử nào bạn cần tự động hoá?
  • Những kỹ năng cần thiết cho kiểm thử tự động là gì

Theo dõi Lỗi (On Bug Tracking)

  • Có lỗi nào có mức độ nghiêm trọng cao nhưng ưu tiên thấp không (và ngược lại, mức độ nghiêm trọng thấp nhưng độ ưu tiên lại cao)?
  • Giải thích vòng đời của lỗi (bug life cycle)
  • Các loại lỗi mà ta thường gặp trong bất kỳ 1 dự án phần mềm là gì?
  • Bạn có ý gì khi nói “Tái tạo một lỗi” (reproduce a bug)? Bạn sẽ làm gì, nếu lỗi này không tái tạo được?
  • Bạn viết tiêu đề lỗi và mô tả lỗi như thế nào?
Các bạn có thể đọc phần trả lời tham khảo ở đây.
Hãy nhớ rằng, kiểm thử phần mềm là một lĩnh vực rộng lớn và thực sự là không thiếu những câu hỏi có thể được hỏi để phỏng vấn ứng viên. Vậy nên hãy nâng cao kiến thức của mình, chuẩn bị cẩn thận, thể hiện chính mình và bạn sẽ toả sáng. Chúc các bạn thành công!
Bài viết gốc được đăng tải tại vntesters.com
Có thể bạn quan tâm:
Xem thêm Việc làm Developer hấp dẫn trên TopDev

5 lý do sinh viên IT nên học Tiếng Anh ngay lập tức

5 lý do sinh viên IT nên học Tiếng Anh ngay lập tức

Bài viết được sự cho phép của tác giả Kiên Nguyễn

Trong những năm trở lại đây, công nghệ thông tin đang dần trở thành một trong số ngành học “hot” nhất, được nhiều bạn học sinh quan tâm và theo học nhất… Cũng đúng thôi, thời đại của công nghệ mà lại.

ly-do-sinh-vien-it-nen-hoc-tieng-anh (1)

Qua những số liệu thống kê thì chúng ta có thể thấy, một trong những nguyên nhân hàng đầu khiến các bạn trẻ đổ xô vào học công nghệ thông tin đó chính là: Cơ hội việc làm nhiều và lương ngành này tương đối cao so với mặt bằng chung.

Nhưng tất nhiên, bất cứ ngành học nào cũng có những ưu và nhược điểm riêng. Ngành IT này cũng vậy. Nếu bạn không trang bị cho mình những kỹ năng khác nữa thì bạn cũng sẽ khó tiến xa hơn được.

  "Ngành IT này học rất dễ, tài liệu ko bao giờ thiếu. Quan trọng là phải có đam mê và chịu cày"
  Mẫu CV IT tiếng Anh hấp dẫn nhà tuyển dụng

Vâng, và một trong số đó chính là khả năng ngoại ngữ của bạn. Ở trong bài viết này mình sẽ chia sẻ với các bạn 5 lý do cực kỳ thuyết phục để bạn học ngoại ngữ (tiếng Anh) ngay lập tức, và ngay bây giờ…

#1. Để đọc hiểu tài liệu

Ở mức cơ bản nhất, các bạn nên trang bị cho mình khả năng đọc hiểu tài liệu tiếng Anh.

ly-do-sinh-vien-it-nen-hoc-tieng-anh (2)

Các bạn không cần phải Ielts 7, 8 chấm, vì để đọc hiểu tài liệu chuyên ngành thì phần đa các bạn sẽ gặp các từ ngữ chuyên ngành mà thôi.

Thậm chí là các bạn sẽ không có thời gian để đọc hết một tài liệu từ a-z, từng chữ một đâu, hãy học cách đọc nhanh và đọc ý chính của file tài liệu đó.

Vậy tại sao lại là tài liệu tiếng Anh mà không phải là một ngôn ngữ khác? Vâng, câu trả lời đơn giản vì hầu hết các kiến thức công nghệ nếu có tài liệu thì đều được viết bằng tiếng Anh để mọi người trên thế giới có thể dễ dàng tiếp cận. Ngôn ngữ chung mà !

Việc đọc hiểu được tài liệu tiếng Anh sẽ giúp bạn tiếp thu kiến thức một cách chính thống thay vì đọc qua các bản dịch tiếng Việt, có thể tồn tại nhiều sai sót.

Hơn nữa tài liệu tiếng Việt cũng rất ít so với tài liệu tiếng Anh. Vì dân số Việt Nam có 100 triệu người thôi, còn dân số sử dụng Tiếng Anh thì cả tỷ người. Vì vậy muốn thực sự phát triển thì ngôn ngữ Tiếng Anh là bắt buộc phải có..

#2. Cơ hội để làm việc với các doanh nghiệp nước ngoài

ly-do-sinh-vien-it-nen-hoc-tieng-anh (3)

Khi bạn đã có thể đọc hiểu tài liệu tiếng Anh rồi, nếu bạn có thêm khả năng giao tiếp nữa (tất nhiên là cũng không cần quá xuất sắc) thì cơ hội làm việc với các doanh nghiệp nước ngoài của bạn là khá cao.

Với nền kinh tế thị trường như hiện nay, việc hội nhập và hợp tác với doanh nghiệp nước ngoài ngày càng nhiều. Đơn cử như việc nếu bạn không biết tiếng Anh thì bạn chỉ có thể làm việc trong nước. Bạn không có lựa chọn nào khác.

Còn nếu bạn biết tiếng Anh và doanh nghiệp bạn làm việc là doanh nghiệp nước ngoài thì mình đảm bảo cơ hội đi onsite của bạn là rất lớn.

Chính vì vậy, trong quá trình tuyển dụng các doanh nghiệp nước ngoài hoặc liên doanh với nước ngoài họ thường ưu tiên các ứng viên có khả năng ngoại ngữ hơn.

#3. Cơ hội đi du học và giành học bổng nước ngoài

ly-do-sinh-vien-it-nen-hoc-tieng-anh (4)

Du học và học bổng nước ngoài có lẽ là mơ ước của nhiều bạn sinh viên nói chung và các bạn sinh viên học công nghệ thông tin nói riêng.

Đơn giản vì du học giúp chúng ta có thêm những trải nghiệm mới, được học tập và phát triển ở những nền giáo dục tiên tiến hơn, chất lượng hơn.

Nhưng để được đi du học, đặc biệt là với các bạn sinh viên công nghệ thông tin thì yêu cầu về ngoại ngữ lại càng phải cao hơn nữa.

Các bạn không những phải giỏi về chuyên ngành (vốn dĩ đã rất khó) mà khả năng ngoại ngữ cũng phải tương đối tốt mới đủ điều kiện để đi du học hoặc nhận học bổng.

Không đơn thuần là kỹ năng đọc tài liệu và khả năng giao tiếp, mà bạn sẽ phải có thêm cả kỹ năng viết tốt thì mới có thể theo học được các chương trình nước ngoài.

Đặc biệt nhiều bạn sinh viên còn tham gia viết papers – là các bài báo khoa học thì yêu cầu về ngoại ngữ và chuyên ngành lại càng phải chuyên sâu hơn nữa.

#4. Cơ hội được tiếp cận với các công nghệ mới

ly-do-sinh-vien-it-nen-hoc-tieng-anh (5)

Công nghệ mới luôn là một trong những điều mà các bạn học công nghệ rất quan tâm.

Khi một công nghệ ra đời thì đồng nghĩa với việc nó sẽ giải quyết một bài toán nào đó mà các công nghệ trước đó chưa giải quyết được hoặc giải quyết chưa tốt.

Vậy bài toán cần giải ở đây: ai là người hiểu và áp dụng công nghệ đó nhanh hơn thì sẽ có nhiều cơ hội hơn.

Và tất nhiên rồi, công nghệ nào cũng có tài liệu – sách hướng dẫn và nó đều bằng tiếng Anh, không chệch đi đâu được.

Khi đó, nếu bạn biết tiếng Anh bạn sẽ tiếp cận công nghệ đó nhanh hơn, làm chủ công nghệ và chiếm ưu thế trên thị trường. Điều này vô cùng quan trọng nhé các bạn !

#5. Cơ hội nhận lương ngàn $

ly-do-sinh-vien-it-nen-hoc-tieng-anh (6)

Và cuối cùng là câu chuyện về tiền lương, cũng là một trong những nguyên nhân chính mà nhiều bạn trẻ chọn học ngành IT này.

Vì thực tế, lương cao là một trong những động lực lớn nhất giúp chúng ta phấn đấu. Nhưng lương cao đồng nghĩa với việc bạn phải đem lại nhiều giá trị hơn cho doanh nghiệp.

Nếu bạn để ý, trong các bài tuyển dụng của doanh nghiệp thì họ thường ưu tiên các ứng viên có ngoại ngữ và sẵn sàng đưa ra một mức lương nhỉnh hơn so với các ứng viên không có ngoại ngữ.

Vì họ hiểu rằng, khi bạn có ngoại ngữ thì khả năng cao là bạn sẽ đem lại nhiều giá trị cho công ty của họ.

#6. Kết luận

Okay, trên đây là 5 lý do khiến sinh viên IT nên học tiếng Anh ngay lập tức. Không chỉ sinh viên IT không đâu, trong thời buổi công nghệ này, nếu bạn không biết tiếng Anh thì sẽ là một thiệt thòi rất lớn so với người khác đấy.

Có thể còn nhiều lý do khác nữa, nhưng chung quy lại thì việc trang bị ngoại ngữ cho bản thân là một chiến lược mà các bạn sinh viên nên chuẩn bị cho mình. Chắc chắn là sẽ khó khăn, nhưng nó sẽ được đền đáp một cách xứng đáng cho bạn sau này !

Bài viết gốc được đăng tải tại blogchiasekienthuc.com

Có thể bạn quan tâm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Spring Boot là gì? Demo dự án Spring Boot trong 5 phút

Giới thiệu về Spring Boot. Spring Boot là gì?

Bài viết được sự cho phép của tác giả Lê Chí Dũng

Spring là một framework quen thuộc với các lập trình viên, nhưng Spring vẫn tồn tại nhiều nhược điểm khi hoạt động đơn lẻ. Spring boot ra đời để cải thiện những hạn chế này của Spring. Cùng TopDev tìm hiểu Spring boot là gì? Các tính năng nổi bật và demo cách tạo một dự án Spring Boot chỉ trong 5 phút.

Spring Boot là gì?

Spring Boot được xây dựng dựa trên nền của Spring Framework, phát triển bởi ngôn ngữ Java. Nó là một phiên bản có tính tự động hoá cao hơn và đơn giản hơn của Spring. Spring Boot khiến cho việc tạo và khởi chạy ứng dụng chỉ diễn ra trong vòng vài phút.

Lịch sử phát triển của Spring Boot

Spring Boot được phát triển bởi Pivotal Software, với phiên bản đầu tiên (Spring Boot 1.0) được phát hành vào tháng 4 năm 2014. Mục tiêu ban đầu của Spring Boot là giải quyết những hạn chế và phức tạp trong việc cấu hình Spring Framework truyền thống. Spring Framework, mặc dù rất mạnh mẽ và linh hoạt, nhưng yêu cầu nhiều cấu hình thủ công và có thể trở nên cồng kềnh khi xây dựng các ứng dụng phức tạp.

Trước khi Spring Boot ra đời, việc cấu hình một ứng dụng Spring thường đòi hỏi nhiều file XML hoặc các class Java cấu hình, gây khó khăn cho việc bảo trì và phát triển. Spring Boot được giới thiệu như một cách tiếp cận đơn giản và hiệu quả hơn, với các cấu hình tự động và các công cụ hỗ trợ như Spring Initializr, giúp nhà phát triển bắt đầu dự án mới nhanh chóng chỉ với một vài cú nhấp chuột.

Từ khi ra mắt, Spring Boot đã nhanh chóng trở thành một trong những framework phổ biến nhất trong cộng đồng Java, được sử dụng rộng rãi trong nhiều loại ứng dụng khác nhau, từ các ứng dụng web đơn giản đến các hệ thống microservices phức tạp. Sự phát triển và cải tiến liên tục của Spring Boot đã giúp nó trở thành một phần không thể thiếu trong hệ sinh thái Spring, giúp các nhà phát triển xây dựng các ứng dụng hiện đại một cách dễ dàng và nhanh chóng hơn.

Sự khác biệt giữa Spring và Spring Boot

Nếu bạn đã từng phát triển ứng dụng Java, chắc hẳn bạn đã trải qua sự phức tạp và tốn công sức khi thực hiện các tác vụ với cơ sở dữ liệu. Đó thực sự là một quá trình không mấy dễ dàng! Tuy nhiên, sự ra đời của Spring Boot đã giúp đơn giản hóa các tác vụ phức tạp liên quan đến cơ sở dữ liệu.

Sự khác biệt giữa Spring và Spring Boot

Spring là một tập hợp các framework con, bao gồm nhiều module khác nhau như Spring MVC, Spring JDBC, Spring AOP, Spring ORM và Spring Test. Tính năng cốt lõi của Spring Framework chính là Dependency Injection (DI), cho phép các đối tượng được tiêm (injected) vào nhau một cách linh hoạt mà không cần phải tạo mới hoặc quản lý chúng trực tiếp. Điều này làm cho ứng dụng trở nên dễ dàng quản lý và mở rộng hơn.

Mặc dù Spring đã giúp cho việc phát triển các ứng dụng Java trở nên dễ dàng hơn, nhưng vẫn còn đó sự phức tạp và độ rộng lớn mà framework này mang lại. Việc học Spring Framework từ đầu có thể là một hành trình dài và đầy thách thức đối với nhiều lập trình viên. Đó cũng chính là lúc Spring Boot tỏa sáng với những cải tiến vượt trội.

Spring Boot ra đời với mục tiêu đơn giản hóa việc phát triển các ứng dụng Java bằng cách giảm thiểu cấu hình thủ công và cung cấp các thiết lập mặc định hợp lý. Thay vì phải cấu hình một cách phức tạp và chi tiết như trong Spring, Spring Boot giúp lập trình viên khởi tạo và chạy ứng dụng một cách nhanh chóng chỉ với một vài dòng mã. Spring Boot còn tích hợp sẵn các công cụ như máy chủ nhúng (embedded server), hỗ trợ cấu hình bằng YAML, và tự động hóa nhiều tác vụ mà trước đây cần phải làm thủ công.

Những tính năng nổi bật của Spring Boot

Dưới đây là những tính năng nổi bật của Spring Boot giúp nó trở thành một lựa chọn hàng đầu cho các nhà phát triển.

Web Development

Spring Boot rất phù hợp cho phát triển các ứng dụng web nhờ module Spring chuyên dụng cho web. Framework này hỗ trợ tạo ra các máy chủ HTTP độc lập (self-contained HTTP server) bằng cách tích hợp các máy chủ nhúng như Tomcat, Jetty hoặc Undertow. Với module spring-boot-starter-web, bạn có thể nhanh chóng bắt đầu và vận hành ứng dụng của mình.

SpringApplication

SpringApplication là một lớp cung cấp cách tiện lợi để khởi động ứng dụng Spring từ phương thức main của Java. Bạn có thể bắt đầu ứng dụng của mình chỉ bằng cách gọi phương thức tĩnh run():

public static void main(String[] args){  
    SpringApplication.run(ClassName.class, args);  
}

Điều này giúp việc khởi chạy và quản lý vòng đời ứng dụng trở nên đơn giản và trực quan hơn.

Application Events and Listeners

Spring Boot sử dụng các sự kiện để xử lý nhiều tác vụ khác nhau, cho phép bạn tạo các tệp factory để thêm các listener vào ứng dụng. Bạn có thể tham chiếu các listener này bằng cách sử dụng khóa ApplicationListener. Điều này giúp bạn dễ dàng quản lý và theo dõi các sự kiện xảy ra trong ứng dụng.

Admin Support

Spring Boot cung cấp các tính năng hỗ trợ quản trị cho ứng dụng, cho phép bạn truy cập và quản lý ứng dụng từ xa. Tính năng này có thể được kích hoạt đơn giản bằng cách sử dụng thuộc tính spring.application.admin.enabled.

Externalized Configuration

Spring Boot cho phép bạn “externalize” cấu hình của ứng dụng để có thể dễ dàng làm việc với các môi trường khác nhau. Ứng dụng sử dụng các tệp YAML để externalize cấu hình, giúp bạn dễ dàng quản lý và thay đổi cấu hình mà không cần chỉnh sửa mã nguồn.

Properties Files

Spring Boot cung cấp một tập hợp phong phú các thuộc tính ứng dụng có thể được cấu hình thông qua các tệp properties của dự án. Ví dụ, bạn có thể cấu hình cổng máy chủ bằng cách đặt server-port = 8082. Điều này giúp tổ chức các thuộc tính của ứng dụng một cách dễ dàng và có hệ thống.

YAML Support

YAML cung cấp một cách tiện lợi để xác định cấu hình theo cấu trúc phân cấp. Nó là một tập hợp con của JSON và được Spring Boot hỗ trợ tự động thông qua lớp SpringApplication. YAML là một sự thay thế hiệu quả cho các tệp properties truyền thống, đặc biệt khi cần cấu hình phức tạp.

Type-safe Configuration

Spring Boot cung cấp cấu hình kiểu an toàn, giúp quản lý và xác thực cấu hình của ứng dụng một cách chính xác. Điều này đảm bảo rằng các cấu hình của ứng dụng luôn an toàn và không gây ra lỗi tại runtime. Bạn cũng có thể sử dụng các annotation được cung cấp bởi thư viện này để tăng cường khả năng cấu hình.

Logging

Spring Boot sử dụng Common logging cho tất cả các hoạt động ghi log nội bộ. Các phụ thuộc về logging được quản lý mặc định và không nên thay đổi trừ khi cần thiết phải tùy chỉnh. Điều này giúp quá trình ghi log của ứng dụng trở nên ổn định và dễ dàng quản lý.

Spring Security

Các ứng dụng Spring Boot, vốn là các ứng dụng web dựa trên Spring, mặc định được bảo mật với xác thực cơ bản (basic authentication) trên tất cả các endpoint HTTP. Spring Boot cung cấp một tập hợp phong phú các endpoint để phát triển các ứng dụng bảo mật, giúp bảo vệ dữ liệu và quyền truy cập vào hệ thống.

Giờ đây với Spring Boot, chúng ta có thể tạo dự án Spring một cách nhanh chóng và cấu hình cũng đơn giản dùng Sublime Text để phát triển luôn khỏi cần cài đặt eclipse hay netbean.

Tóm tắt số tính năng nổi bật của Spring Boot:

  • Tạo các ứng dụng Spring độc lập
  • Nhúng trực tiếp Tomcat, Jetty hoặc Undertow (không cần phải deploy ra file WAR)
  • Các starter dependency giúp việc cấu hình Maven đơn giản hơn
  • Tự động cấu hình Spring khi cần thiết
  • Không sinh code cấu hình và không yêu cầu phải cấu hình bằng XML …
  Cách sử dụng properties trong tập tin cấu hình của Spring

Demo một project Spring Boot trong 5 phút

Workflow của Spring Boot

Workflow của Spring Boot

Workflow của Spring Boot hoạt động như sau:

  1. Client tạo một HTTP request.
  2. Class Controller nhận HTTP request.
  3. Controller hiểu loại request và xử lý nó.
  4. Nếu cần, nó gọi class Service.
  5. Class Service sẽ xử lý logic nghiệp vụ, với dữ liệu từ database
  6. Nếu mọi thứ hoạt động tốt, ta sẽ trả về một trang JSP.

Khởi tạo một dự án Spring boot

Để phát triển một ứng dụng web cơ bản HelloWorld sử dụng Spring framework bạn sẽ cần ít nhất 5 công đoạn sau;

  • Tạo một project sử dụng Maven với các dependency cần thiết của Spring MVC và Servlet API.
  • Một tập tin web.xml để khai báo DispatcherServlet của Spring MVC.
  • Một tập tin cấu hình của Spring MVC.
  • Một class Controller trả về một trang “Hello World” khi có request đến.
  • Cuối cùng là phải có một web server dùng để triển khai ứng dụng lên chạy.

Trong các công đoạn này, chỉ có công đoạn tạo một class Controller thì có thể khác cho các ứng dụng khác nhau vì mỗi ứng dụng có một yêu cầu khác nhau. Còn các công đoạn khác thì như nhau.

Đầu tiên, các bạn hãy cài đặt Spring Boot CLI trước. Bạn nào chưa biết cách cài đặt thì có thể tham khảo trên page spring boot.

Kế tiếp, mình sẽ dùng Spring Boot CLI để tạo một ứng dụng web cơ bản bằng câu lệnh sau:

-d=web: sử dụng Spring Boot Web Dependencychi tiết về Dependency

Kế tiếp, mình sẽ tạo ứng dụng web tên là helloWorld như sau:

Khởi tạo dự án bằng Spring boot

Kế tiếp, ta sẽ được cấu trúc của một Maven project như sau:

Khởi tạo dự án bằng Spring boot

Kế tiếp, dùng command line di chuyển đến thư mục và chạy ứng dụng với câu lệnh sau:

mvn spring-boot:run

trong lần đầu chạy có thể hơi lâu khoảng 1-2 phút.

Khởi tạo dự án bằng Spring boot

Kế tiếp, Spring Boot tự động làm hết mọi thứ để chạy ứng dụng web trên Tomcat với port mặc định là 8080.

Khởi tạo dự án bằng Spring boot

Kế tiếp, dùng trình duyệt và truy cập đến http://localhost:8080 sẽ thấy kết quả sẽ như sau:

Khởi tạo dự án bằng Spring boot

Chúng ta sẽ thấy lỗi 404 Not Found là vì trong project mà chúng ta vừa tạo không có một Controller nào xử lý cho request đến.

Bây giờ, nếu các bạn tạo một class HelloWorldController trong folder \src\main\java\app\controller\home:

Kế tiếp, run lại câu lệnh mất khoảng 15 giây:

mvn spring-boot:run

Sau khi reload lại browser sẽ thấy:
Khởi tạo dự án bằng Spring boot

Tổng kết lại khi sử dụng Spring Boot chúng ta không mất qua nhiều công đoạn và thời gian để tạo một web project đẻ chạy. Mọi thứ đã được Spring Boot tự động làm hết như sử dụng các framework PHP như Symfony, Laravel,… cái mà chúng ta quan tâm chỉ là develop Controller. Một quan điểm khác của mình là thấy Java web sau khi build chạy rất nhanh hơn tốc độ PHP sau khi dùng APC Cache :P. Tuy nhiên, đó làm cảm nhận của mình còn việc nhanh hơn hay không thì mình sẽ làm 1 vài so sánh performance để kiểm nghiệm lại 😀

Bài viết gốc được đăng tải tại lcdung.top

Có thể bạn quan tâm:

Xem thêm tuyển lập trình Spring Boot hấp dẫn trên TopDev

Hibernate là gì? Sao phải dùng nó thay JDBC?

Hibernate là khỉ gì? sao phải dùng nó thay JDBC

Bài viết được sự cho phép của tác giả Lê Chí Dũng

Nếu đã biết về JDBC thì JDBC là công cụ kết nối DB rất thô sơ được dùng từ rất lâu và có nhiều vấn đề. Hibernate ra đời nhằm giải quyết vấn đề tồn tại và tối ưu hơn.

  Ethereum là gì? Tìm hiểu cơ bản về Blockchain (P1)
  Fresher là gì? Các kỹ năng và công việc của Fresher

Hibernate là khỉ gì?

Hibernate là một thư viện ORM (Object Relational Mapping) mã nguồn mở giúp lập trình viên viết ứng dụng Java có thể map các objects (pojo) với hệ quản trị cơ sở dữ liệu quan hệ,
và hỗ trợ thực hiện các khái niệm lập trình hướng đối tượng với cớ dữ liệu quan hệ.
Hibernate Workflow

Persistence object
Chính là các POJO object map với các table tương ứng của cơ sở dữ liệu quan hệ. Nó như là những “thùng xe” chứa dữ liệu từ ứng dụng để ghi xuống database, hay chứa dữ liệu tải lên ứng dụng từ database.
Session Factory
Là một interface giúp tạo ra session kết nối đến database bằng cách đọc các cấu hình trong Hibernate configuration. Mỗi một database phải có một session factory.

Tỉ dụ nếu ta sử dụng MySQL, và Oracle cho ứng dụng Java của mình thì ta cần có một session factory cho MySQL, và một session factory cho Oracle.

Hibernate Session
Mỗi một đối tượng session được Session factory tạo ra sẽ tạo một kết nối đến database.
Transation
Là transaction đảm bảo tính toàn vẹn của phiên làm việc với cớ sở dữ liệu. Tức là nếu có một lỗi xảy ra trong transaction thì tất cả các tác vụ thực hiện sẽ thất bại.
Query
Hibernate cung cấp các câu chuy vấn HQL (Hibernate Query Language) tới database và map kết quả trả về với đối tượng tương ứng của ứng dụng Java.

Nếu bạn muốn làm việc với Hibernate thử hãy xem Tutorial hướng dẫn sử dụng Hibernate cho người mới bắt đầu tại lcdung.top

Sau phải dùng Hibernate thay JDBC

1. Object Mapping

Với JDBC ta phải map các trường trong bảng với các thuộc tính của Java object một cách “thủ công”. Với Hibernate sẽ hỗ trợ ta map một cách “tự động” thông qua các file cấu hình map XML hay sử dụng các anotation.
JDBC sẽ map Java object với table như sau.

//rs là ResultSet trả về từ câu query get dữ liệu bảng user.
List users=new ArrayList();
while(rs.next()) {
     User user = new User();
     user.setUserId(rs.getString("userNo"));
     user.setName(rs.getString("firstName"));
     user.setEmail(rs.getString(“lastName”));
     users.add(user);
 }

Cũng với table user đó sử dụng các anotaion để Hibernate có thể map một cách “tự động” như sau.

@Entity
@Table(name = "user")
public class UserModel {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private BigInteger userNo;
    @NotEmpty
    @Column(name = "lastName")
    private String email;
    public BigInteger getUserNo() {
        return this.userNo;
    }
    public void setUserNo(BigInteger userNo) {
        this.userNo = userNo;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}

2. HQL

Hibernate cung cấp các câu lệnh truy vấn tương tự SQL, HQL của Hibernate hỗ trợ đầy đủ các truy vấn đa hình như, HQL “hiểu” các khái niệm như kế thừa (inheritance), đa hình (polymorphysm), và liên kết (association)

3. Database Independent

Code sử dụng Hibernate là độc lập với hệ quản trị cơ sở dữ liệu, nghĩa là ta không cần thay đổi câu lệnh HQL khi ta chuyển từ hệ quản trị CSDL MySQL sang Oracle, hay các hệ quản trị CSDL khác… Do đó rất dễ để ta thay đổi CSDL quan hệ, đơn giản bằng cách thay đổi thông tin cấu hình hệ quản trị CSDL trong file cấu hình.

//used MySQL
com.mysql.jdbc.Driver
// used Oracle
oracle.jdbc.driver.OracleDriver

Ví dụ khi ta muốn lấy 10 bản ghi dữ liệu của một table từ 2 CSDL khác nhau

Với JDBC ta có câu truy vấn như sau.

#MySQL
SELECT column_name FROM table_name ORDER BY column_name ASC LIMIT 10; 
#SQL Server 
SELECT TOP 10 column_name FROM table_name ORDER BY column_name ASC;

Với Hibernate câu truy vấn không thay đổi với cả 2 CSDL.

Session.CreateQuery("SELECT E.id FROM Employee E ORDER BY E.id ASC").SetMaxResults(10).List();

4. Minimize Code Changes

Khi ta thay đổi (thêm) cột vào bảng,
Với JDBC ta phải thay đổi những gì:

  • Thêm thuộc tính vào POJO class.
  • Thay đổi method chứa câu truy vấn “select”, “insert”, “update” để bổ sung cột mới.
    Có thể có rất nhiều method, nhiều class chứa các câu truy vấn như trên.
    Với Hibernate ta chỉ cần:
  • Thêm thuộc tính vào POJO class.
  • Cập nhật Hibernate XML mapping file để thêm map column – property.
    Ta chỉ thay đổi duy nhất 2 file trên.

5. Lazy Loading

Với những ứng dụng Java làm việc với cơ sở dữ liệu lớn hàng trăm triệu bản ghi, việc có sử dụng Lazy loading trong truy xuất dữ liệu từ database mang lại lợi ích rất lớn. Nó giống như việc ta có thể bẻ từng chiếc đũa của bó đũa to thay vì bẻ cả bó đũa.
Ví dụ những file tài liệu do người dùng upload được lưu ở bảng document. Bảng user có quan hệ một-nhiều với bảng document. Trong trường hợp này class User là class cha, class Document là class con. Bảng document nhanh chóng đầy lên theo thời gian. Mỗi khi ta lấy thông tin user và docment tương ứng từ database giả sử dữ liệu document là rất lớn, để ứng dụng không bị chậm vì phải mất nhiều bộ nhớ để chứa toàn bộ document của toàn bộ user, ta áp dụng Lazy loading cho từng user như sau.

// Declaring fetch type for one to many association in your POJO
@OneToMany(mappedBy = "user", fetch = FetchType.LAZY)
private Set documents = new HashSet();
// To fetch user with document use initialize() method as follows
User user = (User)session.get(User.class, new Integer(100));
//This code will fetch all products for user 100 from database 'NOW'
documents = user.getDocuments();

6. Loại bỏ Try-Catch Blocks

Sử dụng JDBC nếu lỗi xảy khi tao tác với database thì sẽ có exception SQLexception bắn ra. Bởi vậy ta phải sử dụng try-catch block để xử lý ngoại lệ.
Hibernate xử lý việc này giúp bạn bằng cách nó override toàn bộ JDBC exception thành Uncheck xeption, và ta không cần viết try-catch trong code của mình nữa.

7. Quản lý commit/rollback Transaction

Transaction là nhóm các hoạt động (với database) của một tác vụ. Nếu một hoạt động không thành công thì toàn bộ tác vụ không thành công.
Với JDBC lập trình viên phải chủ động thực hiện commit khi toàn bộ hoạt động của tác vụ thành công, hay phải rollback khi có một hoạt động không thành công để kết thúc tác vụ.
Với Hibernate thì ta không cần quan tâm đến commit hay rollback, Hibernate đã quản lý nó giúp ta rồi.

8. Hibernate Caching


Hibernate cung cấp một cơ chế bộ nhớ đệm, giúp giảm số lần truy cập vào database của ứng dụng càng nhiều càng tốt. Điều này sẽ có tác dụng tăng performance đáng kể cho ứng dụng của bạn. Hibernate lưu trữ các đối tượng trong session khi transation được kích hoạt. Khi một query được thực hiện liên tục, giá trị được lưu trữ trong session được sử dụng lại. Khi một transaction mới bắt đầu, dữ liệu được lấy lại từ database và được lưu trữ session. Hibernate cung cấp hai cấp độ Cach, mình sẽ có bài chi tiết hơn về Cach trong Hibernate.

Nếu bạn muốn làm việc với Hibernate thử hãy xem Tutorial hướng dẫn sử dụng Hibernate cho người mới bắt đầu tại lcdung.top

Bài viết gốc được đăng tải tại lcdung.top

Có thể bạn quan tâm:

Xem thêm Việc làm ngành cntt hấp dẫn trên TopDev

Xác định đối tượng giao diện UI trong ứng dụng Android

Xác định đối tượng giao diện UI trong ứng dụng Android

Bài viết được sự cho phép của vntesters.com

Vì Appium được phát triển từ Selenium nên Appium cũng hỗ trợ các cách xác định đối tượng UI tương tự như Selenium, bao gồm: ID, Xpath, Class, Name…. Một điểm đặc điểm khác biệt là, trong lập trình ứng dụng Android, chúng ta không sử dụng CSS để định dạng các đối tượng UI nên Appium không hỗ trợ phương thức xác định đối tượng UI thông qua CSSSelector.

  18 designer hàng đầu dự đoán về xu hướng UI/ UX trong năm 2022
  7 thủ thuật bỏ túi cực hay cho các nhà tuyển dụng IT

Sử dụng UIAutomatorViewer

Đối với ứng dụng Android, chúng ta sử dụng công cụ UIAutomatorViewer để có thể đọc được mã nguồn giao diện UI của ứng dụng. Tương tự, chúng ta cũng có một công cụ tương ứng như vậy đối với ứng dụng iOS. Công cụ UIAutomatorViewer có thể được tìm thấy trong thư mục tools sau khi cài đặt Android SDK.

  1. Kết nối thiết bị thực/ảo với máy tính PC
  2. Khởi động ứng dụng trên thiết bị và đi đến màn hình cần thiết
  3. Khởi động công cụ UIAutomatorViewer trên PC
  4. Nhấn nút Device Screenshot để hiển thị thông tin của đối tượng UI

Dưới đây là ví dụ dùng UIAutomatorViewer với thiết bị thật, ứng dụng ví dụ các bạn có thể tải từ Google Play:

Sử dụng Appium Inspector

Trong ứng dụng Appium Server, hệ thống Appium hỗ trợ một công cụ riêng dùng để xác định các đối tượng UI. Công cụ này chỉ có thể sử dụng sau khi khởi động Appium Server và thiết lập các cấu hình để kết nối với thiết bị. Điểm đặc biệt của công cụ này là chúng ta có thể tương tác (chạm và truyển ký tự) với thiết bị đồng thời có thể ghi lại các hành động tương tác và phát sinh các mã kiểm thử.

  1. Kết nối thiết bị thực/ảo với máy tính PC
  2. Khởi động ứng dụng Appium Server
  3. Khởi động một phiên hoạt động với các thông tin cấu hình tương ứng của thiết bị và ứng dụng (package và activity)
  4. Khởi động chức năng ghi nhận hành động (nếu cần)
  5. Lựa chọn các đối tượng UI trên phần thông tin và tương tác (nếu cần)

Dưới đây là ví dụ dùng Appium Inspector với thiết bị ảo, ứng dụng ví dụ các bạn có thể tải từ đây:

Vài phương thức xác định đối tượng UI với Appium

  • ID: Trong ứng dụng Android, chúng ta có resource-id và appium sử dụng giá trị này trong quá trình xác định đối tượng UI – ID.
  • XPath: Cấu trúc của các đối tượng UI trong ứng dụng được sắp xếp với định dạng XML, vậy nên chúng ta có thể sử dụng XPath cùng với các cú pháp và hàm xử lý của XPath để xác định đối tượng UI một cách chính xác và đơn nhất/unique.
  • Classname: Khác với Selenium, class là một thuộc tính của thẻ HTML, với Appium, giá trị Class chính là tên của thẻ XML.
  • Name/Text: Tương ứng với giá trị ký tự được hiển thị trên giao diện của ứng dụng.

Bài viết gốc được đăng tải tại vntesters.com

Có thể bạn quan tâm:

Xem thêm tuyển android lương cao hấp dẫn trên TopDev

Selenium webdriver: sự khác nhau giữa get() và navigate().to()

Selenium webdriver: sự khác nhau giữa get() và navigate().to()

Bài viết được sự cho phép của tác giả Tô Thị Vân Anh

Để đáp ứng đủ số lượng bài viết – mục tiêu đã đặt ra từ hồi đầu năm, mà nay thì đã là tuần thứ 20 – tức là nửa cuối của tháng 5 rồi, nên mình phải gấp rút chuẩn bị từ bây giờ ( -.- thật là biết nhìn xa trông rộng quá đi :v ), và vì vậy thì mình không thể lười thêm nữa. Hễ có ý tưởng là mình sẽ gõ ngay và luôn, như bài này chẳng hạn. Tất cả chỉ là sự tình cờ và mình chưa hề có ý định là sẽ nói về cái này!

  Selenium là gì? Giới thiệu chi tiết về Selenium Automation Testing
  Mã hóa mật khẩu trong Selenium Webdriver

Không lan man nữa, bài viết hôm nay sẽ cùng các bạn làm sáng tỏ sự khác nhau giữa hai method get() và navigate() trong Selenium nhé.

google-chrome-logo

get(“URL”)

Một method vô cùng, vô cùng quen thuộc với tất cả chúng ta là get(“url”), ở đây bạn sẽ đưa vào đường dẫn của trang web, ứng dụng web mà bạn muốn mở nó lên thông qua selenium, ví dụ:

driver.get(“http://www.google.com&#8221😉

Tức là khi bạn đưa câu lệnh trên vào thì sau khi trình duyệt được bật lên, nó sẽ đi đến ngay trang web đấy. Ok chỗ này rồi nhé. Với method GET này thì nó sẽ tải về toàn bộ trang web, page source hay text của trang web đó. Method này nó sẽ chờ cho đến khi toàn bộ dữ liệu của trang web được lấy xuống trước khi quay trở lại thực hiện các bước tiếp theo trong script của chúng ta. Tuy nhiên sẽ gặp phải rắc rối khi mà trang web sử dụng nhiều AJAX thì Webdriver khó có thể xác định được là việc load đấy đã được hoàn thành hay chưa, và giải pháp cho vấn đề này chính là sử dụng Wait. 😀

navigate().to(“URL”)

Và như bạn đã thấy là để thực hiện điều hướng đến một trang web ta sử dụng câu lệnh get (driver.get(“http://www.example.com“)), và nó cũng đơn giản chỉ là một cách viết khác của câu lệnh này mà thôi:

driver.navigate().to(“http://example.com&#8221😉

Nhấn mạnh với các bạn rằng hai method get() và navigate().to() thực hiện một việc giống y như nhau. Khác nhau là một cái được viết nhanh gọn hơn cái kia mà thôi. Nhớ đoạn này để còn đi phỏng vấn nhỡ đâu được hỏi!

Navigate interface cũng có mở rộng hỗ trợ chúng ta có thể điều hướng từ trang web hiện tại quay lại trang web trước đó, hoặc sau đó với method và cú pháp như sau:

driver.navigate().forward();

driver.navigate().back();

Tặng thêm các bạn hình này, dịch được thì tốt nhé, tóm lại là ý nghĩa của thằng get() và navigate().to() là như nhau :v

DnQyD

Các bạn cũng có thể tham khảo trên hướng dẫn của Selenium theo đường dẫn này https://docs.seleniumhq.org/docs/03_webdriver.jsp nhé!

Đây là đoạn mà mình tìm được:

Capture

Lười dịch thì chỉ cần chú ý câu này “navigate().to() and “get()” do exactly the same thing“. thế là được nhé. Tại sao người ta dùng get() nhiều hơn, và tại sao dường như nó phổ biến hơn? Thì tại vì gõ từ get nhanh hơn =))

Chúc các bạn đầu tuần vui vẻ nhé! Mùa hè đã chính thức bắt đầu, đừng vì nóng quá mà bỏ bê học hành nhé! hehe

Bài viết gốc được đăng tải tại vananhtooo.wordpress.com

Có thể bạn quan tâm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev

3 thứ quyết định đến sự thành bại của bạn

3 thứ quyết định đến sự thành bại của bạn

Bài viết được sự cho phép của tác giả Kiên Nguyễn

Cuộc sống luôn tồn tại vô số những thứ tác động đến chúng ta, mọi quyết định và chọn lựa của bạn ngày hôm nay đều ảnh hưởng đến kết quả của con người bạn ngày mai.

Có 3 thứ ảnh hưởng đến bản thân chúng ta nhiều nhất đó chính là: Bạn bè (nhóm bạn), thầy hiền trí (người thầy dẫn đường) và tủ sách tinh hoa.

  10 câu nói cực hay về lập trình
  10 kênh Youtube học lập trình không thể bỏ qua dành cho Junior Web Developer / Designer

#1. Nhóm bạn tốt

Ngạn ngữ Anh có câu: “Hãy cho tôi biết bạn của anh là ai, tôi sẽ chỉ cho anh biết, anh là người như thế nào”

3 thứ quyết định đến sự thành bại của bạn (1)

Từ trước đến nay, người thành công luôn muốn kết giao với những người xứng tầm với mình hoặc nổi trội hơn mình.

Vì họ biết một điều rằng, mây tầng nào chơi với mây tầng đó. Ở cạnh một người tích cực, xuất chúng thì bạn có thể tầm thường được sao?

Mình đã lắng nghe và nói chuyện với một số người. Họ là những người rất trẻ, khao khát được thay đổi và trở lên khác biệt hơn.

Mình luôn chia sẻ với họ về câu chuyện của bản thân mình, từ một cô sinh viên nhút nhát trở thành một cô gái tự tin giao tiếp ra sao từ khi tham gia vào một hội nhóm những con người năng động, tích cực và giỏi giang.

Chỉ có một từ khóa để tìm bạn tốt. Đó chính là “chủ động”, bạn không thể ngồi yên mà đợi một ai đó đến giúp bạn trở lên tốt hơn được.

Điều đó là không thể. Vậy nên, nếu bạn muốn mình thay đổi thực sự nhanh, hãy nhờ đến ngoại lực, là những người bạn tốt. Hãy cùng nhau rèn luyện và thay đổi.

Một ví dụ dễ thấy đó chính là trong quân đội, đầu vào của mọi người có thể khác biệt rất nhiều, nhưng sau một thời gian, họ đều có thể chạy bộ hàng chục km, bơi lội và luyện võ. Chính môi trường và bạn bè đã thúc đẩy họ rèn luyện không ngừng.

Một số ideas cho bạn: một số hội nhóm trên facebook, diễn đàn, câu lạc bộ, lớp học kĩ năng. Bạn có thể nhắn tin cho một vài người và bày tỏ mong muốn bạn muốn tham gia một hội nhóm nào đó. Tỉ lệ bạn tìm được nơi phù hợp sẽ rất cao.

Đọc thêm bài viết liên quan:

#2. Thầy hiền trí

Tôi có một quan điểm, mà cho đến bây giờ tôi vẫn giữ nó. Đó chính là “nếu đã đi học, phải học những người giỏi nhất”.

3 thứ quyết định đến sự thành bại của bạn (2)

Tư duy sai lệch khi bạn mới thay đổi sẽ rất “nguy hiểm” vì lúc này chúng ta như tờ giấy trắng vậy, những nét bút đầu tiên sẽ là nền tảng cho mai sau. Vì thế, để giảm thiểu rủi do thì bạn nên tìm những người đứng đầu trong một lĩnh vực để học hỏi.

Vậy tìm thầy hiền trí ở đâu? Bạn cần phải nghe ngóng và học hỏi những người đi trước trong lĩnh vực mà bạn muốn học.

Hãy hỏi, thu thập ý kiến và kết hợp với những thông tin trên Internet, xem thử cách họ truyền đạt ra sao, có phù hợp với bạn hay không. Vì mỗi thầy sẽ có một phong cách truyền tải riêng.

Hiện nay, có rất nhiều khóa học được tổ chức, online hay offline, miễn phí hay trả phí đều có cả. Bạn có thể tham khảo và đăng kí học nhé.

Hoặc nếu bạn là sinh viên, chưa có tài chính để có thể tham gia những khóa học offline, bạn có thể tìm những người thầy bạn muốn học trên Unica hoặc Edumall, học phí sẽ đỡ mắc hơn.

Mình đã đăng kí rất nhiều khóa học trên hai nền tảng đó, cộng với theo dõi kênh Youtube của người thầy mình ngưỡng mộ. Tư duy từ đó mà thay đổi nhiều, con người cũng khôn ngoan hơn trước.

#3. Tủ sách tinh hoa

Bạn có biết cách để gặp được các vĩ nhân không?

3 thứ quyết định đến sự thành bại của bạn (3)

Mình nói bạn nghe, hoàn toàn có cách đấy. Mà nó còn rất đơn giản nữa là đằng khác. Bạn hoàn toàn có thể tâm sự, nhìn được cả cuộc đời, hay là nói chuyện với các vĩ nhân qua các trang sách.

Bạn thừa biết rồi đấy, cơ hội để chúng ta gặp trực tiếp họ gần như bằng 0. Vậy nên chúng ta chỉ có thể gặp họ gián tiếp qua các trang sách, và đó cũng chính là cách tốt nhất để chúng ta hiểu hơn về con người họ, học được những bài học đắt giá từ họ.

Nhưng có một hiện tượng rất đáng buồn, theo thống kê của Cục Xuất bản Việt Nam thì trung bình một người Việt chỉ đọc 1 cuốn sách/năm. Trong khi đó những quốc gia phát triển, trung bình họ đều đọc ít nhất 10 cuốn sách/năm..

Nguyên nhân là do người Việt ta không có thói quen đọc sách từ nhỏ. Đọc là một nét văn hóa, và nó cũng là một việc cần được rèn giũa thì mới thành thói quen.

Vậy làm thế nào để bắt đầu thói quen đọc sách “nhàm chán” này?

1/ Bạn có thể đọc những cuốn sách đơn giản, theo phong cách của bạn, ngắn gọn và dễ hiểu để bắt đầu trước. Điều đó sẽ giúp bạn có cảm giác yêu sách hơn.

Mình bắt đầu thích đọc sách sau khi đọc cuốn “Trên đường băng” (Tony buổi sáng). Cuốn này văn phong khá vui vẻ và dễ hiểu. Sau đó mình mới chuyển sang một số cuốn về lĩnh vực mình quan tâm.

2/ Hãy bắt đầu với từng bước nhỏ, lúc đầu ngại đọc thì bạn hãy đặc mục tiêu là đọc vài trang sách trước (mỗi ngày 1 trang sách chẳng hạn), rồi nâng lên dần.

Một tip nhỏ mình dành cho bạn đó là khi chọn sách ở giai đoạn khai mở, cuốn nào bạn thấy thích thú nhất thì hãy cố gắng đọc một cách trọn vẹn. Nếu cuốn nào không phù hợp thì dừng lại, đừng quá ép bản thân phải đọc hết.

3/ Chơi với người đọc sách: Họ sẽ cùng chia sẻ với bạn và truyền cho bạn nhiều động lực trong quá trình đọc, và khi đọc được điều gì đó hay ho và mới lạ, bạn cũng có thể chia sẻ lại với họ, điều đó sẽ rất thú vị và thích thú, khiến bạn yêu việc đọc hơn.

Mình hi vọng sau khi đọc xong bài viết này, bạn sẽ chủ động đi tìm ngay cho mình những người đồng hành! Hãy luôn tìm kiếm và giữ cho mình khao khát được phát triển bạn nhé!

Bài viết gốc được đăng tải tại blogchiasekienthuc.com

Có thể bạn quan tâm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Lựa chọn sự nghiệp vững chắc, nắm bắt cơ hội gặt hái thành công tại South Telecom

Lựa chọn sự nghiệp vững chắc, nắm bắt cơ hội gặt hái thành công tại South Telecom

Dẫn đầu với các dịch vụ viễn thông dành cho doanh nghiệp, South Telecom được biết đến với các sản phẩm chất lượng, sử dụng công nghệ tiên tiến, có mặt tại nhiều quốc gia trên thế giới. Đây đồng thời cũng là một hướng đi tiềm năng cho các nhân tài công nghệ tìm kiếm cơ hội phát triển sự nghiệp.

South Telecom – Đồng hành tạo nên các giải pháp thành công cho doanh nghiệp

Công ty cổ phần phần mềm viễn thông Miền Nam – South Telecom là đơn vị chuyên cung cấp các giải pháp – dịch vụ liên lạc (Communication) và cộng tác (Collaboration) được biết đến với các sản phẩm chất lượng, sử dụng công nghệ tiên tiến, có mặt tại nhiều quốc gia phát triển trên thế giới.

Các dịch vụ Tổng đài – Worldfone của South Telecom được áp dụng tại nhiều Doanh nghiệp với các bộ phận hoạt động: Chăm sóc khách hàng, Telesales, Marketing,… trải khắp các lĩnh vực: Tài chính, Kinh Doanh – Bán lẻ, Giáo Dục, Y tế, Ngân hàng, Vận chuyển và Logistic. 

Với nỗ lực không ngừng, sau hơn 15 năm, South Telecom đã mang đến cho các doanh nghiệp những giải pháp và dịch vụ tiện ích và đáng tin cậy. Trong đó, công nghệ VoIP và dịch vụ SMS Brandname đã giúp công ty tạo dựng tiếng vang, thu hút sự hợp tác từ các đối tác tên tuổi: Yamaha, Revolabs, OneKing… Từ đó khẳng định được vị thế trên thị trường viễn thông, đồng thời mang lại những tiện ích tối đa cho khách hàng.

Đền đáp xứng đáng cho những nỗ lực trong suốt nhiều năm cống hiến, “gia đình” South Telecom đã từng bước xây dựng thương hiệu với các sản phẩm chất lượng, uy tín, được minh chứng bởi các giải thưởng giá trị:

  • Vinh danh là “Nhà cung cấp dịch vụ Cloud hàng đầu Việt Nam” năm 2019.
  • Danh hiệu “Doanh nghiệp Công nghệ thông tin Viễn thông hàng đầu Việt Nam” 2 năm liên tiếp 2018, 2019.

Không dừng lại ở đó, South Telecom luôn sẵn sàng cho những dự án mới, đón đầu xu hướng góp phần làm nên thành công của nhiều khách hàng doanh nghiệp. Để hoàn thiện được mục tiêu đó, công ty không ngừng tìm kiếm những thành viên mới vào đội ngũ tài năng. Khởi động 2021, South Telecom đặc biệt có loạt cơ hội tốt gửi đến những “người anh em Techies” có cùng chí hướng, cùng đam mê:

Lựa chọn sự nghiệp vững chắc, nắm bắt cơ hội gặt hái thành công tại South Telecom

Cùng South Telecom đón đầu xu hướng mới, ghi dấu ấn tại thị trường Viễn thông

Sự xuất hiện của các sản phẩm dịch vụ Tổng đài ảo, SMS Brandname, Call Center,… đến từ South Telecom đang dần thay thế các phương pháp truyền thống, giải quyết hiệu quả “bài toán” về dịch vụ quảng cáo, tư vấn, chăm sóc khách hàng tại mỗi doanh nghiệp.

  • Tổng đài ảo là dịch vụ thoại trên nền tảng IP hiện đại, cho phép doanh nghiệp nhận cuộc gọi của khách hàng mọi lúc mọi nơi, thông qua các phần mềm softphone hỗ trợ, mang lại nhiều tiện ích cho người dùng.
  • SMS Brandname là phương thức quảng bá thương hiệu gần gũi, tiết kiệm nhân lực, tiếp cận đối tượng nhanh chóng với chi phí hợp lý, đáp ứng  nhu cầu truyền tải thông tin đến các thuê bao.
  • Call Center là một dạng tổng đài chăm sóc khách hàng thực hiện việc xử lý, điều phối, giám sát và quản lý các giao dịch qua điện thoại của doanh nghiệp, đang trở thành một xu hướng phát triển mạnh mẽ ở nhiều quốc gia trong đó có Việt Nam.

Những sản phẩm và dịch vụ đầy chất lượng từ South Telecom là tổ hợp toàn bộ sức mạnh của mỗi thành viên đến từ đội ngũ tài năng, sáng tạo nơi đây. Không chỉ vang danh với những thế mạnh trên thị trường viễn thông, South Telecom còn được biết đến với môi trường làm việc thoải mái, mang đến nhiều cơ hội cho các tài năng phát triển sự nghiệp.

“Making great things in passion” – Mỗi nhân viên làm việc tại South Telecom là một “mảnh ghép” đặc biệt, được chăm sóc và quan tâm chu đáo với những chính sách đãi ngộ xứng tầm:

  • Thu nhập hấp dẫn với nhiều khoản thưởng xứng đáng với năng lực và đóng góp;
  • “Ting ting” về ví lên đến 14 tháng lương mỗi năm;
  • Làm vui, chơi khỏe với vô số hoạt động tập thể thú vị cùng đội ngũ: Team building, Event, Company trip,… 
  • Cùng nhiều đặc quyền, phúc lợi phong phú đang chờ bạn gia nhập.

Và nếu bạn đã sẵn sàng bứt phá giới hạn của bản thân, phát triển sự nghiệp? Còn chờ chi không bắt ngay “slot” tại South Telecom từ hôm nay?

Apply CV ngay để không bỏ lỡ cơ hội!

Tổng quan về TDD-BDD & KTPM trong mô hình Agile từ góc nhìn của một Acceptance Tester

Tổng quan về TDD-BDD & KTPM trong mô hình Agile từ góc nhìn của một Acceptance Tester

Bài viết được sự cho phép của tác giả Lê Chí Dũng

Topdev xin gửi đến các bạn độc giả một số thông tin về mô hình Agile. Nếu các bạn đã biết Agile là gì? trong các nội dung lần trước. Thì hôm nay mình sẽ nói sâu hơn về tổng quan TDD-BDD & KTPM. Hãy cùng đi sâu hơn trong nội dung bài viết dưới đây.

  QUnit — Những bước chân TDD đầu tiên trên JavaScript
  Agile là gì? Scrum là gì? Các công cụ quản lý dự án theo Agile mà bạn nên biết

1. TDD là gì?

Chính xác với nghĩa đen của nó: “Test-Driven Development” có thể được tạm hiểu là mô hình phát triển với trọng tâm hướng về việc kiểm thử. TDD được xây dựng theo hai tiêu chí: Test-First (Kiểm thử trước) và Refactoring (Điều chỉnh mã nguồn) [1]. Trong đó, khi một yêu cầu phần mềm (requirement) được đặt ra:

  • Người developer soạn thảo kịch bản kiểm thử (test case) cho yêu cầu đó trước tiên và chạy thử kịch bản đó lần đầu tiên. Hiển nhiên, việc chạy thử sẽ đưa ra 1 kết quả thất bại vì hiện tại chức năng đó chưa được xây dựng (và thông qua kết quả đó, ta cũng kiểm tra được là kịch bản kiểm thử đó được viết đúng).
  • Theo đó, dựa vào mong muốn (expectation) của kịch bản kia, người developer sẽ xây dựng một lượng mã nguồn (source code) vừa đủ để lần chạy thứ 2 của kịch bản đó thành công.
  • Nếu trong lần chạy thứ 2 vẫn đưa ra 1 kết quả thất bại, điều đó có nghĩa là thiết kế chưa ổn và người developer lại chỉnh sửa mã nguồn và chạy lại kịch bản đến khi thành công.
  • Khi kịch bản kiểm thử được chạy thành công, người developer tiến hành chuẩn hóa đoạn mã nguồn (base-line code) và tiếp tục hồi quy với kịch bản kiểm thử tiếp theo. Việc chuẩn hóa bao gồm thêm các comment, loại bỏ các dư thừa, tối ưu các biến…

Tổng quan về TDD-BDD & KTPM trong mô hình Agile từ góc nhìn của một Acceptance Tester

Quy trình phát triển TDD vẽ bởi Colin Kloes, đề cập vấn đề khó khăn trong việc hiểu rõ yêu cầu chức năng trước khi viết kịch bản kiểm thử

2. Điểm khác biệt của TDD với một mô hình truyền thống là gì?

Thông qua quy trình TDD trình bày ở trên, ta có thể dễ dàng nhận ra là thứ tự các bước xây dựng 1 tính năng phần mềm gần như đã được đảo ngược so với 1 quy trình truyền thống. Vậy điều này giúp ích gì và có gì hay hơn?

Trước hết, hãy nhìn lại 1 mô hình thác đổ (Waterfall Model) thông thường: việc phân tích các yêu cầu (requirements) thường được tiến hành bởi Business Analyst (BA) 1 cách chuyên hóa và khi đến giai đoạn xây dựng (implementing phase) thì đa phần các developer tiếp xúc với các yêu cầu phần mềm dưới dạng các bản thiết kế. Họ chỉ quan tâm đến đầu vào, đầu ra (Input, Output) của tính năng mình xây dựng mà thiếu đi cái nhìn thực tiễn từ góc nhìn người dùng (end-users). Một hệ quả tất yếu là lỗi phần mềm đến từ việc sản phẩm ko tiện dụng với người dùng.

Cùng với Agile, việc ứng dụng TDD góp phần làm gần khoảng cách giữa đội ngũ thiết kế phần mềm và sản phẩm thực tiễn, tối ưu quy trình [2]. Cụ thể như sau:

  • Thông qua kịch bản kiểm thử, developer có cái nhìn trực quan về sản phẩm ngay trước khi xây dựng mã nguồn. Sản phẩm họ tạo ra chính xác và gần gũi người dùng hơn.
  • Phần mã nguồn được thêm vào chỉ vừa đủ để chạy thành công kịch bản kiểm thử, hạn chế dư thừa và qua đó hạn chế khả năng xảy ra lỗi trên những phần dư thừa.
  • Bảo đảm mã nguồn luôn phản ánh đúng và vừa đủ yêu cầu phầm mềm, hạn chế được công sức tối ưu mã nguồn về sau.

3. TDD và Agile

Trong quá trình hình thành, TDD có liên quan mật thiết đến khái niệm “Test-First Programming” trong mô hình eXtreme Programming “XP” thuần túy Agile – thịnh hành từ năm 1999 [3]. Tuy nhiên, bằng việc ứng dụng đa dạng và linh hoạt, TDD cũng có những đặc điểm và tùy biến của riêng nó (mình sẽ trình bày rõ hơn bên dưới).

Tổng quan về TDD-BDD & KTPM trong mô hình Agile từ góc nhìn của một Acceptance Tester

TDD trong Agile framework phác họa bởi Mohammad Sami

TDD đáp ứng “Tuyên ngôn về Agile” khi bản thân quy trình TDD thúc đẩy tính thực tiễn của sản phẩm, tương tác với người dùng. Để phát huy tối đa những lợi ích mà TDD mang lại, độ lớn của 1 đơn vị tính năng phần mềm (unit of function) cần đủ nhỏ để kịch bản kiểm thử dễ dàng được xây dựng và đọc hiểu, công sức debug kịch bản kiểm thử khi chạy thất bại cũng giảm thiểu hơn.

Thực tế cho thấy một số sự kết hợp giữa TDD và mô hình Agile khác như Scrum có thể hỗ trợ và tối ưu lợi ích của nhau. Ví dụ, việc chia nhỏ Backlog thành các User Story của Scrum khiến việc xây dựng kịch bản kiểm thử hướng TDD trở nên dễ dàng và thuận tiện. Thêm vào đó, cả Scrum và TDD tương đồng trong việc loại bỏ sự chuyên hóa về vai trò của bộ đôi Developer – Tester. Vì lý do đó, đôi lúc có thể bạn sẽ thấy vừa TDD vừa Scrum được áp dụng trong cùng 1 dự án.

4. Behavior-Driven Development – BDD

Như vậy, trong mô hình TDD nhiệm vụ kiểm thử do developer đảm nhiệm và vai trò chuyên hóa của người tester gần như không còn nữa. Chắc hẳn các bạn sẽ tự hỏi: “Vậy một Acceptance Tester như chúng ta có vai trò gì trong mô hình?”, “Tại sao tôi phải hiểu về TDD khi người ta ko cần tôi trong quy trình đó?”

Quả thực, trong mô hình TDD người Acceptance Tester thực sự đã chết. Tuy nhiên, việc cộng gộp vai trò phát sinh vấn đề quá tải cho người developer [2]. Để làm tốt công việc, xuyên suốt chu trình người developer phải chú ý thêm những vấn đề thuần túy của kiểm thử (test) như: “Cái gì cần test và cái gì không?” “Viết bao nhiêu kịch bản là đủ?” “Làm sao để hiểu là test đó thất bại?” “Bắt đầu test từ đâu?” …

Để giải quyết vần đề phát sinh mà vẫn tận dụng triệt để lợi ích mà TDD mang lại, Dan North phát triển một mô hình mới với tên gọi: Behavior-Driven Development – BDD (hoặc ta có thể hiểu là Acceptance Test-Driven Development – ATDD) [5]. Trong đó, một vai trò mới trong việc thiết kế kiểm thử (Test Design) được đặt ra:

  • Thay vì chờ đợi sản phẩm hoàn thành và kiểm thử, người tester/analyst tham gia vào quá trình xây dựng mã nguồn với vai trò phân tích và xây dựng hệ thống kịch bản kiểm thử dưới góc độ ngôn ngữ tự nhiên dễ hiểu từ các yêu cầu (requirement).
  • Đồng thời, họ giúp đỡ developer trong việc giải thích và đưa ra các phương án xây dựng mã nguồn mang tính thực tiễn với người dùng ngay trước khi bắt tay xây dựng.
  • Người developer liên hệ mật thiết với người tester và xây dựng mã nguồn với những phương án mà tester cung cấp theo mô hình TDD.
  • Kịch bản kiểm thử được phân chia làm 2 lớp: Lớp chấp nhận (feature/acceptance test) và Lớp đơn vị (unit test) [1].
  • Theo đó, kịch bản kiểm thử lớp đơn vị mang thuần tính thiết kế và phục vụ cho việc kiểm thử lớp đơn vị (Unit test) còn kịch bản kiểm thử lớp chấp nhận có thể được tái sử dụng cho quá trình kiểm thử hồi quy về sau (Regression Test)

Tổng quan về TDD-BDD & KTPM trong mô hình Agile từ góc nhìn của một Acceptance Tester

Mô hình BDD – TDD trong Agile mô phỏng bởi Paul Littlebury

Từ mô hình trên ta dễ dàng nhìn nhận được sự ưu việt BDD mang lại đặc biệt là trong các dự án phần mềm lớn và phức tạp, khi cả hai khía cạnh phân hóa vai trò và chất lượng phải đi đôi. Ngoài ra, việc chạy kịch bản kiểm thử và xử lý sớm các vấn đề thiết kế ngay trong khâu xây dựng giúp giảm thiểu tối đa chi phí và công sức sữa chữa lỗi.

Trong khi khái niệm BDD mang tính lý thuyết, việc ứng dụng của nó lại đặt nặng sự thực nghiệm. Để phát huy lợi ích về thời gian trong việc xây dựng kịch bản kiểm thử, ngôn ngữ và cách truyền tải là 1 thử thách khi phải đáp ứng khả năng đọc hiểu từ cả 2 khía cạnh: tự nhiên và thiết kế. Bằng sự vay mượn từ ngôn ngữ viết User Story, ngôn ngữ Gherkin được phát triển để phục vụ nhu cầu đó với cấu trúc đơn giản, hướng đối tượng và tương đồng cho mọi kịch bản: Given – When – Then (mình sẽ trình bày rõ hơn về ngôn ngữ này ở các loạt bài khác) [4].

Ví dụ:
Given: Là một sinh viên
When: Tôi đăng ký một khóa học thành công
Then: Tôi phải thấy tên khóa học hiện ra trong danh sách môn học của tôi

5. Agile testing từ góc nhìn một Acceptance Tester

Có thể nhìn nhận rằng cùng với những lợi ích mà tuyên ngôn Agile mang lại, việc nở rộ và chiếm lĩnh của các mô hình hướng Agile như TDD-BDD đang dần dần thay đổi vai trò chuyên hóa của một Acceptance Tester truyền thống trong việc kiểm thử. Công việc kiểm thử dựa trên nguyên tắc đợi sản phẩm phần mềm hoàn tất (một phần hoặc toàn phần) và chạy kiểm thử trên sản phẩm như một người dùng (end-user) trở nên không cần thiết nữa. Thay vào đó, vai trò của người tester có xu hướng chuyển dần sang việc bảo trì chất lượng phần mềm (maintain quality) và hỗ trợ developer trong việc tối ưu sự tiện dụng của sản phẩm ngay từ khâu xây dựng. Trong tương lai, các tester cần có khả năng xây dựng và chạy các bộ kiểm thử mang tính bảo trì chất lượng. Đặc biệt là kiểm thử hồi quy tự động (regression test using automation) và các bộ kiểm thử trọng tải (performance test) – phần việc duy nhất developer không đảm nhiệm.

Tương tự, trong Agile – một bộ phận gia công phần mềm theo hướng truyền thống cũng sẽ dần lụi tàn nếu bản thân dịch vụ gia công không đáp ứng được nhu cầu liên lạc gần gũi giữa tester và developer. Điều này là không dễ khi đa số các dự án gia công luôn có khoảng cách về múi giờ, địa lý và văn hóa giữa offshore tester và đội ngũ developer. Thêm vào đó, trình độ tester cũng là một mối quan tâm lớn khi ở trong BDD tester cần có khả năng đọc mã nguồn để có thể đưa ra các giải pháp cải tiến thiết kế cho developer.

6. Kết luận

Trên đây là những chia sẻ và nhận định chủ quan của Thông về TDD-BDD nói riêng và Agile nói chung, những ảnh hưởng của nó dưới góc nhìn một người Acceptance Tester. Hiện tại trên mạng có rất nhiều tài liệu về hai mô hình này với mức độ chi tiết và ứng dụng khác nhau từ nhiều góc độ: thiết kế hệ thống, quản lý và xây dựng quy trình … đủ để phục vụ mục đích nghiên cứu nếu các bạn có nhu cầu. Những nội dung trên là những kiến thức cơ bản nhất do mình lượm lặt và hệ thống hóa trong những năm tháng làm việc với hi vọng có thể giúp các bạn có cách tiếp cận nhanh và dễ hiểu nhất. Mình rất mong có được những phản hồi và đóng góp của các bạn nhằm làm giàu và sữa chữa những kiến thức mình còn khiếm khuyết.

Thông Khuất biên dịch và tổng hợp

Bài viết gốc được đăng tải tại vntesters.com

Có thể bạn quan tâm:

Xem thêm Việc làm it agile hấp dẫn trên TopDev

Tổng hợp các việc làm tuyển tester lương cao các công ty

Cách Xử Lý Khi Macbook Bị Treo

Cách Xử Lý Khi Macbook Bị Treo

Bài viết được sự cho phép của tác giả Vũ Văn Tiền

Macbook bị treo là tình trạng không mấy khi người dùng gặp phải, tuy nhiên người dùng đôi khi người sử dụng Macbook vẫn gặp tình trạng này. Vậy cách xử lý như thế nào khi Macbook của bạn bị treo ? Bài viết này mình sẽ chia sẻ cùng các bạn !

  Các kĩ sư ZOZO đã tạo ứng dụng Survey realtime xử lý 1000 người đồng thời như thế nào
  Cách xử lý dữ liệu trong quá trình làm việc với framework
Cách Xử Lý Khi Macbook Bị Treo
Khac phuc macbook bi treo

Một ứng dụng bị treo hay toàn bộ hệ điều hành của Macbook

Hệ điều hành MacOS khá hiện đại, rất thông minh trong việc quản lý bộ nhớ sử dụng cho các ứng dụng,  nên việc cả hệ điều hành bị treo là hiếm khi gặp. Thông thường chỉ có một ứng dụng nào đó bị treo, có thể là do ứng dụng bị mắc kẹt trong một vòng lặp và chiếm quá nhiều bộ nhớ, trên màn hình bạn sẽ nhận được một cảnh báo nói rằng ứng dụng bị đóng đột ngột. Tuy nhiên nếu khóa mà không có bất kì cảnh báo nào thì có thể do hệ đều hành. Nếu máy không thể shutdown, không nhận chuột bạn chỉ cần giữ nút nguồn khoảng 10s và kiểm tra pin của chuột là xong.

Một ứng dụng của Macbook bị treo phải làm thế nào

Thoát và khởi động lại ứng dụng là cách tốt nhất để macOS xử lý sự cố ứng dụng bị treo.

Bước 1: Click vào cửa sổ ứng dụng khác trên màn hình desktop để chuyển sang một ứng dụng.

Bước 2: Nhấn Control + click biểu tượng ứng dụng trên dock.

Bước 3: Nhấn và giữ Option (tùy chọn Quit trong menu sẽ thay đổi thành Force Quit).

Bước 4: Chọn Force Quit. Ứng dụng sẽ đóng lại ngay lập tức. Nếu dock không hồi đáp, bạn nhấn tổ hợp phím Command + Option + Esc để mở cửa sổ Force Quit Applications. Tại đây bạn chọn một ứng dụng từ danh sách rồi click chọn Force Quit.

Cách Xử Lý Khi Macbook Bị Treo
Khac phuc macbook bi treo

Toàn bộ hệ điều hành MacOS của Macbook bị treo

Nếu bạn không thể buộc đóng một ứng dụng, có nghĩa là khả năng Macbook của bạn đã bị treo cả hệ điều hành. Bạn thực hiện các bước sau:

Bước 1: Góc trên cùng bên trái cửa sổ, Mở menu Apple, nhấn Restart rồi chọn tiếp Restart. Nếu không thể thực hiện được bạn nhấn tổ hợp phím Command + Control + Eject để khởi động lại macOS

Bước 2: Nếu vẫn không được, bạn nhấn nút nguồn cho đến khi Mac tắt hoàn toàn. Sau đó mở lại máy Sau khi mở Macbook lên, hãy tìm file bị lỗi, thử khôi phục lại bằng cách lấy bản sao lưu thay file lỗi hoặc chuyển các nội dung sang một file mới, sau đó xóa file lỗi đi.

Cách Xử Lý Khi Macbook Bị Treo
Khac phuc macbook bi treo

Khuyến cáo: nếu bạn gặp tình trạng này một vài lần, bạn cần phải tìm hiểu nguyên nhân. Có thể Macbook bị treo là do virus, hoặc  những nguyên nhân do  dung lượng ổ đĩa đã đầy, hoặc đã gỡ một cài đặt nào đó mà chưa cập nhật bản mới nhất trên Mac App Store. Nếu tình trạng Macbook bị treo thường xuyên, tốt nhất bạn cài lại hệ điều hành mới.

Tổng kết

Mình vừa hướng dẫn các bạn khắc phục 2 trường hợp Macbook bị treo, và tìm hiểu một số nguyên nhân gây ra hiện tượng này. Chúc các bạn sẽ có hướng xử lý tốt nhất !

Bài viết gốc được đăng tải tại vutienblog.com

Có thể bạn quan tâm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Những blogger nổi tiếng nhất làng công nghệ

Những blogger nổi tiếng nhất làng công nghệ

Bài viết được sự cho phép của tác giả Trần Thị Thu Hà

Trở thành một blogger, đặc biệt là trong giới công nghệ, đòi hỏi không chỉ tài năng và kiến thức mà còn cần một chút tư duy kinh doanh và sự may mắn nữa. Các blogger công nghệ dưới đây thực sự thành công nhờ hội tụ đầy đủ những yếu tố ấy, tạo được dấu ấn cho riêng mình và có mức thu nhập khiến chúng ta ngưỡng mộ.

  25 blogger IT nổi tiếng mà dân lập trình ai cũng phải biết

  Câu chuyện về cái comment tại một blog nọ

 Ewdison Then – “SlashGear”

Ewdison Then là người đồng sáng lập kiêm biên tập chính của website tin tức công nghệ và điện tử tiêu dùng này. Luôn cập nhật các thông tin mới nhất về các sản phẩm công nghệ và các ứng dụng kèm theo những nhận xét xác đáng và lời khuyên hữu ích đã giúp SlashGear của Then trở thành một trong những blog thành công nhất trên nền tảng WordPress. Sự thành công của SlashGear đem về cho Ewdison Then khoảng 60.000 đến 80.000 USD/tháng.

Collis Ta’eed – “TutsPlus”

TutsPlus là nơi cung cấp những video hướng dẫn, các bài học và rất nhiều phương tiện học tập về phần mềm ứng dụng và vô số các công cụ thiết kế. Người theo dõi trang này có thể học mọi thứ từ việc đơn giản như download một bức ảnh đến phức tạp như thiết kế một ứng dụng phần mềm. Nhờ có TutsPlus, Collis Ta’eed kiếm được 55.000 – 120.000 USD/tháng.

Những blogger nổi tiếng nhất làng công nghệ

Vitaly Friedman – “SmashingMagazine”

Anh là người sáng lập SmashingMagazine, một blog chuyên dành cho các nhà thiết kế website, cập nhật những tin tức mới nhất về giới thiết kế web cũng như các hướng dẫn, gợi ý và các bài học chất lượng cao. SmashingMagazine đem lại cho Friedman 150.000 – 190.000 USD mỗi tháng.

Những blogger nổi tiếng nhất làng công nghệ
Pete Cashmore chính là người sáng lập website nổi tiếng, từng nhận được giải thưởng website độc lập lớn nhất thế giới này. Mashable hiện nay là nguồn thông tin ảnh hưởng nhất và là website được đọc nhiều nhất trong lĩnh vực kỹ thuật số, truyền thông xã hội và công nghệ. Pete Cashmore bắt tay xây dựng Mashable khi chỉ mới 19 tuổi và giờ anh là blogger trẻ nhất, có thu nhập cao nhất trên thế giới với 560.000 – 600.000/tháng.Pete Cashmore – “Mashable”

Những blogger nổi tiếng nhất làng công nghệ

Minh Thu (theo TheRichest) – ITCNew

Bài viết gốc được đăng tải tại smartjob.vn

Có thể bạn quan tâm:

Xem thêm IT Jobs hấp dẫn trên TopDev

Nhìn lại bản thân, bổ sung những thiếu sót và nâng cao trình độ

Nhìn lại bản thân, bổ sung những thiếu sót và nâng cao trình độ

Bài viết được sự cho phép của tác giả Tin Tran

Sau khi nghỉ việc thì kỹ năng của tôi tăng lên khá nhiều, đó là những kỹ năng nào thì tôi đã nói phần 9 . Mọi người chưa biết có thể quay lại đọc nhé. Tuy nhiên khi nhìn lại bản thân thì kiến thức tôi có được chỉ là bề nổi mà thôi, sau khi nghỉ việc tôi tự đánh giá bản thân xem mình đang ở mức nào của một lập trình viên, junior hay senior. Junior thì tôi chắc chắn là hơn mức đó, còn senior thì tôi chưa đạt tới, hiện tại tôi đang dở dở ương ương.

  10 kinh nghiệm khi làm việc với các dự án lớn viết bằng Vue.js
  3 hướng dẫn để bắt đầu kinh doanh trong lĩnh vực nhân sự

Trước đây có một người từng hỏi tôi là “Bạn dành 12 ngày phép để làm gì?”. Tôi trả lời là “Tôi dành 12 ngày phép để nghỉ ngơi”. Người đó trả lời tôi một câu làm tôi mãi nhớ đến tận bây giờ đó là “Còn tôi, tôi dành 12 ngày phép để nâng cao kỹ năng của bản thân”. Khi ngẫm lại câu nói đó tôi đã cảm thấy kỹ năng của bản thân chưa là gì cả. Vậy là tôi đã lập kế hoạch để nâng cao trình độ cho bản thân bằng nhiều cách khác nhau.

Cách thứ nhất đó là tôi tự xây dựng project của riêng mình, tự nghĩ là một project để thực hiện nó bằng công nghệ của mình. Trước đây khi đi làm ở công ty thì thường sẽ có người chuyên dựng sẵn cấu trúc project rồi tôi chỉ dựa vào đó mà code theo thôi, còn việc cấu hình này nọ thì tôi không đụng tới và lúc đó cũng không có thời gian mà quan tâm cấu trúc được dựng thế nào, cấu hình ra sao. Tôi trước giờ làm java thì tôi sẽ đi nghiên cứu sâu về spring framework, hibernate.

Cách thứ hai đó là đi chia sẻ kiến thức của mình cho người khác. Tôi thường hay lượn trên các group lập trình xem có ai cần giúp đỡ gì không, đi comment dạo giải đáp các kiến thức, vấn đề hay fix bug qua Teamviewer cho mọi người, những gì mà tôi không biết thì tôi sẽ tìm hiểu và chỉ lại cho họ, nhờ vậy mà tôi đã biết được khá nhiều kiến thức cho mình.

Cách thứ ba là đi dạy kiến thức cho người khác, trên group cũng có một số bạn thuê gia sư để dạy kèm cho họ, tôi cũng nhận và dạy kèm với giá cả phải chăng, điều này vừa giúp bạn kiếm thêm thu nhập vừa ôn lại kiến thức cũ của mình, đa số tôi đều chỉ dạy những kinh nghiệm khi đi làm, kỹ năng giải quyết vấn đề, giải đáp những thắc mắc về nghề cũng như khó khăn mà gặp phải.

Cách thứ tư là làm freelancer, việc làm freelancer giúp bạn kiếm thêm thu nhập cũng như nâng cao được khả năng code. Vì phải đi làm ở công ty nên tôi không thể nhận những dự án lớn được, tôi thường nhận code những chức năng nhỏ nhỏ, hoặc phần mềm hay ứng dụng nào ít chức năng. Tôi nhận code luôn cả bài tập, project của những bạn sinh viên, tôi code java (swing, JavaFx, spring, hibernate), JavaScript, c# tôi đều có thể làm. Có những chức năng mà tôi nhắm chưa làm được thì sẽ search trước, nếu chắc chắn làm được thì tôi sẽ nhận. Việc này kéo dài một thời gian và tôi cảm thấy kiến thức của mình cũng tăng lên đáng kể.

Hiện tại công việc của tôi cũng khá là ổn và đang làm ở một công ty, công ty mà cấp trên luôn biết quan tâm tới nhân viên và không có khoảng cách giữa sếp và nhân viên, làm việc rất là thoải mái trong giờ giấc cũng như đãi ngộ. Phần 10 này cũng là phần cuối cùng của của series tâm sự lập trình về những dự án làm ở công ty, vì dự án tôi đang làm tới thời điểm hiện tai thì đã không còn sóng gió nhiều như những dự án mà tôi làm ở công ty cũ. Về kinh nghiệm khi đi làm thì tôi đã nói hết ở các phần trước rồi. Tuy nhiên tôi sẽ ra những series về những kỹ thuật, kỹ xảo khi đi làm để mọi người có thể áp dụng trong công việc giúp hiệu suất của mình tăng lên cao. Còn mục tâm sự lập trình này thì nếu sau này có những dự án nào hay ho thì tôi sẽ viết tiếp, hay chia sẻ về cuộc sống của lập trình viên chẳng hạn.

Bài viết đến đây là hết. Hãy like page để cập nhật những bài viết mới nhất và cũng chia sẻ cho bạn bè của bạn cùng đọc nhé. Cám ơn mọi người đã quan tâm theo dõi.

Bài viết gốc được đăng tải tại chickencodes.com

Có thể bạn quan tâm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Mẫu quyết định thôi việc chuẩn mà bạn cần biết

mẫu quyết định thôi việc
mẫu quyết định thôi việc

Mẫu quyết định thôi việc là bản trình bày nguyện vọng của một cá nhân đến với tổ chức dựa trên mong muốn chính thức về việc quyết định nghỉ việc của mình. Đây được xem là một loại giấy tờ quan trọng và có tính pháp lý trong công tác quản lý nhân sự của mỗi tổ chức/doanh nghiệp. Và đây cũng là một mẫu đơn HR cần biết.

Vậy một mẫu quyết định thôi việc sẽ cần đảm bảo những lưu ý về thể thức trình bày; các quy chuẩn nội dung cơ bản? Cùng TopDev điểm qua những lưu ý cần nắm qua bài viết sau.

Những trường hợp áp dụng quyết định nghỉ việc

Theo quy định tại Điều 36 Bộ luật Lao động 2012, có 10 trường hợp sau đây mà doanh nghiệp cho người lao động thôi việc được pháp luật ghi nhận và bảo vệ.

mẫu quyết định thôi việc
mẫu quyết định thôi việc

Cụ thể như sau:

1. Hết hạn hợp đồng lao động, trừ người lao động là cán bộ công đoàn không chuyên trách đang trong nhiệm kỳ;

2. Đã hoàn thành công việc theo hợp đồng lao động;

3. Hai bên thoả thuận chấm dứt hợp đồng lao động;

4. Đủ điều kiện hưởng lương hưu;

5. Người lao động bị tù giam, tử hình hoặc bị cấm làm công việc ghi trong hợp đồng lao động theo bản án, quyết định của Toà án;

6. Những vấn đề nảy sinh: người lao động chết, bị Toà án tuyên bố mất năng lực hành vi dân sự, mất tích hoặc đã chết;

7. Người sử dụng lao động là cá nhân chết, bị Toà án tuyên bố mất năng lực hành vi dân sự, mất tích hoặc đã chết; người sử dụng lao động không phải là cá nhân chấm dứt hoạt động;

8. Bị xử lý kỷ luật sa thải;

9. Người lao động đơn phương chấm dứt hợp đồng;

10. Người sử dụng lao động đơn phương chấm dứt hợp đồng; cho người lao động thôi việc do thay đổi cơ cấu, công nghệ hoặc vì lý do kinh tế; sáp nhập, hợp nhất, chia tách doanh nghiệp

Mẫu quyết định thôi việc chuẩn cho mọi đối tượng

Trên thực tế, có rất nhiều mẫu quyết định thôi việc mà bạn có thể tham khảo.

  Đơn xin nghỉ việc là gì? Mẫu đơn xin nghỉ việc chuẩn nhất
  Top lý do xin nghỉ việc sếp không thể từ chối
mẫu quyết định thôi việc
mẫu quyết định thôi việc

Tuy nhiên, để bảo đảm tính xác thực và chính xác về thông tin, format của một mẫu quyết định thôi việc chuẩn, bạn có thể tham khảo những mẫu sau đây:

01 – Mẫu quyết định thôi việc

CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM

Độc lập – Tự do – Hạnh phúc

———————

QUYẾT ĐỊNH

(V/v cho thôi việc)

GIÁM ĐỐC CÔNG TY TNHH/CỔ PHẦN …..

– Căn cứ Bộ Luật Lao động;

– Hợp đồng lao động đã ký ngày………………………………………………………………………………………………

– Xét Đơn xin nghỉ việc của Ông (Bà)………………………………………………………………………………………

QUYẾT ĐỊNH

Điều 1: Nay cho Ông (Bà) giữ chức vụ được nghỉ việc kể từ ngày…………………………………………

Điều 2: Ông (Bà) ……………………….và các Ông (Bà) phó giám đốc hành chính, và các bộ phận có liên quan chịu trách nhiệm thi hành Quyết định này.

Nơi nhận:                                                                                                        Giám đốc

Như điều 2;                                                                                       (Ký tên, đóng dấu)

Như điều 2;

Lưu hồ sơ;

02 – Mẫu quyết định thôi việc

CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM

Độc lập – Tự do – Hạnh phúc

********

QUYẾT ĐỊNH

(Về việc cho thôi việc)

GIÁM ĐỐC CÔNG TY

Căn cứ Bộ luật Lao động nước Cộng hòa xã hội chủ nghĩa Việt Nam ngày 18/6/2012;

Căn cứ Hợp đồng lao động số ……123… ngày…… tháng …… năm …… giữa Công ty ………………ABC…… với Ông/Bà ……XYZ…;

Xét đơn xin nghỉ việc của Ông/Bà……XYZ

QUYẾT ĐỊNH

Điều 1. Nay cho Ông/Bà……………XYZ……………

Giữ chức vụ: ……………Trưởng ……… Bộ phận: …………………………..

Được nghỉ việc từ ngày….. tháng….. năm……

Lý do: ……………..……………………………………………………………..

Điều 2. Quyết định này có hiệu lực kể từ ngày ký.

Ông/Bà……………………………….., phòng Hành chính Nhân sự và các bộ phận có liên quan chịu trách nhiệm thi hành Quyết định này./.

Nơi nhận:                                                                                                      GIÁM ĐỐC

– Ông/Bà có tên tại Điều 1;                                                  (Ký, ghi rõ họ tên, đóng dấu)

– Phó Giám đốc….;

– Phòng Hành chính Nhân sự;

– Lưu:……

03 – Mẫu quyết định thôi việc

  Tất tần tật về mẫu đơn xin nghỉ phép dành cho IT 
  Thư mời phỏng vấn? Bật mí tips viết thư mời phỏng vấn hiệu quả 

[TÊN ĐƠN VỊ]                                            CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM

Số:…………                                                            Độc lập – Tự do – Hạnh phúc

QUYẾT ĐỊNH

Về việc cho thôi việc đối với cán bộ nhân viên

[CHỨC DANH] [TÊN CQ]

– Căn cứ vào quyết định [SỐ], ngày [NGÀY] về việc thành lập [TÊN CQ];

– Căn cứ văn bản về việc quy định phân công, phân cấp về quản lý cán bộ;

– Xét các tiêu chí sau:

+ Đơn xin nghỉ việc ông (bà) [TÊN] cán bộ nhân viên của [TÊN CQ];

+ Quá trình tham gia công tác từ ngày [NGÀY]

+ Đề nghị của ông (bà) Trưởng phòng Tổ chức cán bộ.

QUYẾT ĐỊNH

Điều 1. Nay thuận giải quyết cho Ông (bà) [TÊN] cán bộ nhân viên thuộc [TÊN CQ] được thôi việc kể từ ngày [NGÀY];

Điều 2. Ông (bà) [TÊN] được hưởng trợ cấp thôi việc là [SỐ THÁNG] tháng lương và các khoản phụ cấp, trợ cấp (nếu có) theo chế độ hiện hành;

Điều 3. Các Ông (bà) Trưởng phòng Hành chính, Trưởng phòng Tổ chức cán bộ, Trưởng phòng Kế toán- tài vụ, Trưởng [PHÒNG, BAN] và Ông (bà) [TÊN] có trách nhiệm thi hành quyết định này.

 THỦ TRƯỞNG

Nơi nhận:

– Như điều 3

– Lưu Văn phòng

Những hệ quả khi tổ chức/doanh nghiệp cho nhân viên thôi việc trái luật

Khi cho người lao động thôi việc, doanh nghiệp phải tuyệt đối tuân thủ các quy định của pháp luật nếu không sẽ phải chịu những hệ lụy lớn.

Điều 42 Bộ luật Lao động 2012 nêu rõ nghĩa vụ của doanh nghiệp khi đơn phương chấm dứt hợp đồng trái luật, như việc phải tiếp tục thực hiện hợp đồng hay đền bù các tổn hại về vật chất và tinh thần cho người lao động.

Với nghĩa vụ tiếp tục thực hiện hợp đồng lao động:

– Doanh nghiệp phải cho phép người lao động trở lại làm công việc theo hợp đồng lao động đã giao kết, tức là khôi phục lại quan hệ lao động.

– Có nghĩa vụ đền bù vật chất và tinh thần

– Điều đầu tiên, doanh nghiệp cần đảm bảo việc hoàn tất tiền lương; các khoản phí về phúc lợi khác cho nhân viên như: bảo hiểm xã hội, bảo hiểm y tế trong những ngày người lao động không được làm việc. Đồng thời, có trách nhiệm đền bù tổn thất về tinh thần với mức thấp nhất là 02 tháng lương theo hợp đồng lao động.

– Trường hợp người lao động không muốn tiếp tục làm việc thì doanh nghiệp phải trả thêm trợ cấp thôi việc.

– Trong trường hợp không còn công việc theo hợp đồng mà người lao động vẫn muốn làm việc thì doanh nghiệp cần sửa đổi, bổ sung hợp đồng lao động.


Tuyển Dụng Nhân Tài IT Cùng TopDev
Đăng ký nhận ưu đãi & tư vấn về các giải pháp Tuyển dụng IT & Xây dựng Thương hiệu tuyển dụng ngay!
Hotline: 028.6273.3496 – Email: contact@topdev.vn
Dịch vụ: https://topdev.vn/page/products

Có thể bạn quan tâm:

Xem thêm việc làm Developers hàng đầu tại TopDev

Hiệu quả của testing với TDD trong Laravel

học javascript cơ bản
Hiệu quả của testing với TDD trong Laravel

Tác giả le0nidas

Giới thiệu

Bạn nhận được review của cấp trên rằng app của bạn đang bị lỗi. Bạn mở lại app và làm theo các bước đã được chỉ ra trong review của sếp nhưng ứng dụng vẫn hoạt động sai. Vậy phải làm thế nào?

Testing là công việc quan trọng để hoàn thành một dự án. Đây là giai đoạn kiểm thử và phát hiện ra những vấn đề của sản phẩm và cải thiện nó. TDD là một phương thức làm việc định hướng tiếp cận là để giải quyết mọi vấn đề mà các tester đang gặp phải. TDD giúp bạn tiết kiệm được rất nhiều thời gian trong quá trình cải tiến sản phẩm.

Bạn học JavaScript cơ bản để bắt đầu làm quen những ngôn ngữ lập trình nâng cao hơn và lập trình tốt hơn, thì với những software developer, việc quan tâm đến TDD cũng cần thiết. Công thức làm việc chính của TDD là hãy nghĩ về thiết kế của bạn trước khi viết code cho chức năng. Nó sẽ giúp bạn giải quyết công việc đơn giản hơn rất nhiều.

>>> Xem thêm Tản mạn về Testing

  10 câu hỏi javascript để nâng cao trình độ
  Top 5 câu hỏi phỏng vấn JavaScript Developer nào cũng nên biết

Những lợi ích mà TDD mang lại

1. Nó giúp bạn tập trung hơn trong khi làm việc

Đây là lợi ích mà bạn nhận được từ TDD khi sử dụng. Nếu sau khi check code không xuất hiện lỗi thì bạn đã hoàn thành công việc và có thể chuyển sang task khác. Ngoài ra, vì bạn đang trong quá trình hoàn thành bài test nên bất cứ nhiệm vụ hay thứ gì khác xuất hiện trong quá trình này đều sẽ được đưa vào danh sách chờ. Bạn có thể viết chúng vào sổ ghi chú để chờ cho lúc sau thực hiện.

Xem thêm các việc làm Laravel hấp dẫn

2. Thực hiện bài kiểm tra hồi quy – regression test

Nghĩa là nếu có lỗi xảy ra khiến hệ thống bạn đã build hay đang chỉnh sửa gặp vấn đề, bạn sẽ nhận được thông báo ngay từ bộ thử nghiệm chứ không phải từ người dùng app của mình.

3. Khám phá thêm về các trường hợp góc

Khi làm việc bằng cách test sản phẩm, bạn có thể nhìn ra và xem các đầu vào mà một class hay một array có thể có. Bạn có thể làm quen với khái niệm class, array khi học JavaScript cơ bản. Lúc này bạn sẽ đặt ra các câu hỏi rằng hỏi ứng dụng sẽ hoạt động như thế nào dưới các giá trị nhất định. Do đó, việc trước tiên bạn cần làm là build cho xong app và sau đó hãy tiến hành test từng trường hợp cụ thể để loại bỏ được tất cả những sai sót có thể có trong quá trình làm việc.

  Biện hộ: Vì sao các Developer không test phần mềm của họ?

4. Giúp dev hiểu rõ hơn về code

Khi bạn cố gắng thực hiện các bài test, bạn sẽ hiểu rõ hơn về cách mọi thứ được kết nối với nhau và cách chúng làm việc như thế nào. Đặc biệt, đây sẽ là tính năng cực kỳ phù hợp nếu bạn chưa từng làm việc hoặc mới bắt đầu dự án, nó sẽ giúp bạn hiểu rõ hơn về cách hoạt động của code. Như để bắt đầu công việc lập trình tốt nhất, bạn nên nắm rõ về các khái niệm, cách làm việc tiêu chuẩn và học JavaScript cơ bản là một giải pháp tốt.

Xem thêm các tin đăng tuyển dụng lập trình viên javascript trên TopDev

Kết luận

TDD không thể thay thế phương pháp kiểm thử truyền thống, thay vào đó nó định nghĩa một cách thức để đảm bảo việc thực hiện các unit test một cách hiệu quả. Và đây cũng được đánh giá là công cụ được các dev làm việc phần mềm sử dụng nhiều nhất. Làm việc hiệu quả sẽ mở ra cơ hội để lập trình viên có thể tìm được những công việc tốt trong các môi trường chuyên nhiệp như công ty Gear Inc.

Bài viết gốc được đăng tải tại dev.to

Có thể bạn quan tâm:

Xem thêm tuyển dụng IT hấp dẫn tại TopDev