For loop in Java

 

For loop in Java


1. For loop

 Syntax

for (initialization; termination; increment) {
    statement(s)
}
  • The initialization expression initializes the loop; it's executed once, as the loop begins.
  • When the termination expression evaluates to false, the loop terminates.
  • The increment expression is invoked after each iteration through the loop; it is perfectly acceptable for this expression to increment or decrement a value.

 Flow of the for loop


First step:
 In for loop, initialization happens first and only one time, which means that the initialization part of for loop only executes once.


Second step: Condition in for loop is evaluated on each iteration, if the condition is true then the statements inside for loop body gets executed. Once the condition returns false, the statements in for loop does not execute and the control gets transferred to the next statement in the program after for loop.

Third step: After every execution of for loop’s body, the increment/decrement part of for loop executes that updates the loop counter.


Fourth step: After the third step, the control jumps to the second step and the condition is re-evaluated.

Example for Loop

public class ForLoopExample {
    public static void main(String args[]) {
        // here, n is declared inside of the for loop
        for (int n = 10; n > 0; n--)
            System.out.println("tick " + n);
    }
}
Output:
tick 10
tick 9
tick 8
tick 7
tick 6
tick 5
tick 4
tick 3
tick 2
tick 1
Note that we have declared a loop control variable inside the a for loop. When you declare a variable inside a for loop, there is one important point to remember: the scope of that variable ends when the for statement does.
When the loop control variable will not be needed elsewhere, most Java programmers declare it inside the for. For example, here is a simple program that tests for prime numbers. Notice that the loop control variable, i , is declared inside the for since it is not needed elsewhere.
public class ForLoopFindPrime {
    public static void main(String args[]) {
        int num;
        boolean isPrime;
        num = 14;
        if (num < 2)
            isPrime = false;
        else
            isPrime = true;
        for (int i = 2; i <= num / i; i++) {
            if ((num % i) == 0) {
                isPrime = false;
                break;
            }
        }
        if (isPrime)
            System.out.println("Prime");
        else
            System.out.println("Not Prime");
    }
}
Output:
Not Prime

2. For-Each

Beginning with JDK 5, the second form of for was defined that implements a “for-each” style loop. Enhanced for loop is useful when you want to iterate Array/Collections, it is easy to write and understand.

Syntax

for(type itr-var : collection) statement-block
Here, type specifies the type and itr-var specifies the name of an iteration variable that will receive the elements from a collection, one at a time, from beginning to end.
Here is an entire program that demonstrates the for-each version:
public class ForEachExample {
    public static void main(String args[]) {
        int nums[] = {
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10
        };
        int sum = 0;
        // use for-each style for to display and sum the values
        for (int x: nums) {
            System.out.println("Value is: " + x);
            sum += x;
        }
        System.out.println("Summation: " + sum);
    }
}
Output:
Value is: 1
Value is: 2
Value is: 3
Value is: 4
Value is: 5
Value is: 6
Value is: 7
Value is: 8
Value is: 9
Value is: 10
Summation: 55

The for-each Loop is Essentially Read-Only

There is one important point to understand about the for-each style loop. Its iteration variable is “read-only” as it relates to the underlying array. An assignment to the iteration variable has no effect on the underlying array. In other words, we can’t change the contents of the array by assigning the iteration variable a new value.
For example, consider this program:
package net.javaguides.corejava.controlstatements.loops;

public class ForEachNoChange {
    public static void main(String args[]) {
        int nums[] = {
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10
        };
        for (int x: nums) {
            System.out.print(x + " ");
            x = x * 10; // no effect on nums
        }
        System.out.println();
        for (int x: nums)
            System.out.print(x + " ");
        System.out.println();
    }
}
Note that the first for loop increases the value of the iteration variable by a factor of 10. However, this assignment has no effect on the underlying array nums, as the second for loop illustrates.

The for-each Loop - Iterating Over Multidimensional Arrays

