katapedia

ソフトウェア開発

スケジュールを決め

役割分担を決め

仕様を決め

あらゆる調整をし

スケジュール管理を行い

サイトまたは案件を世に公開し

成果を報告する

プロジェクト基本情報

不確実性

高速適応性

複雑性

レーダーチャート指標

http://sec.ipa.go.jp/reports/20100330a/20100330a_1.pdf

いいプロジェクト

・しがらみがない

・裁量がある

・客先との距離が近い

・エンジニアリング以外のことをやらなくていい(見積もりとか管理とか)

・見渡せる規模である

教訓

哲学

Unix哲学

Simple,:単純

Modular:モジュール型

Composable:組みあわせ可能

人月の神話

プログラマの生き様

https://www.gitbook.com/book/masarakki/c89-the-way-of-programmer-life/details

代表的な要素

ベンダとユーザ間

「かぎきひよこ」と覚える

ベンダ

「せいしんたこかこかきょ」と覚える

ユーザ

「よかたまほ」と覚える

Googleの開発スタイル

http://blog.livedoor.jp/heitatta/archives/54439839.html

アンチパターン

アジャイル宣言

開発フェーズ略語

工程 略語 内容
企画 SP System Planning
企画 SP System Planning
要求分析 SA System Architectural design. システム方式設計
要件定義 RD -
基本設計 UI User Interface
基本設計 BD Basic Design
基本設計 SS System Structure Design(構造設計)
基本設計 FD Function Design(機能設計)
詳細設計 DD Detail Design
詳細設計 PD Program Design
詳細設計 PS Program Structure Design
製造/個別test CD CoDing
製造/個別test PG ProGraming
製造/個別test UT Unit Test 個別テスト
製造/個別test FT Function Test 機能試験
結合テスト SI -
結合テスト IT Integration Test 結合試験
総合テスト ST System Test
総合テスト PT -
運用テスト OT Operation Test

文書の種類

他にも

・要求仕様書

・要件定義書

・基本設計書

 ・システム概要仕様書

 ・機能一覧

 ・業務フロー設計書

 ・ネットワーク構成図

 ・画面設計書

 ・帳票仕様書

 ・ER図

 ・インターフェース仕様書

・詳細仕様書

 ・DB定義書

 ・プログラム(アルゴリズム)仕様書

 ・プロトコル仕様書

 ・クラス設計書

 ・状態遷移図

・テスト仕様書

 ・単体テスト仕様書

 ・結合テスト仕様書

 ・システムテスト仕様書

http://blogs.bizmakoto.jp/noubiz/entry/4641.html

本当に必要な文書

・DB定義書

・画面設計書

・コードナンバーの定義やバッチ処理のフローなどを書いたプログラム仕様書

・ネットワーク構成図

ウォーターフォール型開発のドキュメント一覧

フェイズ ドキュメントの種類
要件定義 要件定義書
要件定義 要件定義書
基本設計 基本設計書、機能仕様書、ネットワーク設計書、SW/HW(SoftWare/HardWare)構成書、セキュリティ設計書、性能・信頼性設計書、データ構造定義書(ER図)、テーブル定義書、画面定義書、画面遷移定義書、帳票定義書、開発標準書
詳細設計 詳細設計書、クラス設計書、構成管理定義書、インターフェイス設計書
開発/単体テスト 単体テスト仕様書
結合テスト/システム・テスト テスト計画書、結合テスト仕様書、システム・テスト仕様書
本番/運用 環境構築手順書、運用定義書、障害対応手順書、移行仕様書、移行手順書

ソフトウェア開発データ

ソフトウェア開発データ白書

自動化

各フェーズの位置づけ

(スケルトンの作成)

  1. 各種ファイル環境の構築

  2. テストケースの記述

  3. テストデータ(サンプル)の作成

  4. 製造物のレビュー

  1. ソフトウェアのバージョン管理

  2. テストパターンの記

  3. 設計バグの検出

要求分析  基本設計   詳細設計  製造   テスト
|<----------------------->|<------------->|<------------->|
P1 		P2  	       P3

