<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Azom Shahriar</title>
    <description>The latest articles on DEV Community by Azom Shahriar (@azomshahriar).</description>
    <link>https://dev.to/azomshahriar</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F618550%2F2e3279bf-17b1-4c79-a060-47e634f53e6c.jpeg</url>
      <title>DEV Community: Azom Shahriar</title>
      <link>https://dev.to/azomshahriar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/azomshahriar"/>
    <language>en</language>
    <item>
      <title>Engineering Challenges in Developing a FinTech Platform</title>
      <dc:creator>Azom Shahriar</dc:creator>
      <pubDate>Sun, 07 Jul 2024 11:21:43 +0000</pubDate>
      <link>https://dev.to/azomshahriar/engineering-challenges-in-developing-a-fintech-platform-4i09</link>
      <guid>https://dev.to/azomshahriar/engineering-challenges-in-developing-a-fintech-platform-4i09</guid>
      <description>&lt;p&gt;I have spent over 13 years working in FinTech engineering and product development across multiple organizations.&lt;br&gt;
From my experience, let me share a few common challenges in developing and engineering FinTech platforms, such as Digital Wallets, Accounting, Transactions, and Payments.&lt;br&gt;
Here we won't discuss common system challenges like performance, scalability, availability, reliability, and risk &amp;amp; security. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Accounting&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Maintaining double-entry bookkeeping is crucial. When we add money to an account, another contra account must be deducted. In accounting terms, when we credit one account, we need to debit another account simultaneously. This allows us to trace platform money movement and manage internal reconciliation effectively.&lt;br&gt;
Categorize all accounts into two major classes: Assets and Liabilities. Remember:&lt;br&gt;
When an Asset is Debited, it increases.&lt;br&gt;
When a Liability is Credited, it increases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Atomicity &amp;amp; Transaction&lt;/strong&gt;&lt;br&gt;
Any operation or group of operations should be atomic in nature. ACID-compliant databases are more suitable for this requirement. For example, if you want to perform a payment, multiple operations are involved:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Deducting the amount from the payer's account &amp;amp; Crediting the amount to the payee's account&lt;/li&gt;
&lt;li&gt;Deduct payment fee from payer and increase income account&lt;/li&gt;
&lt;li&gt;corresponding VAT transaction&lt;/li&gt;
&lt;li&gt;Logging the three transaction details.&lt;/li&gt;
&lt;li&gt;Some other state update
All five operations must be atomic, meaning either all five operations succeed or all fail. There should be no scenario where operations 1, 2, and 4 succeed and operations 3 &amp;amp; 5 fail. We can achieve atomicity by using RDMS transactions feature.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;3. Consistency&lt;/strong&gt;&lt;br&gt;
All write operations should be consistent. For instance, when we update a balance, it should be immediately reflected across all master nodes. Any subsequent read operation should retrieve the updated balance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Double Spending issue&lt;/strong&gt;&lt;br&gt;
In digital money systems, double spending means a sender can attempt to send or pay the same funds to multiple recipients simultaneously. &lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
User A has a $100 balance.&lt;br&gt;
At the same time, User A tries to:&lt;br&gt;
Send $100 to User B&lt;br&gt;
Send $100 to User C&lt;/p&gt;

&lt;p&gt;To prevent this issue, we need to implement a proper locking mechanism. This will ensure that once a transaction starts, the balance is locked, preventing any simultaneous transactions and avoiding double-spending.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Concurrency in Balance update&lt;/strong&gt;&lt;br&gt;
After each transaction or accounting event, we need to update the account balance. If two concurrent requests try to update the balance, there is a possibility of an incorrect or "dirty" balance. &lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
User A has a $100 balance.&lt;br&gt;
User A receives $100 from two accounts simultaneously.&lt;br&gt;
The first request reads the balance as $100 and updates it to $100 + $100 = $200.&lt;br&gt;
At the same time, the second request also reads the balance as $100 and updates it to $200.&lt;/p&gt;

&lt;p&gt;This results in an incorrect balance update. We need to handle this concurrency issue to ensure accurate balance updates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. DeadLock handling&lt;/strong&gt;&lt;br&gt;
Using a database lock can lead to deadlock, so we need to handle it properly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Duplicate Request handling and Idempotency&lt;/strong&gt;&lt;br&gt;
The same transaction request or operation can reach the server multiple times due to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Double-clicking from the browser&lt;/li&gt;
&lt;li&gt;Re-transmitted network packets&lt;/li&gt;
&lt;li&gt;Client retry mechanisms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A FinTech platform should be able to handle this issue by implementing a unique request ID and idempotent key for each request.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8. Internal Reconciliation &lt;/strong&gt;&lt;br&gt;
All money movements on a FinTech platform should be reconcilable almost in real-time. This ensures that any unauthorized alterations by intruders or internal resources are detected. If someone alters data or balances at the data layer, the discrepancy will be immediately reflected in the internal reconciliation report.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9. External Reconciliation&lt;/strong&gt;&lt;br&gt;
When a FinTech platform communicates with other systems, it must be reconciled with the third-party state. Every event should be traceable using both internal and external reference IDs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;10. Audition &amp;amp; Tracing&lt;/strong&gt;&lt;br&gt;
All state change events must be auditable. If any event occurs, such as a transaction, balance update, account state update, or any other data change, the following information must be captured:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creator&lt;/li&gt;
&lt;li&gt;Modifier&lt;/li&gt;
&lt;li&gt;Inputter/Authorizer (Maker/Checker)&lt;/li&gt;
&lt;li&gt;Creation time&lt;/li&gt;
&lt;li&gt;Modified time&lt;/li&gt;
&lt;li&gt;Complete change history&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This ensures thorough tracking and accountability for all actions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;11. Append only nature and data immutability &lt;/strong&gt;&lt;br&gt;
All events and change history should be append-only in nature. Events such as transactions and balance changes should be immutable. This ensures that once an event is recorded, it cannot be altered or deleted.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;12. Celebrity account/wallet problem &lt;/strong&gt;&lt;br&gt;
This issue can arise when an account receives money from millions of senders (e.g., a biller receiving payments nationwide on the last payment date). Regular merchant account lock won't work here. The FinTech core needs to handle these balance and transaction events differently. Similarly, a merchant wallet might need to send/payout/disburse money to millions of receivers at once.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;13. Decimal Problem and rounding &lt;/strong&gt;&lt;br&gt;
Decimal and rounding issues can occur in amount and balance calculations. These need to be handled properly. In Java, it is recommended to use BigDecimal instead of Double for precise arithmetic operations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;14. Insight reports&lt;/strong&gt;&lt;br&gt;
It's essential to implement insight reports for maintaining the integrity of a FinTech core accounting platform. Examples include balance sheets, trial balances, cash flow statements, payable and receivable reports, and profit and loss statements. These reports provide critical insights into financial health and performance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;15. More important features &lt;/strong&gt;&lt;br&gt;
Several common feature-level challenges need to be handled properly in FinTech platforms, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Day-end process and close of business procedures&lt;/li&gt;
&lt;li&gt;Adjustment and compensation transactions, reversals, and refunds&lt;/li&gt;
&lt;li&gt;Sundry and escrow management&lt;/li&gt;
&lt;li&gt;Account state management (PENDING, ACTIVE, FREEZE, HOLD, BLOCKED, CLOSED, DEBIT_BLOCKED, CREDIT_BLOCKED)&lt;/li&gt;
&lt;li&gt;Management of holding balances and pending transactions&lt;/li&gt;
&lt;li&gt;Implementation of the Inputter/Authorizer (Maker/Checker) concept to ensure that large transaction events involve at least two persons for execution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We believe every tech company, whether a startup or enterprise, needs a digital wallet/account/ledger platform to:&lt;br&gt;
Receive, store, and move money&lt;br&gt;
Manage internal accounting and finance&lt;br&gt;
Support both open and closed-loop wallet/account economies&lt;br&gt;
Model complex transactions, such as payments, fund collections, repayments, and loan disbursements.&lt;/p&gt;

&lt;p&gt;**At LooFi, we have addressed all these challenges. **The LooFi Digital Wallet/Account/Transaction Engine can be used in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;FinTech&lt;/li&gt;
&lt;li&gt;MFI/MFS&lt;/li&gt;
&lt;li&gt;E-Wallet/Digital Wallet/Payment Platform/Virtual Card&lt;/li&gt;
&lt;li&gt;BNPL/Lending Platform&lt;/li&gt;
&lt;li&gt;WealthTech/Investment/Crowdfunding Platform&lt;/li&gt;
&lt;li&gt;Digital/Neo Banking&lt;/li&gt;
&lt;li&gt;ERP&lt;/li&gt;
&lt;li&gt;Any tech enterprise or startup that wants to receive, store, and move money&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you need a digital wallet/account platform, contact us. Our solution can be used independently or integrated with your existing platform. We offer cost-effective assistance in various models:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;B2B API SaaS model&lt;/li&gt;
&lt;li&gt;On-Prem Deployment&lt;/li&gt;
&lt;li&gt;Co-Development &amp;amp; Consultation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Email: &lt;a href="mailto:azomshahriar05@gmail.com"&gt;azomshahriar05@gmail.com&lt;/a&gt;, &lt;a href="mailto:lognifintech@gmail.com"&gt;lognifintech@gmail.com&lt;/a&gt;&lt;br&gt;
WhatsApp: +8801674242986&lt;/p&gt;