The enhanced version of the for also works on multidimensional arrays. The following program uses the for-each style for a two-dimensional array:
package net.javaguides.corejava.controlstatements.loops;

public class ForEachMultidimensionalArrays {
    public static void main(String args[]) {
        int sum = 0;
        int nums[][] = new int[3][5];
        // give nums some values
        for (int i = 0; i < 3; i++)
            for (int j = 0; j < 5; j++)
                nums[i][j] = (i + 1) * (j + 1);
        // use for-each for to display and sum the values
        for (int x[]: nums) {
            for (int y: x) {
                System.out.println("Value is: " + y);
                sum += y;
            }
        }
        System.out.println("Summation: " + sum);
    }
}
Output:
Value is: 1
Value is: 2
Value is: 3
Value is: 4
Value is: 5
Value is: 2
Value is: 4
Value is: 6
Value is: 8
Value is: 10
Value is: 3
Value is: 6
Value is: 9
Value is: 12
Value is: 15
Summation: 90

Search an Array Using for-each Style Example

The following program uses a for each loop to search an unsorted array for a value. It stops if the value is found.
package net.javaguides.corejava.controlstatements.loops;

public class ForEachSearchArray {
    public static void main(String args[]) {
        int nums[] = {
            6,
            8,
            3,
            7,
            5,
            6,
            1,
            4
        };
        int val = 5;
        boolean found = false;
        // use for-each style for to search nums for val
        for (int x: nums) {
            if (x == val) {
                found = true;
                break;
            }
        }
        if (found)
            System.out.println("Have found value");
    }
}
Output:
Have found value
The for-each style for is an excellent choice in this application because searching an unsorted array involves examining each element in a sequence.