ソフトウェアシステムをモデル化


MoSCow

ジョエルテスト

  1. ソース管理システムを使っているか?
  2. オペレーションでビルドを行えるか?
  3. 毎日ビルドを行うか?
  4. 障害票データベースを持っているか?
  5. 新しいコードを書くまえにバグを修正するか?
  6. 更新可能なスケジュール表を持っているか?
  7. 仕様書を持っているか?
  8. プログラマは静かな労働環境にあるか?
  9. 買える範囲で一番良い開発ツールを使っているか?
  10. テスト担当者はいるか?
  11. プログラマを採用するときにコードを書かせるか?
  12. 「廊下での使い勝手テスト」を行っているか?

開発プロセス

ウォーターフォールvsアジャイルvsスクラム

https://blogs.msdn.microsoft.com/nakama/2016/06/24/waterfall/

DevOps

http://www.buildinsider.net/enterprise/devops/01

人(People): マインドセットや考え方

プロセス(Process): 開発や運用の手法

プロダクト(Product): ツールや技術

Cluture(文化)

Lean(リーン)

Automation(自動化)

Measurement(計測)

Sharing(共有)

DevOps 文化と組織

https://cloud.google.com/solutions/devops/devops-culture-westrum-organizational-culture?hl=ja

参考スライド

https://slide.meguro.ryuzee.com/slides/87

アジャイル

アジャイル開発プロジェクトの始め方

http://www.ryuzee.com/contents/blog/7110

http://dev.classmethod.jp/tool/github/github-constellation-conf-ryuzee/

アンチパターン

http://www.infoq.com/jp/news/2016/04/agileindia-7sins-scrum

顧客にアジャイル開発でと言われたら

  1. アジャイルに何を求めるのかを確認する

  2. 準委任(SES)契約を勧める

  3. 一括契約ながら成果物をあいまいにしておく

http://takigawa401.hatenablog.com/entry/2017/06/12/183007

モダンアジャイル

人々を最高に輝かせる(Make people awesome)

安全を必須条件にする(Make safety a prerequisite)

高速に実験&学習する(Experiment and learn rapidly)

継続的に価値を届ける(Deliver value continuously)

リーンスタートアップ

原則1:ムダをなくす

原則2:品質を作り込む

原則3:知識を作り出す

原則4:決定を遅らせる

原則5:速く提供する

原則6:人を尊重する

原則7:全体を最適化する

開発初期にやるべきこと

http://post.simplie.jp/posts/44

サービスキャンバス

  1. 満たすニーズ
  2. ターゲット
  3. 現状の解決方法
  4. 提供する解決方法
  5. 利用モチベーション
  6. 現状の解決方法に対する優位性
  7. コンセプト
  8. 主要成功要因
  9. 流入経路
  10. コスト
  11. 収益

KPI

  1. コアバリューの醸成に寄与すること
  2. その指標を改善することでサービスのコアバリューがより強固になる指標であること
  3. 定点観測可能なもの
  4. 日次/週次でユーザの行動を反映した変化を得られる指標であること
  5. 定量的であること
  6. 数値として測定できる指標であること
  7. 分かりやすいこと
  8. プランナーだけでなくエンジニアやデザイナーにとっても理解しやすい指標であること
  9. 行動をとりやすいこと
  10. その指標を改善するための具体的な施策がイメージしやすいこと

基本項目

  1. サービス名
  2. ドメイン名
  3. コードネーム
  4. リリース日
  5. 提供プラットフォーム
  6. 動作環境
  7. サインアップ方法

XP(エクストリームプログラミング)

・ソフトウェア要求仕様の変更などの変化に対して機敏に対応する

・初期段階の設計よりもコーディングとテストを重視する

・ドキュメントよりもソースコードを重んじる

・各工程を段階的に進めていくより、常にフィードバックを行って修正・再設計していくプロセスを重視する

XPの価値

(1).顧客と開発者の、もしくは開発者間の円滑な「コミュニケーション」(communication)