&lt;p&gt;These are not the only challenges when building a robust FinTech platform. There are many more. If you are facing any specific challenges, please comment and share your experience. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Engineering Challenges in Developing a FinTech Platform</title>
      <dc:creator>Azom Shahriar</dc:creator>
      <pubDate>Sun, 07 Jul 2024 11:21:43 +0000</pubDate>
      <link>https://dev.to/azomshahriar/engineering-challenges-in-developing-a-fintech-platform-1d1k</link>
      <guid>https://dev.to/azomshahriar/engineering-challenges-in-developing-a-fintech-platform-1d1k</guid>
      <description>&lt;p&gt;I have spent over 13 years working in FinTech engineering and product development across multiple organizations.&lt;br&gt;
From my experience, let me share a few common challenges in developing and engineering FinTech platforms, such as Digital Wallets, Accounting, Transactions, and Payments.&lt;br&gt;
Here we won't discuss common system challenges like performance, scalability, availability, reliability, and risk &amp;amp; security. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Accounting&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Maintaining double-entry bookkeeping is crucial. When we add money to an account, another contra account must be deducted. In accounting terms, when we credit one account, we need to debit another account simultaneously. This allows us to trace platform money movement and manage internal reconciliation effectively.&lt;br&gt;
Categorize all accounts into two major classes: Assets and Liabilities. Remember:&lt;br&gt;
When an Asset is Debited, it increases.&lt;br&gt;
When a Liability is Credited, it increases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Atomicity &amp;amp; Transaction&lt;/strong&gt;&lt;br&gt;
Any operation or group of operations should be atomic in nature. ACID-compliant databases are more suitable for this requirement. For example, if you want to perform a payment, multiple operations are involved:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Deducting the amount from the payer's account &amp;amp; Crediting the amount to the payee's account&lt;/li&gt;
&lt;li&gt;Deduct payment fee from payer and increase income account&lt;/li&gt;
&lt;li&gt;corresponding VAT transaction&lt;/li&gt;
&lt;li&gt;Logging the three transaction details.&lt;/li&gt;
&lt;li&gt;Some other state update
All five operations must be atomic, meaning either all five operations succeed or all fail. There should be no scenario where operations 1, 2, and 4 succeed and operations 3 &amp;amp; 5 fail. We can achieve atomicity by using RDMS transactions feature.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;3. Consistency&lt;/strong&gt;&lt;br&gt;
All write operations should be consistent. For instance, when we update a balance, it should be immediately reflected across all master nodes. Any subsequent read operation should retrieve the updated balance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Double Spending issue&lt;/strong&gt;&lt;br&gt;
In digital money systems, double spending means a sender can attempt to send or pay the same funds to multiple recipients simultaneously. &lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
User A has a $100 balance.&lt;br&gt;
At the same time, User A tries to:&lt;br&gt;
Send $100 to User B&lt;br&gt;
Send $100 to User C&lt;/p&gt;

&lt;p&gt;To prevent this issue, we need to implement a proper locking mechanism. This will ensure that once a transaction starts, the balance is locked, preventing any simultaneous transactions and avoiding double-spending.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Concurrency in Balance update&lt;/strong&gt;&lt;br&gt;
After each transaction or accounting event, we need to update the account balance. If two concurrent requests try to update the balance, there is a possibility of an incorrect or "dirty" balance. &lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
User A has a $100 balance.&lt;br&gt;
User A receives $100 from two accounts simultaneously.&lt;br&gt;
The first request reads the balance as $100 and updates it to $100 + $100 = $200.&lt;br&gt;
At the same time, the second request also reads the balance as $100 and updates it to $200.&lt;/p&gt;

&lt;p&gt;This results in an incorrect balance update. We need to handle this concurrency issue to ensure accurate balance updates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. DeadLock handling&lt;/strong&gt;&lt;br&gt;
Using a database lock can lead to deadlock, so we need to handle it properly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Duplicate Request handling and Idempotency&lt;/strong&gt;&lt;br&gt;
The same transaction request or operation can reach the server multiple times due to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Double-clicking from the browser&lt;/li&gt;
&lt;li&gt;Re-transmitted network packets&lt;/li&gt;
&lt;li&gt;Client retry mechanisms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A FinTech platform should be able to handle this issue by implementing a unique request ID and idempotent key for each request.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8. Internal Reconciliation &lt;/strong&gt;&lt;br&gt;
All money movements on a FinTech platform should be reconcilable almost in real-time. This ensures that any unauthorized alterations by intruders or internal resources are detected. If someone alters data or balances at the data layer, the discrepancy will be immediately reflected in the internal reconciliation report.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9. External Reconciliation&lt;/strong&gt;&lt;br&gt;
When a FinTech platform communicates with other systems, it must be reconciled with the third-party state. Every event should be traceable using both internal and external reference IDs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;10. Audition &amp;amp; Tracing&lt;/strong&gt;&lt;br&gt;
All state change events must be auditable. If any event occurs, such as a transaction, balance update, account state update, or any other data change, the following information must be captured:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creator&lt;/li&gt;
&lt;li&gt;Modifier&lt;/li&gt;
&lt;li&gt;Inputter/Authorizer (Maker/Checker)&lt;/li&gt;
&lt;li&gt;Creation time&lt;/li&gt;
&lt;li&gt;Modified time&lt;/li&gt;
&lt;li&gt;Complete change history&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This ensures thorough tracking and accountability for all actions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;11. Append only nature and data immutability &lt;/strong&gt;&lt;br&gt;
All events and change history should be append-only in nature. Events such as transactions and balance changes should be immutable. This ensures that once an event is recorded, it cannot be altered or deleted.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;12. Celebrity account/wallet problem &lt;/strong&gt;&lt;br&gt;
This issue can arise when an account receives money from millions of senders (e.g., a biller receiving payments nationwide on the last payment date). Regular merchant account lock won't work here. The FinTech core needs to handle these balance and transaction events differently. Similarly, a merchant wallet might need to send/payout/disburse money to millions of receivers at once.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;13. Decimal Problem and rounding &lt;/strong&gt;&lt;br&gt;
Decimal and rounding issues can occur in amount and balance calculations. These need to be handled properly. In Java, it is recommended to use BigDecimal instead of Double for precise arithmetic operations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;14. Insight reports&lt;/strong&gt;&lt;br&gt;
It's essential to implement insight reports for maintaining the integrity of a FinTech core accounting platform. Examples include balance sheets, trial balances, cash flow statements, payable and receivable reports, and profit and loss statements. These reports provide critical insights into financial health and performance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;15. More important features &lt;/strong&gt;&lt;br&gt;
Several common feature-level challenges need to be handled properly in FinTech platforms, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Day-end process and close of business procedures&lt;/li&gt;
&lt;li&gt;Adjustment and compensation transactions, reversals, and refunds&lt;/li&gt;
&lt;li&gt;Sundry and escrow management&lt;/li&gt;
&lt;li&gt;Account state management (PENDING, ACTIVE, FREEZE, HOLD, BLOCKED, CLOSED, DEBIT_BLOCKED, CREDIT_BLOCKED)&lt;/li&gt;
&lt;li&gt;Management of holding balances and pending transactions&lt;/li&gt;
&lt;li&gt;Implementation of the Inputter/Authorizer (Maker/Checker) concept to ensure that large transaction events involve at least two persons for execution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We believe every tech company, whether a startup or enterprise, needs a digital wallet/account/ledger platform to:&lt;br&gt;
Receive, store, and move money&lt;br&gt;
Manage internal accounting and finance&lt;br&gt;
Support both open and closed-loop wallet/account economies&lt;br&gt;
Model complex transactions, such as payments, fund collections, repayments, and loan disbursements.&lt;/p&gt;

&lt;p&gt;**At LooFi, we have addressed all these challenges. **The LooFi Digital Wallet/Account/Transaction Engine can be used in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;FinTech&lt;/li&gt;
&lt;li&gt;MFI/MFS&lt;/li&gt;
&lt;li&gt;E-Wallet/Digital Wallet/Payment Platform/Virtual Card&lt;/li&gt;
&lt;li&gt;BNPL/Lending Platform&lt;/li&gt;
&lt;li&gt;WealthTech/Investment/Crowdfunding Platform&lt;/li&gt;
&lt;li&gt;Digital/Neo Banking&lt;/li&gt;
&lt;li&gt;ERP&lt;/li&gt;
&lt;li&gt;Any tech enterprise or startup that wants to receive, store, and move money&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you need a digital wallet/account platform, contact us. Our solution can be used independently or integrated with your existing platform. We offer cost-effective assistance in various models:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;B2B API SaaS model&lt;/li&gt;
&lt;li&gt;On-Prem Deployment&lt;/li&gt;
&lt;li&gt;Co-Development &amp;amp; Consultation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Email: &lt;a href="mailto:azomshahriar05@gmail.com"&gt;azomshahriar05@gmail.com&lt;/a&gt;, &lt;a href="mailto:lognifintech@gmail.com"&gt;lognifintech@gmail.com&lt;/a&gt;&lt;br&gt;
WhatsApp: +8801674242986&lt;/p&gt;

&lt;p&gt;These are not the only challenges when building a robust FinTech platform. There are many more. If you are facing any specific challenges, please comment and share your experience. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Software Testing guideline for non CS background</title>
      <dc:creator>Azom Shahriar</dc:creator>
      <pubDate>Tue, 27 Feb 2024 06:31:19 +0000</pubDate>
      <link>https://dev.to/azomshahriar/software-testing-guideline-for-non-cs-background-4cji</link>
      <guid>https://dev.to/azomshahriar/software-testing-guideline-for-non-cs-background-4cji</guid>
      <description>&lt;p&gt;Software Testing guideline for non CS background&lt;/p&gt;

