- vừa được xem lúc

Blog#293: Thuật ngữ IT #11: "Hardcode" và "Mock" (Song ngữ: VN - EN - JP)

0 0 6

Người đăng: NGUYỄN ANH TUẤN

Theo Viblo Asia

Hi các bạn, mình là TUẤN. Hiện đang là một Full-stack Web Developer tại Tokyo😊.

Nếu bạn thích bài viết, xin hãy cho mình 1 upvote và follow blog để ủng hộ mình có thêm động lực ra thêm nhiều bài viết hay hơn trong tương lại nhé.😊

Trong lập trình, "hardcode" và "mock" là hai thuật ngữ vô cùng quen thuộc nhưng lại mang ý nghĩa hoàn toàn khác nhau. "Hardcode" nghĩa là việc nhập trực tiếp giá trị cố định vào mã nguồn, trong khi "mock" là kỹ thuật tạo đối tượng giả mạo khi thực hiện kiểm thử. Cùng tìm hiểu kỹ hơn về hai thuật ngữ này nhé!

Hardcode: Cần tránh trong lập trình

"Hardcode" là việc nhập các giá trị cố định trực tiếp vào code. Mặc dù việc này có thể giúp việc lập trình nhanh chóng và thuận tiện hơn, nhưng nó lại gây khó khăn trong việc bảo trì và cập nhật chương trình. Đồng thời, việc "hardcode" các thông tin nhạy cảm như mật khẩu hay API key còn gây nguy hiểm cho bảo mật chương trình. Vì vậy, "hardcode" nên được tránh nếu có thể.

// Ví dụ về hardcode
let greeting = "Xin chào các bạn!";
console.log(greeting);

Trong đoạn mã trên, chuỗi "Xin chào các bạn!" đã được hardcode vào biến greeting. Nếu chúng ta muốn thay đổi nội dung lời chào, chúng ta phải thay đổi trực tiếp trong code.

Mock: Kỹ thuật hữu ích trong kiểm thử

Trong khi đó, "mock" là một kỹ thuật trong lập trình, nhất là khi thực hiện kiểm thử, giúp tạo ra các đối tượng, hàm hay module giả mạo để thay thế cho các đối tượng thực. Kỹ thuật này giúp chúng ta kiểm soát được các yếu tố bên ngoài có thể ảnh hưởng đến kết quả kiểm thử, từ đó giúp việc kiểm thử trở nên dễ dàng hơn.