(2).必要最小限の設計しか行わない「シンプルさ」(simplicity)

(3).頻繁なテストによる「フィードバック」(feedback)

(4).大胆な設計変更に立ち向かう「勇気」(courage)

対象者 プラクティス 解説
/4. 共同 反復 開発を反復(設計・実装・テストを繰り返す小さなサイクル)から構成する。 全体の開発期間はイテレーションと呼ぶ1~2週間の短い期間に区切り、イテレーションごとに部分的な設計・実装・テストを行い、半完成品システムのリリースを繰り返す。 またより小さな単位の単体機能の実装も、コード修正とテストの繰り返しによって進める。 このように反復によって、徐々に完全なシステムを構築していく手法を取る。 このことで、リスクを最小限に抑えつつ、イレギュラーな変更に対応した開発が可能になる。
/4. 共同 反復 開発を反復(設計・実装・テストを繰り返す小さなサイクル)から構成する。 全体の開発期間はイテレーションと呼ぶ1~2週間の短い期間に区切り、イテレーションごとに部分的な設計・実装・テストを行い、半完成品システムのリリースを繰り返す。 またより小さな単位の単体機能の実装も、コード修正とテストの繰り返しによって進める。 このように反復によって、徐々に完全なシステムを構築していく手法を取る。 このことで、リスクを最小限に抑えつつ、イレギュラーな変更に対応した開発が可能になる。
共通の用語 用語集を作成し、チーム全員(開発者・管理者・顧客)の使用する用語とその概念の不一致を解消する。  
開けた作業空間 会話しやすく、作業に打ち込める雰囲気を作る。  
回顧(頻繁な振り返り) 現在の状態を明確に把握しつつ、過去のフィードバックを迅速に反映させるよう心がけ、そのための環境・体制を構築しておく。  
/6. 開発 テスト駆動開発 実装を行うより先に、自動化されたユニットテストないしは手順の明確化されたテストを作成する。 実装はそのテストをパスすることを目標に行う。 ユニットテストを先に作成することで、求める機能が明確化され、シンプルな設計が可能になる。 テストはユニットテスト(ホワイトボックステスト)と受け入れテスト(ブラックボックステスト)からなる。 受け入れテストも自動テストであることが推奨される。 自動化されたテストが、コードの共同所有・リファクタリング・頻繁な結合を可能にし、開発が進むにつれ変更コストが増大することを防ぐ一因となる。
ペアプログラミング 二人一組で実装を行い、一人が実際のコードを書き、もう一人はそれをチェックしながらナビゲートする。 この役割を随時交代しながら作業を進める。 これによって、細々した問題解決に要する時間が短くなる、常にコードレビューを行うことができる、集中力が持続する、コードの詳細を理解したメンバーが常に2人以上いることで後々のコード共有に役立つ、などの多彩な効果が得られる。  
リファクタリング 完成済みのコードでも、随時、改善処置を行う。 この際、外部から見た動作は変更させずに、内部構造がより見通し良く優れたものになるようにする。 テストが作成されていることが前提になる。  
ソースコードの共同所有 誰が作ったソースコードであっても、開発チーム全員が断り無く修正を行うことができる。 ただし、全てのコードに対する責任を、全員が担う。  
継続的インテグレーション 単体テストをパスするコードが完成するたび、すぐに結合テストを行い、問題点や改善点を探す。 少なくとも一日に一回は、結合テストを行う。 また、全体のコンパイルおよび自動テストを行うための継続的インテグレーション用のコンピュータを準備することが推奨されている。  
YAGNI You Aren’t Going to Need It(今必要なことだけ行う)。 先の事を考えて、前払い的に機能を増やし、実装を複雑化させる事は避ける。 むしろ無駄な機能があれば削りとり、今必要な機能だけのシンプルな実装に留めておく。 このことで後のイレギュラーな変更に対応しやすいようにする。 必要なコードは先回りして書くのではなく必要になったときに書くという意味である。  
/5. 管理者 責任の受け入れ  
援護    
四半期毎の見直し    
ミラー 今どういう状態かをチームに知らせる。  
最適なペースの仕事 知的作業には週40時間の労働時間が最適である。 特にXPでは、集中力を高めて効果を生む事を重視しているため、心身ともに健全な状態を保つ必要があり、それ以上の労働は適さない。 そのため、計画的に開発スピードの調整を行う。  
/4. 顧客 ストーリーの作成 求める機能のコンセプトを短い文章で記したストーリーカードを作成する。 そのカードをもとに、開発者・管理者を含めたチームとのミーティングを行い、詳細を決定する。
リリース計画 どのストーリーをどのイテレーションの対象とするか、チームミーティングで主体となって提案し、合意の上で最終的な承認を行う。  
受け入れテスト イテレーションごとに顧客の立場からテストを行い、ストーリーが実現できているか、望むシステムになっているか確認する。 もし満足できない場合は、それを指摘する。  
短期リリース    