&lt;p&gt;সফটওয়্যার টেস্টিং সম্পর্কে পরিচিতি:&lt;br&gt;
সফটওয়্যার টেস্টিং হলো একটি গুরুত্বপূর্ণ পদক্ষেপ যা সফটওয়্যার প্রোডাক্টের গুণগত স্থিতি এবং কার্যকরতা নিরীক্ষণ এবং যাচাই করে। এটি সফটওয়্যার উন্নতির জন্য অত্যন্ত গুরুত্বপূর্ণ একটি পদক্ষেপ যা ব্যবহারকারীদের কৌশলের নিরাপত্তা ও সফটওয়্যারের দায়িত্ব নিশ্চিত করে।&lt;br&gt;
একটি বাসার নির্মাণের উদাহরণ চিন্তা করা যায়। ধরুন আপনি একটি নতুন বাসা কিনেছেন এবং বাসা নির্মাণের শুরুতে বিভিন্ন নির্দিষ্ট পদক্ষেপের মাধ্যমে তা পরীক্ষা করতে চান। প্রথমে, ভাবুন আপনি নির্মাণকাজ শুরু করেন। এখানে প্রথম ধাপ হলো নির্মাণকাজের স্থানের সঠিকতা যাচাই করা, যেটি একটি বাসা নির্মাণের প্রধান ধাপ। পরবর্তীতে, নির্মাণকাজ শুরু হলে, সেখানে মূল্যবান পদক্ষেপ হলো প্রতিটি ধাপের উপর পরিমাপ এবং নির্দিষ্ট কাজের সঠিক কার্যকরতা। উদাহরণস্বরূপ, দেওয়াল নির্মাণের জন্য সঠিক উপাদান ব্যবহার করা এবং সঠিক পরিমাপের সাথে তা নির্মাণ করা হয়েছে কিনা এমন। এই পদক্ষেপগুলির সমন্বয়ে, আপনি একটি সুরক্ষিত এবং কার্যকরী বাসা পেতেন।&lt;br&gt;
এই উদাহরণটির মাধ্যমে, আপনি সফটওয়্যার টেস্টিং কীভাবে একটি সফটওয়্যার প্রোডাক্টের গুণগত স্থিতি এবং কার্যকরতা যাচাই করে তা বোঝতে পারেন। যেহেতু এটি একটি পরিপ্রেক্ষিত প্রক্রিয়া, আপনি আপনার প্রোডাক্ট পরীক্ষা করে তা বাড়তি নিরাপত্তা ও সন্তুষ্টিসহকারে ব্যবহারকারীদের কাছে প্রদর্শন করতে পারেন।&lt;br&gt;
উদাহরণ: চিন্তা করা যাক ফেসবুক মোবাইল অ্যাপের টেস্টিং এর একটি উদাহরণ।&lt;br&gt;
ঘটনা: ব্যবহারকারী লগইন&lt;br&gt;
টেস্ট কেস: যাচাই করুন যে ব্যবহারকারীরা ফেসবুক মোবাইল অ্যাপে সফলভাবে লগইন করতে পারেন।&lt;br&gt;
পদক্ষেপসমূহ:&lt;br&gt;
অ্যাপ চালু করুন: ডিভাইসে ফেসবুক মোবাইল অ্যাপ খুলুন।&lt;br&gt;
শংকের তথ্য প্রদান করুন: সঠিক ব্যবহারকারীর নাম (ইমেইল বা ফোন নম্বর) এবং পাসওয়ার্ড প্রদান করুন।&lt;br&gt;
লগইন বোতামে ট্যাপ করুন: "লগইন" বোতামে ট্যাপ করুন।&lt;br&gt;
সফল লগইন যাচাই করুন:&lt;/p&gt;

&lt;p&gt;যাচাই করুন যে লগইনের পরে ব্যবহারকারীকে হোম স্ক্রিন/ড্যাশবোর্ডে পুনর্নির্দেশ করা হয়।&lt;br&gt;
যাচাই করুন যে ব্যবহারকারীর প্রোফাইল ছবি বা নাম লগইনের পরে ড্যাশবোর্ডে প্রদর্শিত হয়, যা সফল লগইন প্রতিস্থাপন করে।&lt;/p&gt;

&lt;p&gt;ত্রুটি বিষদ যাচাই করুন:&lt;/p&gt;

&lt;p&gt;ভুল তথ্য প্রদান করার সময় অ্যাপের ব্যবহারকারীর আচরণ পরীক্ষা করুন।&lt;br&gt;
ভুল তথ্য প্রদানের জন্য যেসব উপযুক্ত ত্রুটি বার্তা প্রদর্শিত হচ্ছে তা যাচাই করুন।&lt;br&gt;
ভুল তথ্য প্রদানের পরে ব্যবহারকারী লগইন না থাকা নিশ্চিত করুন।&lt;/p&gt;

&lt;p&gt;মনে রাখুন "আমাকে মনে রাখুন" অপশন:&lt;/p&gt;

&lt;p&gt;"আমাকে মনে রাখুন" বা "লগইনে থাকুন" অপশন কার্যকর কি না সেটি পরীক্ষা করুন।&lt;br&gt;
আবার অ্যাপটি বন্ধ করে পুনরায় খোললে ব্যবহারকারী লগইনে থাকে কি না তা যাচাই করুন (যদি প্রযোজ্য হয়)।&lt;/p&gt;

&lt;p&gt;লগআউট কার্যক্রম পরীক্ষা করুন:&lt;/p&gt;

&lt;p&gt;অ্যাপ থেকে লগআউট করুন।&lt;br&gt;
লগআউট করার পরে লগইন স্ক্রিনে পুনরায় প্রেরিত করা হয় কিনা যাচাই করুন।&lt;br&gt;
লগআউট করার পরে ব্যবহারকারীর সেশন শেষ হয়েছে এবং তাদেরকে আবার লগইন করতে বলা হচ্ছে তা নিশ্চিত করুন।&lt;/p&gt;

&lt;p&gt;প্রত্যাশিত ফলাফলসমূহ:&lt;br&gt;
ব্যবহারকারীরা বৈধ তথ্য প্রদান করে সফলভাবে লগইন করতে পারবেন।&lt;br&gt;
ভুল তথ্য প্রদানের জন্য যথাযথ ত্রুটি বার্তা প্রদর্শিত হবে।&lt;br&gt;
"আমাকে মনে রাখুন" অপশন ব্যবহারকারীর লগইন সেশনটি রক্ষা করবে।&lt;br&gt;
লগআউট কার্যক্রম ব্যবহারকারীর সেশন শেষ করে তাদেরকে লগইন স্ক্রিনে পুনরায় প্রেরিত করবে।&lt;/p&gt;

&lt;p&gt;উদাহরণ: মনে করা যাক টেস্টিং সময়ে, বৈধ তথ্য প্রবেশ করার পরে "লগইন" বোতামে ট্যাপ করার পরে, ব্যবহারকারীকে হোম স্ক্রিনের বদলে একটি ফাঁকা স্ক্রিনে পুনঃনির্দেশ করা হয়। এটি লগইন প্রক্রিয়ার সঙ্গে সম্পর্কিত একটি সমস্যা নিশ্চিত করে এবং মুক্তি প্রকাশের আগে এই সমস্যা নিষ্ক্রিয় করার জন্য অতিরিক্ত অনুসন্ধান এবং বাগ রিপোর্টিং প্রয়োজন।&lt;br&gt;
এই উদাহরণে, আপনি দেখাচ্ছেন কীভাবে টেস্টাররা সিস্টেমের বিভিন্ন অংশে পরীক্ষা করে তা নিশ্চিত করে যে সফটওয়্যার ব্যবহারকারীদের জন্য সম্পূর্ণ অভিজ্ঞতা এবং সহজতা সরবরাহ করে।&lt;br&gt;
Let's consider an example of testing the Facebook mobile app:&lt;br&gt;
Scenario: User Login&lt;br&gt;
Test Case: Verify that users can log in to the Facebook mobile app successfully.&lt;br&gt;
Steps:&lt;br&gt;
Launch App: Open the Facebook mobile app on the device.&lt;br&gt;
Enter Credentials: Enter the valid username (email or phone number) and password in the respective fields.&lt;br&gt;
Tap Login Button: Tap on the "Login" button.&lt;br&gt;
Verify Successful Login:&lt;/p&gt;

&lt;p&gt;Ensure that the user is redirected to the home screen/dashboard after successful login.&lt;br&gt;
Verify that the user's profile picture or name is displayed on the dashboard, confirming a successful login.&lt;/p&gt;

&lt;p&gt;Check Error Handling:&lt;/p&gt;

&lt;p&gt;Test the app's behavior when invalid credentials are entered.&lt;br&gt;
Verify that appropriate error messages are displayed for incorrect credentials.&lt;br&gt;
Ensure that the user is not logged in with invalid credentials.&lt;/p&gt;

&lt;p&gt;Check Remember Me Option:&lt;/p&gt;

&lt;p&gt;Test the "Remember Me" or "Stay Logged In" option functionality.&lt;br&gt;
Verify that the user remains logged in even after closing and reopening the app (if applicable).&lt;/p&gt;

&lt;p&gt;Test Logout Functionality:&lt;/p&gt;

&lt;p&gt;Logout from the app.&lt;br&gt;
Verify that the user is redirected to the login screen after logging out.&lt;br&gt;
Ensure that the user's session is terminated, and they are required to log in again.&lt;/p&gt;

&lt;p&gt;Expected Results:&lt;br&gt;
The user should be able to log in successfully with valid credentials.&lt;br&gt;
Appropriate error messages should be displayed for invalid credentials.&lt;br&gt;
The "Remember Me" option should retain the user's login session.&lt;br&gt;
Logout functionality should terminate the user's session and redirect them to the login screen.&lt;/p&gt;