// Ví dụ về mock
let realObject = { fetchData: function() { // Giả sử hàm này thực hiện việc gọi API để lấy dữ liệu }
}; let mockObject = { fetchData: function() { // Giả lập hàm fetchData, thay vì gọi API, chúng ta trả về một giá trị cố định return "data"; }
}; function testFetchData(object) { console.log(object.fetchData());
} testFetchData(mockObject); // Kết quả: "data"

Trong ví dụ trên, mockObject là một đối tượng mock thay thế cho realObject trong quá trình kiểm thử hàm fetchData(). Bằng cách sử dụng mockObject, chúng ta có thể kiểm soát được kết quả trả về của hàm fetchData(), từ đó đảm bảo rằng quá trình kiểm thử không bị ảnh hưởng bởi việc gọi API thực sự.

Tóm lại, "hardcode" và "mock" là hai thuật ngữ vô cùng quen thuộc nhưng lại mang ý nghĩa hoàn toàn khác nhau. Chúng ta cần hiểu rõ về chúng để sử dụng một cách hiệu quả, tránh hardcode khi có thể và sử dụng mock chỉ trong bối cảnh kiểm thử. Hi vọng rằng bài viết này đã giúp các bạn hiểu rõ hơn về hai thuật ngữ này.

FAQs - Câu hỏi ôn tập

1. Hardcode là gì? Hardcode là việc nhập các giá trị cố định trực tiếp vào code.

2. Tại sao nên tránh hardcode? Hardcode gây khó khăn trong việc bảo trì và cập nhật chương trình, đồng thời còn gây nguy hiểm cho bảo mật chương trình nếu hardcode các thông tin nhạy cảm.

3. Mock là gì? Mock là kỹ thuật tạo ra các đối tượng, hàm hay module giả mạo để thay thế cho các đối tượng thực khi thực hiện kiểm thử.

4. Tại sao nên sử dụng mock? Mock giúp kiểm soát được các yếu tố bên ngoài có thể ảnh hưởng đến kết quả kiểm thử, giúp việc kiểm thử trở nên dễ dàng hơn.

5. Khi nào nên sử dụng mock? Mock nên được sử dụng trong quá trình kiểm thử để giả lập các hành động không cần thiết cho việc kiểm thử hoặc mất thời gian.


English Version

Hey there, let's chat about two common terms in programming, "hardcode" and "mock." They're familiar terms but mean completely different things. "Hardcoding" is like writing something in stone in your code, and "mocking" is about pretending with code when testing. Let's break them down!

Avoid Hardcoding

Imagine "hardcoding" as using permanent ink in your code. It's typing fixed values directly into your code. It might be quick and easy, but it could give you a headache later when you need to maintain or update your program. And, it can be risky if you hardcode sensitive stuff like passwords or API keys. So, try not to hardcode if you can!

// Hardcode example
let greeting = "Hey y'all!";
console.log(greeting);

In this code snippet, we've hardcoded "Hey y'all!" into a variable greeting. If we want to change this greeting, we'd have to go in and edit the code directly. Kinda like having to use white-out on that permanent ink!

Mocking: Helpful for Testing

Now, let's look at "mocking." It's a technique used mostly when you're testing your code, where you create fake objects, functions, or modules to take the place of real ones. It's like having a stunt double in a movie. It gives us control over things that could change our test results and makes testing easier.

// Mocking example
let realObject = { fetchData: function() { // Pretend this function is making an API call to fetch data }
}; let mockObject = { fetchData: function() { // We're pretending with fetchData here; instead of making an API call, we return a fixed value return "data"; }
}; function testFetchData(object) { console.log(object.fetchData());
} testFetchData(mockObject); // Result: "data"

In this example, mockObject is a mock or stunt double for realObject when we're testing the fetchData() function. Using mockObject, we can control the result from fetchData(), ensuring our tests don't get messed up by real API calls.

To sum it up, "hardcode" and "mock" are familiar terms but have very different meanings. We should understand them well to use them effectively, avoid hardcoding when possible, and only use mocking in testing contexts. I hope this has helped you understand these terms better!

FAQs - Review question

1. What's hardcoding? It's like using permanent ink in your code - typing fixed values directly into your code.

2. Why should we avoid hardcoding? It can make maintaining and updating your program tough. Plus, it can be risky if you hardcode sensitive info.

3. What's a mock? It's a fake object, function, or module you create to stand in for real ones when you're testing your code.

4. Why use mocks? They help control outside factors that could affect your test results, making testing easier.

5. When should we use mocks? You should use them during testing to pretend to perform actions that are unnecessary or time-consuming for your tests.


日本語版

プログラミングでは、「ハードコード」や「モック」という用語はよく使われますが、その意味は全然違います。「ハードコード」はソースコードに直接固定値を入力することを指し、一方「モック」はテストを行う際に偽のオブジェクトを作る技術を指します。これら二つの用語について詳しく見てみましょう!

ハードコード:プログラミングにおける注意点

「ハードコード」はコードに直接固定値を入力することを意味します。これはプログラミングを素早く便利に進めることができますが、プログラムのメンテナンスや更新を難しくする一方、パスワードやAPIキーなどの機密情報をハードコードすると、プログラムのセキュリティに危険を及ぼす可能性もあります。そのため、「ハードコード」は可能な限り避けるべきです。

// ハードコードの例
let greeting = "皆さん、こんにちは!";
console.log(greeting);

上記のコードでは、「皆さん、こんにちは!」という文字列がgreetingという変数にハードコードされています。もし私たちが挨拶の内容を変えたいと思ったら、コードを直接変更する必要があります。

モック:テストに有用な技術

一方、「モック」は、テストを行う際に、実際のオブジェクト、関数、またはモジュールの代わりに偽のものを作成する技術を指します。この技術は、テスト結果に影響を及ぼす可能性のある外部要素を制御することができ、その結果、テストの実行が容易になります。

// モックの例
let realObject = { fetchData: function() { // この関数はAPIを呼び出してデータを取得すると仮定する }
}; let mockObject = { fetchData: function() { // fetchData関数を模擬する、APIを呼び出す代わりに固定値を返す return "data"; }
}; function testFetchData(object) { console.log(object.fetchData());
} testFetchData(mockObject); // 結果:"data"

上記の例では、mockObjectは、fetchData()関数のテスト中にrealObjectの代わりに使用するモックオブジェクトです。mockObjectを使用することで、fetchData()関数の戻り値を制御することができ、実際のAPI呼び出しによるテストの影響を防ぐことができます。

要するに、「ハードコード」と「モック」は二つともよく使われる用語ですが、その意味は全く違います。これらを理解して効果的に使うことが重要です。ハードコードは可能な限り避け、モックはテストの文脈で使用することが望ましいです。この記事が皆さんにとって有益であることを願っています。

FAQ - よくある質問

1. ハードコードとは何ですか? ハードコードとは、コードに直接固定値を入力することを意味します。

2. なぜハードコードを避けるべきですか? ハードコードはプログラムのメンテナンスや更新を難しくし、機密情報がハードコードされている場合は、プログラムのセキュリティに危険を及ぼす可能性があります。

3. モックとは何ですか? モックとは、テストを行う際に、実際のオブジェクト、関数、またはモジュールの代わりに偽のものを作成する技術を指します。

4. なぜモックを使用するべきですか? モックは、テスト結果に影響を及ぼす可能性のある外部要素を制御することができ、その結果、テストの実行が容易になります。

5. いつモックを使用すべきですか? モックは、テストの過程で、テストに不必要または時間のかかる動作を模擬するために使用するべきです。

Cuối cùng

Như thường lệ, mình hy vọng bạn thích bài viết này và biết thêm được điều gì đó mới.

Nếu bạn thích bài viết, xin hãy cho mình 1 upvote và đăng ký để ủng hộ mình có thêm động lực ra thêm nhiều bài viết hay hơn trong tương lại nhé.

Cảm ơn và hẹn gặp bạn trong những bài viết tiếp theo. Thank you. 😊


Ae nào có dự định trở thành Dev hoặc BrSE tại Nhật (N2-N3, 2-3 năm exp trở lên hoặc zero tech có tiếng N1-N2, cả 2 đầu Nhật và VN) cần mình đưa roadmap hoặc review CV, hiểu hơn về các câu hỏi thường gặp khi interview Dev hoặc BrSE, cách deal lương cao... cần support thì cứ liên hệ mình qua zalo nhé: 0379302361 hoặc Facebook của mình. Hoặc có bất kỳ vấn đề về kỹ thuật nào cần hỏi thì cứ liên hệ mình nhé.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Blog#105: An IMPORTANT message to Junior Developers

. The main goal of this article is to help you improve your English level. I will use Simple English (~B1) to introduce to you the concepts related to software development.

0 0 17

- vừa được xem lúc

Blog#108: 7 ES6 Spread Operator Tricks Should Know

. The main goal of this article is to help you improve your English level. I will use Simple English to introduce to you the concepts related to software development.

0 0 20

- vừa được xem lúc

Blog#110: 🌸What is Unit Testing and Why is it Important?🌸

. The main goal of this article is to help you improve your English level. I will use Simple English to introduce to you the concepts related to software development.

0 0 16

- vừa được xem lúc

Blog#112: 🌸Why your code isn't working: The truth behind using "async/await" with "forEach" in JavaScript🌸

. The main goal of this article is to help you improve your English level. I will use Simple English to introduce to you the concepts related to software development.

0 0 17

- vừa được xem lúc

Blog#114: 🌸Firebase or AWS will be the most popular cloud computing platform in 2023.🌸

. The main goal of this article is to help you improve your English level. I will use Simple English to introduce to you the concepts related to software development.

0 0 25

- vừa được xem lúc

Blog#116: 🌸Heap Sort: A Beginner's Guide to Sorting Data Like a Pro🌸

. The main goal of this article is to help you improve your English level. I will use Simple English to introduce to you the concepts related to software development.

0 0 25