ソフトウェアPJの工期は工数の3乗根に比例する数式を理解する

# はじめに
下記サイトの「ソフトウェアプロジェクトの工期は工数の三乗根に比例する」にて数式が幾つか出てきました。

https://qiita.com/hirokidaichi/items/7f7f7881acba9302301f

**全体工数(E)の数式**
$\displaystyle E = \int_{0}^{L} R{\left(t \right)}\, dt = \frac{L^{3} a}{6}$
$R{\left(t \right)} = a \left(L t - t^{2}\right)$

**プロジェクトの工期(L)の数式**
$\displaystyle L=\sqrt[3]{\frac{6E}{a}}$

**ピーク時人員数の数式**
$\displaystyle R_{peak} = \frac{L^{2} a}{4}$

**全体工期の数式**
$L = 2.7 \sqrt[3]{E}$

自分は数学は苦手なんですが、何故３乗や6や4の分母が出てくるのかなどの理屈が知りたいんですよね。

# 全体工数(E)の数式
リソースヒストグラムの画像を引用させて頂きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14053/910a081b-6021-84e9-fcd5-7c72f8727910.png)

>リソースヒストグラムをすべて足し合わせたものが、全体工数になります。つまり、R(t)を[0,L]で定積分したものが全体工数です。計算してみると全体工数(E)は次のようになります。

$\displaystyle E = \int_{0}^{L} R{\left(t \right)}\, dt = \frac{L^{3} a}{6}$