&lt;p&gt;Example: Suppose during testing, after entering valid credentials and tapping the login button, the user is redirected to a blank screen instead of the home screen. This indicates a potential issue with the login process, and further investigation and bug reporting are required to address the issue before release.&lt;br&gt;
This example demonstrates how testers can systematically test the Facebook mobile app's login functionality to ensure a smooth user experience.&lt;/p&gt;

&lt;p&gt;একজন কম্পিউটার সায়েন্স ব্যাকগ্রাউন্ড ছাড়াও সফটওয়্যার ম্যানুয়াল টেস্টার হতে চাইলে আপনি নিম্নলিখিত ধাপগুলি অনুসরণ করতে পারেন:&lt;br&gt;
সফটওয়্যার টেস্টিং সাধারণ ধারণা বুঝুন:&lt;/p&gt;

&lt;p&gt;সফটওয়্যার টেস্টিংর মৌলিক ধারণা সম্পর্কে জানা শুরু করুন। এটি এমন বিভিন্ন ধরণের টেস্টিং (যেমনঃ ফাংশনাল টেস্টিং, রিগ্রেশন টেস্টিং, ইউজাবিলিটি টেস্টিং) এবং টেস্টিং পদ্ধতিগুলির (যেমনঃ ওয়াটারফল, এজাইল) সম্পর্কে জানা যেতে পারে।&lt;/p&gt;

&lt;p&gt;সফটওয়্যার ডেভেলপমেন্ট লাইফ সাইকেল (এসডিএলসি) সম্পর্কে জানুন:&lt;/p&gt;

&lt;p&gt;সফটওয়্যার ডেভেলপমেন্ট প্রসেস এবং এর বিভিন্ন পর্যায়ের সম্পর্কে জ্ঞান অর্জন করুন, যেমনঃ প্রয়োজনীয়তা সংগ্রহ, ডিজাইন, ডেভেলপমেন্ট, টেস্টিং, এবং ডিপ্লয়মেন্ট। এসডিএলসি সম্পর্কে জানা আপনাকে আপনার টেস্টিং কর্মক্ষমতা প্রায়শই সাহায্য করবে।&lt;/p&gt;

&lt;p&gt;বেসিক কম্পিউটার দক্ষতা অর্জন করুন:&lt;/p&gt;

&lt;p&gt;যখন আপনার কম্পিউটার সায়েন্স ব্যাকগ্রাউন্ড নেই, তখনও বেসিক কম্পিউটার দক্ষতা অত্যন্ত গুরুত্বপূর্ণ। নিশ্চিত হউন যে আপনি কম্পিউটার ব্যবহার করতে, অপারেটিং সিস্টেম নেভিগেট করতে (উইন্ডোজ, লিনাক্স ইত্যাদি) এবং সাধারণ সফ্টওয়্যার অ্যাপ্লিকেশন ব্যবহার করতে সামর্থ্যশালী হয়েছেন।&lt;/p&gt;

&lt;p&gt;টেস্টিং টুল এবং প্রযুক্তি সম্পর্কে জানুন:&lt;/p&gt;

&lt;p&gt;প্রসিদ্ধ টেস্টিং টুল এবং প্রযুক্তি সম্পর্কে জ্ঞান অর্জন করুন যা উদাহরণস্বরূপ বাগ ট্র্যাকিং টুল (যেমনঃ জিরা, বাগজিলা), টেস্ট ম্যানেজমেন্ট টুল (যেমনঃ টেস্টরেল, জেফার) এবং সহযোগিতা প্ল্যাটফর্ম .&lt;/p&gt;

&lt;p&gt;একটি ৩ মাসের কোর্স আউটলাইন নিম্নলিখিত হতে পারে:&lt;br&gt;
মাস ১:&lt;br&gt;
সফটওয়্যার টেস্টিং পরিচিতি:&lt;br&gt;
সফটওয়্যার টেস্টিং এর মৌলিক ধারণা&lt;br&gt;
টেস্টিং প্রক্রিয়াজাতকরণ এবং উপকারিতা&lt;br&gt;
টেস্টিং প্রক্রিয়ার প্রধান পদ্ধতি (উদাহরণস্বরূপ: পার্সিং, ইন্টিগ্রেশন, রিগ্রেশন)&lt;/p&gt;

&lt;p&gt;টেস্টিং টুলস এবং প্রযুক্তি:&lt;br&gt;
বাগ ট্র্যাকিং টুল (উদাহরণস্বরূপ: জিরা)&lt;br&gt;
টেস্ট ম্যানেজমেন্ট টুল (উদাহরণস্বরূপ: টেস্টরেল)&lt;br&gt;
সহযোগিতা প্ল্যাটফর্ম (উদাহরণস্বরূপ: স্ল্যাক)&lt;/p&gt;

&lt;p&gt;প্রাক্টিক্যাল এপ্লিকেশন:&lt;br&gt;
ওয়েবসাইট টেস্টিং&lt;br&gt;
মোবাইল অ্যাপ্লিকেশন টেস্টিং&lt;br&gt;
বাগ রিপোর্ট তৈরি&lt;/p&gt;

&lt;p&gt;মাস ২:&lt;br&gt;
প্রফেশনাল টেস্টিং পদ্ধতি:&lt;br&gt;
প্রফেশনাল টেস্টিং প্রক্রিয়া&lt;br&gt;
প্রফেশনাল টেস্টিং সংশ্লিষ্ট নিয়ম&lt;br&gt;
বাগ রিপোর্টিং এবং ট্র্যাকিং&lt;/p&gt;

&lt;p&gt;অটোমেশন টেস্টিং পরিচিতি:&lt;br&gt;
অটোমেশন টেস্টিং কি?&lt;br&gt;
অটোমেশন টেস্টিং প্রসেস&lt;/p&gt;

&lt;p&gt;অটোমেশন টুলস:&lt;br&gt;
সেলেনিয়াম&lt;br&gt;
এটিয়াস&lt;br&gt;
পাইটেস্ট&lt;/p&gt;

&lt;p&gt;মাস ৩:&lt;br&gt;
এডভান্সড টেস্টিং পদ্ধতি:&lt;br&gt;
ইন্টিগ্রেশন টেস্টিং&lt;br&gt;
সিস্টেম টেস্টিং&lt;br&gt;
পারফর্মেন্স টেস্টিং&lt;/p&gt;

&lt;p&gt;স্পেশালাইজড টেস্টিং:&lt;br&gt;
সিকিউরিটি টেস্টিং&lt;br&gt;
ইউজাবিলিটি টেস্টিং&lt;br&gt;
অ্যাক্সেসিবিলিটি টেস্টিং&lt;/p&gt;

&lt;p&gt;প্রকল্প অনুশীলন:&lt;br&gt;
প্রকল্পের টেস্টিং&lt;br&gt;
বাগ ফিক্সিং এবং পরিমার্জন&lt;/p&gt;

&lt;p&gt;উপরোক্ত অনুশীলন সাথে যুক্ত হতে পারে যেকোনো মূল্যবান প্রকল্পের অংশগুলির উপরে ভিত্তি করে।&lt;br&gt;
এই কোর্সের প্রতিটি সেশন নিম্নলিখিত রকমের প্রশিক্ষণ এবং গাইডেলাইন প্রদান করা যেতে পারে:&lt;br&gt;
ক্লাসরুম প্রশিক্ষণ&lt;br&gt;
অনলাইন ভিডিও টিউটোরিয়াল&lt;br&gt;
অনলাইন কোর্স মাধ্যমে প্রশিক্ষণ&lt;br&gt;
প্রোজেক্ট ও কেস স্টাডি&lt;br&gt;
রিয়েল&lt;/p&gt;

&lt;p&gt;Month 1: Introduction to Software Testing:&lt;br&gt;
Basic concepts of software testing&lt;br&gt;
Testing process and benefits&lt;br&gt;
Main testing methodologies (e.g., parsing, integration, regression)&lt;/p&gt;

&lt;p&gt;Testing Tools and Technologies:&lt;br&gt;
Bug tracking tools (e.g., Jira)&lt;br&gt;
Test management tools (e.g., TestRail)&lt;br&gt;
Collaboration platforms (e.g., Slack)&lt;/p&gt;

&lt;p&gt;Practical Application:&lt;br&gt;
Website testing&lt;br&gt;
Mobile application testing&lt;br&gt;
Bug reporting&lt;/p&gt;

&lt;p&gt;Reference Links:&lt;br&gt;
Introduction to Software Testing: YouTube - Software Testing Tutorials for Beginners&lt;br&gt;
Testing Tools Tutorial: Bangla - সফটওয়্যার টেস্টিং টিউটোরিয়াল&lt;/p&gt;

&lt;p&gt;Month 2: Professional Testing Methodologies:&lt;br&gt;
Professional testing process&lt;br&gt;
Relevant rules of professional testing&lt;br&gt;
Bug reporting and tracking&lt;/p&gt;

&lt;p&gt;Introduction to Automation Testing:&lt;br&gt;
What is automation testing?&lt;br&gt;
Automation testing process&lt;/p&gt;

&lt;p&gt;Automation Tools:&lt;br&gt;
Selenium&lt;br&gt;
Appium&lt;br&gt;
Pytest&lt;/p&gt;

&lt;p&gt;Reference Links:&lt;br&gt;
Professional Testing Methodologies: Indian - Software Testing Tutorial for Beginners&lt;br&gt;
Automation Testing Tutorial: Bangla - অটোমেশন টেস্টিং টিউটোরিয়াল&lt;/p&gt;

&lt;p&gt;Month 3: Advanced Testing Methodologies:&lt;br&gt;
Integration testing&lt;br&gt;
System testing&lt;br&gt;
Performance testing&lt;/p&gt;

&lt;p&gt;Specialized Testing:&lt;br&gt;
Security testing&lt;br&gt;
Usability testing&lt;br&gt;
Accessibility testing&lt;/p&gt;