スクラム開発

http://www.ryuzee.com/contents/blog/7111

プロダクト・バックログ

プロダクト・バックログは、機能や技術的改善要素を優先順位を付けて記述したものです。ステークホルダ全員が参照し、現在のプロダクトの状況を把握できるようにします。

「ユーザーストーリー」形式がよく用いられますが、形式が重要なのではなく、関係者がいつでも内容を思い出せるようにすることが目的です。

| 誰のために 何のために

それを実現するのか

について合意し、いつでも思い起こせるようにしておくということです。そうすれば、仕様変更が起きた時、「なぜ変更が必要なのか」が理解しやすくなり、プロダクトの全体の進捗への影響の把握・伝達がスムーズになります。

緊急な変更の時「そもそもこの機能は……」という議論や説得に時間をかけてしまえば、プロジェクトの死に直結しかねません。危機に陥る前に、定期的に自分たちの状況を共有しておき、透明性、信頼性を醸成しておきたいものです。手の内を隠してポーカーフェイスで交渉するより、手の内をさらして実力をありのままに把握してもらうのです。

スプリント・バックログ

スプリント・バックログは、プロダクト・バックログからスプリント期間(1~4週間)分を抜き出した「チームのタスクリスト」です。

チームは、予測どおりにきちんとタスクを終わらせられるかを検討します。チームメンバーの多種多様なスキルを総動員して、自信を持って「終わる」と宣言できるかどうかが、確認すべきポイントです。

スプリント期間中は、スプリント・バックログにある作業や機能を完了させるべく、チームとしてベストを尽くします。「私の仕事、あなたの仕事」ではなく、「チームの仕事」です。チームとして責任を持ち、全力で仕上げていきます。

そのため「チームとして情報を共有」することが必要不可欠です。そのために効果的なのが「デイリースクラム」(朝会)です。デイリースクラムは毎日、全員で進捗を確認するミーティングです。

答えることは3つの質問だけ。

|昨日やったこと 今日やること

障害になっていること

この3つの答えをチーム全員で共有します。細かい問題に立ち入ることは避け(別に時間を取る)、トータル15分を目安に完了させます。

タスクボード

タスクボードは、バックログを壁とふせんで表現したものです。視覚的に状況を把握できるため、短時間で最新状況を共有するのに役立ちます。

|ToDo(これからやること) Doing,WIP,InProgress(着手していること)

Done(完了したこと)

という領域の中で、タスクを表すふせんを動かしていきます。

スクラム導入事例

スクラム適用で重要と思われる点

スクラムを使って成果を出す上で障壁となっている点

スクラムと併せて使っている技術プラクティス

導入状況サマリー

http://www.ryuzee.com/contents/blog/7112

スクラムマスターの仕事内容

http://www.ryuzee.com/contents/blog/7115

オープンソースライセンス

朝会

キックオフ

キックオフミーティング

プラクティス

プラクティス一覧

ファストワーク

http://itpro.nikkeibp.co.jp/atcl/column/16/111800263/111800001/?rt=nocnt