Giải thích nguyên nhân về bug dupe gold. Blizzard programmer lại fucked up 1 lần nữa =)

Thảo luận trong 'Diablo' bắt đầu bởi IntoTh3Rainbow, 9/5/13.

  1. IntoTh3Rainbow

    IntoTh3Rainbow ~vkRainbow~ Moderator

    Tham gia ngày:
    8/2/03
    Bài viết:
    5,303
    Nơi ở:
    .
    Link tiếng Anh: https://webcache.googleusercontent.com/search?q=cache:minimaxir.com/2013/05/stones-of-jordan/

    Dịch sơ sơ tạm hiểu là thế này:

    1.
    Trước 1.08: bán 1 stack 1mil dc giá 0.25$ minimum
    Sau 1.08: tăng 1 stack lên 10mil, dẫn đến tình trạng gold treo 1 lần dc hơn 2 tỉ ( tạm gọi X là số tiền bán mỗi lần).

    2. (Phần này cần hiểu biết lập trình tin học 1 ít)
    Programmer của Blizzard lập trình đặt biến X này dưới type INTEGER. Biến INTEGER thì có giá trị max chỉ có thể là 2,147,483,648 hay là 2^31.
    (Cũng là lý do từ trước đến nay bán trên GAH đồ bị limit ở 2 Bil)

    3.
    Người chơi đặt bán gold 1 lần trên số lượng đó, dẫn đến sai lệch tính toán dây chuyền, số tiền đặt bán sẽ dc hiểu sai và khi cancel người chơi sẽ dc thêm tiền vì những tính toán sai lệch đấy.

    Nói ngắn gọn hơn nữa thì Programmer của Blizzard đã phạm 1 trong những lỗi cơ bản và sơ đẳng nhất. Ngoài ra quên đặt điều kiện, khi test thì ẩu tả ko kĩ càng, dẫn đến lỗi dupe như mọi ng đã biết.


    PS: Lần này ko phải là lần đầu và cũng chắc chắn chẳng phải là lần cuối. Đã có rất nhiều lỗi sơ đẳng do làm việc ẩu tả, kém cỏi của team lập trình viên ở Blizzard rồi, nhưng lần này thì lỗi dẫn đến hậu quả lớn nhất từ trước đến giờ :)
     
  2. congzing20

    congzing20 Dragon Quest

    Tham gia ngày:
    31/8/04
    Bài viết:
    1,335
    Nơi ở:
    End of world
    Nếu nguyên nhân là do vậy thì bước unit test nó làm cái dek gi??? Nó thay đổi mà ko tính đc vùng ảnh hưởng và việc ko unit test lại à???
     
  3. IntoTh3Rainbow

    IntoTh3Rainbow ~vkRainbow~ Moderator

    Tham gia ngày:
    8/2/03
    Bài viết:
    5,303
    Nơi ở:
    .
    uh, nhưng unit test cho dù có đi nữa nhưng design ẩu tả thiếu những cái test cơ bản như thế thì cũng thọt thui....
     
  4. vincent111

    vincent111 Mr & Ms Pac-Man

    Tham gia ngày:
    16/5/07
    Bài viết:
    162
    Đúng là khi đưa lên PTR thì người ta chỉ test game là chủ yếu chứ ít ai lại vào AH vọc phá nên chỉ có thể nói lỗi do programmer Blizz gà =))
     
  5. kingofgame981

    kingofgame981 idle talk

    Tham gia ngày:
    9/10/05
    Bài viết:
    4,562
    Nơi ở:
    play
    lol, làm nhớ đến 1 vài game fb ngày xưa cũng dính lỗi y chang thế này. =))
     
  6. bang_gia

    bang_gia Sonic the Hedgehog Lão Làng GVN

    Tham gia ngày:
    23/1/05
    Bài viết:
    4,695
    Nơi ở:
    Xứ thiên đường
    Test trên PTR chỉ là test gameplay thôi,chứ cái AH là cái chợ sống,phải hoạt động thực tế thì mới thấy lỗi phát sinh được.
     
  7. xhoanlongx

    xhoanlongx Mr & Ms Pac-Man

    Tham gia ngày:
    23/1/10
    Bài viết:
    136
    h mới biết đc vì sao mesos game maplestory luôn max là 2.147.483.647 .:D
     
  8. ThuyKhuc

    ThuyKhuc Youtube Master Race

    Tham gia ngày:
    18/4/08
    Bài viết:
    73
    Hồi xưa học phân tích, thầy mình cứ dự phòng tình huống này bằng việc đặt biến luôn kiểu float hoặc decimal rồi giới hạn biến nhỏ hơn gia trị nào đó, giờ mới thấy tác dụng của việc này...haha...quá sơ đẳng
     
  9. reltih

    reltih Donkey Kong

    Tham gia ngày:
    2/8/04
    Bài viết:
    374
    Bài đó nói rõ hơn là như vầy:
    - Trước 1.0.8: Số gold tối đa cho một lần treo là 1 tỷ (250/0.25 * 1.000.000) ==> no star where.
    - Sau 1.0.8: Số gold tối đa cho một lần treo là 10 tỷ (250/0,25 * 10.000.000). Người bán treo lên 6 tỷ, AH chỉ hiểu được 2 tỷ, còn lại cỡ 4 tỷ không lên được. Như vậy số gold bị trừ khỏi acc là cỡ 2 tỷ. Tuy nhiên, nếu người bán cancel thì họ được bù lại 6 tỷ ==> lời cỡ 4 tỷ mỗi lần treo bán và cancel. Do đó bug có thể xảy ra khi treo số gold khác, giá khác, ko nhất định phải là 6 tỷ và 0.39 USD.

    Lỗi này có thể được phát hiện bằng unit test. Nhưng chắc lúc viết UT họ lại không xét các giá trị biên. Nếu đúng như vậy thì đây là lỗi căn bản không đáng xảy ra ở công ty lớn như Blizzard.
     
  10. Silife

    Silife GVN D3 Taurus

    Tham gia ngày:
    29/11/12
    Bài viết:
    1,626
    * Cái này thì chắc mấy ông nào lập trình cho các ngân hàng, hoặc nói chung là lập trình liên quan đến cái gì mà phải xử lý những con số lớn mới gặp, chứ lập trình bt cũng ít khi gặp phải mấy cái này. Nhưng mà chốt lại là làm cái gì mà liên quan đến tiền bạc thật cũng đều nguy hiểm, có sơ sót gì đó thì hậu quả khó lường

    * Ví dụ 1 công ty mà sử dụng phần mềm tính toán số liệu, tiền bạc, thống kê mà phần mềm bị sai thì ... tèn ten :D

    - - - Updated - - -

    Mở rộng số lượng gold cho 1 stack lên đến 10 tỷ, nhưng mà chắc là ko thèm test lại, vì cứ nghĩ la treo bình thường, chứ cái test treo/cancel đơn giản như vậy làm gì chẳng phát hiện ra bug =))
     
  11. greenhope

    greenhope The Warrior of Light

    Tham gia ngày:
    6/8/03
    Bài viết:
    2,344
    Hông biết thời nào rồi mà blizzard còn có anh programmer xài số integer (4 bytes giá trị) cho value dự kiến có thể lên đc vài chục, vài trăm tỷ nữa :7cool_waaaht:

    Mấy game VN làm bây giờ từ mobile đến webgame nhiều game còn support cả vài trăm ngàn tỷ luôn (chính xác là 9,223,372,036,854,775,807 , kiểu long, data lưu 8 bytes).
     
  12. anhtraimu001

    anhtraimu001 Mr & Ms Pac-Man

    Tham gia ngày:
    29/12/07
    Bài viết:
    153
    Giờ mà đổi lại 1 trường trong database có mà chết:)) chuyển lại 1 lần bán max 2 bil thôi :))
     
  13. tiver_da

    tiver_da The Warrior of Light

    Tham gia ngày:
    5/12/08
    Bài viết:
    2,057
    Nơi ở:
    Ha Noi, Vietnam,
    chuyển lại 1 lần bán max 2bil, giảm giá bán xuống 0.025$, ko lẽ blizz nó chê số bé quá ăn tiền chả bõ hay sao nhỉ :))
     
  14. Catman_vn

    Catman_vn

    Tham gia ngày:
    3/1/07
    Bài viết:
    16,636
    thật tình thấy nếu blizzard bị lỗi đúng như thế này thì kỹ năng của lập trình viên củ chuối dữ vậy sao :|
     
  15. anhtraimu001

    anhtraimu001 Mr & Ms Pac-Man

    Tham gia ngày:
    29/12/07
    Bài viết:
    153
    thằng lập trình và thằng thiết kế hệ thống,do 2 thằng này fucked up mới gây ra như thế này.......
     
  16. undead4002

    undead4002 Donkey Kong

    Tham gia ngày:
    30/11/12
    Bài viết:
    431
    Sao nó lại phạm sai lầm căn bản thế nhỉ, đặt biến phải lường trước giá trị căn bản và các biến phụ thuộc, chứ không xảy ra bug dây chuyền thì có mà ăn cho hết à. Với lại không viết kèm theo cái exception để quăng lỗi ra à, có lỗi phải roll back transaction lại chứ.
     
  17. Silife

    Silife GVN D3 Taurus

    Tham gia ngày:
    29/11/12
    Bài viết:
    1,626
    Thật ra lập trình lỗi là chuyện bt, vần đề quan trọng là ... ếu test lại => trong khi lỗi lại liên quan đến tiền bạc thật, chết là chết ở chỗ này đây bác. Chắc đại ca này vừa lập trình xong, chưa kịp test lại thì gấu alo gọi về nhà có chiện gấp, anh này code xong nghĩ ... mình wa là pro, chắc là chạy vù vù ko cần test lại, thôi zdề với vợ lẹ ko lại ăn đòn
    :-s
     
  18. Catman_vn

    Catman_vn

    Tham gia ngày:
    3/1/07
    Bài viết:
    16,636
    thật tình thì chẳng ai dám tự tin lập trình xong là ok ngay, phải luôn test và phải test nhiều kiểu khác nhau nhiều góc độ khác nhau, mà 1.08 cũng có thgời gian chuẩn bị khá lâu mà bị lỗi nghiêm trọng :|
     
  19. Silife

    Silife GVN D3 Taurus

    Tham gia ngày:
    29/11/12
    Bài viết:
    1,626
    Mình mờ là D3 dev, mình sẽ lập trình sao cho 1 case nào vô cùng khó gặp (ví dụ như phải chạy vòng vòng 5', nhảy cò cò 10 cái, hít đất 20 cái), ko ai phát hiện (trừ những người vô cùng bệnh hoạn mới tìm ra) sẽ có bug, rồi sau đó khi chơi D3, ta exploit cái bug đó để, tự sướng, tư lợi riêng, hà hà :2cool_confident:
     
    Chỉnh sửa cuối: 9/5/13
  20. traneupcqk

    traneupcqk The Warrior of Light

    Tham gia ngày:
    4/4/06
    Bài viết:
    2,285
    Nơi ở:
    *%Never More%*
    ko biết có liên quan nhiều đến việc hợp tác với bọn Activision có cái series COD càng ngày càng tệ ko nhỉ :-s
     

Chia sẻ trang này