&lt;p&gt;Project Implementation:&lt;br&gt;
Testing in projects&lt;br&gt;
Bug fixing and regression&lt;/p&gt;

&lt;p&gt;Reference Links:&lt;br&gt;
Advanced Testing Methodologies: Indian - Advanced Software Testing Tutorial&lt;br&gt;
Specialized Testing Tutorial: Bangla - বিশেষজ্ঞ টেস্টিং টিউটোরিয়াল&lt;/p&gt;

&lt;p&gt;Software Testing Outline: &lt;br&gt;
Module 1: Introduction to Software Testing&lt;/p&gt;

&lt;p&gt;Understanding the basics of software testing&lt;br&gt;
Importance of software testing in software development lifecycle (SDLC)&lt;br&gt;
Different types of testing (e.g., functional testing, non-functional testing)&lt;br&gt;
Overview of manual testing vs. automated testing&lt;br&gt;
Module 2: Test Planning and Documentation&lt;/p&gt;

&lt;p&gt;Test planning process&lt;br&gt;
Creating test plans and test cases&lt;br&gt;
Test case design techniques (e.g., equivalence partitioning, boundary value analysis)&lt;br&gt;
Test data preparation and management&lt;br&gt;
Module 3: Test Execution and Reporting&lt;/p&gt;

&lt;p&gt;Test execution process&lt;br&gt;
Techniques for executing test cases&lt;br&gt;
Defect reporting and management&lt;br&gt;
Regression testing and retesting&lt;br&gt;
Module 4: Test Management Tools&lt;/p&gt;

&lt;p&gt;Introduction to test management tools (e.g., TestRail, Zephyr)&lt;br&gt;
Using test management tools for test planning, execution, and reporting&lt;br&gt;
Integrating test management tools with bug tracking systems (e.g., Jira)&lt;br&gt;
Module 5: Specialized Testing Techniques&lt;/p&gt;

&lt;p&gt;Exploratory testing&lt;br&gt;
Usability testing&lt;br&gt;
Compatibility testing (e.g., cross-browser, cross-device)&lt;br&gt;
Security testing basics&lt;br&gt;
Module 6: Agile Testing Practices&lt;/p&gt;

&lt;p&gt;Understanding Agile methodology&lt;br&gt;
Agile testing principles and practices&lt;br&gt;
Role of a tester in Agile teams&lt;br&gt;
Agile testing tools and techniques&lt;br&gt;
Module 7: Real-world Project Experience&lt;/p&gt;

&lt;p&gt;Working on a real-world testing project&lt;br&gt;
Test case creation, execution, and reporting&lt;br&gt;
Collaborating with team members and stakeholders&lt;br&gt;
Feedback and improvement process&lt;br&gt;
Module 8: Test Closure and Documentation&lt;/p&gt;

&lt;p&gt;Test closure activities&lt;br&gt;
Generating test summary reports&lt;br&gt;
Lessons learned and continuous improvement&lt;/p&gt;

&lt;p&gt;These reference links provide additional resources for self-study and further understanding of the topics covered in the course outline. &lt;br&gt;
Please search with this text at Youtube.&lt;br&gt;
সফটওয়্যার টেস্টিং প্রাথমিক বিষয়বস্তু | Software Testing Basic Level&lt;br&gt;
Watch on YouTube&lt;br&gt;
সফটওয়্যার টেস্টিং সম্পর্কে পরিচিতি | Introduction to Software Testing in Bangla&lt;br&gt;
Watch on YouTube&lt;br&gt;
সফটওয়্যার টেস্টিং টিউটোরিয়াল - বাংলা | Software Testing Tutorial Bangla&lt;br&gt;
Watch on YouTube&lt;/p&gt;

&lt;p&gt;সফটওয়্যার টেস্টিং পরিচিতি - অনলাইন কোর্স - বাংলা | Software Testing Basics - Online Course in Bangla&lt;br&gt;
Watch on YouTub&lt;br&gt;
সফটওয়্যার টেস্টিং প্রথমিক ভূমিকা | Software Testing Basic Role&lt;br&gt;
Watch on YouTube&lt;/p&gt;

&lt;p&gt;Search with this at youtube —&lt;/p&gt;

&lt;p&gt;Software Testing Tutorial for Beginners | QA Testing Training | Edureka&lt;br&gt;
Software Testing Tutorial — Complete Guide | Guru99&lt;br&gt;
Software Testing Tutorial | Simplilearn&lt;br&gt;
Software Testing Tutorial for Beginners | Software Testing Fundamentals |&lt;/p&gt;

&lt;p&gt;Software Testing Tutorial for Beginners — Quality Assurance Training — Edureka&lt;br&gt;
Here are some Youtube links for basic Software manual testing in bangla:&lt;/p&gt;

&lt;p&gt;QA manual testing tutorial for beginners | software testing course in bangla | Introduction | Part-1 by Software Testing Academy&lt;br&gt;
Software Testing Tutorial in Bangla PART 1 | Manual Testing Bangla Tutorial | What is SQA by Software Testing Bangla Tutorial&lt;br&gt;
Manual Software Testing Training Part-1 by SDET- QA&lt;br&gt;
সফটওয়্যার কোয়ালিটি এস্যুরেন্স -প্রথম পর্ব Software Quality Assurance in Bangla — First Episode by Shah Amanat&lt;br&gt;
QA manual testing tutorial for beginners | software testing course in bangla | Introduction | Part-2 by Software Testing Academy&lt;br&gt;
Here are some Youtube links for basic software testing in english:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/playlist?list=PLUDwpEzHYYLseflPNg0bUKfLmAbO2JnE9" rel="noopener noreferrer"&gt;https://www.youtube.com/playlist?list=PLUDwpEzHYYLseflPNg0bUKfLmAbO2JnE9&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Software Testing Tutorial #1 — What is Software Testing | With Examples by Software Testing Mentor&lt;br&gt;
Software Testing Full Course In 10 Hours | Software Testing Tutorial | Edureka by edureka!&lt;br&gt;
Lesson 1 — Software Testing by Skillrill — IT Bootcamp and Recruitment&lt;br&gt;
Software Testing Tutorial For Beginners | Manual &amp;amp; Automation Testing | Selenium Training | Edureka by edureka!&lt;br&gt;
Introduction to Software Testing. || The Essential Guide to Software Testing by Coders Arcade&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Code and System Design Review Checklist</title>
      <dc:creator>Azom Shahriar</dc:creator>
      <pubDate>Fri, 10 Sep 2021 12:32:28 +0000</pubDate>
      <link>https://dev.to/azomshahriar/code-and-system-design-review-checklist-56c6</link>
      <guid>https://dev.to/azomshahriar/code-and-system-design-review-checklist-56c6</guid>
      <description>&lt;p&gt;When writing code, we need to review our own code and other's code as well as software system design and architecture. In this article, we try to share few important notes regarding code and system review.&lt;br&gt;
This checklist is mostly for java backend development. But can also be applied to other technology stacks.&lt;br&gt;
The checklists/notes will help developers ensure better code and system architecture.&lt;/p&gt;

&lt;p&gt;Category/Area of Review:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;General&lt;/li&gt;
&lt;li&gt;Clean Code &amp;amp; Code style &lt;/li&gt;
&lt;li&gt;Security&lt;/li&gt;
&lt;li&gt;Performance &lt;/li&gt;
&lt;li&gt;Logging and Tracing&lt;/li&gt;
&lt;li&gt;Concurrency &lt;/li&gt;
&lt;li&gt;Error Handling&lt;/li&gt;
&lt;li&gt;Maintainability &amp;amp; Testability&lt;/li&gt;
&lt;li&gt;Domain(Business)&lt;/li&gt;
&lt;li&gt;Architecture&lt;/li&gt;
&lt;li&gt;Scalability &lt;/li&gt;
&lt;li&gt;Reliability &amp;amp; Resiliency&lt;/li&gt;
&lt;li&gt;Design pattern&lt;/li&gt;
&lt;li&gt;PCI DSS(FinTech)&lt;/li&gt;
&lt;li&gt;REST API design&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;General:&lt;br&gt;
Use checked exceptions for recoverable conditions and runtime exceptions for programming errors&lt;br&gt;
Try to use global exception handling and handle common Business and technical error response&lt;br&gt;
Never ignore exceptions. Don't overlook the catch block.&lt;br&gt;
Return empty arrays or collections, not nulls.&lt;br&gt;
Minimize the scope of local variables for earlier GC.&lt;br&gt;
Always override hashcode when overriding equal.&lt;br&gt;
Always override toString&lt;br&gt;
Use marker interface to define the type&lt;br&gt;
Use an executor thread pool for tasks and thread instead of unlimited thread creation.&lt;br&gt;
Use the BigDecimal valueof method for the string to bigdecimal/double conversion, otherwise, you will face a precision issue.&lt;br&gt;
Try to avoid string literals at business logic check. Use enum or constant for maintainable code.&lt;/p&gt;

&lt;p&gt;Bad:&lt;br&gt;
if(status = "SUCCESS")&lt;br&gt;
Good:&lt;br&gt;
if(status = EventStatus.SUCCESS)&lt;br&gt;
Throw Exceptions rather than Return codes in case of business and technical error.&lt;/p&gt;

