SlideShare a Scribd company logo
1 of 10
Download to read offline
分散test/unit   が出来るといいな


         樽家 昌也 (日本Rubyの会)
リグレッションテストの憂鬱
終盤になればあまり問題はない
問題は序中盤

ソースコードをガシガシ
リファインしたり機能追加する
バグもガシガシ追加してる
     テスト重要!
       って、言うまでもないですよねー

      でもテストケースを追加するたびに
      時間がどんどん掛るようになってくる・・・・
あるテストの例 (13 tests)
>rake test
Finished in 227.140242 seconds.

ちょっと時間掛かりすぎじゃないか?今後が心配。
top - 17:18:13 up 7:23, 3 users, load average: 0.08, 0.86, 0.58
Tasks: 173 total, 1 running, 171 sleeping, 0 stopped, 1 zombie
Cpu0 : 0.3%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu1 1 0%
C 1 : 1.0%us, 0.3%sy, 0 0% i 98 7%id 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
                  0 3% 0.0%ni, 98.7%id, 0 0%       0 0%hi 0 0% i 0 0%
Cpu2 : 0.3%us, 0.0%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.3%si, 0.0%st
Cpu3 : 0.3%us, 0.3%sy, 0.0%ni, 99.0%id, 0.3%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 2580612k total, 1030520k used, 1550092k free, 224804k buffers
Swap: 2031608k total,     120k used, 2031488k free, 376652k cached

    ・・・・ !! CPUが4つもあるのに1つしか使ってないよ
                                                                             ・・・・!! CPUが (略
 top - 17:18:20 up 46 days, 9:00, 13 users, load average: 0.18, 0.45, 0.51
 Tasks: 353 total, 1 running, 348 sleeping, 4 stopped, 0 zombie
 Cpu0 : 1.0%us, 0.0%sy, 0.0%ni, 98.3%id, 0.0%wa, 0.0%hi, 0.3%si, 0.3%st
 Cpu1 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
 Cpu2 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
 Cpu3 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
 Cpu4 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
 Cpu5 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
 Cpu6 : 12.0%us, 7.3%sy, 0.0%ni, 80.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
 Cpu7 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st




                                                                                    なんとかせんといかん
 Cpu8 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
 Cpu9 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
 Cpu10 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
 Cpu11 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
 Cpu12 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
 Cpu13 : 0.0%us, 0.7%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
 Cpu14 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
 Cpu15 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
 Mem: 16400384k total, 7751860k used, 8648524k free, 257472k buffers
 Swap: 8191992k total,      220k used, 8191772k free, 4637040k cached
並列実行test環境ってないの?
    Java界にはTestNGってのがあるらしい
!
    そういえばMakeには-jオプションあるけれど
!
    Rakeにはないなぁ

    そもそも並列といっても色々単位が。どれがいいの?
!
        複数スレッドで
    !
        複数プロセスで
    !
        複数計算機で
    !


    でもすくなくともどれか一つは欲しい
!
    今は複数計算機使わなくてもいいや(個人的理由)
!
使ってるtest/unitを見てみた
     実行開始している所から並列化させればいいんじゃないだろう
 !
     か?
      どこで開始してるの?
        そんな時のcaller関数 test本体に入れてみよう
                     module Test
     どうやらここらしい。        module Unit
     早速手を入れる            class TestSuite
                          def run(result, &progress_block)
                              run(result &progress block)
                            yield(STARTED, name)
単純にThread使ってみる             @tests.each do |test|
                             test.run(result, &progress_block)
 カレントディレクトリが               end
                           yield(FINISHED, name)
グローバルスコープだった!             end

そもそもThreadは時分割で
複数CPU使わないよと突っ込みが入る。
じゃあマルチプロセスで
 プロセス別れるとプロセス間通信が必要
 特に他所のプロセスの変数いじるんだからdRubyがよそう

 なんとなく完成                             def run(result, &progress_block)
                                      drbserv = DRb.start_service(nil,result)
                                      d_result = DRbObject.new_with_uri(drbserv.uri)
   >rake test
                                      yield(STARTED, name)
   Finished in 227.140242 seconds.
                                      pids = @tests.map do |test|
   >rake test P=
                                        fork {
   Finished in 80.753652 seconds.
                                          test.run(d_result, &progress_block)
                                          exit
                                        }
え?                                    end
resultがthread safeじゃない?               pids.each {|i| Process.waitpid(i) }
並列化数が制御できてない?                         drbserv.stop_service()
                                      yield(FINISHED, name)
                                     end
そういうこともあります。
分散testに向けて
    真剣に考えると色々解決しないといけない課題は多い
!
        ターゲットの選定
    !
        分散のモデル化
    !
        並列実行されるThreadの導入推進?
    !
        グリッド?
    !




分散test/unit っていっても
本質的な全然解決できてない
添付ライブラリで遊ぼう

分散test/unit   が出来るといいな


         樽家 昌也 (日本Rubyの会)
添付ライブラリ弄りは楽しい
    広く使われるものなので固い。たまにもうちょっと融通を
!
    利かせてほしくなったりする。
    Code Reading が自然と出来るし、
!
    弄ってこそ見えてくる事がある。深く読み込める?
        コードの必然性とか、工夫とか
    !

    Rubyは非常にいじりやすい。 C実装部分以外オープン
!
    後付けで変更する部分を定義しなおすだけ。
    Binary2.0的な事もできたり。(idからポインタを計算)


まだの方は是非一度弄ってみてください
分散
    これからの時代はメニーコアだ 分散だ
!

    Rubyをメニーコア時代のデファクトスクリプト言語に
!

    Regional RubyKaigi
!

    栃木は分散の聖地?
!

        都心からの適度な距離、dRubyな土地だし
    !

    分散の聖地?
!

    分散の聖地はやっぱり分散して存在しないと。

! もっと分散しましょう

More Related Content

What's hot

Page bhasin massala chakki
Page bhasin massala chakkiPage bhasin massala chakki
Page bhasin massala chakkiPawan0786
 
Noip 2016-day2
Noip 2016-day2Noip 2016-day2
Noip 2016-day2德源 何
 
سیرت مصطفٰی صلّی اللہ تعالٰی علیہ وسلّم_Seerat e Mustafa (saw)
سیرت مصطفٰی صلّی اللہ تعالٰی علیہ وسلّم_Seerat e Mustafa (saw)سیرت مصطفٰی صلّی اللہ تعالٰی علیہ وسلّم_Seerat e Mustafa (saw)
سیرت مصطفٰی صلّی اللہ تعالٰی علیہ وسلّم_Seerat e Mustafa (saw)Ahmed@3604
 
What is a team and what is a group
What is a team and what is a groupWhat is a team and what is a group
What is a team and what is a groupThurein Naywinaung
 
QM-076-六標準差管理方法的解題邏輯與策略
QM-076-六標準差管理方法的解題邏輯與策略QM-076-六標準差管理方法的解題邏輯與策略
QM-076-六標準差管理方法的解題邏輯與策略handbook
 
Nitrozen disorder-book
Nitrozen disorder-bookNitrozen disorder-book
Nitrozen disorder-bookZahidIslam12
 
Linux Commands
Linux CommandsLinux Commands
Linux Commandsiwata
 
Transformada de Fourier - Señales en forma trigonometrica y complejas
Transformada de Fourier - Señales en forma trigonometrica y complejasTransformada de Fourier - Señales en forma trigonometrica y complejas
Transformada de Fourier - Señales en forma trigonometrica y complejasFernando Marcos Marcos
 
Portada word
Portada wordPortada word
Portada wordfaby0311
 
Decisão ação MP - Serviços essenciais
Decisão ação MP - Serviços essenciaisDecisão ação MP - Serviços essenciais
Decisão ação MP - Serviços essenciaisSomMaior
 
Lectoescritura: copiar palabras letra a letra
Lectoescritura: copiar palabras letra a letraLectoescritura: copiar palabras letra a letra
Lectoescritura: copiar palabras letra a letraAprenentABA
 
Intellectual property lawyer: The Protector of your ideas
Intellectual property lawyer: The Protector of your ideasIntellectual property lawyer: The Protector of your ideas
Intellectual property lawyer: The Protector of your ideassmithdon000000
 
Limit fungsi (soal+pembahasan) -by syifadhila
Limit fungsi (soal+pembahasan) -by syifadhilaLimit fungsi (soal+pembahasan) -by syifadhila
Limit fungsi (soal+pembahasan) -by syifadhilaSyifa Dhila
 
Accounting-0137 Chapter 1 Lecture 2
Accounting-0137 Chapter 1 Lecture 2Accounting-0137 Chapter 1 Lecture 2
Accounting-0137 Chapter 1 Lecture 2Cambriannews
 
Libro de ejercicios de word
Libro de ejercicios de wordLibro de ejercicios de word
Libro de ejercicios de wordnoechu51013
 
Universidad autonoma de baja california
Universidad autonoma de baja californiaUniversidad autonoma de baja california
Universidad autonoma de baja californiaWilliamgutierrez172
 
Roshettat book 1 word format
Roshettat book 1 word formatRoshettat book 1 word format
Roshettat book 1 word formatPharmacia1 .com
 

What's hot (20)

Page bhasin massala chakki
Page bhasin massala chakkiPage bhasin massala chakki
Page bhasin massala chakki
 
Noip 2016-day2
Noip 2016-day2Noip 2016-day2
Noip 2016-day2
 
سیرت مصطفٰی صلّی اللہ تعالٰی علیہ وسلّم_Seerat e Mustafa (saw)
سیرت مصطفٰی صلّی اللہ تعالٰی علیہ وسلّم_Seerat e Mustafa (saw)سیرت مصطفٰی صلّی اللہ تعالٰی علیہ وسلّم_Seerat e Mustafa (saw)
سیرت مصطفٰی صلّی اللہ تعالٰی علیہ وسلّم_Seerat e Mustafa (saw)
 
What is a team and what is a group
What is a team and what is a groupWhat is a team and what is a group
What is a team and what is a group
 
QM-076-六標準差管理方法的解題邏輯與策略
QM-076-六標準差管理方法的解題邏輯與策略QM-076-六標準差管理方法的解題邏輯與策略
QM-076-六標準差管理方法的解題邏輯與策略
 
Nitrozen disorder-book
Nitrozen disorder-bookNitrozen disorder-book
Nitrozen disorder-book
 
Linux Commands
Linux CommandsLinux Commands
Linux Commands
 
Transformada de Fourier - Señales en forma trigonometrica y complejas
Transformada de Fourier - Señales en forma trigonometrica y complejasTransformada de Fourier - Señales en forma trigonometrica y complejas
Transformada de Fourier - Señales en forma trigonometrica y complejas
 
Portada word
Portada wordPortada word
Portada word
 
Decisão ação MP - Serviços essenciais
Decisão ação MP - Serviços essenciaisDecisão ação MP - Serviços essenciais
Decisão ação MP - Serviços essenciais
 
Lectoescritura: copiar palabras letra a letra
Lectoescritura: copiar palabras letra a letraLectoescritura: copiar palabras letra a letra
Lectoescritura: copiar palabras letra a letra
 
Intellectual property lawyer: The Protector of your ideas
Intellectual property lawyer: The Protector of your ideasIntellectual property lawyer: The Protector of your ideas
Intellectual property lawyer: The Protector of your ideas
 
Super keyword
Super keywordSuper keyword
Super keyword
 
Limit fungsi (soal+pembahasan) -by syifadhila
Limit fungsi (soal+pembahasan) -by syifadhilaLimit fungsi (soal+pembahasan) -by syifadhila
Limit fungsi (soal+pembahasan) -by syifadhila
 
Amba分析
Amba分析Amba分析
Amba分析
 
Accounting-0137 Chapter 1 Lecture 2
Accounting-0137 Chapter 1 Lecture 2Accounting-0137 Chapter 1 Lecture 2
Accounting-0137 Chapter 1 Lecture 2
 
Libro de ejercicios de word
Libro de ejercicios de wordLibro de ejercicios de word
Libro de ejercicios de word
 
Universidad autonoma de baja california
Universidad autonoma de baja californiaUniversidad autonoma de baja california
Universidad autonoma de baja california
 
Qwertyuipoihgfdcvb
Qwertyuipoihgfdcvb Qwertyuipoihgfdcvb
Qwertyuipoihgfdcvb
 
Roshettat book 1 word format
Roshettat book 1 word formatRoshettat book 1 word format
Roshettat book 1 word format
 

Viewers also liked

Creating Digital Stories
Creating Digital StoriesCreating Digital Stories
Creating Digital StoriesJeremy Williams
 
Shadow art
Shadow artShadow art
Shadow artale last
 
McDougal Presentation
McDougal PresentationMcDougal Presentation
McDougal Presentationmmcdougal
 
School as Sustainable Enterprise
School as Sustainable EnterpriseSchool as Sustainable Enterprise
School as Sustainable EnterpriseJeremy Williams
 
Cateva detalii (haioase) despre Sf. Petru si Pavel
Cateva detalii (haioase) despre Sf. Petru si PavelCateva detalii (haioase) despre Sf. Petru si Pavel
Cateva detalii (haioase) despre Sf. Petru si PavelCarla Alman
 
Cuemlenin Oe Eleri
Cuemlenin Oe EleriCuemlenin Oe Eleri
Cuemlenin Oe Eleriyardimt
 
Technology innovation in legal industry by inszoom
Technology innovation in legal industry by inszoom Technology innovation in legal industry by inszoom
Technology innovation in legal industry by inszoom Sneh Sharma
 
Developing a Personal Learning Network (And Using it for Professional Purposes)
Developing a Personal Learning Network (And Using it for Professional Purposes) Developing a Personal Learning Network (And Using it for Professional Purposes)
Developing a Personal Learning Network (And Using it for Professional Purposes) Jeremy Williams
 
Sesiones Online Xabier Basogain
Sesiones Online Xabier BasogainSesiones Online Xabier Basogain
Sesiones Online Xabier BasogainMoodleMoot Euskadi
 
Cum iubesc zodiile
Cum iubesc zodiileCum iubesc zodiile
Cum iubesc zodiileCarla Alman
 

Viewers also liked (20)

Creating Digital Stories
Creating Digital StoriesCreating Digital Stories
Creating Digital Stories
 
Shadow art
Shadow artShadow art
Shadow art
 
McDougal Presentation
McDougal PresentationMcDougal Presentation
McDougal Presentation
 
School as Sustainable Enterprise
School as Sustainable EnterpriseSchool as Sustainable Enterprise
School as Sustainable Enterprise
 
Nov2008 board meeting_presentation_draft_11192008_1045
Nov2008 board meeting_presentation_draft_11192008_1045Nov2008 board meeting_presentation_draft_11192008_1045
Nov2008 board meeting_presentation_draft_11192008_1045
 
Cateva detalii (haioase) despre Sf. Petru si Pavel
Cateva detalii (haioase) despre Sf. Petru si PavelCateva detalii (haioase) despre Sf. Petru si Pavel
Cateva detalii (haioase) despre Sf. Petru si Pavel
 
Rw Newsletter24
Rw Newsletter24Rw Newsletter24
Rw Newsletter24
 
Sensen CI P2
Sensen CI P2Sensen CI P2
Sensen CI P2
 
Czech
CzechCzech
Czech
 
Voicethread project 2010
Voicethread project 2010Voicethread project 2010
Voicethread project 2010
 
Update on GeoReadiness (Cole)
Update on GeoReadiness (Cole)Update on GeoReadiness (Cole)
Update on GeoReadiness (Cole)
 
Cci Ppt 091510
Cci Ppt 091510Cci Ppt 091510
Cci Ppt 091510
 
Cuemlenin Oe Eleri
Cuemlenin Oe EleriCuemlenin Oe Eleri
Cuemlenin Oe Eleri
 
Adlar
AdlarAdlar
Adlar
 
Technology innovation in legal industry by inszoom
Technology innovation in legal industry by inszoom Technology innovation in legal industry by inszoom
Technology innovation in legal industry by inszoom
 
Developing a Personal Learning Network (And Using it for Professional Purposes)
Developing a Personal Learning Network (And Using it for Professional Purposes) Developing a Personal Learning Network (And Using it for Professional Purposes)
Developing a Personal Learning Network (And Using it for Professional Purposes)
 
Sesiones Online Xabier Basogain
Sesiones Online Xabier BasogainSesiones Online Xabier Basogain
Sesiones Online Xabier Basogain
 
Lehen Bigarren Teresa Santos
Lehen Bigarren Teresa SantosLehen Bigarren Teresa Santos
Lehen Bigarren Teresa Santos
 
Cum iubesc zodiile
Cum iubesc zodiileCum iubesc zodiile
Cum iubesc zodiile
 
Un nou concurs!
Un nou concurs!Un nou concurs!
Un nou concurs!
 

Similar to 樽家昌也 (日本Rubyの会)

GAE/J 開発環境でJDO入門
GAE/J 開発環境でJDO入門GAE/J 開発環境でJDO入門
GAE/J 開発環境でJDO入門bose999
 
【12-B-4】 並列処理開発を支援するコンパイラの機能
【12-B-4】 並列処理開発を支援するコンパイラの機能【12-B-4】 並列処理開発を支援するコンパイラの機能
【12-B-4】 並列処理開発を支援するコンパイラの機能devsumi2009
 
事件模型探究
事件模型探究事件模型探究
事件模型探究ematrix
 
技術トレンディセミナー フレームワークとしてのTrac
技術トレンディセミナー フレームワークとしてのTrac技術トレンディセミナー フレームワークとしてのTrac
技術トレンディセミナー フレームワークとしてのTracterada
 
4200 Kte7.0 Training V1.0
4200 Kte7.0 Training V1.04200 Kte7.0 Training V1.0
4200 Kte7.0 Training V1.0wayneliao
 
Ohp Seijoen H20 06 Mojiretsu
Ohp Seijoen H20 06 MojiretsuOhp Seijoen H20 06 Mojiretsu
Ohp Seijoen H20 06 Mojiretsusesejun
 
Sc2009autumn 次世代Daoフレームワーク Doma
Sc2009autumn 次世代Daoフレームワーク DomaSc2009autumn 次世代Daoフレームワーク Doma
Sc2009autumn 次世代Daoフレームワーク DomaToshihiro Nakamura
 
JSplash - Adobe MAX 2009
JSplash - Adobe MAX 2009JSplash - Adobe MAX 2009
JSplash - Adobe MAX 2009gyuque
 
ブラウザでMap Reduce風味の並列分散処理
ブラウザでMap Reduce風味の並列分散処理ブラウザでMap Reduce風味の並列分散処理
ブラウザでMap Reduce風味の並列分散処理Shinya Miyazaki
 
【13 C 2】デベロッパーに贈る!M-V-VMパターンで造るWPFアプリケーション
【13 C 2】デベロッパーに贈る!M-V-VMパターンで造るWPFアプリケーション【13 C 2】デベロッパーに贈る!M-V-VMパターンで造るWPFアプリケーション
【13 C 2】デベロッパーに贈る!M-V-VMパターンで造るWPFアプリケーションYuya Yamaki
 
使いこなそうGUC
使いこなそうGUC使いこなそうGUC
使いこなそうGUCAkio Ishida
 
【13-C-4】 「もう業務はとまらない!オフライン機能を使った業務アプリケーションの実例と最新 Curl 情報」
【13-C-4】 「もう業務はとまらない!オフライン機能を使った業務アプリケーションの実例と最新 Curl 情報」【13-C-4】 「もう業務はとまらない!オフライン機能を使った業務アプリケーションの実例と最新 Curl 情報」
【13-C-4】 「もう業務はとまらない!オフライン機能を使った業務アプリケーションの実例と最新 Curl 情報」devsumi2009
 
Cloud era -『クラウド時代』マッシュアップ技術による地方からの世界発信
Cloud era -『クラウド時代』マッシュアップ技術による地方からの世界発信Cloud era -『クラウド時代』マッシュアップ技術による地方からの世界発信
Cloud era -『クラウド時代』マッシュアップ技術による地方からの世界発信Yusuke Kawasaki
 
PostgreSQLで学ぶBoyer-Moore-Horspoolアルゴリズム
PostgreSQLで学ぶBoyer-Moore-HorspoolアルゴリズムPostgreSQLで学ぶBoyer-Moore-Horspoolアルゴリズム
PostgreSQLで学ぶBoyer-Moore-HorspoolアルゴリズムAkio Ishida
 
サーマル・デバイスモデリングの現状
サーマル・デバイスモデリングの現状サーマル・デバイスモデリングの現状
サーマル・デバイスモデリングの現状Tsuyoshi Horigome
 
20090418 イケテルRails勉強会 第1部Rails編
20090418 イケテルRails勉強会 第1部Rails編20090418 イケテルRails勉強会 第1部Rails編
20090418 イケテルRails勉強会 第1部Rails編mochiko AsTech
 

Similar to 樽家昌也 (日本Rubyの会) (20)

GAE/J 開発環境でJDO入門
GAE/J 開発環境でJDO入門GAE/J 開発環境でJDO入門
GAE/J 開発環境でJDO入門
 
【12-B-4】 並列処理開発を支援するコンパイラの機能
【12-B-4】 並列処理開発を支援するコンパイラの機能【12-B-4】 並列処理開発を支援するコンパイラの機能
【12-B-4】 並列処理開発を支援するコンパイラの機能
 
Reloaded
ReloadedReloaded
Reloaded
 
事件模型探究
事件模型探究事件模型探究
事件模型探究
 
技術トレンディセミナー フレームワークとしてのTrac
技術トレンディセミナー フレームワークとしてのTrac技術トレンディセミナー フレームワークとしてのTrac
技術トレンディセミナー フレームワークとしてのTrac
 
4200 Kte7.0 Training V1.0
4200 Kte7.0 Training V1.04200 Kte7.0 Training V1.0
4200 Kte7.0 Training V1.0
 
Ohp Seijoen H20 06 Mojiretsu
Ohp Seijoen H20 06 MojiretsuOhp Seijoen H20 06 Mojiretsu
Ohp Seijoen H20 06 Mojiretsu
 
Sc2009autumn 次世代Daoフレームワーク Doma
Sc2009autumn 次世代Daoフレームワーク DomaSc2009autumn 次世代Daoフレームワーク Doma
Sc2009autumn 次世代Daoフレームワーク Doma
 
JSplash - Adobe MAX 2009
JSplash - Adobe MAX 2009JSplash - Adobe MAX 2009
JSplash - Adobe MAX 2009
 
ブラウザでMap Reduce風味の並列分散処理
ブラウザでMap Reduce風味の並列分散処理ブラウザでMap Reduce風味の並列分散処理
ブラウザでMap Reduce風味の並列分散処理
 
Iir 08 ver.1.0
Iir 08 ver.1.0Iir 08 ver.1.0
Iir 08 ver.1.0
 
【13 C 2】デベロッパーに贈る!M-V-VMパターンで造るWPFアプリケーション
【13 C 2】デベロッパーに贈る!M-V-VMパターンで造るWPFアプリケーション【13 C 2】デベロッパーに贈る!M-V-VMパターンで造るWPFアプリケーション
【13 C 2】デベロッパーに贈る!M-V-VMパターンで造るWPFアプリケーション
 
dRuby
dRubydRuby
dRuby
 
使いこなそうGUC
使いこなそうGUC使いこなそうGUC
使いこなそうGUC
 
【13-C-4】 「もう業務はとまらない!オフライン機能を使った業務アプリケーションの実例と最新 Curl 情報」
【13-C-4】 「もう業務はとまらない!オフライン機能を使った業務アプリケーションの実例と最新 Curl 情報」【13-C-4】 「もう業務はとまらない!オフライン機能を使った業務アプリケーションの実例と最新 Curl 情報」
【13-C-4】 「もう業務はとまらない!オフライン機能を使った業務アプリケーションの実例と最新 Curl 情報」
 
Cloud era -『クラウド時代』マッシュアップ技術による地方からの世界発信
Cloud era -『クラウド時代』マッシュアップ技術による地方からの世界発信Cloud era -『クラウド時代』マッシュアップ技術による地方からの世界発信
Cloud era -『クラウド時代』マッシュアップ技術による地方からの世界発信
 
PostgreSQLで学ぶBoyer-Moore-Horspoolアルゴリズム
PostgreSQLで学ぶBoyer-Moore-HorspoolアルゴリズムPostgreSQLで学ぶBoyer-Moore-Horspoolアルゴリズム
PostgreSQLで学ぶBoyer-Moore-Horspoolアルゴリズム
 
サーマル・デバイスモデリングの現状
サーマル・デバイスモデリングの現状サーマル・デバイスモデリングの現状
サーマル・デバイスモデリングの現状
 
Ruby Postgres
Ruby PostgresRuby Postgres
Ruby Postgres
 
20090418 イケテルRails勉強会 第1部Rails編
20090418 イケテルRails勉強会 第1部Rails編20090418 イケテルRails勉強会 第1部Rails編
20090418 イケテルRails勉強会 第1部Rails編
 

More from toRuby

坪井創吾さん / "王子様本のRuby1.9対応を調べる"
坪井創吾さん / "王子様本のRuby1.9対応を調べる"坪井創吾さん / "王子様本のRuby1.9対応を調べる"
坪井創吾さん / "王子様本のRuby1.9対応を調べる"toRuby
 
Tリック・サンダース / "去年の社会人一年生のRuby研修"
Tリック・サンダース / "去年の社会人一年生のRuby研修"Tリック・サンダース / "去年の社会人一年生のRuby研修"
Tリック・サンダース / "去年の社会人一年生のRuby研修"toRuby
 
「雑談コミュニケーションのススメ(インド人編)」佐藤 基裕
「雑談コミュニケーションのススメ(インド人編)」佐藤 基裕「雑談コミュニケーションのススメ(インド人編)」佐藤 基裕
「雑談コミュニケーションのススメ(インド人編)」佐藤 基裕toRuby
 
「儲かるWiki」江渡浩一郎
「儲かるWiki」江渡浩一郎「儲かるWiki」江渡浩一郎
「儲かるWiki」江渡浩一郎toRuby
 
「Rubyで描くビジネスモデル」池澤 一廣
「Rubyで描くビジネスモデル」池澤 一廣「Rubyで描くビジネスモデル」池澤 一廣
「Rubyで描くビジネスモデル」池澤 一廣toRuby
 
大川祐介
大川祐介大川祐介
大川祐介toRuby
 

More from toRuby (7)

坪井創吾さん / "王子様本のRuby1.9対応を調べる"
坪井創吾さん / "王子様本のRuby1.9対応を調べる"坪井創吾さん / "王子様本のRuby1.9対応を調べる"
坪井創吾さん / "王子様本のRuby1.9対応を調べる"
 
Tリック・サンダース / "去年の社会人一年生のRuby研修"
Tリック・サンダース / "去年の社会人一年生のRuby研修"Tリック・サンダース / "去年の社会人一年生のRuby研修"
Tリック・サンダース / "去年の社会人一年生のRuby研修"
 
「雑談コミュニケーションのススメ(インド人編)」佐藤 基裕
「雑談コミュニケーションのススメ(インド人編)」佐藤 基裕「雑談コミュニケーションのススメ(インド人編)」佐藤 基裕
「雑談コミュニケーションのススメ(インド人編)」佐藤 基裕
 
「儲かるWiki」江渡浩一郎
「儲かるWiki」江渡浩一郎「儲かるWiki」江渡浩一郎
「儲かるWiki」江渡浩一郎
 
「Rubyで描くビジネスモデル」池澤 一廣
「Rubyで描くビジネスモデル」池澤 一廣「Rubyで描くビジネスモデル」池澤 一廣
「Rubyで描くビジネスモデル」池澤 一廣
 
大川祐介
大川祐介大川祐介
大川祐介
 
stuboi
stuboistuboi
stuboi
 

樽家昌也 (日本Rubyの会)

  • 1. 分散test/unit が出来るといいな 樽家 昌也 (日本Rubyの会)
  • 2. リグレッションテストの憂鬱 終盤になればあまり問題はない 問題は序中盤 ソースコードをガシガシ リファインしたり機能追加する バグもガシガシ追加してる テスト重要! って、言うまでもないですよねー でもテストケースを追加するたびに 時間がどんどん掛るようになってくる・・・・
  • 3. あるテストの例 (13 tests) >rake test Finished in 227.140242 seconds. ちょっと時間掛かりすぎじゃないか?今後が心配。 top - 17:18:13 up 7:23, 3 users, load average: 0.08, 0.86, 0.58 Tasks: 173 total, 1 running, 171 sleeping, 0 stopped, 1 zombie Cpu0 : 0.3%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu1 1 0% C 1 : 1.0%us, 0.3%sy, 0 0% i 98 7%id 0.0%wa, 0.0%hi, 0.0%si, 0.0%st 0 3% 0.0%ni, 98.7%id, 0 0% 0 0%hi 0 0% i 0 0% Cpu2 : 0.3%us, 0.0%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.3%si, 0.0%st Cpu3 : 0.3%us, 0.3%sy, 0.0%ni, 99.0%id, 0.3%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 2580612k total, 1030520k used, 1550092k free, 224804k buffers Swap: 2031608k total, 120k used, 2031488k free, 376652k cached ・・・・ !! CPUが4つもあるのに1つしか使ってないよ ・・・・!! CPUが (略 top - 17:18:20 up 46 days, 9:00, 13 users, load average: 0.18, 0.45, 0.51 Tasks: 353 total, 1 running, 348 sleeping, 4 stopped, 0 zombie Cpu0 : 1.0%us, 0.0%sy, 0.0%ni, 98.3%id, 0.0%wa, 0.0%hi, 0.3%si, 0.3%st Cpu1 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu2 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu3 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu4 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu5 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu6 : 12.0%us, 7.3%sy, 0.0%ni, 80.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu7 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st なんとかせんといかん Cpu8 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu9 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu10 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu11 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu12 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu13 : 0.0%us, 0.7%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu14 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu15 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 16400384k total, 7751860k used, 8648524k free, 257472k buffers Swap: 8191992k total, 220k used, 8191772k free, 4637040k cached
  • 4. 並列実行test環境ってないの? Java界にはTestNGってのがあるらしい ! そういえばMakeには-jオプションあるけれど ! Rakeにはないなぁ そもそも並列といっても色々単位が。どれがいいの? ! 複数スレッドで ! 複数プロセスで ! 複数計算機で ! でもすくなくともどれか一つは欲しい ! 今は複数計算機使わなくてもいいや(個人的理由) !
  • 5. 使ってるtest/unitを見てみた 実行開始している所から並列化させればいいんじゃないだろう ! か? どこで開始してるの? そんな時のcaller関数 test本体に入れてみよう module Test どうやらここらしい。 module Unit 早速手を入れる class TestSuite def run(result, &progress_block) run(result &progress block) yield(STARTED, name) 単純にThread使ってみる @tests.each do |test| test.run(result, &progress_block) カレントディレクトリが end yield(FINISHED, name) グローバルスコープだった! end そもそもThreadは時分割で 複数CPU使わないよと突っ込みが入る。
  • 6. じゃあマルチプロセスで プロセス別れるとプロセス間通信が必要 特に他所のプロセスの変数いじるんだからdRubyがよそう なんとなく完成 def run(result, &progress_block) drbserv = DRb.start_service(nil,result) d_result = DRbObject.new_with_uri(drbserv.uri) >rake test yield(STARTED, name) Finished in 227.140242 seconds. pids = @tests.map do |test| >rake test P= fork { Finished in 80.753652 seconds. test.run(d_result, &progress_block) exit } え? end resultがthread safeじゃない? pids.each {|i| Process.waitpid(i) } 並列化数が制御できてない? drbserv.stop_service() yield(FINISHED, name) end そういうこともあります。
  • 7. 分散testに向けて 真剣に考えると色々解決しないといけない課題は多い ! ターゲットの選定 ! 分散のモデル化 ! 並列実行されるThreadの導入推進? ! グリッド? ! 分散test/unit っていっても 本質的な全然解決できてない
  • 8. 添付ライブラリで遊ぼう 分散test/unit が出来るといいな 樽家 昌也 (日本Rubyの会)
  • 9. 添付ライブラリ弄りは楽しい 広く使われるものなので固い。たまにもうちょっと融通を ! 利かせてほしくなったりする。 Code Reading が自然と出来るし、 ! 弄ってこそ見えてくる事がある。深く読み込める? コードの必然性とか、工夫とか ! Rubyは非常にいじりやすい。 C実装部分以外オープン ! 後付けで変更する部分を定義しなおすだけ。 Binary2.0的な事もできたり。(idからポインタを計算) まだの方は是非一度弄ってみてください
  • 10. 分散 これからの時代はメニーコアだ 分散だ ! Rubyをメニーコア時代のデファクトスクリプト言語に ! Regional RubyKaigi ! 栃木は分散の聖地? ! 都心からの適度な距離、dRubyな土地だし ! 分散の聖地? ! 分散の聖地はやっぱり分散して存在しないと。 ! もっと分散しましょう