Lập trình Game2D trên Android bằng Java thuần (bài 2)


Bài 1

Phát triển Game về bản chất vẫn là làm phần mềm nên cũng gồm nhiều công đoạn khác nhau, đại khái qui trình làm Game gồm các khối công việc như sau:

game

Trong các loạt bài này chúng ta chỉ thực hiện  ở nhóm công việc 02 là chủ yếu, các giai đoạn còn lại đòi hỏi phải có thêm kiến thức vể hình ảnh, âm thanh, kịch bản, ….

Trong trò chơi chúng ta chia làm 02 nhóm tài nguyên là hình ảnh và âm thanh được lấy từ bài 01.

Để dễ hình dung chúng ta xem hình sau

game2

Giao diện để thể hiện trò chơi trên Android chúng ta sẽ sử dụng Activity đơn giản để sẽ nhé 😀 về xử lý chúng ta có 02 đối tượng

  1. Đối tượng chức các hình vẽ  (GamePanel)
  2. Đối tượng để xử lý các hình vẽ (Game)

Việc vẽ các đối tượng (30 lần trong 1 giây) và xử lý các đối tượng phải tiến hành song song nhau, ở đây tôi chọn GamePanel ở luồng chính và xử lý các đối tượng tôi sẽ tách chạy luồng riêng. Các thao tác này sẽ lặp đi lặp lại trong cả quá trình trò chơi diễn ra

Nói nhiều cũng rối giờ chúng ta tạo Project Android và 02 đối tượng GamePanel, Game như sau:

game4

Cấu trúc thư mục như trên

Chạy thử nhe

OK như vậy là chúng ta vừa tạo được vòng lặp cho trò chơi của mình.

Nội dung lớp Game

package vn.cusc.javagame2d;
import android.graphics.Canvas;
import android.util.Log;
import android.view.SurfaceHolder;
import java.util.Timer;
import java.util.TimerTask;
/**
 * Created by ntdan on 2/7/17.
 */
public class Game extends Thread {
    public GamePanel gamePanel;
    public SurfaceHolder surfaceHolder;
    Timer timer;
    TimerTask task;

    boolean dangChay = true;
    int soLan =1;

    public Game(final GamePanel gamePanel, final SurfaceHolder surfaceHolder) {
        this.gamePanel = gamePanel;
        this.surfaceHolder = surfaceHolder;

        timer = new Timer();
        task = new TimerTask() {
            @Override
            public void run() {
                if(dangChay)
                {
                    // goi thao tac cap nhat
                    // goi thao tac ve lai
                    gamePanel.capnhat();
                    Canvas canvas = surfaceHolder.lockCanvas();
                    if(canvas != null) {
                        gamePanel.draw(canvas);
                        surfaceHolder.unlockCanvasAndPost(canvas);
                    }
                    // in ra de xem vong lap nhe
                    Log.d("Lan: ", ""+soLan++);
                }else
                {
                    timer.cancel();
                }
            }
        };
    }

    @Override
    public void run() {
        super.run();
        // co nghia la 1000/30 mili giay se goi thuc thi task 1 lan
        timer.scheduleAtFixedRate(task, 0, 1000/30);
    }
}

Lớp GamePanel

package vn.cusc.javagame2d;

import android.content.Context;
import android.graphics.Canvas;
import android.view.SurfaceView;

/**
 * Created by ntdan on 2/7/17.
 */

public class GamePanel extends SurfaceView {
    Game game;

    // cac doi tuong can ve

    public GamePanel(Context context) {
        super(context);
        game = new Game(this, this.getHolder());
    }

    public void chay()
    {
        // tien hanh phan luong
        // luong se thuc thi noi dung o ham run cua lop Game
        game.start();
    }

    public void dung()
    {
        game.dangChay = false;
        game.interrupt();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        ve(canvas);
    }

    public void capnhat()
    {
        // cap nhat cac doi tuong
    }

    public void ve(Canvas canvas)
    {
        // ve lai
    }
}

Thay thế giao diện ứng dụng bằng trò chơi

package vn.cusc.javagame2d;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    GamePanel gamePanel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //setContentView(R.layout.activity_main);

        gamePanel = new GamePanel(MainActivity.this);

        setContentView(gamePanel);
    }

    @Override
    protected void onResume() {
        super.onResume();

        gamePanel.chay();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        gamePanel.dung();
    }
}

Dừng bài 02 đây nhé =>>

Lập trình Game2D trên Android bằng Java thuần (bài 1)


Demo

Trong loạt bài này chúng cùng nhau code một game2d nhỏ để hiểu căn bản về các nội dung cần thực của một trò chơi trên mobile hay máy tính.

Các hình cần thiết:

 

Các file âm thanh cần thiết

Phát thảo căn bản về trò chơi (game play)

  1. Con gà sẽ di chuyển từ trái qua phải và ngược lại
  2. Trong quá trình di chuyển con gà ngẫu nhiên đẻ trứng
  3. Trứng sẽ rơi từ trên xuống, chạm đất sẽ bể và con gà sẽ rơi xuống một ít
  4. Cái rổ hứng trứng nằm trên mặt đất và chỉ có thể đc điều khiển di chuyển qua lại để hứng trứng.
  5. Mỗi trứng hứng đc sẽ tích lũy đc một số điểm nhất định
  6. Cứ mỗi 10 điểm nhận đc thì trò chơi sẽ tăng cấp độ trứng sẽ rơi nhanh hơn
  7. Khi con gà chạm đất trò chơi sẽ kết thúc

Về căn bản thì code một trò chơi là xử lý một vòng lặp

game-loop-fixed

  • Cung cấp trạng thái ban đâu: trong trò này đơn giản là con gà, cái rổ, trứng gà, nền cỏ,…
  • Cập nhật tất cả các dối tượng có trong trò chơi: gà di chuyển trứng rơi, di chuyển rổ, nền cỏ di chuyển,…
  • Vẽ lại các thành phần của trò chơi.

 

Phần 1 dừng đây nhe ->

LẬP TRÌNH Scratch (Thầy Bùi Việt Hà)


LẬP TRÌNH Scratch

Cuốn sách sẽ bao quát tất cả các chủ đề chính của môi trường lập trình Scratch bao gồm: chuyển động, đồ họa, âm thanh, hội thoại, cảm biến, biến nhớ, xử lý số – xâu ký tự – mảng số, thủ tục và clone. Đối tượng của sách có thể là giáo viên tin học, giáo viên thường, học sinh tất cả các cấp từ Tiểu học, THCS, THPT.Về định hướng nội dung của cuốn sách này sẽ là một trung dung giữa ứng dụng thuần túy thực tế và kiến thức hàn lâm của khoa học máy tính. Chúng tôi không đi quá sâu vào học thuật sẽ gây nhàm chán, khó hiểu với học sinh, nhưng cũng không sa đà quá nhiều vào các kỹ năng thiết kế trò chơi, phim hoạt hình, …Nội dung sách sẽ được chia thành nhiều bài học nhỏ. Mỗi bài học đều có chung 1 cấu trúc nhất định. Người học có thể tự học hoặc học, thực hành dưới sự hướng dẫn của giáo viên.tu_hoc_scratch_noindex

MÔ HÌNH SCRUM (Post lại)


Tài liệu không có tiêu đề