&lt;p&gt;Bad:&lt;br&gt;
private String checkInput(Request request){&lt;br&gt;
   if(something wrong)&lt;br&gt;
      return "FAILED";&lt;br&gt;
}&lt;br&gt;
Good:&lt;br&gt;
private String checkInput(Request request){&lt;br&gt;
    if(something wrong)&lt;br&gt;
      throw new BusinessErrorException(int code, String message)&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Clean Code:&lt;br&gt;
Use Intention-Revealing Names for variable&lt;/p&gt;

&lt;p&gt;Bad:&lt;br&gt;
void validate(String input)&lt;br&gt;
Good: &lt;br&gt;
void validateCardNumber(String cardNumber)&lt;br&gt;
Pick one word per concept.&lt;br&gt;
Use Solution/Problem Domain Names&lt;br&gt;
Classes should be small!&lt;br&gt;
Functions should be small!&lt;br&gt;
Do one thing in a function.&lt;br&gt;
Don't Repeat Yourself (Avoid code Duplication).&lt;br&gt;
Explain yourself in code(write why in code not what)&lt;br&gt;
Make sure the code formatting is applied(Can use tools)&lt;br&gt;
Each method should do a single task. Don't mix business logic and network calls with the same method. Try to make the method unit testable.&lt;/p&gt;

&lt;p&gt;Bad:&lt;br&gt;
public sendSms(){&lt;br&gt;
  // code for validation&lt;br&gt;
  if(mobile is valid mobile)&lt;br&gt;
  // code for sms generation&lt;br&gt;
  String smsBody = "Some Text"+variable+"text".&lt;br&gt;
  // network call to telco server&lt;br&gt;
  restTemplate.exchante(url,mobile,smsBody);&lt;br&gt;
}&lt;br&gt;
Good:&lt;br&gt;
public processSms(){&lt;br&gt;
  validateMobile();&lt;br&gt;
  String smsBody = generateSmsBody(inputs);&lt;br&gt;
  sendSms(inputs)&lt;br&gt;
}&lt;br&gt;
private void validateMobile(String mobileNo){}&lt;br&gt;
private String generateSmsBody(Inputs….){}&lt;br&gt;
private sendSms(){}&lt;/p&gt;

&lt;p&gt;Security:&lt;br&gt;
Check access control or authorization besides authentication.&lt;/p&gt;

&lt;p&gt;Bad:&lt;br&gt;
Only verify the JWT token&lt;br&gt;
Good:&lt;br&gt;
Verify token and check use have authority to access that resource.&lt;br&gt;
All change event applications should be auditable(who performed this operation from which device and IP)&lt;/p&gt;

&lt;p&gt;Bad:&lt;br&gt;
account(name,status,createdDate)&lt;br&gt;
Good:&lt;br&gt;
account(name,status,createDate,createdBy,lastModifiedDate,lastModifiedBy)&lt;br&gt;
Use password as an array of characters instead of String so that no one can get it from heap dump.&lt;br&gt;
Make class final if not being used for inheritance.&lt;br&gt;
Input into a system should be checked for valid data size and range and check mandatory input fields(boundary conditions)&lt;/p&gt;

&lt;p&gt;Bad:&lt;br&gt;
TxnRequest{&lt;br&gt;
  String fromAc;&lt;br&gt;
  String toAc;&lt;br&gt;
  BigDecimal amount;&lt;br&gt;
}&lt;br&gt;
Good:&lt;br&gt;
TxnRequest{ &lt;br&gt;
   &lt;a class="mentioned-user" href="https://dev.to/notblank"&gt;@notblank&lt;/a&gt;(message="From AC Can't be blank.")&lt;br&gt;
   String fromAc;&lt;br&gt;
   &lt;a class="mentioned-user" href="https://dev.to/notblank"&gt;@notblank&lt;/a&gt;(message="To AC can't be blank.")&lt;br&gt;
   String toAc;&lt;br&gt;
   &lt;a class="mentioned-user" href="https://dev.to/notnull"&gt;@notnull&lt;/a&gt;(message="Amount can't be null.")&lt;br&gt;
   &lt;a class="mentioned-user" href="https://dev.to/positive"&gt;@positive&lt;/a&gt;(message="Amount should be positive")&lt;br&gt;
   BigDecimal amount;&lt;br&gt;
}&lt;br&gt;
Avoid sensitive data logging(like pin, password, card info)&lt;/p&gt;

&lt;p&gt;Bad:&lt;br&gt;
log.info("User:{}, Password{}",request.getUserName(),request.getPassword());&lt;br&gt;
Good:&lt;br&gt;
log.info("UserName:{}, Password:****",request.getUserName())&lt;br&gt;
Purge sensitive information from exceptions (exposing file path, internal system configuration)&lt;br&gt;
Be careful about SQL injection when DB queries.&lt;br&gt;
Check the API response fields. Is there any extra data or sensitive data are shared with the public?&lt;/p&gt;

&lt;p&gt;Bad: &lt;br&gt;
Ac Balance response:&lt;br&gt;
{"account":"10421020025347",&lt;br&gt;
"balance":550.00, &lt;br&gt;
"modifiedBy":"bank-checker-001",&lt;br&gt;
"userId":456,&lt;br&gt;
"customerInfo":{….}}&lt;br&gt;
Good: &lt;br&gt;
{"account":"10421020025347","balance":550.00}&lt;br&gt;
Define wrappers around native methods (not declare a native method public).&lt;br&gt;
Make public static fields final (to avoid caller changing the value)&lt;br&gt;
Try inter-service communication in a secured way(Implement SSL when service to service call)&lt;br&gt;
Separate public and private/internal API paths so that DevOps team can implement infra-level security and filter.&lt;/p&gt;

&lt;p&gt;Bad: &lt;br&gt;
api/v1/all public/admin/internal path,&lt;br&gt;
Good: &lt;br&gt;
api/v1/public path&lt;br&gt;
api-admin/v1/admin related path&lt;br&gt;
api-internal/v1/interapi&lt;br&gt;
In the case of microservice try to use a central auth server&lt;br&gt;
Check about authentication and authorization network call overhead in the case of a distributed system.&lt;br&gt;
Never use default credentials at production. Especially for system/infrastructure-related services. (DB, Cache, Auth, API GW, HTTP server, 3rd party library)&lt;br&gt;
Encrypt or one-way hash for OTP and other credentials.&lt;br&gt;
Ensure REST API security.&lt;/p&gt;

&lt;p&gt;Performance:&lt;br&gt;
Try to keep synchronized section small operation(CPU/network/memory)&lt;br&gt;
Avoid string literal concatenation back end component. Try to use a string builder.&lt;/p&gt;

&lt;p&gt;Bad:&lt;br&gt;
String fullMessage = "";&lt;br&gt;
for(Result result : resultList){&lt;br&gt;
fullMessage = fullMessage+result.getMessagr();&lt;br&gt;
}&lt;br&gt;
Good:&lt;br&gt;
StringBuilder fullMessage = new StringBuilder();&lt;br&gt;
for(Result result : resultList){&lt;br&gt;
fullMessage.append(result.getMessage()));&lt;br&gt;
}&lt;br&gt;
Avoid creating unnecessary objects.&lt;br&gt;
In case of network call use a connection pool, thread pool, socket pool.&lt;br&gt;
Profile DB query and check high search/read query happen on an indexed field.&lt;br&gt;
Release resources (Streams, Connections, etc) in all cases.&lt;br&gt;
Careful about ORM N+1 query and use Entitygraph to avoid N+1 query&lt;br&gt;
Always think about cache.&lt;br&gt;
In a distributed system(SOA or Microservice) always develop stateless service.&lt;br&gt;
Try to develop as many Asynchronous processes using JMS.&lt;br&gt;
Think about IO latency and CPU usage. If the system is an IO incentive try to use the NIO library.&lt;br&gt;
Check if any unused library goes into the production build.&lt;br&gt;
In the case of an in-memory store avoid full object serialization and use custom serialization to save memory. Think about JSON vs Messagepack vs protobuf.&lt;br&gt;
Try to avoid select * if not needed at DB query.&lt;br&gt;
Try always index-only scan, select the field which is indexed. The most important and readable field should be indexed. We can also use composite indexed-key.&lt;/p&gt;

&lt;p&gt;Logging &amp;amp; Tracing:&lt;br&gt;
Maintain proper log level&lt;br&gt;
Use placeholder (LOG.error("Could not… details: {}", something, exception)) and never String concatenation (LOG.error("Could not… details: " + something, exception))&lt;br&gt;
Don't trace excessive logs.&lt;br&gt;
In the case of Distributed Systems (SOA, Microservice) try to use Distributed tracing (Spring cloud sleuth, ELK, Zipkin)&lt;br&gt;
Don't log Sensitive Information&lt;br&gt;
Log User Context&lt;br&gt;
In the case of centralized logs use common trace id and service name.&lt;/p&gt;

&lt;p&gt;Concurrency:&lt;br&gt;
Avoid excessive synchronization for thread safety. Try to avoid sharing resources in case of a multithreaded environment.&lt;br&gt;
Avoid member variables when in the case of a singleton object or bean.&lt;br&gt;
Always synchronize share resources and also try to avoid share resource&lt;br&gt;
Use concurrent hashmap instead of Synchronize HashMap&lt;br&gt;
Use HashMap or HashSet instead if TreeMap/Set when ordering is not important. As time complexity O(1) vs O(logn)&lt;br&gt;
Always think about concurrency in the case of back-end service.&lt;br&gt;
When multiple users/threads update the same data, try to implement a lock(optimistic or pessimistic). For example account balance, ticket reservation, product stock.&lt;/p&gt;

&lt;p&gt;Error Handling:&lt;br&gt;
Reply consistent error response to the client.&lt;br&gt;
Handle proper error code(401,404,400 and 500)&lt;br&gt;
Use custom error code for the business logic errors.&lt;/p&gt;

