ソフトの開発技術には何が要る

2017年12月8日

 

ソフトウエアの開発技術 にはどんな技術が在りますか?

ソフトウエアを開発するには様々な技術が要りますが、最低限どんな技術が必要なのでしょうか?本屋で書棚をみたりネットで検索したりすると色々な情報があって必要な技術がどれなのか判らなくなります。組み込み系のソフトウエアという領域で考えると、おおきくは設計技術実装技術テスト技術開発管理技術 の4つが重要な技術になります。 なお、組み込み系の開発に必要な技術やスキルについては、IPA(情報処理推進機構)組み込みスキル標準(ETSS)を定めて体系的に判り易く整理して下さっています。 

でも、このETSSも世間一般の広範囲な組み込み系ソフトウエアを対象に整理してあるので、結構カバーする領域が広くて、ちょっと壁が高く感じる事もあります。もうすこし砕けた感じで、とりあえずどんな技術が要るの?という観点から、グータラ親父の考えてきたソフトウエアの開発技術について紹介しようと思いますので、こんな見方もあるのか~程度の軽い気持ちで読み流してください。

ところで技術とスキル(技能)って何が違うの?

ところで、技術って何でしょうか、良く似た言葉にスキルがあります。スキルは日本語にすると技能が一番近いですね。簡単に言うと、技術とは「科学を人の役に立てるように文章や図面で書き表した物」で、スキルとは「技術を使って役に立つ事をなしとげる人の能力」と言えます。 

例えば、カレーを作る事を例にとって考えてみましょう。どんな材料やスパイスを使ってどんな方法や順番で料理をすればカレーが出来上がるのか、カレーの作り方についてのレシピが本やネットに書かれています。これは、カレーを作るための技術です。一方で、インド料理店の調理人は、そのようなレシピは当然頭の中に入っていて、レシピを見なくてもおいしいカレーを作れます。これは調理人のカレーを作るスキルです。

言い換えると、スキル(技能)とは技術として書き記された先人達の知恵を、自ら実践して経験する事で身に付く自分自身の能力の事です。ソフトウエアの開発は設計も実装もテストも、殆ど全てをソフトウエアエンジニアが頭の中で考えて作業を進めるので、本当に必要なのソフトウエアを開発するスキルです。でも、エンジニアの頭の中は覗けないので、文章や図面などの書き物になっている技術という視点からいろいろと考えるのが良さそうです。

どんな技術があるのでしょうか

ソフトウエアの開発に必要な技術とはどんな物があるのでしょうか? 計算機言語の知識とか通信プロトコルについての知識とかも技術なのでしょうか? 技術というだけではもや~としていて掴み処が無いので、もう少し分類してみましょう。

ソフトウエアの開発に必要な技術の分類にもいろいいろと有るのですが、簡単な分類としては① 設計技術 ②実装技術 ③テスト技術 ④管理技術 程度に分けるのが判り易いです。①、②、③は実際にソフトウエアをのものを作るための直接的な技術で、④は計画した通りにソフトウエアを完成させるための間接的な技術です。では、順番にもう少し詳しく見ていきましょう。

設計技術ってどんな技術

ソフトウエアの設計技術というと真っ先に思い浮かぶのが、要件定義を決める要件設計の技術やソフトウエアの全体構成を考える基本設計の技術、最近ではRAS機能(信頼性、可用性、保守性)を設計する技術や、セキュリティを設計する技術などの、ソフトウエアそのものを設計するための技術です。これはもちろん一番大切な技術ですね、

ではその次に大切な技術は何かというと、今度はレビューの技術です。ソフトウエアの設計はその殆ど全てがソフトウエアエンジニアの頭の中で行われます。で、エンジニアは人間で神様では無いので、当然の事として間違いが入り込みます。この間違いに自分で気づければ良いのですが、残念ながら人は自分自身の間違いを見つけるのは割と苦手です。頑張って間違いを探そうとするのですが、その間違いを起こした時と同じように考えてしまうので、間違いが見つけにくくなってしまうのです。

ですので、他の誰かに間違いが無いかを指摘してもらう、これがレビューです。できるだけ効果的にレビューを受けるにはどんな準備をしてどんな事に注意してどんな方法でレビューを進めればよいのか、これがレビューの技術です。ソフトウエアそのものを設計するための直接的な技術に対して、レビューの技術は開発を支援する技術ですね。

直接的な技術と支援技術の他にソフトウエアの設計に必要な技術はあるでしょうか。グータラ親父はもう2つ必要な技術を意識していました。1つ目は文書の作成技術です、設計書は日本語等の自然言語で書くのですが、散文のように書かれていては、読むほうは溜まりません。技術文書として必要な情報を判り易く書き出すには、それなりの文書作成能力が必須になってきます。 

そして2つ目は、これはソフトウエアの設計に限らないのですが、物を考える技術です。物を考える技術というと何か良く判らない怪しげな雰囲気もありますが、皆さんは物を考える時にどんな事をしていますか? 実は物を考える時には ①関係する情報を集めて ②情報の間の関連性を考えて ③情報を整理分類して ④目的を達成するための情報を組み上げる という手順を踏んでいます。 この②と③が考えるという作業の主体なのですが、言葉や図や絵を使いながら頭の中で集めてきた情報を並べたりグルーピングしたり関連性を追いかけたりと、いろいろな事をして目的を達成するための道筋を探ります。

ところで、皆さんはこの②と③の作業を筋道を立ててやっていますか? 言い方を変えると顕在意識の元で、考える事を自分自身が認識した状態で考えて、解答を導き出していますか? それほど難しく無い内容ならば、筋道を立てて考えていくと解答に行きつきます。ところが複雑な問題の場合には、いくら考えても良い解答にたどり着けない事もあります、考えが煮詰まった状態ですね。そんな時には、顕在意識ではなく潜在意識を使って考える事を意識してやっていますか? ソフトウエアの開発をしていく上で、顕在意識だけではなかなか解決策が出てこない事もあります、そんな時に潜在意識も使って解決策を見出す方法、要はひらめきを得る方法も、技術として身に付けておくのが良いというのがグータラ親父の考えです。

Posted by グータラ親父