オープンデザイン
ソフトウェアエンジニアにとっては、
オープンソースの考え方が、その後他分野にどのような影響を与えているかが読み取れる本。
3Dプリンターの活動背景なども書いてある。
ユーザ参加型やユーザ主導型の共創も含まれる。
ものづくりのあり方がだいぶ変わってきているんだね。
オープンデザイン ―参加と共創から生まれる「つくりかたの未来」 (Make: Japan Books)
- 作者: Bas Van Abel,Lucas Evers,Roel Klaassen,Peter Troxler,田中浩也,川本大功,巾嶋良幸,古賀稔章,水野祐,岩倉悠子,菊地開司
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/08/24
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (7件) を見る
追記:読んでるうちにだんだんわからなくなってきた。
カバレッジの危ない使われ方
良かれと思って頑張ってカバレッジ率を上げていたら、逆にテストを書かなくなってしまう事態に陥ることがあるようだ。
カバレッジ率のレポート結果の傾向から学習し、テストを書くまではいい。やった方が良い。
問題は次だ。不慣れだとテスト対象の期待する振る舞いを明らかにすること、良いコードや設計を導くためにテストを書くことよりも、ユニット&モックでカバレッジ率を機械的にあげていくことへ過度に熱を上げてしまうことがある。
するとどうなるか。内容が理解できない意図が不明確なテスト、ちょっとした変更でテストが多数失敗してしまうのが大量にできてしまう。後でメンテ不能なテストが大量にできてしまう。カバレッジをあげようとがんばったのに。
その後何が起きるか。新しく修正や追加しようとしたら、大量レッドでメンテできねー、読んでも理解できねー糞テストの壁がプログラマーの前に立ち現れる。本当ならAll Testは、セーフティネットであって欲しいのに、邪魔な壁として。
これダメなんじゃねと判断してテストの自動化をやめてしまい、逆戻り。あらら。。。
注意されたし。
追記:無駄にテスト書いたために、スローテストや、不要なメソッドを見つけるのがめんどうになるなども発生!!らしい。
「時間がない」問題の原因候補
コーチの仕事柄「時間がない」問題のチームに出くわすことがある。
途中は端折るが、原因を辿って行くと次が大きいんじゃなかろうか
見積りと計画づくりの不在
- フィーチャー実装の やる・やらないの取捨選択の不在
- 「ターゲット」「見積り」「コミットメント」の区別の不在( 過去の実績の仕事量を大きく上回る量をコミットする。)
「(開発の)規律の不在」の不在
- レビューなし、テストなしの「できました」の嘘の進捗
- 人やチーム間の仕事の引き渡しの際に、「お仕事に着手可能な条件」「お仕事の完了DONEの条件」の基準が曖昧。
- 泥沼化したコードで難読化。修正範囲の拡大。 応急処置の修正によってさらなるバグ混入
他にも、自分が不要な会議への参加とか。
49 見積りとは何か(97きのこ本より)
- 作者: 和田卓人,Kevlin Henney,夏目大
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/12/18
- メディア: 単行本(ソフトカバー)
- 購入: 58人 クリック: 2,107回
- この商品を含むブログ (350件) を見る
とあるチームで読書会をおすすめしたら、49は印象に残ったらしい。<見積り:事実に基づく推量>と<ターゲット:ビジネス上の実現したい目標>と<コミットメント:何を何時までにの約束>を区別すること、それぞれのロールが協力して、3つをいい感じに近づけていくことこそ、見積りと計画づくりのキモの活動になる。
■
「ヒューマニズム」について―パリのジャン・ボーフレに宛てた書簡 (ちくま学芸文庫)
- 作者: マルティンハイデッガー,Martin Heidegger,渡邊二郎
- 出版社/メーカー: 筑摩書房
- 発売日: 1997/06/01
- メディア: 文庫
- 購入: 3人 クリック: 30回
- この商品を含むブログ (21件) を見る
ふらっと、下鴨納涼古本まつりに行って、著者に惹かれて購入。存在と時間〈上〉 (ちくま学芸文庫) と 存在と時間〈下〉 (ちくま学芸文庫) を2,3 回読んでもさっぱりで攻めあぐねていたが、この本が幾つかヒントをくれた感がある。
「時間と存在」のその後が追える本。「ヒューマニズム」賛美の本ではない。
(形而上学(メタフィジカル)ヒューマニズム批判を展開し、ヒューマニズムを捉え直そうとしている。)
訳者の補足や丁寧である。ハイデッカーとジャン・ボーフレの2人についてや補足や解説を合わせると本文よりも長い。
(長いのだが、訳者の自を出すのではなく、解説に徹底しているためくどさが感じられず、むしろ理解の助けになっている。)
買ってよかった。
素振りメモ
帰り際の同僚との会話が混じりながら、メッセージ指向でと考えいたら、なんか変なのになった。
自動販売機との相互作用を確認したいのって、自動販売機の中身の要素のコラボレーションいうより自動販売機を観察している何者かってこと???
class VendingMachine def initialize @cach_register = CashRegister.new end def observer(ob) @observer = ob end def set_cash_register(cach_register) @cach_register = cach_register end def insert_billcoin(bill_coin) back_cash = @cach_register.add_cash(bill_coin) if back_cash @observer.receive_refund_billcoins back_cash end @observer.know_total "#{@cach_register.total}円" end def refund @observer.receive_refund_billcoins @cach_register.refund @observer.know_total "#{@cach_register.total}円" end end class CashRegister def initialize @current_cashs = [] end def add_cash(cash) if [10.yen, 50.yen, 100.yen, 500.yen, 1000.yen].include?(cash) @current_cashs << cash return nil else return cash end end def total @current_cashs.map(&:value).reduce(:+) || 0 end def refund begin return @current_cashs ensure @current_cashs = [] end end end class BillCoin < Struct.new(:value) end class Fixnum def yen BillCoin.new(self) end end describe VendingMachine do let(:__allow_p) { d = double('person') allow(d).to receive(:know_total) d } let(:person) { d = double('person') subject.observer(d) d } subject { target = VendingMachine.new target.observer(__allow_p) target } describe "お金の投入と払い戻しについて" do specify "お金の投入すると、合計金額がわかる" do [10.yen, 50.yen, 100.yen, 500.yen].each{ |coin| subject.insert_billcoin(coin) } expect(person).to receive(:know_total).with('1660円') subject.insert_billcoin(1000.yen) end specify 'お金を投入してから払い戻しでお金を受け取る。合計金額は0円' do coins = [10.yen, 50.yen] coins.each{ |coin| subject.insert_billcoin(coin) } expect(person).to receive(:receive_refund_billcoins).with(coins) expect(person).to receive(:know_total).with("0円") subject.refund end end describe '扱えないお金について' do let(:invalid_billcoins) { [1.yen, 5000.yen, 10000.yen] } specify '想定外の投入金額の場合は、加算せず釣り銭を返す。合計金額は0円のまま' do invalid_billcoins.each do |c| expect(person).to receive(:receive_refund_billcoins).with(c) expect(person).to receive(:know_total).with("0円") end invalid_billcoins.each{ |coin| subject.insert_billcoin(coin) } end end end