&lt;p&gt;Typical Error Categories&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Business logic error&lt;/li&gt;
&lt;li&gt;Technical Error&lt;/li&gt;
&lt;li&gt;Upstream Service Error&lt;/li&gt;
&lt;li&gt;Common Error/Runtime Error
Architecture:
Follow twelve-factor app(&lt;a href="https://12factor.net" rel="noopener noreferrer"&gt;https://12factor.net&lt;/a&gt;)
Aware about distributed system fallacy (&lt;a href="https://en.wikipedia.org/wiki/Fallacies_of_distributed_computing" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/Fallacies_of_distributed_computing&lt;/a&gt;)
For the data layer we can follow lambda architecture.
Try to implement event-based infrastructure for scalability.
Follow 12 architecture principle&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;1.N+1 Design. Never less than two of anything and remember the rule of three&lt;br&gt;
2.Design for Rollback. Ensure you can roll back any release of functionality&lt;br&gt;
3.Design to be disabled. Be able to turn off anything you released&lt;br&gt;
4.Design to be monitored. Think about monitoring during design. Not after.&lt;br&gt;
5.Design for multiple Live sites. Don't box yourself into one site solution&lt;br&gt;
6.Use mature technology. Use thing you know work well&lt;br&gt;
7.Asynchronous design. Communicate synchronously only when absolutely necessary&lt;br&gt;
8.Stateless Design. Use state only when the business return justifies it .&lt;br&gt;
9.Scale Out NOT Up. Never rely on a bigger or faster system.&lt;br&gt;
10.Design for at least two axes. Think one step ahead of your scale beads.&lt;br&gt;
11.Bue when Non Core. If you aren't the best at building it and it doesn't offer competitive differentiation, buy it.&lt;br&gt;
12.Commodity Hardware. Cheaper is better most of the time.&lt;br&gt;
Design Pattern:&lt;br&gt;
SOLID&lt;br&gt;
DRY&lt;br&gt;
KISS&lt;br&gt;
Creational Pattern(Singleton,Factory,Builder,Adapter)&lt;br&gt;
Behavioral Pattern(Strategy, Chain Responsibility, Observer).&lt;/p&gt;

&lt;p&gt;Scalability:&lt;br&gt;
Make the system elastic or easily scalable.&lt;br&gt;
Make the service stateless for horizontal scaling.&lt;br&gt;
DB Sharding&lt;br&gt;
DB Partition&lt;br&gt;
DB replication&lt;br&gt;
Use read replica for an independent read operation.&lt;br&gt;
Cache high read and low write operation.&lt;br&gt;
Monitor DB read and write query ratio.&lt;br&gt;
Reduce network call overhead (use socket pool or gRPC).&lt;br&gt;
Check DB network call round trip and always try to reduce it.&lt;br&gt;
Address the c10K problem for network communication.&lt;/p&gt;

&lt;p&gt;Reliability &amp;amp; Resiliency:&lt;br&gt;
Handle Timeout in case of all network call.&lt;br&gt;
Implement Circuit Breaker Pattern.&lt;br&gt;
Implement Bulkhead pattern&lt;br&gt;
Implement idempotent operation&lt;br&gt;
Use a fail-first mechanism when the system is really broken.&lt;/p&gt;

&lt;p&gt;Maintainability &amp;amp; Testability:&lt;br&gt;
How much test coverage does your system have?&lt;br&gt;
Unit, Integration, and System Testing coverage.&lt;br&gt;
Proper CI/CD pipeline.&lt;br&gt;
Do as much automation.&lt;br&gt;
Implement proper production deployment test strategy( canary, AB testing)&lt;/p&gt;

&lt;p&gt;Monitoring/Observability:&lt;br&gt;
Monitor your system's health and resources.&lt;br&gt;
Database Memory and disk size&lt;br&gt;
Application and DB server CPU, memory and Load average, and IO&lt;br&gt;
Application latency and throughput.&lt;br&gt;
Application resource(JVM memory, thread, thread pool, connection pool, queue, JMS memory)&lt;br&gt;
Isolate Logging, Tracing, and metric analysis.&lt;br&gt;
Monitor your business performance.&lt;/p&gt;

&lt;p&gt;Business Domain:&lt;br&gt;
Business Logic implemented properly at the codebase&lt;br&gt;
Service properly isolated against the domain and bounded context.&lt;br&gt;
Try to follow the domain-driven design.&lt;/p&gt;

&lt;p&gt;PCI DSS:(For FinTech):&lt;br&gt;
12 requirements:&lt;br&gt;
1.Install and maintain a firewall configuration to protect cardholder data&lt;br&gt;
2.Do not use vendor-supplied defaults for system passwords and other security parameters&lt;br&gt;
3.Protect stored cardholder data&lt;br&gt;
4.Encrypt transmission of cardholder data across open, public networks&lt;br&gt;
5.Use and regularly update anti-virus software or programs&lt;br&gt;
6.Develop and maintain secure systems and applications&lt;br&gt;
7.Restrict access to cardholder data by business need to know&lt;br&gt;
8.Assign a unique ID to each person with computer access&lt;br&gt;
9.Restrict physical access to cardholder data&lt;br&gt;
10.Track and monitor all access to network resources and cardholder data&lt;br&gt;
11.Regularly test security systems and processes&lt;br&gt;
12.Maintain a policy that addresses information security for all personnel&lt;br&gt;
REST API Design:&lt;br&gt;
Use kebab-case for URLs&lt;/p&gt;

&lt;p&gt;Bad: /systemOrders or /system_orders&lt;br&gt;
Good: /system-orders&lt;br&gt;
Use camelCase for Parameters&lt;/p&gt;

&lt;p&gt;Bad: /system-orders/{order_id} or /system-orders/{OrderId}&lt;br&gt;
Good: /system-orders/{orderId}&lt;br&gt;
Plural Name to Point to a Collection&lt;/p&gt;

&lt;p&gt;Bad: GET /user or GET /User&lt;br&gt;
Good: GET /users&lt;br&gt;
Keep Verbs out of Your Resource URL&lt;/p&gt;

&lt;p&gt;Bad: POST /updateuser/{userId} or GET /getusers&lt;br&gt;
Good: PUT /user/{userId}&lt;br&gt;
Use Verbs for Non-Resource URL or specific operation&lt;/p&gt;

&lt;p&gt;POST /alerts/245743/resend&lt;br&gt;
Use camelCase for JSON property&lt;/p&gt;

&lt;p&gt;Bad:&lt;br&gt;
{&lt;br&gt;
user_name: "Mr Rahim"&lt;br&gt;
user_id: "1"&lt;br&gt;
}&lt;br&gt;
Good:&lt;br&gt;
{&lt;br&gt;
userName: "Mr. Karim"&lt;br&gt;
userId: "1"&lt;br&gt;
}&lt;br&gt;
Don't use table_name for the resource name&lt;/p&gt;

&lt;p&gt;Bad: product_order&lt;br&gt;
Good: product-orders&lt;br&gt;
This is because exposing the underlying architecture is not your purpose.&lt;br&gt;
Use API version&lt;/p&gt;

&lt;p&gt;Good: &lt;a href="http://api.domain.com/v1/shops/3/products" rel="noopener noreferrer"&gt;http://api.domain.com/v1/shops/3/products&lt;/a&gt;&lt;br&gt;
Accept limit and offset Parameters&lt;/p&gt;

&lt;p&gt;GET /shops?offset=5&amp;amp;limit=5&lt;br&gt;
Don't Pass Authentication Tokens in URL&lt;/p&gt;

&lt;p&gt;Bad:&lt;br&gt;
GET /shops/123?token=some_kind_of_authenticaiton_token&lt;br&gt;
Good:&lt;br&gt;
Instead, pass them with the header:&lt;br&gt;
Authorization: Bearer xxxxxx, Extra yyyyy&lt;br&gt;
Use the Relation in the URL For Nested Resources&lt;/p&gt;

&lt;p&gt;GET /shops/2/products : Get the list of all products from shop 2.&lt;br&gt;
GET /shops/2/products/31: Get the details of product 31, which belongs to shop 2.&lt;br&gt;
CORS&lt;/p&gt;

&lt;p&gt;Do support CORS (Cross-Origin Resource Sharing) headers for all public-facing APIs.&lt;br&gt;
Consider supporting a CORS allowed origin of "*", and enforcing authorization through valid OAuth tokens.&lt;br&gt;
Avoid combining user credentials with origin validation.&lt;br&gt;
Security&lt;br&gt;
Enforce HTTPS (TLS-encrypted) across all endpoints, resources, and services.&lt;br&gt;
Enforce and require HTTPS for all callback URLs, push notification endpoints, and webhooks.&lt;br&gt;
Reviewer &amp;amp; reviewee's behavior and attitude when reviewing other's code:&lt;br&gt;
Be kind&lt;br&gt;
Accept that many programming decisions are opinions. Discuss trade offs, which you prefer, and reach a resolution quickly.&lt;br&gt;
Ask questions; don't make demands. ("What do you think about naming this :user_id?")&lt;br&gt;
Ask for clarification. ("I didn't understand. Can you clarify?")&lt;br&gt;
Avoid selective ownership of code. ("mine", "not mine", "yours")&lt;br&gt;
Avoid using terms that could be seen as referring to personal traits. ("dumb", "stupid"). Assume everyone is intelligent and well-meaning.&lt;br&gt;
Be explicit. Remember people don't always understand your intentions online.&lt;br&gt;
Be humble. ("I'm not sure - let's look it up.")&lt;br&gt;
Don't use hyperbole. ("always", "never", "endlessly", "nothing")&lt;br&gt;
Be careful about the use of sarcasm. Everything we do is public; what seems like good-natured ribbing to you and a long-time colleague might come off as mean and unwelcoming to a person new to the project.&lt;br&gt;
Consider one-on-one chats or video calls if there are too many "I didn't understand" or "Alternative solution:" comments. Post a follow-up comment summarizing one-on-one discussion.&lt;br&gt;
If you ask a question to a specific person, always start the comment by mentioning them; this ensures they see it if their notification level is set to "mentioned" and other people understand they don't have to respond.&lt;/p&gt;

&lt;p&gt;Resources:&lt;br&gt;
&lt;a href="https://owasp.org/www-pdf-archive/OWASP_Code_Review_Guide_v2.pdfhttps://dzone.com/articles/java-code-review-checklisthttps://www.codementor.io/blog/code-review-checklist-76q7ovkaqjhttps://owasp.org/www-pdf-archive/OWASP_SCP_Quick_Reference_Guide_v2.pdfhttps://dimikcomputing.com/course/clean-code-online-course/https://stackoverflow.com/questions/7186204/bigdecimal-to-use-new-or-valueofhttps://www.geeksforgeeks.org/use-char-array-string-storing-passwords-java/https://betterprogramming.pub/10-essential-tips-for-writing-secure-rest-api-e297990d48c5https://cloud.google.com/architecture/application-deployment-and-testing-strategieshttps://docs.gitlab.com/ee/development/code_review.html" rel="noopener noreferrer"&gt;https://owasp.org/www-pdf-archive/OWASP_Code_Review_Guide_v2.pdfhttps://dzone.com/articles/java-code-review-checklisthttps://www.codementor.io/blog/code-review-checklist-76q7ovkaqjhttps://owasp.org/www-pdf-archive/OWASP_SCP_Quick_Reference_Guide_v2.pdfhttps://dimikcomputing.com/course/clean-code-online-course/https://stackoverflow.com/questions/7186204/bigdecimal-to-use-new-or-valueofhttps://www.geeksforgeeks.org/use-char-array-string-storing-passwords-java/https://betterprogramming.pub/10-essential-tips-for-writing-secure-rest-api-e297990d48c5https://cloud.google.com/architecture/application-deployment-and-testing-strategieshttps://docs.gitlab.com/ee/development/code_review.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>codereview</category>
      <category>systemdesign</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Sonarqube Installation</title>
      <dc:creator>Azom Shahriar</dc:creator>
      <pubDate>Mon, 02 Aug 2021 13:30:47 +0000</pubDate>
      <link>https://dev.to/azomshahriar/sonarqube-installation-32fk</link>
      <guid>https://dev.to/azomshahriar/sonarqube-installation-32fk</guid>
      <description>&lt;p&gt;SonarQube Installation:&lt;/p&gt;

&lt;p&gt;What is SonarQube?&lt;br&gt;
Ans: SonarQube is an open source platform for continuous inspection of code quality &amp;amp; security. Automatic code review with static analysis to detect bug, code smell, security vulnerability around 20+ languages.It also offers reports of duplicate code, coding standard, unit test, code coverage, code complexity, comments, bugs, security vulnerability.&lt;/p&gt;

&lt;p&gt;Server Installation using docker: &lt;br&gt;
Default server 9000 port&lt;br&gt;
Can be installed by docker , manual ubuntu installation&lt;br&gt;
Ubuntu Installation (&lt;a href="https://developerinsider.co/install-sonarqube-on-ubuntu/" rel="noopener noreferrer"&gt;https://developerinsider.co/install-sonarqube-on-ubuntu/&lt;/a&gt;)&lt;br&gt;
 &lt;br&gt;
Docker command:&lt;br&gt;
 docker pull sonarqube&lt;br&gt;
 docker run -d -p 9000:9000 sonarqube&lt;/p&gt;

&lt;p&gt;Integration with your code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create Project from sonarqube server interface&lt;/li&gt;
&lt;li&gt;Choose project-key and display name&lt;/li&gt;
&lt;li&gt;Copy the token from the server.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Changes build.gradle- &lt;/p&gt;

&lt;p&gt;plugins {&lt;br&gt;
id "org.sonarqube" version "3.0"&lt;br&gt;
}&lt;br&gt;
Gradle Command for Single Module App:&lt;/p&gt;

&lt;p&gt;./gradlew sonarqube \&lt;br&gt;
-Dsonar.projectKey= \&lt;br&gt;
-Dsonar.host.url= \&lt;br&gt;
-Dsonar.login=&lt;br&gt;
Gradle Command for Multi module App:&lt;/p&gt;

&lt;p&gt;./gradlew ::sonarqube \&lt;br&gt;
-Dsonar.projectKey=\&lt;br&gt;
-Dsonar.host.url= \&lt;br&gt;
-Dsonar.login=&lt;/p&gt;

&lt;p&gt;After running command you will find all vulnerability at sonarqube server dashboard.&lt;/p&gt;

</description>
      <category>codequality</category>
      <category>codereview</category>
    </item>
    <item>
      <title>5 idea for a Java backend developer can do free time.</title>
      <dc:creator>Azom Shahriar</dc:creator>
      <pubDate>Sun, 25 Jul 2021 13:31:31 +0000</pubDate>
      <link>https://dev.to/azomshahriar/5-idea-for-a-java-backend-developer-can-do-free-time-52nn</link>
      <guid>https://dev.to/azomshahriar/5-idea-for-a-java-backend-developer-can-do-free-time-52nn</guid>
      <description>&lt;p&gt;1.Involving Open Source community project like (Apache Kafka, Apache pinot, Apache fineract, Apache tomcat, Spring Project, MySQL, PostGRE, TIDB, Redis, Linux, Kubernetes, keycloak.) Or Involve any interesting project/team that can help in more learning.&lt;/p&gt;

&lt;p&gt;2.Learn new tech like BlockChain,DeFI,NFT,AI&amp;amp; Data Science.&lt;/p&gt;

&lt;p&gt;3.Continue Programming &amp;amp; DSA practice.&lt;/p&gt;

&lt;p&gt;4.Educate Community /Junior or create tech content.&lt;/p&gt;

&lt;p&gt;5.Continue Learning(Clean Code, Architecture, Design Pattern, SOLID,DRY, System Design,Security,Performance,Scalability,Distributed System, Micro Service,K8, new language like go, rust, elixir)&lt;/p&gt;

</description>
    </item>
    <item>
      <title>BackEnd Development checklist to ensure application performance and maintainable code.</title>
      <dc:creator>Azom Shahriar</dc:creator>
      <pubDate>Tue, 20 Jul 2021 20:00:27 +0000</pubDate>
      <link>https://dev.to/azomshahriar/backend-development-checklist-to-ensure-application-performance-and-maintainable-code-5bi4</link>
      <guid>https://dev.to/azomshahriar/backend-development-checklist-to-ensure-application-performance-and-maintainable-code-5bi4</guid>
      <description>&lt;p&gt;Few notes for backend developer which will help to write better production code.&lt;/p&gt;

&lt;p&gt;1.Always check any possibility of a null pointer exception.&lt;/p&gt;

&lt;p&gt;2.Remove redundant/extra DB or network call. (Query in a loop, N+1 query)&lt;br&gt;
3.In case of database connection, properly use connection pool, pool size, idle size, queue size, monitor pool resource.&lt;/p&gt;

&lt;p&gt;4.When querying/searching, think about table size and param index or any performance impact at high load.&lt;/p&gt;

&lt;p&gt;5.Measure and profile Database query latency.&lt;/p&gt;

&lt;p&gt;6.Handle DB TimeOut(Connection, Read) properly.&lt;/p&gt;

&lt;p&gt;7.When network call (REST, in-memory DB, Message Queue), use proper connection pool configuration. (Pool Size, Queue Size, Rejection or exhaustion policy).&lt;/p&gt;

&lt;p&gt;8.When third party call, handle Time out(connection &amp;amp; read), try to implement circuit breaker and bulkhead pattern.&lt;/p&gt;

&lt;p&gt;9.Always think about the asynchronous process.&lt;/p&gt;

&lt;p&gt;10.Be careful about shared resources and critical sections.&lt;/p&gt;

&lt;p&gt;11.Try to avoid member variable at spring singleton bean.&lt;br&gt;
Class Name, class size, method name, method size, and variable name should follow clean code rules.&lt;/p&gt;

&lt;p&gt;12.Ask yourself, is my method unit testable?&lt;/p&gt;

&lt;p&gt;13.Meaningful tag after each release.&lt;/p&gt;

&lt;p&gt;14.Every git commit will be an independent feature.&lt;/p&gt;

&lt;p&gt;15.Use cache as much as possible.&lt;/p&gt;

&lt;p&gt;16.Think about Spring Bean Scope(Singleton, Request &amp;amp; prototype).&lt;/p&gt;

&lt;p&gt;17.Try as much automation(Testing, CI &amp;amp; CD)&lt;/p&gt;

&lt;p&gt;18.Try to retrieve data from pre-calculated data using the scheduled job.&lt;/p&gt;

&lt;p&gt;19.Avoid redundant or any extra variable assignment.&lt;/p&gt;

&lt;p&gt;20.Should maintain a proper log with the appropriate level.&lt;/p&gt;

&lt;p&gt;21.Follow logging and tracing standard rules.&lt;/p&gt;

&lt;p&gt;22.Try as much documentation or note so that QA &amp;amp; System team and another stakeholder do not ask the Developer. Mostly when developers change the config, DB structure, migration script, framework version, library, runtime environment(JDK, python), dependency, new technology.&lt;/p&gt;

&lt;p&gt;23.Isolate scheduled jobs from the main application and use standard tools(Jenkins).&lt;/p&gt;

&lt;p&gt;24.While writing complex queries, check raw queries and analyze the query using DB tools(like MySQL explain command).&lt;/p&gt;

</description>
      <category>backenddev</category>
    </item>
  </channel>
</rss>
