$30 off During Our Annual Pro Sale. View Details »

並行・並列処理のテストは難しい

 並行・並列処理のテストは難しい

Akihito Nakano

October 27, 2016
Tweet

More Decks by Akihito Nakano

Other Decks in Programming

Transcript

  1. த໺ڿਓ(.01&1"#0JOD
    ʲϖύϘºϓϨΠυʳ5FDI.FFUVQʙࣗಈςετɾ$*ฤʙ
    ฒߦɾฒྻॲཧͷςετ͸೉͍͠

    View Slide

  2. 8ΞϓϦέʔγϣϯΤϯδχΞ
    ػೳ։ൃνʔϜ
    த໺ڿਓ ͖͋ͬʔ
    !/","/0@"LJIJUP
    &$ࣄۀ෦Χϥʔϛʔγϣοϓάϧʔϓ
    IUUQBDLJOUPTIHJUIVCJP

    View Slide

  3. Χϥʔϛʔγϣοϓ

    View Slide

  4. ܅΋ϖύϘͰಇ͔ͳ͍͔ʁ
    ࠷৽ͷ࠾༻৘ใΛνΣοΫˠ !QC@SFDSVJU

    View Slide

  5. ฒߦɾฒྻॲཧͷςετ

    View Slide

  6. ฒߦɾฒྻॲཧʁ
    Կʹ͍ͭͯͷൃදͳͷ͔Πϝʔδ͠΍͍͢Α͏ʹ
    ͸͡Ίʹ໌֬ʹ͓͖ͯ͠·͢ʂ

    View Slide

  7. ฒߦɺฒྻɺඇಉظɺ෼ࢄʜ
    ϚϧνεϨου
    Ϛϧνϓϩηε
    ͪ͜Βʹ͍ͭͯͷൃදͰ͢
    ෺ཧతʹಠཱͨ͠ෳ਺ͷϊʔυͰ
    ฒߦɾฒྻ

    View Slide

  8. ͳͥฒߦɾฒྻॲཧΛςʔϚʹʁ

    View Slide

  9. ฒߦɾฒྻॲཧɹ׆༻ͷྲྀΕ
    wϓϩηοαߴ଎Խ͔ΒϚϧνίΞ΁
    wϦιʔεΛޮ཰తʹ׆༻͢ΔͨΊʹฒߦɾฒྻॲཧ͕஫໨͞ΕΔ
    wฒߦɾฒྻॲཧ͕ಘҙͳݴޠ͕࿩୊ʹ
    w3VCZձٞͰ͸(VJME͕ఏҊ͞Εͨ

    View Slide

  10. 1)1

    View Slide

  11. 4OJEFM εφΠσϧ

    IUUQTHJUIVCDPNBDLJOUPTITOJEFM
    खܰʹϚϧνϓϩηεͰ͖Δ
    ࢠϓϩηεͷॲཧ݁ՌΛड͚औΕΔ
    ϚελʔʗϫʔΧʔϞσϧ
    1)1Ҏ্

    View Slide

  12. ϓϧϦΫΤετ׻ܴʂ
    IUUQTHJUIVCDPNBDLJOUPTITOJEFM

    View Slide

  13. ຊ୊

    View Slide

  14. ฒߦɾฒྻॲཧͷ೉͠͞Λςετͷ؍఺Ͱ

    View Slide

  15. λΠϛϯά໰୊

    View Slide

  16. ϓϩμΫτίʔυ
    class Foo
    def run
    Thread.new do
    # ৭ʑ
    @done = true
    end
    # ৭ʑ
    end
    end

    View Slide

  17. ςετίʔυ
    class FooTest < Test::Unit::TestCase
    def test_run
    (foo = Foo.new).run
    sleep 1
    assert_true foo.done
    end
    end

    View Slide

  18. ςετίʔυ
    class FooTest < Test::Unit::TestCase
    def test_run
    (foo = Foo.new).run
    sleep 1
    assert_true foo.done
    end
    end
    ෆ҆ఆ

    View Slide

  19. εςοϓ
    ॲཧΛ੾Γग़͢

    View Slide

  20. ϓϩμΫτίʔυ͜ΕΛʜ
    class Foo
    def run
    Thread.new do
    # ৭ʑ
    @done = true
    end
    # ৭ʑ
    end
    end

    View Slide

  21. ϓϩμΫτίʔυ͜͏ʂ
    class Foo
    def run
    Thread.new do
    # ৭ʑ
    @done = self.do
    end
    # ৭ʑ
    end
    def do
    # ৭ʑ
    true
    end
    end

    View Slide

  22. ςετίʔυ͜ΕΛʜ
    class FooTest < Test::Unit::TestCase
    def test_run
    (foo = Foo.new).run
    sleep 1
    assert_true foo.done
    end
    end

    View Slide

  23. ςετίʔυ͜͏ʂ
    class FooTest < Test::Unit::TestCase
    def test_run
    (foo = Foo.new).run
    sleep 1
    assert_true foo.done
    end
    def test_do
    assert_true Foo.new.do
    end
    end

    View Slide

  24. ඇಉظͳ෦෼Λ
    ಉظॲཧͱͯ͠ςετͰ͖ΔΑ͏ʹͳͬͨʂ

    View Slide

  25. )VNCMF0CKFDUύλʔϯ
    Y6OJU5FTU1BUUFSOT$I

    View Slide

  26. ͕͔ͩ͠͠

    View Slide

  27. ςετίʔυ·ͩ໰୊͸ղܾ͍ͯ͠ͳ͍ʜ
    class FooTest < Test::Unit::TestCase
    def test_run
    (foo = Foo.new).run
    sleep 1
    assert_true foo.done
    end
    def test_do
    assert_true Foo.new.do
    end
    end
    ෆ҆ఆ

    View Slide

  28. εςοϓ
    ϝοηʔδύογϯάΛ࢖͏

    View Slide

  29. lϝϞϦͷ্ͰγΣΞ͢ΔͷͰ͸ͳ͘
    ίϛϡχέʔγϣϯͰγΣΞ͢Δz
    4J[FE2VFVFΛ࢖ͬͯ
    ͦΕͬΆ͍͜ͱΛ΍Γ·͢

    View Slide

  30. ϓϩμΫτίʔυ͜ΕΛʜ
    class Foo
    def run
    Thread.new do
    # ৭ʑ
    @done = self.do
    end
    # ৭ʑ
    end
    def do
    # ৭ʑ
    true
    end
    end

    View Slide

  31. ϓϩμΫτίʔυ͜͏ʂ
    class Foo
    def initialize
    @done = SizedQueue.new(1)
    end
    def run
    Thread.new do
    # ৭ʑ
    @done << self.do
    end
    # ৭ʑ
    end
    … (ུ) …
    end

    View Slide

  32. ςετίʔυ͜ΕΛʜ
    class FooTest < Test::Unit::TestCase
    def test_run
    (foo = Foo.new).run
    sleep 1
    assert_true foo.done
    end
    def test_do
    assert_true Foo.new.do
    end
    end

    View Slide

  33. ςετίʔυ͜͏ʂ
    class FooTest < Test::Unit::TestCase
    def test_run
    (foo = Foo.new).run
    assert_true foo.done.pop
    end
    def test_do
    assert_true Foo.new.do
    end
    end

    View Slide

  34. λΠϛϯά໰୊
    ղܾʂ

    View Slide

  35. ଞʹ΋
    w ౰εϥΠυͰ͸൚༻తͳςΫχοΫͷ͝঺հͰ͕ͨ͠
    w ݴޠ΍ϑϨʔϜϫʔΫ͕ఏڙ͢Δศརػೳ΋͋Γ·͢
    w ྫ(Pݴޠͷ3BDF%FUFDUPS

    View Slide

  36. ·ͱΊ

    View Slide

  37. ·ͱΊ
    w ฒߦɾฒྻॲཧͷ೉͠͞ʹ΋ςετͰର߅Ͱ͖Δ
    w ಛ༗ͷϓϥΫςΟε͕͋Δ
    w ஌ݟΛڞ༗͍͖ͯ͠·͠ΐ͏ʂʂ̍

    View Slide