Regression testing Vs Retesting

     Regression testing Vs Retesting

    1. Retesting

    Retesting là một quy trình kiểm tra lại các testcase failed trong lần cuối cùng thực hiện test. Nói chung, tester tìm bug đó trong quá trình kiểm thử và assign lại cho Dev fix. Sau khi Dev fix xong thì đẩy lại cho Tester kiểm tra lại. Quá trình liên tục này được gọi là Re-testing.


    Retesting
     có nghĩa là kiểm tra lại. Khi bạn lặp lại một kiểm thử thì đó chính là retest. Bạn có thể test lại chức năng của phiên bản hiện tại, một bug đã fix, chức năng của phiên bản trước đó hay một test case bạn vừa thực hiện, vv…

    Việc re-test này chỉ thực hiện kiểm thử ở chỗ đã xảy ra lỗi trước đó, tức là trước đó lỗi ở đâu thì sau khi sửa mình sẽ test lại đúng chỗ đó.

    2. Regression testing

    Regression testing – kiểm thử hồi quy: là một loại kiểm thử phần mềm để đảm bảo rằng việc sửa lỗi, hay sửa đổi, cập nhật chức năng không làm sinh ra lỗi mới liên quan đến các phần được sửa đổi đó. Tức là việc này có thể test lặp lại những phần mà trước đây đã từng test rồi, và mục đích ở lần này là để phát hiện liệu phần sửa đổi kia có là nguyên nhân gây ra lỗi hay không.

    Thông thường, ta sẽ thực hiện regression testing khi:

    • Ứng dụng có thêm một function mới nào đó
    • Có yêu cầu thay đổi (Change Requirement)
    • Sau khi sửa lỗi
    • Sau khi sửa lỗi hiệu năng
    • Môi trường ứng dụng thay đổi (VD: Chuyển đổi Database từ MySQL sang Oracle…)

    3. So sánh Retesting với Regression testing

    REGRESSION TESTINGRETESTING
    Kiểm thử hồi quy được thực hiện để đảm bảo các thay đổi không ảnh hưởng đến các chức năng hiện có.Kiểm thử lại được thực hiện để đảm bảo rằng các test case failed trước đó đã pass khi các bug được sửa
    Kiểm thử hồi quy được thực hiện để xác minh xem liệu có chức năng hiện có nào bị ảnh hưởng hay không, liên quan đến sự thay đổi đó.Kiểm thử lại được thực hiện trên việc bug log trước đó đã được sửa.
    Tùy theo tình hình dự án, regressiton testing có thể được thực hiện song song với retesting.Retesting được đánh giá có độ ưu tiên cao hơn so với regression testing, nên thường được thực hiện trước regresstion testing.
    Verify defect không thuộc kiểm thử hồi quyVerify defect là một phần của retesting.
    Ta thường thực hiện kiểm thử tự động với regresstion testing, thực hiện manually có thể tốn nhiều chi phí và thời gian.Ta không thể thực hiện tự động với những case cần retest.
    Regresstion testing được biết đến như là một loại kiểm thử chung chung.Re-testing là một kiểu kiểm thử có kế hoạch.
    Việc thực hiện test này có thể thực hiện trên cả những test case đã từng pass trước đó.Re-testing chỉ thực hiện trên những test case fail.
    Regresstion test case được đưa ra dựa vào mô tả chức năngThực hiện re-testing với cùng bộ dữ liệu test, môi trường test.


    Stress Test, Performance Test, LoadTest

       

      Stress Test, Performance Test, LoadTest


      1. Stress Test là gì?

      Stress test là quá trình xác định khả năng duy trì một mức độ hiệu quả nhất định trong các điều kiện không thuận lợi của máy tính, mạng, chương trình hoặc thiết bị. Nói dễ hiểu hơn thì stress test giúp kiểm tra tính ổn định của hệ thống.

      Quá trình này có thể bao gồm các bài kiểm tra định lượng được thực hiện trong phòng thí nghiệm, chẳng hạn như đo tần số lỗi hoặc sự cố hệ thống. Thuật ngữ này cũng đề cập đến đánh giá định tính các yếu tố như tính khả dụng hoặc khả năng chống lại các cuộc tấn công từ chối dịch vụ (DoS). Stress test thường được thực hiện cùng với quá trình kiểm tra hiệu suất tổng quát hơn.

      Khi tiến hành stress test, một môi trường bất lợi được cố tình tạo ra và duy trì. Các hành động liên quan có thể bao gồm:

      • Chạy một số ứng dụng sử dụng nhiều tài nguyên trong máy tính cùng một lúc
      • Cố gắng hack vào máy tính và sử dụng nó như một zombie để phát tán thư rác
      • Làm tràn ngập một máy chủ bằng các e-mail vô dụng
      • Thực hiện nhiều nỗ lực đồng thời để truy cập vào một trang web
      • Cố gắng lây nhiễm virus, Trojan, phần mềm gián điệp hoặc phần mềm độc hại khác vào hệ thống.

      Tình trạng bất lợi được làm cho xấu dần đi cho đến khi mức hiệu suất giảm xuống dưới một ngưỡng tối thiểu nhất định hoặc hệ thống hoàn toàn ngưng hoạt động. Để có được kết quả hữu ích nhất, các yếu tố riêng lẻ sẽ được lần lượt thay đổi từng cái một. Điều này giúp có thể dễ dàng xác định các điểm yếu và lỗ hổng cụ thể.

      Ví dụ,Một máy tính có thể có nhiều bộ nhớ nhưng khả năng bảo mật lại không tương xứng. Một hệ thống như vậy có thể chạy nhiều ứng dụng đồng thời mà không gặp sự cố, nhưng dễ dàng gặp sự cố khi bị tấn công bởi tin tặc.

      Stress test có thể tốn thời gian và khá tẻ nhạt. Tuy nhiên, một số người làm nhiệm vụ stress test thích nhìn một hệ thống bị “sụp đổ” dưới các cuộc tấn công ngày càng dữ dội hoặc khi thay đổi những yếu tố khác nhau. Stress test có thể cung cấp một phương tiện để đo lường sự suy thoái, khả năng duy trì chức năng hạn chế của một hệ thống, ngay cả khi một phần lớn của nó đã bị xâm phạm.

      Khi quá trình kiểm tra đã gây ra lỗi trên hệ thống, yếu tố cuối cùng của stress test là xác định mức độ hay tốc độ mà một hệ thống có thể phục hồi sau một sự kiện bất lợi.

      2. Khi nào sử dụng Stress Test?

      Stress Test trên web hay ứng dụng là điều rất quan trọng với những trang web hay ứng dụng về những sự kiện lớn như bán vé cho một buổi hòa nhạc nổi tiếng với nhu cầu cao của người dân. Vì vậy, điều quan trọng là kiểm tra thường xuyên với khả năng chịu tải của hệ thống. Điều này cũng giúp bạn chuẩn bị cho các tình huống bất ngờ, dành nhiều thời gian hơn và nguồn lực để khắc phục bất kỳ sự cố nào.

      3. Performance Test là gì?

      Performance Test là một loaị kiểm thử để xác định tốc độ của máy tính, tốc độ mạng hoặc thiết bị. Nó kiểm thử hiệu suất của các thành phần của một hệ thống bằng cách truyền các tham số khác nhau trong những kịch bản test khác nhau.

      4. Khi nào sử dụng Performance Test?

      Performance Test được thực hiện để kiểm tra hiệu suất của máy chủ trang web, cơ sở dữ liệu và mạng. Nếu bạn đang áp dụng phương pháp thác nước, thì điều quan trọng là bạn phải kiểm tra từng lần phát hành phiên bản mới. Tuy nhiên, nếu bạn đang sử dụng cách tiếp cận phát triển phần mềm nhanh, thì bạn cần kiểm thử ứng dụng liên tục.

      5. Load Test là gì?

      Load Test là quá trình mô phỏng độ chịu tải thực tế của bất kỳ ứng dụng hoặc trang web nào. Nó kiểm thử cách ứng dụng hoạt động trong điều kiện hoạt động bình thường và hoạt động hiệu suất cao. Loại kiểm thử này được áp dụng cho những dự án gần đi đến giai đoạn hoàn thành.

      6. Khi nào sử dụng Load Test?

      Load Test được thực hiện để xác định hệ thống có thể quản lý, xử lý lệnh của bao nhiêu người dùng. Bạn cũng có thể kiểm tra các tình huống khác nhau cho phép bạn tập trung vào các phần khác nhau của hệ thống. Giống như trang chủ hoặc trang web thanh toán của bạn để thử nghiệm mức tải của web. Nó cũng giúp bạn xác định cách xây dựng và duy trì trong hệ thống.

      7. So sánh Performance Test, Load Test và Stress Test

      PERFORMANCE TESTLOAD TESTSTRESS TEST
      Bao gồm cả Load Test và Stress TestLà một loại của Performance TestLà một loại của Performance Test
      Giúp tạo ra thiết lập chuẩn và tiêu chuẩn cho ứng dụngGiúp nhận ra giới hạn của hệ thống, thiết lập SLA của ứng dụng và kiểm tra hệ thống có khả năng chịu tải như thế nàoKiểm tra xem hệ thống hoạt động như thế nào khi quá tải và cách hệ thống phục hồi khi xảy ra lỗi
      Mục đích của Performance Test là tạo ra hướng dẫn về cách hệ thống hoạt động khi ở điều kiện bình thườngTạo ra những kịch bản khi hệ thống hoạt động quá tảiStress Test nhằm đảm bảo rằng khi hoạt động trong điều kiện tải cao trong một khoảng thời gian cố định sẽ không bị crash
      Việc sử dụng tài nguyên, khả năng đáp ứng và độ tin cậy của sản phẩm được kiểm tra ở phương pháp kiểm thử nàyCác thuộc tính được kiểm tra trong một bài kiểm tra tải là hiệu suất hoạt động lúc cao điểm, số lượng máy chủ và thời gian phản hồi.Loại kiểm thử này kiểm tra thời gian phản hồi ổn định, v.v.
      Trong Performance Test, giới hạn tải bao gồm cả dưới và trên ngưỡng nghỉ.Trong Load Test giới hạn tải là ngưỡng ngắt.Trong Stress Test giới hạn tải là trên ngưỡng nghỉ.
      Ví dụ: Kiểm tra nhiều người dùng cùng một thời điểm, kết nối HTTP hoặc kiểm tra thời gian phản hồi thích hợp.Ví dụ : Kiểm tra trình xử lý từ bằng cách thay đổi một phần lớn data, kiểm tra máy in bằng cách truyền dữ liệu nặng. Kiểm tra máy chủ mail với hàng ngàn người dùng đồng thời.Ví dụ : Đột nhiên tắt và khởi động lại các port của một mạng lưới lớn.
      Tại sao thực hiện Performance Test?Tại sao thực hiện Load Test?Tại sao thực hiện Stress Test?
      Để kiểm tra xem ứng dụng đang hoạt động chính xác hay khôngTìm ra lỗi mà không thể tìm ra với bất kỳ phương pháp thử nghiệm khác. Chẳng hạn như rò rỉ bộ nhớ, lỗi quản lý bộ nhớ, tràn bộ đệm, v.v …Nó giúp các đơn vị kiểm tra hệ thống khi xảy ra lỗi.
      Để phù hợp với nhu cầu hoạt động của doanh nghiệpĐể phù hợp với nhu cầu hoạt động của doanh nghiệpĐể đảm bảo rằng hệ thống có sao lưu dữ liệu trước khi xảy ra lỗi hay không
      Tìm, phân tích và khắc phục các vấn đề về hiệu suấtĐể xác định độ ổn định của một ứng dụngĐể kiểm tra xem bất kì trục trắc nào làm ảnh hưởng xấu đến an ninh hệ thống hay không
      Xác định tất cả phần cứng để đưa ra dự kiến tải phù hợp.Để kiểm tra xem cơ sở hạ tầng hiện tại có đủ để chạy ứng dụng hay không.
      Thực hiện kế hoạch về nhu cầu đáp ứng năng lực trong tương lai của ứng dụngSố lượng người dùng đồng thời mà một ứng dụng có thể hỗ trợ và khả năng mở rộng để cho phép nhiều người dùng truy cập vào nó


      4 giá trị cốt lõi và 12 quy tắc của Agile

       

      4 giá trị cốt lõi và 12 quy tắc của Agile


      Trong khi Agile manifesto nói đến 4 giá trị cốt lõi của Agile, thì Agile Principles đề cập đến các định hướng, giúp cho team triển khai dễ hàng hơn hơn khi áp dụng Agile trong công việc. Vậy thì 4 giá trị cốt lõi và 12 quy tắc của Agile là gì? chúng ta cùng đi tìm hiểu

      1. Bốn Giá Trị Cốt Lõi




          1. Individuals and Interactions Over Processes and Tools
              Cá nhân và tương tác hơn là quy trình và công cụ

          2. Working Software Over Comprehensive Documentation
              Phần mềm hoạt động tốt hơn là tài liệu đầy đủ

          3. Customer Collaboration Over Contract Negotiation
              Hợp tác với khách hàng hơn là đàm phán hợp đồng

          4. Responding to Change Over Following a Plan
              Ứng phó, phản hồi với các thay đổi hơn là làm theo kế hoạch

      2. Mười Hai Quy Tắc Agile




      -1-Customer satisfaction through early and continuous software delivery
          Ưu tiên sự hài lòng của khách hàng thông qua việc trao đổi và bàn giao liên tục Khách hàng sẽ cảm thấy hài lòng khi họ nhận được sản phẩm làm việc đều đặn thay vì chờ đợi thời gian kéo dài giữa các lần releases


      -2-Accommodate changing requirements throughout the development process
          Chào đón việc thay đổi trong suốt quá trình phát triển Tránh sự chậm trễ khi có yêu cầu thay đổi requirement


      -3-Frequent delivery of working software
          Delivery sản phẩm thường xuyên Chuyển giao phần mềm sử dụng được định kỳ, từ một vài tuần đến một vài tháng, với một thời gian ngắn hơn.


      -4-Business people and developers must work together daily throughout the project.
          Khách hàng và đội phát triển phải làm việc cùng nhau hàng ngày trong suốt dự án.


      -5-Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
          Xây dựng các dự án xoay quanh các cá nhân có động lực. Tạo cho họ một môi trường và hỗ trợ họ những thứ cần thiết và tin tưởng họ để công việc được hoàn thành.


      -6-. The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
          Phương pháp hiệu quả nhất là truyền tải thông tin đến vào bên trong đội phát triển là hội thoại mặt-đối-mặt.


      -7-Working software is the primary measure of progress.
          Phần mềm làm việc là thước đo của quá trình.


      -8-Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
          Các quy trình Agile thúc đẩy sự phát triển bền vững. Các nhà tài trợ cho dự án, các nhà phát triển và người dùng cuối có thể duy trì một tốc độ vô hạn định.


      -9-Continuous attention totechnical excellence and good design enhances agility.
          Forcus liên tục đến kỹ thuật xuất sắc và sự thiết kế tốt giúp nâng cao tính linh hoạt.


      -10-Simplicity–the art of maximizing the amount of work not done–is essential.
          Tính đơn giản – nghệ thuật tối đa hoá khối lượng công vệc chưa hoàn thành – là điều thiết yếu.


      -11-Self-organizing teams encourage great architectures, requirements, and designs
          Các thành viên trong nhóm có kỹ năng và động lực, có quyền ra quyết định cần trao đổi thường xuyên với các thành viên khác trong nhóm và chia sẻ ý tưởng để cung cấp được sản phẩm chất lượng.


      -12-At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.
          Ở thời điểm kết thúc sprint, Team nên xem lại làm thế nào để hiệu quả hơn, sau đó đồng thuận Tự cải thiện bản thân, cải tiến quy trình, kỹ thuật của mình sao cho phù hợp



      Sanity Testing Vs Smoke Testing

         Sanity Testing Vs Smoke Testing


        1. What is Smoke Testing?

        Smoke Testing is a software testing technique performed post software build to verify that the critical functionalities of software are working fine. It is executed before any detailed functional or regression tests are executed. The main purpose of smoke testing is to reject a software application with defects so that QA team does not waste time testing broken software application.

        2. What is Sanity Testing?

        Sanity testing is a kind of Software Testing performed after receiving a software build, with minor changes in code, or functionality, to ascertain that the bugs have been fixed and no further issues are introduced due to these changes. The goal is to determine that the proposed functionality works roughly as expected. If sanity test fails, the build is rejected to save the time and costs involved in a more rigorous testing.

        3. Difference between Smoke Testing and Sanity Testing

        Smoke TestingSanity Testing
        Smoke Testing is performed to ascertain that the critical functionalities of the program is working fineSanity Testing is done to check the new functionality/bugs have been fixed
        The objective of this testing is to verify the “stability” of the system in order to proceed with more rigorous testingThe objective of the testing is to verify the “rationality” of the system in order to proceed with more rigorous testing
        This testing is performed by the developers or testersSanity testing in software testing is usually performed by testers
        Smoke testing is usually documented or scriptedSanity testing is usually not documented and is unscripted
        Smoke testing is a subset of Acceptance testingSanity testing is a subset of Regression Testing
        Smoke testing exercises the entire system from end to endSanity testing exercises only the particular component of the entire system
        Smoke testing is like General Health Check UpSanity Testing is like specialized health check up