## 積分の基礎
微分積分については、下記の動画で学んで頂ければと思います。
[中学数学からはじめる微分積分 - 予備校のノリで学ぶ「大学の数学・物理」 YouTube](https://www.youtube.com/watch?v=4p1rwfXbCoY)

積分は「次数を上げて、次数を分母に置く」という計算手法があります。
$x$ を積分した場合、$\dfrac {1}{2}x^2$ になります。
$x^2$ を積分した場合、$\dfrac {1}{3}x^3$ になります。
$x^3$ を積分した場合、$\dfrac {1}{4}x^4$ になります。

ちなみに微分は積分の逆で「次数を前に出して、次数を下げる」という計算手法になります。
$\dfrac {1}{3}x^3$ を微分した場合、$\dfrac {3}{3}x^{3-1}$ = $x^2$になります。

### 応用例
円周率の長さの公式 $2{\pi}r$ を積分(次数を上げて、次数を分母に置く)すると、
円周率の面積の公式（半径x半径x3.14）が $\dfrac {2}{2}{\pi}r^2={\pi}r^2$ が求まります。
球の表面積の公式 $4{\pi}r^2$ を積分(次数を上げて、次数を分母に置く)すると、
球の面積の公式が $\dfrac {4}{3}{\pi}r^3$ が求まります。

### 定積分とは
関数 $f(x)$ を積分するときは、∫（インテグラル）という記号を使って $\int f(x)dx$ と表記します。
積分には、不定積分と定積分があります。
[積分のやり方と基礎公式。不定積分と定積分の違いとは？ - アタリマエ!](https://atarimae.biz/archives/22555)

**不定積分**
不定積分は微分したら $f(x)$ になるような関数を求めること
$\displaystyle F(x)=\int f(x)dx$

**定積分**
定積分は不定積分に積分区間の両端の値を代入した値の差のこと、関数 $f(x)$ を $a$ から $b$ の範囲で積分し、値の差（面積）を求めます。
$\displaystyle \int_a^b f(x)dx=F(a)-F(b)$

## Lの3乗の理由
リソースヒストグラムは上向きの放物線を描いているので$x^2$の2次関数となります。
積分の計算手法に則れば$\dfrac {1}{3}x^3$ となり、3乗が出てきます。

## 分母が6の理由
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14053/7559bd1a-0dc5-b77a-90d1-1309c3d42023.png)

リソースヒストグラムは上向きの放物線で土台である直線（時間）との面積を求めればいいので、1/6公式が使用できます。
[放物線と直線で囲まれた面積を高速で求める1/6公式 - 高校数学の美しい物語](https://manabitimes.jp/math/594)
$\displaystyle\int_{\alpha}^{\beta} (x-\alpha)(x-\beta)dx=-\dfrac{1}{6}(\beta-\alpha)^3$

**証明**
[積分の面積公式と証明（6分の1公式・接線など） - 理系ラボ](https://rikeilabo.com/area-formula-by-integration-in-mathmatics2b)
$x$ ではなく $x-\alpha$ が基準になるように変形して積分を行う。

$\displaystyle {\int_{\alpha}^{\beta} (x-\alpha) (x-\beta) dx }$
$\displaystyle {=\int_{\alpha}^{\beta} (x-\alpha) \left\\{(x-\alpha)-(\beta-\alpha)\right\\} dx}$
$\displaystyle {=\int_{\alpha}^{\beta} \left\\{(x-\alpha)^2-(\beta–\alpha)(x-\alpha)\right\\} dx}$
$\displaystyle {=\left[\frac{1}{3}(x-\alpha)^3–(\beta-\alpha) \cdot \frac{1}{2} (x-\alpha)^2\right]_{\alpha}^{\beta} }$
$\displaystyle {=\frac{1}{3} (\beta-\alpha)^3 –(\beta-\alpha) \cdot \frac{1}{2} (\beta - \alpha)^2}$
$\displaystyle {=\frac{1}{3} (\beta-\alpha)^3 - \frac{1}{2} (\beta - \alpha)^3}$
$\displaystyle {=-\frac{1}{6} (\beta-\alpha)^3 }$

$x$ に $\alpha$ を代入しても消えるので、$\beta$を代入した形のみが残る
[一度聞いたら忘れない1/6公式の授業【積分公式の感覚的理解】](https://www.youtube.com/watch?v=-Mh26tY9wX0&t=530s)

## 符号が正の理由
$y=x^2$が、下向きの放物線になり、$y=-x^2$が、上向きの放物線になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14053/10d8dfc6-7c07-be19-2ec5-3146e29fcf0a.png)

下記サイトにて、$y=a^2+bx+c$のグラフをスライダーで値設定して見ることができます。
https://www.geogebra.org/m/rhv5avxv

リソースヒストグラムは上向きの放物線なので、負数になります。
よって、先程の1/6公式は正数に変ります。
$\displaystyle -({-\frac{1}{6} (\beta-\alpha)^3 })$
$\displaystyle ={\frac{1}{6} (\beta-\alpha)^3 }$

## 1/6公式を当てはめる
`全体工数(E)`　`Ｒ(t)= 時刻tの工数` `a = プロジェクトの動員係数` `L=プロジェクトの工期`
先述した正数の1/6公式に当てはめます。$\beta = L$、$\alpha = 0$ になります。
$R(t)=a(Lt−t^2)$
$\displaystyle E = \int_{0}^{L} R{\left(t \right)}\, dt$
$\displaystyle ={\frac{1}{6} (L-0)^3a}$
$\displaystyle ={\frac{L^3a}{6}}$

これで下記の全体工数(E)の式が求まりました。
$\displaystyle E = \int_{0}^{L} R{\left(t \right)}\, dt = \frac{L^{3} a}{6}$

# プロジェクトの工期(L)の数式
全体工数(E) から式を変更することでプロジェクトの工期(L)の数式が求まります。
$\displaystyle E={\frac{L^3a}{6}}$
$L^3a$を求めるので両辺に$6$を掛ける
$\displaystyle 6 \times E={\frac{L^3a \times 6}{6}}$
$\displaystyle 6E=L^3a$
式の左右を入れ替える
$\displaystyle L^3a=6E$
$a$を右側に移行する($\frac{1}{a}$を両辺に掛けるのと一緒）
$\displaystyle L^3=\frac{6E}{a}$

3乗を右側に移行するので3乗根になる。
これで下記のプロジェクトの工期(L)の式が求まりました。
$\displaystyle L=\sqrt[3]{\frac{6E}{a}}$

# ピーク時人員数の数式
ピーク時というのは、放物線でいうところの頂点になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14053/feda4949-2f22-d0e3-6340-57fd300583d2.png)

[二次関数の軸と頂点の求め方など - 高校数学の美しい物語](https://manabitimes.jp/math/1199)
軸の方程式，頂点の座標の導出
$y=ax^2+bx+c$ を平方完成する
$y=a\left(x^2+2\cdot\dfrac{b}{2a}x\right)+cy$
$=a\left(x+\dfrac{b}{2a}\right)^2-\dfrac{b^2}{4a}+cy$
$=a\left(x+\dfrac{b}{2a}\right)^2+\dfrac{-b^2+4ac}{4a}$
 
よって、軸の方程式は
$x=-\dfrac{b}{2a}x$
頂点の座標は 
$\left(-\dfrac{b}{2a},\dfrac{-b^2+4ac}{4a}\right)$

先述した「符号が正の理由」と同じで、上向きの放物線になるので係数$a=-1$になります。
$a=-1$、$b=(L-0)$、$c=0$ を $y=ax^2+bx+c$ 当てはめます。

$\left(-\dfrac{(L-0)}{2 \times -1},\dfrac{-(L-0)^2+4 \times -1 \times 0}{4 \times -1}\right)=\left(\dfrac{L}{2},\dfrac{L^2}{4}\right)$
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14053/9886dcde-6115-c85b-9fd4-90959841c6a0.png)
x軸が時間(t)となるので、$t=L/2$ 時に放物線のピークを迎えます。
`a = プロジェクトの動員係数` を式に追加することで、ピーク時人員数の数式が求まりました。

$\displaystyle R_{peak} = \frac{L^{2} a}{4}$

# 全体工期の数式
>ソフトウェアプロジェクトの工期と工数の関係は工数の三乗根に2.7をかけた数字に比例するとされています。この2.7という定数は、毎年の調査ごとに少しずつ違ってきます。
(中略)
これらの関係を数式にすると以下のようになります。Lは工期、Eはそのプロジェクトの工数です。
100人月のプロジェクトであれば、標準的な工期は12.5ヶ月かかると計算される。

1000人月で約27ケ月つまり2年3か月と計算される。
ソフトウェアメトリックス調査2020 システム開発・保守調査/一般社団法人日本システムユーザー協会
https://juas.or.jp/cms/media/2020/05/20swm_pr.pdf 

$L = 2.7 \sqrt[3]{E}$

# 最後に
これで、何故３乗や6や4の分母が出てくるのかなどの理屈が分かりました。
今回、高校や中学レベルの数学で求めれることが分かったのですが、勉強して得られた知識は学習できていても習っていない違う状況・条件の問題だと分からないもんなんですよね。いわば応用力がない。

数式の解説ってググってもヒットしないんで、いつも苦労してしまう。
以前も二乗和を2で割る理由を苦労して探索して記事を書いたことがあります。

https://yaju3d.hatenablog.jp/entry/2016/12/09/073050