TÌM HIỂU VỀ MÔ HÌNH SCRUM

1 Tìm hiểu về phương thức agile:

1.1 Agile là gì ?

1.2 Các tuyên ngôn của Agile :

1.3 Những nguyên tắc của Agile

2. Tìm hiểu Scrum

2.1 Scrum là gì ?

2.2. Ba chân (hay giá trị cốt lõi) của Scrum

2.2.1 Minh bạch (transparency):

2.2.2 Thanh tra (inspection)

2.2.3 Thích nghi (adaptation

2.3 Một số ưu điểm, nhược điểm đặc điểm của Scrum:

2.3.1 Ưu điểm :

2.2.3 Nhược điểm:

3. Quy trình của Scrum :

4. Công cụ Scrum :

4.1 Product backlog :

4.2 Sprint backlog:

4.3. Burndown Chart:

5. Các cuộc họp trong crum:

5.1 Sprint Planning (Họp Kế hoạch Sprint):

5.2 Daily Scrum (Họp Scrum hằng ngày):

5.3 Sprint Review (Họp Sơ kết Sprint):

5.4 Sprint Retrospective (Họp Cải tiến Sprint):

6. Các vai trò sau :

6.1 ScrumMaster :

6.2 Product Owner:

6.3 Team :

6.4 User :

6.5 Stakeholders:

7. Scrum vận hành như thế nào ?

8. Mô hình Scrum:

9. So sánh mô hình thác nước với mô hình Scrum.

10. Tài liệu tham khảo


Mô hình Scrum

Khi tôi viết bài này thì tôi cũng có tìm hiểu về mô hình Scrum trên mạng có rất nhiều nhưng quả thật để đọc và hiểu về mô hình thật là một vấn đề không dễ lúc đầu tôi đọc suốt đọc suốt mình thật sự cũng có được nghe giảng qua nhưng chưa hiểu rồi tôi tiếp tục tìm thêm tài liệu trên mạng về vấn đề này .

Để đi vào vấn đề thì bạn cần hiểu về aglie là gì ? Tại sao mô hình này được gắn với phương thức agile, Scrum là gì, các ưu nhược điểm? Liệu rằng đọc xong tài liệu nào đó bạn thực sự đã hiểu về mô hình? Cách thức hoạt động của mô hình thế nào? Trong mô hình có những ai tham gia? Trước mô hình này đã có mô hình khác, mô hình này đã là được nâng cao từ các mô hình khác như thế nào? Mình có lúc tự đặt quá nhiều câu hỏi rồi không biết trả lời thế nào ? những lúc đó mình đi hỏi đi tìm tài liệu và quả là không đơn giản để hiểu cặn kẽ một vấn đề mà mình là người bước vào nghề với vị trí tester, mình cũng mong qua bài này có gì sai các anh chị đóng gióp thêm cho mình nha kiến thức vô bờ khi ta tìm được gì đó là giống như lượng được một hạt cát nhỏ trên xa mạc vô tận vậy ,

Thôi nói quá nhiều rồi giờ đi vào vấn đề chính, có mấy vấn đề như đã nói ở trên muốn hiểu phải tìm hiểu khái niệm Scrum bạn trước tiên phải biết về agile, qua vài điều sau , agile là gì các tuyên ngôn của agile và nguyên tắc của agile.

1 TÌM HIỂU VỀ PHƯƠNG THỨC AGILE:

1.1 AGILE LÀ GÌ ?

Agile là Phương thức phát triển phần mềm linh hoạt (Agile Software Development) trong vòng đời phát triển phần mềm và đã trở nên phổ biến trong ngành phát triển phần mềm hiện nay.

1.2 CÁC TUYÊN NGÔN CỦA AGILE :

  • Cá nhân và sự tương hỗ quan trọng hơn quy trình và công cụ”
  • Sản phẩm xài được quan trọng hơn tài liệu về sản phẩm”
  • Cộng tác với khách hàng quan trọng hơn đàm phán hợp đồng”
  • Phản hồi với sự thay đổi quan trọng hơn bám theo kế hoạch”

1.3 NHỮNG NGUYÊN TẮC CỦA AGILE

  • Thỏa mãn yêu cầu của khách hàng thông qua việc giao hàng sớm và liên tục
  • Chào đón việc thay đổi yêu cầu, thậm chí là những thay đổi yêu cầu muộn
  • Giao phần mềm chạy được cho khách hàng một cách thường xuyên (giao hàng tuần hơn là hàng tháng)
  • Nhà kinh doanh và kỹ sư lập trình phải làm việc cùng nhau hàng ngày trong suốt dự án
  • Các dự án được xây dựng xung quanh những cá nhân có động lực. Cung cấp cho họ môi trường và sự hỗ trợ cần thiết, và tin tưởng họ để hoàn thành công việc
  • Trao đổi trực tiếp mặt đối mặt là phương pháp hiệu quả nhất để truyền đạt thông tin
  • Phần mềm chạy được là thước đo chính của tiến độ
  • Phát triển bền vững và duy trì được nhịp độ phát triển liên tục
  • Liên tục quan tâm đến kĩ thuật và thiết kế để cải tiến sự linh hoạt
  • Sự đơn giản là cần thiết – nghệ thuật tối đa hóa lượng công việc chưa hoàn thành
  • Nhóm tự tổ chức
  • Thích ứng thường xuyên với sự thay đổi

Trên mình đã giới thiệu sơ qua về agile , sau đây cùng tìm hiểu về Scrum, quy mô và quy trình của nó như thế nào nhé.

2. TÌM HIỂU SCRUM

2.1 SCRUM LÀ GÌ ?

Scrum là một phương pháp linh hoạt (agile), được áp dụng phổ biến, vì thế nó tuân thủ các nguyên tắc của Agile Manifesto (xem thêm Tuyên ngôn Agile) với các đặc điểm lặp và gia tăng cho phép các tổ chức điều chỉnh nhanh chóng khi có sự thay đổi các yêu cầu .

2.2. BA CHÂN (HAY GIÁ TRỊ CỐT LÕI) CỦA SCRUM

Ngoài ra Scrum hoạt động dựa trên ba giá trị cốt lõi, còn gọi là Ba chân của Scrum bao gồm Minh bạch, Thanh tra và Thích nghi.

2.2.1MINH BẠCH (TRANSPARENCY):

Trong Scrum, tính minh bạch được đề cao như là giá trị cốt lõi cơ bản nhất. Muốn thành công với Scrum, thông tin liên quan tới quá trình phát triển phải minh bạch và thông suốt. Các thông tin đó có thể là: tầm nhìn (vision) về sản phẩm, yêu cầu khách hàng, tiến độ công việc, các khúc mắc và rào cản v.v. Từ đó mọi người ở các vai trò các nhau có đủ thông tin cần thiết để tiến hành các quyết định có giá trị để nâng cao hiệu quả công việc. Các công cụ và cuộc họp trong Scrum luôn đảm bảo thông tin được minh bạch cho các bên.Sự minh bạch yêu cầu các yếu tố này cần được định nghĩa theo một tiêu chuẩn để những người quan sát có thể hiểu những gì họ thấy theo cùng một cách.

Ví dụ:

  • Một ngôn ngữ chung về quy trình cần phải được chia sẻ cho tất cả các bên tham gia.
  • Một định nghĩa chung về “Hoàn thành”1 phải được chia sẻ bởi những người đảm đương công việc và những người chấp nhận sản phẩm của công việc đó.

2.2.2 THANH TRA (INSPECTION)

Người sử dụng Scrum phải thường xuyên thanh tra các đồ nghề và tiến độ đến đích để phát hiện các bất thường không theo ý muốn. Tần suất thanh tra không nên quá dày để khỏi ảnh hưởng đến công việc. Công tác thanh tra có ích nhất khi được thực hiện bởi người có kĩ năng tại các điểm quan trọng của công việc.

2.2.3 THÍCH NGHI (ADAPTATION)

Nếu một người thanh tra xác định được rằng có vấn đề nào đó vượt quá giới hạn cho phép, và hậu quả của vấn đề đó đối với sản phẩm là không thể chấp nhận được, thì quy trình hoặccác vật liệu được xử lý (processed material) phải được điều chỉnh. Sự điều chỉnh phải được tiến hành càng sớm càng tốt để giảm thiểu các sai sót khác có thể xảy ra.Scrum cung cấp bốn cơ hội chính thức cho việc thanh tra và thích nghi trong. Scrum có thể phản hồi lại các thay đổi một cách tích cực, nhờ đó mang lại thành công cho dự án.các Sự kiện Scrum, bao gồm:

  • Buổi Họp Kế hoạch Sprint (Sprint Planning Meeting)
  • Họp Scrum hằng ngày (Daily Scrum)
  • Sơ kết Sprint (Sprint Review)
  • Cải tiến Sprint (Sprint Retrospective)

2.3 MỘT SỐ ƯU ĐIỂM, NHƯỢC ĐIỂM ĐẶC ĐIỂM CỦA SCRUM:

2.3.1 CÁC ĐẶC ĐIỂMCỦA SCRUM

  • Là một khuôn khổ quy trình nhẹ phù hợp với sự phát triển nhanh.
  • Là được sử dụng rộng rãi.
  • Thường áp dụng để quản lý phần mềm phức tạp và phát triển sản phẩm, dùng lặp đi lặp lại và gia tăng
  • Giảm thời gian dành cho quản lý, tăng thời gian dành cho việc phát triển,Tăng chất lượng sản phẩm và so với các mô hình cổ điển như mô hình thác nước
  • Cho phép các tổ chức dễ điều chỉnh khi có sự thay đổi yêu cầu nhanh chóng, và sản xuất ra một sản phẩm đáp ứng mục tiêu kinh doanh phát triển.

2.3.2 ƯU ĐIỂM:

  • Một người có thể làm nhiều việc ví dụ như dev có thể test
  • Phát hiện lỗi sớm hơn rất nhiều so với các phương pháp truyền thống
  • Khách hàng nhanh chóng thấy được sản phẩm qua đó đưa ra phản hồi sớm.
  • Có khả năng áp dụng được cho những dự án mà yêu cầu khách hàng không rõ ràng ngay từ đầu.

2.2.3 NHƯỢC ĐIỂM:

  • Trình độ của nhóm là có một kỹ năng nhất định
  • Phải có sự hiểu biết về mô hình aglie .
  • Khó khăn trong việc xác định ngân sách và thời gian.
  • Luôn nghe ý kiến phản hồi từ khách hàng và thay đổi theo nên thời gian sẽ kéo dài khi có quá nhiều yêu cầu thay đổi từ khách hàng.
  • Vai trò của PO rất quan trọng, PO là người định hướng sản phẩm. Nếu PO làm không tốt sẽ ảnh hưởng đến kết quả chung

3. QUY TRÌNH CỦA SCRUM :

Scrum chia dự án thành các vòng lặp phát triển gọi là các sprint. Mỗi sprint thường mất 2- 4 tuần (30 ngày) để hoàn thành. Nó rất phù hợp cho những dự án có nhiều sự thay đổi và yêu cầu tốc độ cao.

Một sprint hoàn thành một chức năng , mục đích nào đó trong toàn hệ thống .Các nhiệm vụ của sprint được chia thành danh mục, đội phát triển sẽ làm việc và đánh giá lại sao cho đạt mục tiêu ban đầu trong khoảng thời gian đề ra.

4. CÔNG CỤ SCRUM :

4.1 PRODUCT BACKLOG :

Đây là danh sách ưu tiên các tính năng (feature) hoặc đầu ra khác của dự án, có thể hiểu như là danh sách yêu cầu (requirement) của dự án. Product Owner chịu trách nhiệm sắp xếp độ ưu tiên cho từng hạng mục (Product Backlog Item) trong Product Backlog dựa trên các giá trị do Product Owner định nghĩa (thường là giá trị thương mại – business value)

 

User stories

Business Priority

Story Point

A

1

5

B

2

6

C

3

9

D

4

1

 4.2 SPRINT BACKLOG:

Đây là bản kế hoạch cho một Sprint; là kết quả của buổi họp lập kế hoạch (Sprint Planning). Với sự kết hợp của Product Owner, nhóm sẽ phân tích các yêu cầu theo độ ưu tiên từ cao xuống thấp để hiện thực hóa các hạng mục trong Product Backlog dưới dạng danh sách công việc (TODO list).

4.3. BURNDOWN CHART:

Đây là biểu đồ hiển thị xu hướng của dự án dựa trên lượng thời gian cần thiết còn lại để hoàn tất công việc,dùng để theo dõi tiến độ của Sprint (được gọi là Sprint Burndown Chart) hoặc của cả dự án (Project Burndown Chart).

 5. CÁC CUỘC HỌP TRONG CRUM:

Nhằm tạo ra môi trường của sự hợp tác gần gũi giữa team member và product owner để phát triễn sản phẩm sẽ có 4 cuộc họp

Trước khi Sprint bắt đầu (Sprint Planning), trong khi Sprint diễn ra (Daily Scrum) và sau khi Sprint kết thúc (Sprint Review và Sprint Retrospective).

5.1 SPRINT PLANNING (HỌP KẾ HOẠCH SPRINT):

Nhóm phát triển gặp gỡ với Product Owner để lên kế hoạch làm việc cho một Sprint (xem thêm phần Sprint bên dưới). Công việc lập kế hoạch bao gồm việc chọn lựa các yêu cầu cần phải phát triển, phân tích và nhận biết các công việc phải làm kèm theo các ước lượng thời gian cần thiết để hoàn tất các tác vụ. Scrum sử dụng cách thức lập kế hoạch từng phần và tăng dần theo thời gian, theo đó, việc lập kế hoạch không diễn ra duy nhất một lần trong vòng đời của dự án mà được lặp đi lặp lại, có sự thích nghi với các tình hình thực tiễn trong tiến trình đi đến sản phẩm.

5.2 DAILY SCRUM (HỌP SCRUM HẰNG NGÀY):

Scrum Master tổ chức cho Đội sản xuất họp hằng ngày trong khoảng 15 phút để Nhóm Phát triển chia sẻ tiến độ công việc cũng như chia sẻ các khó khăn gặp phải trong quá trình phát triển phần mềm suốt một Sprint. Trong cuộc họp mỗi người sẽ trả lời 3 câu hỏi sau:

  • Hôm qua đã làm gì?
  • Hôm nay sẽ làm gì?
  • Có khó khăn trở ngại gì không?

5.3 SPRINT REVIEW (HỌP SƠ KẾT SPRINT):

Cuối Sprint, nhóm phát triển cùng với Product Owner sẽ rà soát lại các công việc đã hoàn tất (DONE) trong Sprint vừa qua và đề xuất các chỉnh sửa hoặc thay đổi cần thiết cho sản phẩm.· Sprint Retrospective (Họp Cải tiến Sprint)Dưới sự trợ giúp của Scrum Master, nhóm phát triển sẽ rà soát lại toàn diện Sprint vừa kết thúc và tìm cách cải tiến quy trình làm việc cũng như bản thân sản phẩm.

5.4 SPRINT RETROSPECTIVE (HỌP CẢI TIẾN SPRINT):

Dưới sự trợ giúp của Scrum Master, nhóm phát triển sẽ rà soát lại toàn diện Sprint vừa kết thúc và tìm cách cải tiến quy trình làm việc cũng như bản thân sản phẩm. Trong buổi họp các vấn đề xoay quanh là :

  • Những việc nào chúng ta nên bắt đầu làm
  • Những việc nào chúng ta không nên làm tiếp
  • Những việc nào chúng ta nên duy trình làm tiếp

6. CÁC VAI TRÒ SAU :

6.1 SCRUMMASTER : (KIỂM THỬ HOẶC LẬP TRÌNH)

Người chịu trách nhiệm làm cho quy trình chạy trơn tru, để loại bỏ những trở ngại mà tác động đến năng suất, và tổ chức, tạo điều kiện cho các cuộc họp quan trọng. Có hiểu biết về quy trình một cách cặn cẽ

6.2 PRODUCT OWNER:(KHÁCH HÀNG HOẶC QUẢN LÝ)

Người quản lý người cung cấp yêu cầu “, nguồn tin duy nhất của chân lý” cho nhóm liên quan đến yêu cầu và kế hoạch của họ để triển khai thực hiển. Người có mọi quyền quyết định có thể thực hiện sprint hay loại bỏ sprint, một người biết về yêu cầu rõ nhất.

6.3 TEAM :

Một tự tổ chức và sự liên quan giữa các bộ phận phát triển và thử nghiệm, những người làm làm việc bằng tay để ra sản phẩm; chịu trách nhiệm sản xuất sản phẩm.

6.4 USER :

người sử dụng sản phẩm

6.5 STAKEHOLDERS:

có thể đội hỗ trợ, khách hàng

7. SCRUM VẬN HÀNH NHƯ THẾ NÀO ?

Product Owner tạo ra Product Backlog chứa các yêu cầu của dự án với các hạng mục được sắp theo thứ tự ưu tiên. Đội sản xuất sẽ thực hiện việc hiện thực hóa dần các yêu cầu của Product Owner với sự lặp đi lặp lại các giai đoạn rút từ 1 đến 4 tuần làm việc (gọi Là Sprint) với đầu vào là các hạng mục trong Product Backlog, đầu ra là các gói phần mềm hoàn chỉnh có thể chuyển giao được (Potentially Shippable Product Increment).

  • Khởi đầu sprint là Start sprint meeting, đội sản xuất cùng họp với Product Owner (PO), PO giải thích cho đội dự án về những yêu cầu . Team cùng làm việc với PO để đưa ra một Sprint Backlog bao gồm những thông tin: Task, priority, estimation, đánh giá mức độ khó của từng task, phân chia công việc (Cả 2 sẽ thống nhất những gì có thể làm trong sprint hiện tại).=> Kết quả của buổi lập kế hoạch (theo cách làm của Scrum) là Sprint Backlog chứa các công việc cần làm trong suốt một Sprint.
  • Trong suốt quá trình thực hiện sprint, nhóm sẽ phải cập nhật Sprint Backlog và thực hiện công việc họp hằng ngày (Daily Scrum) để chia sẻ tiến độ công việc cũng như các vướng mắc trong quá trình làm việc cùng nhau. Mỗi thành viên sẽ nói nhanh gọn về những gì đã làm trong ngày hôm trước, những gì sẽ làm và những khó khăn trong lúc thực hiện các task được phân công. Nhóm được trao quyền để tự quản lí và tổ chức lấy công việc của mình để hoàn thành công việc trong Sprint.
  • Khi kết thúc Sprint team sẽ có buổi họp Sơ kết Sprint (Sprint Review) ở cuối Sprint, Team sẽ demo những gì đã làm, chức năng hoàn chỉnh, sẵn sàng chuyển giao (shippable) cho PO. PO sẽ đánh giá những gì Team làm có đúng với yêu cầu không và đưa ra Feedback (nếu PO là BA thì cần phải trao đổi với khách hàng nếu cần). Những feedback của khách hàng (bao gồm cả lỗi) sẽ được đưa vào sprint tiếp theo. =>sẽ giúp khách hàng thấy được nhóm đã có thể chuyển giao những gì, còn những gì phải làm hoặc còn gì phải thay đổi hay cải tiến.
  • Sau khi kết thúc việc đánh giá Sprint, Scrum Master và nhóm cùng tổ chức họp Cải tiến Sprint (Sprint Retrospective) để tìm kiếm các cải tiến trước khi Sprint tiếp theo bắt đầu, điều này sẽ giúp nhóm liên tục học hỏi và trưởng thành qua từng Sprint.

Các Sprint sẽ được lặp đi lặp lại cho tới khi nào các hạng mục trong Product Backlog đều được hoàn tất hoặc khi Product Owner quyết định có thể dừng dự án căn cứ tình hình thực tế. Do sử dụng chiến thuật “có giá trị hơn làm trước” nên các hạng mục mang lại nhiều giá trị hơn cho chủ dự án luôn được hoàn tất trước. Do đó Scrum luôn mang lại giá trị cao nhất cho người đầu tư cho dự án. Do quy trình luôn luôn được cải tiến, nhóm Scrum thường có năng suất lao động rất cao. Đây là hai lợi ích to lớn mà Scrum mang lại cho tổ chức.

8. VÍ DỤ SCRUM:

ví du: Bạn có một kế hoạch trong vòng 1 năm.

Tháng 1 chỉ có thể làm dc kế hoach #1, 2

Tháng 2 thì bạn chỉ làm #3 vì lý do làm việc khác

Tháng 3 thì bạn phải làm kết hoach#5 vì cái này quan trong trong tháng 3

Cho đến hết 1 năm

Sau đây bạn xác định product backlog, sprint backlog,

Product backlog là Kế hoạch 1 năm

Sprint backlog là kế hoạch trong từ tháng

Xác định khi nào thì ScrumMaster, Product owner, team tham gia vào Scrum,

ScrumMaster: đưa ra quy trình

Product owner: là người hiểu rõ yêu cầu

Team: tham gia khi sprint bắt đầu

9. SO SÁNH MÔ HÌNH THÁC NƯỚC VỚI MÔ HÌNH SCRUM.

http://luanvan.co/luan-van/de-tai-tim-hieu-ve-agile-project-management-53576/

 

Agile

Scrum

Linh hoạt

Cứng nhắc

Các bước chồng chất ko cần trình tự

Các bước tách biệt yêu cầu tuần tự

Luôn chấp nhận sự thay đổi

Rất hạn chế sự thay đổi

Không có kế hoạch cố định

Có kế hoạch từ ban đầu

Phù hợp với dự án chưa xác định mục tiêu cuối cùng

Dùng cho dự án mà có kế hoạch đầy đủ yêu cầu và mục tiêu

Biểu đồ so sánh tỉ lệ thành công của mô hình agile với mô hình waterfall

 

Nguồn: https://docs.google.com/document/d/1Woav-WLo-ot6OgOiOyuCql7YvXOUS3CujDnwQPOKbkU/edit?usp=sharing

 

 

Web site dạy SQLite database rất chi tiết


http://www.sqlitetutorial.net/

SQLite Tutorial

This SQLite tutorial teaches you everything you need to know to start using SQLite effectively. You will learn SQLite through extensive hands-on practices.

SQLite TutorialIf you have been working with other relational database management systems e.g., MySQL, PostgreSQL, Oracle, Microsoft SQL Sever, etc., and you heard about SQLite. And you are curious to know more about it.

If your friends recommended you use SQLite database instead of simple files to manage structured data in your applications. You want to get started with SQLite immediately to see if you can utilize it for your apps.

If you are just starting out learning SQL and want to use SQLite as the database system.

If you are one of the people described above, this SQLite tutorial is for YOU.

SQLite is an open source, zero-configuration, self-contained, stand alone, transaction relational database engine designed to be embedded into an application.

Getting started with SQLite

You should go through this section if this is the first time you have worked with SQLite. Follow these 3-easy steps to get started with SQLite fast.

  1. First, we help you answer the first important question: what is SQLite? You will have a brief overview of SQLite before you start working with it.
  2. Second, we show you step by step how to download and install SQLite GUI tool on your computer.
  3. Third, we introduce you to an SQLite sample database and walk you through the steps of using the sample database for practicing.

Basic SQLite tutorial

This section presents basic SQL statements that you can use with SQLite. You will first start querying data from the sample database. If you are already familiar with SQL, you will notice the differences between SQL-standard and SQL dialect in SQLite.

  • SQLite Select – query data from a single table using SELECT statement.
  • SQLite Order By – sort the result set in either ascending or descending order.
  • SQLite Select Distinct – query unique rows from a table using the DISTINCT clause.
  • SQLite Where  – filter rows of a result set using various conditions.
  • SQLite Limit – constrain the number of rows that you want to return. The LIMIT clause helps you get necessary data returned by a query.
  • SQLite IN – check if a value matches any value in a list of value or subquery.
  • SQLite Like – query data based on pattern matching using wildcard characters: percent sign (%) and underscore (_).
  • SQLite Glob – determine whether a string matches a specific UNIX-pattern.
  • SQLite Group By – combine set of rows into groups based on specified criteria. The GROUP BYclause helps you summarize the data for reporting purposes.
  • SQLite Having – specify the conditions to filter the groups summarized by the GROUP BY clause.
  • SQLite Inner Join – query data from multiple tables using inner join clause.
  • SQLite Left Join – combine data from multiple tables using left join clause.
  • SQLite Cross Join – show you how to use the cross join clause to produce a cartesian product of result sets of the tables involved in the join.
  • SQLite Self Join – join a table to itself to create a result set that joins rows with other rows within the same table.
  • SQLite Union – combine result sets of multiple queries into a single result set. We also discuss the differences between UNION and UNION ALL clauses.
  • SQLite Full Outer Join – show you how to emulate the full outer join in the SQLite using left join and union clauses.
  • SQLite Case – add conditional logic to the query.
  • SQLite Subquery – introduce you to the SQLite subquery and correlated subquery.

Mastering update data in SQLite

This section guides you how to update data in the table using insert, update, and delete statements.

Working with database objects

In this section, we show you how to create database objects such as tables, views, indexes using SQL data definition language.

  • SQLite Data Types – introduce you to the SQLite dynamic types system and its important concepts: storage classes, manifest typing, and type affinity.
  • SQLite Create Table – show you how to use the CREATE TABLE statement to create a new table in the database.
  • SQLite Primary Key – show you how to use PRIMARY KEY constraint to define the primary key for a table.
  • SQLite AUTOINCREMENT – explain how AUTOINCREMENT attribute works and why you should avoid using it.
  • SQLite Alter Table – show you how to use the ALTER TABLE statement to add a new row into an existing table and to rename a table. We also provide the steps for performing other actions such as drop a column, rename a column, etc.
  • SQLite Drop Table – guide you how to remove a table from the database.
  • SQLite Create View – introduce you to the view concept and show you how to create a new view in the database.
  • SQLite Index – teach you about the index and how to utilize indexes to speed up your queries.
  • SQLite Index For Expressions – shows you how to use expression based index to
  • SQLite VACUUM – optimize database file.
  • SQLite Trigger – manage triggers in SQLite database.

SQLite functions

SQLite aggregate functions

An aggregate function groups values of multiple rows into a single value that produces the measurement of the group e.g., minimum, maximum, average, total, etc. SQLite supports the following aggregate functions:

  • SQLite AVG – return the average value of a group of values.
  • SQLite COUNT – count the number of items in a set.
  • SQLite MAX – find the maximum value in a set of values.
  • SQLite MIN – find the minimum value in a set of values.
  • SQLite SUM – return the sum of values in a set.

SQLite Programming Interfaces

SQLite Java

This SQLite Java section teaches you step by step how to interact with SQLite database using Java JDBC API.

SQLite Python

This section guides you how to work with the SQLite database using Python sqlite3 module.

SQLite PHP

This section shows you how to use PHP PDO to interact with SQLite databases. We will walk you through the steps of setting up PHP project structure, connecting to the SQLite database, and performing the common database operations.

SQLite resources

If you want to know more information about SQLite, you can go through a well-organized SQLite resources page that contains links to useful SQLite sites.

 

I re-post for me

Giới thiệu cơ sở dữ liệu đồ thị (Neo4j)


Phần 01: Giới thiệu

“Cơ sở dữ liệu” thuật ngữ đã trở nên rất quen thuộc với các nhà phát triển ứng dụng có rất nhiều dạng cơ sở dữ liệu như: Cơ sở dữ liệu quan hệ, cơ sở dữ liệu hướng đối tượng, cơ sở dữ liệu không gian, cơ sở dữ liệu phi cấu trúc,… một dạng cơ sở dữ liệu thường được sử dụng trong việc môt các các mạng thông tin như mạng xã hội, mạng cảm biến,… các dạng mà ở đó thông tin được mô tả như một thực thể (một đỉnh) trên mộ đồ thị có hướng (như hình dưới) đó là cơ sơ dữ liệu đồ thị. Trong nội dung của bài viết này tôi xin nói một chút về hệ quản trị cơ sở dữ liệu đồ thị là Neo4j.

Chúng ta sử dụng kịch bản là nội dung 02 khóa đào tạo lập trình viên và mỹ thuật đa phương tiện tại CUSC.

neo4j

Neo4j là hệ quản trị cơ sở dữ liệu đồ thị đầu tiên được giới thiệu vào năm 2007 và công bố phiên bản 1.0 vào năm 2010. Hiện nay neo4j là một trong những hệ quản trị cơ sở dữ liệu đồ thị được sử dụng nhiều nhất.

Nếu như cơ sở dữ liệu quan hệ như SQLServer, MySQL, Oracle để mô tả một đối tượng như MonHoc (subject) và các đặc điểm của đối tượng (properties) thì chúng mô tả bằng một bảng dữ liệu gồm nhiều cột với tên bảng là tên của đối tượng, các cột trong bảng mô tả đặc điểm của đối tượng. Mối quan hệ giữa các đối tượng được xây dựng bằng cách ghi nhận thông tin của thực thể cha vào thực thể con, ví dụ như như muốn xác định môn học nào là môn điều kiện của môn học hiện tại thì chúng ta cần lưu thông tin về id của môn học điều kiện vào môn học hiện tại.

Bảng môn học:

neo4j_TABLE.png

Đối với neo4j đối tượng được mô tả thành các đỉnh của đồ thị, đặc điểm của đối tượng được mô tả qua thuộc tính của đỉnh và mối quan hệ giữu các đối tượng được mô tả bằng liên kết có hướng giữa các đỉnh. Như hình trên ta thắng rằng môn học ASP.NET có môn điều kiện là C#.

Neo4j  có 02 chế độ:

  1. Quản trị dữ liệu và thể hiện nội dung trên nền tảng riêng (Neo4j Server)
  2. Nhúng vào các nền tảng khác neo4j chỉ đóng vai trò lưu trữ.

snap-2016-12-22-at-11-05-33

Phần 02: Cài đặt neo4j 

  • Địa chỉ của neo4j: https://neo4j.com
  • Download neo4j cho nền tảng của bạn (tôi sử dụng trên macos) với tư cách người dùng cá nhân (for individuals)

snap-2016-12-22-at-11-02-36

Sau khi Download tiến hành cài đặt theo hướng dẫn. Chạy neo4j và cấu hình nơi lưu dữ liệu

snap-2016-12-22-at-11-08-45

Nhấn nút start để mở server neo4j và đây là giao diện sau khi chạy

snap-2016-12-22-at-11-09-51

Nhấn chọn liên kết dưới để mở giao diện web của neo4j, dăng nhập bằng tài khoản neo4j/neo4j và đổi mật khẩu mới cho hệ thống

Snap 2016-12-22 at 11.12.40.png

Như vậy là chúng ta đã sẵn sàn để thiết kế dữ liệu đồ thị rồi.

Phần 3: Căn bản về các lệnh truy vấn dữ liệu của neo4j

  1. Lệnh tạo đối tượng và quan  hệ giữa các đối tượng: CREATE

Ví dụ: Tạo 02 môn học C# và ASP.NET MVC, C# là môn điều kiện của ASP.NET MVC

Snap 2016-12-22 at 11.21.51.png

Tương tự như vậy cho môn ASP.NET MVC, tạo quan hệ ASP.NET cần có điều kiện là C#

snap-2016-12-22-at-11-26-55

Trong đó MATCH là lệnh tìm kiềm (chúng ta sẽ tìm hiều ở phần sau), để tạo quan hệ thì neo4j cung cấp cho lập trình viên các lênh rất tự nhiên:

  1. Tìm môn c#, tìm môn ASP.NET
  2. Tạo quan hệ  ASP.NET phục thuộc c#.

Như vậy là chúng ta đã có được 02 môn học có ràng buộc lẫn nhau như sau:

Snap 2016-12-22 at 11.34.01.png

Bài dài quá rồi tôi dừng ở đây, phần tiếp theo chúng ta sẽ làm việc với các lệnh xóa, sửa, tìm kiếm của neo4j.

 

 

 

 

 

Post dữ liệu về webserver với HttpURLConnection


Post dữ liệu về webserver với HttpURLConnection

http://ntdan.byethost6.com/android/chungthuc.php 

// mo ket noi de goi du lieu len server web
URL url = new URL(address);
HttpURLConnection con = (HttpURLConnection) url.openConnection();

// theo thu tu cua lenh execute(user,pass);
String user = params[0];
String pass = params[1];

String urlParams = "username=" + URLEncoder.encode(user, "UTF-8") +
 "&password=" + URLEncoder.encode(pass, "UTF-8");

con.setRequestMethod("POST");
con.setDoOutput(true);

DataOutputStream dos = new DataOutputStream(con.getOutputStream());
// chuyern user va pass cho web server
dos.writeBytes(urlParams);
dos.flush();
dos.close();

InputStream in = con.getInputStream();

StringBuilder str = new StringBuilder();
String line = "";
BufferedReader br = new BufferedReader(new InputStreamReader(in));
while ((line = br.readLine()) != null) {
 str.append(line);
 str.append("\n");
}
br.close();

Mã nguồn PHP

if(isset($_POST['username']) && isset($_POST['password']))
{
        mysql_connect("localhost","root","") or die(mysql_error());
        mysql_select_db("android");
        $username = isset($_POST['username']) ? $_POST['username'] : "";
       //$_POST['username'];
        $password = isset($_POST['password']) ? $_POST['password'] : "";
       //$_POST['password'];
        $sqlSelect = "select username,hinh from nguoidung where username='$username'";
        $users = mysql_query($sqlSelect);
 
  if(mysql_num_rows($users) > 0)
  {
       echo json_encode(mysql_fetch_assoc($users)); 
       $_SESSION['user'] = "ok";
  }else{
        echo json_encode(array("loi"=>"user khong hop le"));
  }else
  { 
        echo json_encode(array("loi"=>"user khong hop le"));
  }
}

Căn bản JSON ( JavaScript Object Notation)


JSON (JavaScript Object Notation) là một chuẩn mở mô tả thông tin dưới dạng text mà chúng ta có thể đọc được, tất cả thông tin đều được lưu trữ key-value.
JSON độc lập với ngôn ngữ lập trình và nền tảng phát triển ứng dụng. JSON ra đời cải tiến rất nhiều điểm còn hạn chế của XML và dần trở thành chuẩn mặc định mô tả thông tin cho các hệ thống đa nền tảng (xu hướng hiện nay).

Ví dụ: Để mô tả một đối tượng là sinh viên (ma, ten, diachi) chuoi JSON như sau:

"sinhvien":{"ma":1, "ten":"nguyễn văn A", "diachi":"Cần  Thơ"}

Ví dụ: Để mô tả một danh sách 02 sinh viên (ma, ten, diachi) chuoi JSON như sau:

"dssinhvien":[
    {"ma":1, "ten":"nguyễn văn A", "diachi":"Cần  Thơ"},
    {"ma":2, "ten":"nguyễn văn B", "diachi":"Hậu Giang"}
]

 

tham khảo php – json, JavaEE restful, c#-json, javascript-json

Hướng dẫn cách tính thuế thu nhập cá nhân năm 2016


Thấy bày này hay Post lại để xem 😀
Cách tính thuế TNCN 2016 đối với thu nhập từ kinh doanh và thu nhập từ tiền lương, tiền công, còn những loại thu nhập khác các bạn vui lòng tham khảo tại các bài viết khác của Thiên Ưng hoặc tại Thông tư 111/2013/TT-BTC có hiệu lực từ ngày 1/10/2013.

Những điểm cần lưu ý trước khi đi vào tính thuế TNCN từ tiền lương tiền công năm 2016:

  1. Thời điểm tính thuế TNCN:
    – Là thời điểm chi trả thu nhập.

(Theo điểm b, khoản 2, điều 8, TT 111/2013/TT-BTC)

Ví dụ: Tiền lương của tháng 5/2015 trả vào tháng 6 năm 2015 thì tính vào thu nhập chịu thuế của tháng 6 năm 2015.

(Tham khảo Khoản 1 Mục III công văn số 187/TCT- TNCN ngày 15/01/2013 của Tổng cục Thuế, Công văn 380/CT-TTHT ngày 14 tháng 01 năm 2015 )

– Thuế TNCN là loại thuế tính theo tháng, kê khai có thể theo tháng hoặc theo quý nhưng quyết toán theo năm.

  1. Phương pháp tính thuế TNCN:

– Tính theo biểu lũy tiến từng phần: dành cho lao động ký HĐLĐ từ 3 tháng trở lên.

– Khấu trừ 10%: Dành cho không ký hợp đồng hoặc ký hợp đồng lao động dưới ba (03) tháng có tổng mức trả thu nhập từ hai triệu (2.000.000) đồng/lần trở lên.
– Khấu trừ 20%: Dành cho cá nhân không cư trú (Thường là người nước ngoài) được xác định bằng thu nhập chịu thuế từ tiền lương, tiền công nhân (×) với thuế suất 20%.

 

Hướng dẫn cách cách tính thuế TNCN năm 2016 cụ thể:

  1. Đối với cá nhân cư trú có ký hợp đồng lao động từ 3 tháng trở lên:

+ Kể cả trường hợp cá nhân ký hợp đồng từ ba (03) tháng trở lên tại nhiều nơi.
+ Đối với cá nhân cư trú ký hợp đồng lao động từ ba (03) tháng trở lên nhưng nghỉ làm trước khi kết thúc hợp đồng lao động thì tổ chức, cá nhân trả thu nhập vẫn thực hiện khấu trừ thuế theo Biểu thuế lũy tiến từng phần. (Theo điểm b, khoản 1 điều 25 của TT 111/2013/TT-BTC).

Thuế TNCN phải nộp = Thu nhập tính thuế    X   Thuế suất.

Trong đó:
a, Thu nhập tính thuế  = Thu nhập chịu thuế   –  Các khoản giảm trừ
Mà:
Thu nhập chịu thuế: là Tổng thu nhập cá nhân nhận được từ tổ chức chi trả không bao gồm các khoản sau:
+ Tiền ăn giữa ca, ăn trưa:

* Nếu doanh nghiệp không tự tổ chức nấu ăn – mà chi tiền cho người lao động (phụ cấp vào lương): Miễn tối đa 680.000.

Ví dụ 1: Cty bạn phụ cấp tiền ăn trưa là 750.000/tháng. Thì chúng ta được miễn 680.000. Còn phần vượt 750.000 – 680.000 = 70.000 tính vào thu nhập chịu thuế.

Ví dụ 2: Cty bạn phụ cấp tiền ăn trưa là 500.000/tháng. Thì chỉ được miễn 500.000 (Miễn theo thực tế chi).

* Nếu doanh nghiệp tự tổ chức nấu ăn, mua phiếu ăn, xuất ăn cho nhân viên thì được Miễn toàn bộ.

+ Tiền phụ cấp điện thoại: Theo quy định của công ty.

(Theo Công Văn Số: 5274/TCT-TNCN Ngày 09/12/2015)

Trường hợp khoản chi tiền điện thoại cho cá nhân nếu được ghi cụ thể điều kiện được hưởng và mức được hưởng tại một trong các hồ sơ sau: Hợp đồng lao động; Thỏa ước lao động tập thể; Quy chế tài chính, Quy chế thưởng … được tính vào chi phí được trừ khi xác định thu nhập chịu thuế thu nhập doanh nghiệp thì khoản chi tiền điện thoại cho cá nhân là thu nhập được trừ khi xác định thu nhập chịu thuế TNCN. Trường hợp đơn vị chi tiền điện thoại cho người lao động cao hơn mức khoán chi quy định thì phần chi cao hơn mức khoán chi quy định phải tính vào thu nhập chịu thuế TNCN.

(Công văn 1166/TCT-TNCN được ban hành vào ngày 21/3/2016)

Ví dụ: Doanh nghiệp bạn quy định phụ cấp tiền điện thoại cho bạn là 300.000/tháng thì khi nhận 300k này bạn được Miễn thuế TNCN.

Phụ cấp trang phục:

* Bằng hiện vật: Miễn toàn bộ.
* Bằng tiền: tối đa 05 (năm) triệu đồng/người/năm.

* Trường hợp doanh nghiệp có chi trang phục cả bằng tiền và hiện vật thì mức miễn tối đa đối với phần bằng tiền không vượt quá 05 (năm) triệu đồng/người/năm, bằng hiện vật Miễn toàn bộ.

+ Tiền công tác phí: Trường hợp các khoản thanh toán tiền công tác phí như tiền vé máy bay, tiền lưu trú, tiền taxi và tiền ăn của các cá nhân đi công tác được tính vào chi phí được trừ khi xác định thu nhập chịu thuế thu nhập doanh nghiệp theo quy định của Luật thuế thu nhập doanh nghiệp và các văn bản hướng dẫn Luật thuế thu nhập doanh nghiệp hiện hành thì các khoản thanh toán tiền công tác phí này là khoản thu nhập được trừ khi xác định thu nhập chịu thuế thu nhập cá nhân.

(Công văn 1166/TCT-TNCN được ban hành vào ngày 21/3/2016)

+ Thu nhập từ phần tiền lương, tiền công làm việc ban đêm, làm thêm giờ được trả cao hơn so với tiền lương, tiền công làm việc ban ngày, làm việc trong giờ.

Ví dụ: ban ngày được trả 6 nghìn/h, làm thêm ban đêm được trả 10 nghìn/h thì số tiền làm thêm ban đêm nhận được có 6 nghìn phải chịu thuế, 4 nghìn vượt trội không chịu thuế.

Các khoản giảm trừ bao gồm:

+ Giảm trừ gia cảnh: bản thân 9.000.000 và người phụ thuộc là 3.600.000 (tính trên 1 tháng)
+ Các khoản bảo hiểm bắt buộc: Bảo hiểm xã hội, bảo hiểm y tế, bảo hiểm thất nghiệp và bảo hiểm nghề nghiệp trong một số lĩnh vực đặc biêt.
+ Các khoản đóng góp từ thiện , nhân đạo, khuyến học.

b, Thuế suất:
Thuế suất thuế thu nhập cá nhân đối với thu nhập từ kinh doanh, từ tiền lương, tiền công được áp dụng theo Biểu thuế luỹ tiến từng phần:

Bậc Thu nhập tính thuế /tháng Thuế suất Tính số thuế phải nộp
Cách 1 Cách 2
1 Đến 5 triệu đồng (trđ) 5% 0 trđ + 5% TNTT 5% TNTT
2 Trên 5 trđ đến 10 trđ 10% 0,25 trđ + 10% TNTT trên 5 trđ 10% TNTT – 0,25 trđ
3 Trên 10 trđ đến 18 trđ 15% 0,75 trđ + 15% TNTT trên 10 trđ 15% TNTT – 0,75 trđ
4 Trên 18 trđ đến 32 trđ 20% 1,95 trđ + 20% TNTT trên 18 trđ 20% TNTT – 1,65 trđ
5 Trên 32 trđ đến 52 trđ 25% 4,75 trđ + 25% TNTT trên 32 trđ 25% TNTT – 3,25 trđ
6 Trên 52 trđ đến 80 trđ 30% 9,75 trđ + 30% TNTT trên 52 trđ 30 % TNTT – 5,85 trđ
7 Trên 80 trđ 35% 18,15 trđ + 35% TNTT trên 80 trđ 35% TNTT – 9,85 trđ

Ví dụ : Bà Phi Thiên Miêu có thu nhập từ tiền lương, tiền công trong tháng 1/2016 như sau:
+ Lương thực tế là 39 triệu đồng.
+ Tiền phụ cấp ăn trưa: 1.000.000
+ Bà đóng bảo hiểm ( BHXH, BHYT ) trên mức lương 10 triệu.
+ Bà Phi Thiên Miêu nuôi 2 con dưới 18 tuổi, (Đã đăng ký mẫu 02/ĐK- NPT-TNCN theo thông tư 92/2015/TT-BTC để lấy giảm trừ).

Thuế thu nhập cá nhân trong tháng của Bà Phi Thiên Miêu được tính như sau:

– Thu nhập của Bà Phi Thiên Miêu là 40 triệu đồng, được Miễn tối đa 680.000 (tiền ăn trưa).

=> Thu nhập chịu thuếTổng thu nhập – Các khoản được miễn thuế

= 40.000.000 – 680.000 = 39.320.000

– Bà Phi Thiên Miêu được giảm trừ các khoản sau:

+ Giảm trừ gia cảnh cho bản thân: 9.000.000
+ Giảm trừ gia cảnh cho 02 người phụ thuộc (2 con):

3.600.000 × 2 = 7.200.000

+ Bảo hiểm xã hội, bảo hiểm y tế:

10.000.0000 × (8% + 1,5%) = 950.000

=> Tổng cộng các khoản được giảm trừ: 9.000.000 + 7.200.000 + 950.000 = 17.150.000
Thu nhập tính thuế của Bà Phi Thiên Miêu là:

Thu nhập tính thuế  = Thu nhập chịu thuế   –  Các khoản giảm trừ

= 39.320.000 – 17.150.000 = 22.170.000
Bây giờ chúng ta sẽ đưa thu nhập tính thuế 22.170.000 vào biểu thuế suất theo biểu lũy tiến từng phần bên trên để tính: Số thuế phải nộp:
Cách 1: Số thuế phải nộp tính theo từng bậc của Biểu thuế lũy tiến từng phần:

+  Bậc 1: thu nhập tính thuế đến 5 triệu đồng, thuế suất 5%:

5 triệu đồng × 5% = 0,25 triệu đồng

+  Bậc 2: thu nhập tính thuế trên 5 triệu đồng đến 10 triệu đồng, thuế suất 10%:

(10 triệu đồng – 5 triệu đồng) × 10% = 0,5 triệu đồng

+ Bậc 3: thu nhập tính thuế trên 10 triệu đồng đến 18 triệu đồng, thuế suất 15%:

(18 triệu đồng – 10 triệu đồng) × 15% = 1,2 triệu đồng

+ Bậc 4: thu nhập tính thuế trên 18 triệu đồng đến 32 triệu đồng, thuế suất 20%:

(22.170.000 – 18 triệu đồng) × 20% = 834.000

=> Tổng số thuế Bà Phi Thiên Miêu phải tạm nộp trong tháng 1 là:

0,25 triệu đồng + 0,5 triệu đồng + 1,2 triệu đồng + 834.000 = 2.784.000
Cách 2: Số thuế phải nộp tính theo phương pháp rút gọn: Theo công thức tại bảng tính trên (Thiên Ưng đã đánh dấu công thức có màu xanh ở bảng thuế suất theo biểu lũy tiến từng phần)
Ta thấy: Thu nhập tính thuế trong tháng 22.170.000 là thuộc bậc 4 trong bảng thuế suất lũy tiến.
Mà công thức của bậc 4 là:  20% TNTT – 1,65 trđ
=> Số thuế thu nhập cá nhân phải nộp như sau:

22.170.000  × 20% – 1.650.000  = 2.784.000

Cách tính 1 là các tính thủ công, để chúng ta hiểu về cách tính lũy tiến, còn ở bên ngoài thực tế kế toán sẽ tính theo cách 2 để nhanh hơn.

Cả 2 cách đều cho ra kết quả giống nhau: Tháng 1/2016 bà phiếu có số thuế TNCN phải nộp là 2.784.000

  1. Đi với cá nhân không ký hợp đồng lao động hay có ký nhưng dưới 3 tháng:

Tiến hành khấu trừ thuế TNCN theo từng lần chi trả thu nhập từ 2.000.000 trở lên như sau:
– Đối với cá nhân Cư trú: khấu trừ 10% tổng thu nhập trả/lần (không phân biệt có mã số thuế hay không).
Ví dụ: Bạn Nguyễn Thị An, ký hợp đồng lao động thử việc 2 tháng với công ty Kế Toán Thiên Ưng, Lương thử việc của An gồm có: Lương chính là 4 triệu, phụ cấp tiền ăn trưa 450.000.
– Khi trả lương cho Nguyễn Thị An, Kế Toán Thiên Ưng sẽ phải khấu trừ tiền thuế TNCN tại nguồn 10% như sau:

Thuế TNCN = (4.000.000 + 450.000) * 10% = 445.000

(Tiền ăn, lương tăng ca của lao động vãng lai (ký dưới 3 tháng) không được miễn thuế TNCN

Công văn số 4217/CT-TTHT ngày 26/5/2015 của Cục Thuế TP. HCM về thuế thu nhập cá nhân)

Chú ý: Trường hợp cá nhân chỉ có duy nhất thu nhập thuộc đối tượng phải khấu trừ thuế theo tỷ lệ nêu trên nhưng ước tính tổng mức thu nhập chịu thuế của cá nhân sau khi trừ gia cảnh chưa đến mức phải nộp thuế thì cá nhân có thu nhập làm cam kết (Cam kết 02/CK-TNCN – Theo mẫu tại Thông tư 92/2015/TT-BTC) gửi tổ chức trả thu nhập để tổ chức trả thu nhập làm căn cứ tạm thời chưa khấu trừ thuế thu nhập cá nhân.

(Người làm cam kết 02 bắt buộc phải có MST tại thời điểm làm cam kết nhé)

Căn cứ vào cam kết của người nhận thu nhập, tổ chức trả thu nhập không khấu trừ thuế. Kết thúc năm tính thuế, tổ chức trả thu nhập vẫn phải tổng hợp danh sách và thu nhập của những cá nhân chưa đến mức khấu trừ thuế (vào mẫu ban hành kèm theo văn bản hướng dẫn về quản lý thuế) và nộp cho cơ quan thuế. Cá nhân làm cam kết phải chịu trách nhiệm về bản cam kết của mình, trường hợp phát hiện có sự gian lận sẽ bị xử lý theo quy định của Luật quản lý thuế.

Nguồn: http://ketoanthienung.com/cach-tinh-thue-thu-nhap-ca-nhan.htm.