Study / Project design 検索結果

検索件数 : 9

1

こんにちは。明月です。この投稿はプログラム最終テスト - st(system test(standard, scenario))に関する説明です。プログラムが納品する前のテストでstテストと言います。略語がsystem testと言いますが、人によりstandard(ステンダード:標準)やscenarioテストという人もいます。略語の解析だけ違いますが、みんな認識するのはテストの流れは似ています。以前にテスト範囲に関して説明したことがあります。上の流れでテストが実施しますが、最終テストは基本設計に対するテストです。つまり、以前の単体テスト(ut)や結合テスト(it)にはプログラムに関するバグや操作に関するテストがメイン項目だと、stにはプログラムの仕様によるテストがメインです。つまり、プログラム的なバグではなく、論理的なバグに関するテストです。例えば、特定要請ページで生成だれたデータを特定な流れにより計算して最終的なデータが表示されることが正確かというテストです。以前のテストまではプログラムツールやライブラリを通って自動化テストをできることならstはすべてのテストケースは人が実施して値が正確かを確認しなければならないです。テストの方法に関してはプログラムの種類や型により違います。例えば、ゲームの場合は普通にアルファー、クローズベータ、オープンベータのタイプでテストが行う場合が多いし、一般プログラムツールに関してもunstableバージョン、stableバージョン(安定化バージョン)を区分してunstableバージョンがテストバージョン、stableやltsバージョンが正式なバージョンになります。そしてウェブ環境にはテストバージョン(dev環境バージョン)、正式バージョン(productionバージョン、本番バージョン)で区分して配布する(deploy)場合もあります。これはプログラムの種類やバグの重要性により方法と期間が区分になります。stテスト仕様書を作成する時にはステップ数、つまり、テストの項目数は普通はプログラムコードライン数の5~10%を作成します。つまり、プログラムのコードが総10万ラインだとテスト項目を5千件から1万件ほどを作成します。テストの仕様書の内容は基本設計により論理的なデータ確認なので、単純なutやitで確認したものでは除きます。例えば、pdfや帳票を出力するボタンを押下する時にちゃ

Study / Project design

#projectdesign

作成日付 : 2021/10/26 19:10:07       修正日付 : 2021/10/26 19:10:07

2

こんにちは。明月です。この投稿はプログラム結合テスト - it(integration test)に関する説明です。以前の投稿で単体テスト(unitテスト)に関して説明しました。link - [project design] プログラム検証とテスト - unitテスト単体テストでは関数とクラス単位でテストすることですが、テストの回数がciツールを利用して相当に頻繁にテストをします。結合テストはunitテストから検証された関数とクラスを全体的に合わせて一つの流れでテストすることです。ウェブプロジェクトには実際にウェブサーバ(開発サーバ - dev server)に配布(deploy)して運用しながら検査することです。開発サーバなので、本データを扱うことではなく、から偽データを使います。テストの範囲は下記の構造により動きます。結合テストは詳細設計で作成したシークエンスやインターフェースを確認することなので、プロジェクトの仕様をテストすることよりプログラム的な不良要素を検証することです。例えば、どのデータを渡したらnullエラーが発生するとか、関数によりinputからoutputは正解ですが、関数の順番で値が間違いか((1+2)*3と1+(2*3)の差異)、ウェブ画面から数字を入れなければならないが、テキスト文字が入っている場合に表示するエラーメッセージなどをチェックするテストなら良いでしょう。結合テストは大幅で二つのパターンで実施します。一つはseleniumというライブラリを使うことと人がいろいろをクリックしながらチェックすることです。seleniumライブラリを利用するのはウェブスクレイピングという技術です。link - [python] seleniumライブラリを使う方法(自動ウェブテスト、ウェブスクレイピング)seleniumライブラリを通ってテストボットを作成するのはjavaもできるし、c#もできますが、テストの特性上にスクリプト修正が多く発生する領域なので修正するたびにビルドすることより修正と実行が便利なpythonに個人的に良いではないかと思います。seleniumライブラリを使うことの利点は我々がウェブページを単純な繰り返しなテストはプログラムとして流すことでテスト時間を短縮することができるし、特定な部分を修正して発生するリグレッションテストを簡単にできます。または、ブラウザによりchrom

Study / Project design

#projectdesign

作成日付 : 2021/10/25 20:12:17       修正日付 : 2021/10/25 20:12:17

3

こんにちは。明月です。この投稿はプログラム検証とテスト - unitテストに関する説明です。プログラムテストというのはプログラム設計と作成よりに凄く重要な作業です。普通に新人開発者やプログラムを始めに勉強するかたにはテストに大事な比重に思わずに工数計算や工程を設定します。少なくても私はその時期がありました。テストというのはプログラムを商品だと思ったら、商品の品質と関連がある部分だし、サービスが開始する時にはサービスの信頼度に関する問題なので、テストというのは設計と実装よりもっと重要な作業だと思います。組織により違いますが、実務ではプログラム工程で設計と実装よりテスト工程にもっと重要だと思うし、プロジェクト管理者の中でも品質管理者(テスト管理者)がプロジェクト内で権限が強いの場合もあります。テストをすることでプログラムには基本的に人が設計するしコードを作成する作業なので、基本的にミスが必ず発生するという前提で始まります。テストの段階は大幅で3段階になりますが、単体テスト(ut: unit test)、結合テスト(it: integration test)、シナリオテストあるいはスタンダードテスト(st: standard test or system test)になります。そしてテストの設定範囲は単体テスト(ut)はコードミスをチェックするし、結合テスト(it)は詳細設計のインターフェースなどをテスト、システムテストは基本設計及びユーズケースをテストします。上の工程はウォーターフォール工程で設計から開発、そしてテストの機能構造です。プログラムテスト設計と実行も人がすることなので、この過程でもミスが発生する可能性があります。つまり、最悪の結果が設計でミスして、コードも間違って実装、最後にテスト中でも確認ができないとバグが発生することです。テストというのはプログラムの納品する前の最終確認と同じ意味なので、テストは最小2人以上が一つのチームになり、クロスチェック(cross check)することが重要です。設計あるいは実装した人がテスト設計を作成します。そしてテストの実行、テスト結果確認に関しては別の人が実施します。私が設計、実装した人がテストまですると自分の論理と計算の影響で、バグを見つけることが難しいですね。率直にこのようにテストしてもバグは発生しますが、上のルールでするとプログラムを作成する段階でバグを最小

Study / Project design

#projectdesign

作成日付 : 2021/10/22 19:34:09       修正日付 : 2021/10/22 19:34:09

4

こんにちは。明月です。この投稿はプログラム制作(コーディング) - クラス作成方法に関する説明です。以前の投稿でコーディングする時に関数を作成する方法に関して説明しました。作成方法に関しては規約が決めていることや必ずこのように作成しなければならないということではありません。ただ、私の経験により、このように作成するとプロジェクト管理することで便利だし、もっと直観的なコーディングすることではないかと思います。クラスを作成する方法に関しても自分の規則があります。ウェブプロジェクトの基準で作成したものなので、c/sやアプリ開発する場合は差異があると思います。オブジェクト指向プログラミング(oop)の4つの特性で抽象化、カプセル化、継承化、多相化(ポリモーフィズム)があります。私の場合はこの4つの特性が何かを深刻に考えたことがあります。実は我々がプログラム作成する時、4つの特性を無視して開発してもプログラムを作成することで問題がありません。抽象化しなくてもプログラムを作成できないことではないし、カプセル化、つまり、メンバー変数はpublicに設定してクラス外部にも参照することにしてもプログラムがエラーになることでもありません。もちろん、継承化と多相化(ポリモーフィズム)に関しても同じです。この4つの特性がなにかというとプログラムを作成する時に、もっと可読性をよくなるし、我々がドキュメントを作成しなくても、プログラムのコードを設計図みたいに作成するコーディング技法だと思います。例えば、我々が人の名前と生年月日を入れると年齢を計算するプログラムを作成すると思いましょう。上のソースをみれば私がpeopleというクラスを作成しました。コンストラクタで名前と生年だけいれて年齢は計算します。ここで年齢の変数がpublicならどうでしょう?calcoldという関数が意味がなくなります。つまり、クラスのメンバー変数がクラス外部で修正ができるので無欠性を保証することができません。なのでメンバー変数を読み取り専用に設定するために、関数を通って制御します。それがカプセル化です。ここで出力をtostringで再定義しましたので、ただpをconsole.writeline関数に入れると自動にtostringを出力することになります。このようにクラスの特性を活用してプログラムを作成すればクラスを割りあって使うところではfacadeパターンによ

Study / Project design

#projectdesign

作成日付 : 2021/10/20 19:28:09       修正日付 : 2021/10/20 19:28:17

5

こんにちは。明月です。この投稿はプログラム制作(コーディング) - 関数作成方法に関する説明です。実務のプログラムコーディングは工程に話すと普通は生産や作成という表現を使います。ただ、それは言葉の表現で、実際は我々が知っているプログラムコーディング(実装)になります。実務あるいは工程を設定してプログラムを作成してもプログラムコーディングする方法は普通に開発することと大幅で変わることではありません。前に設計図が作成して置いたらそのままに作成することだけです。ここでは各のスタイルがあるし、作成方法があるので別に規約を決める必要はありませんが、自分の経験に関して工程の中でプログラムを作成方法を説明しようと思います。一般的にウォーターフォール工程でプロジェクトを運用したら基本設計と詳細設計の段階でもうプログラム作成に関する設計が作成されたのでそのままに作成すると良いです。別に追加する内容はありません。私が説明しようと思うのは今まで説明したアジャイル工程と混ぜている工程(設計はアジャイル、テストはウォーターフォール工程)で私のスタイル作成方法があります。まず、アジャイル工程でプログラム設計書を作成する場合もありますが、普通はjiraやredmineなどのツールを利用してスクラムサイクルを設定してアイテム(ticket)別で作成します。そのため、詳細設計の段階で抽象クラス、インターフェースを作成します。そのように思ってもプログラムを作成する時になると、予想できなかった共通部品と抽象化が必要なクラスや関数がありますね。その場合に我々が共通部品を作成する方法に関して説明します。この共通部品を作成する時、私はフィボナッチ数列のアルゴリズムを考えています。普通はフィボナッチ数列アルゴリズムは再帰関数で作成します。実は再帰関数を使うのはプログラムの性能上で悪いです。for文で作成することができるものを再帰関数を作成する必要はありません。でも、関数を理解するために再帰関数みたいに良い例がありません。我々が関数を作成することを私の新人の時によくミスした部分ですが、ソースが長いので可読性を上がるために、見やすくために作成したときがあります。つまり、ソースを上から下まで読み込む部分で一つの関数ですべてのソースを作成することが悪いと思い、関数でソースを分割する役割だと思う時があります。そのことで関数を考えたら、上のフィボナッチ数列の再帰

Study / Project design

#projectdesign

作成日付 : 2021/10/19 21:01:32       修正日付 : 2021/10/19 21:01:32

6

こんにちは。明月です。この投稿は詳細設計(インターフェース設計と抽象化作業)に関する説明です。以前の投稿で基本設計に関して説明しました。link - [project design] 基本設計(画面設計とdb設計)基本設計というのは簡単に要約するとプログラムの全体的な構造を設定することです。それなら詳細設計はもっとプログラムをどのように作成するかを設定することです。基本設計ではユーズケースやアクティブダイアグラムなどを通ってプログラムの要素よりユーザがプログラムをどのように使うか、プログラムの流れはどのようになるかの説明すると思ったら詳細設計はもっと具体的にプログラムの設計になり、プログラムらしい設計になります。つまり、uml(unified modeling language:統合モデリング言語)にはシークエンスダイアグラムやクラスダイアグラムを利用してプログラム設計することです。シークエンスダイアグラム reference - https://en.wikipedia.org/クラスダイアグラム reference - https://stackoverflow.com/この詳細設計する理由としては様々な工程のインターフェースを確定するためです。今回はウェブプログラムではなく、c/s(clieng-server)プログラムの例で説明します。我々が業務c/sプログラムを作成すると思ったら、serverには大幅でnetworkパート、業務パート、core(共通部品)、その他のユーティリティに分けて開発します。一人で開発すると思えば別にパートを分ける理由がないですが、実務では一人で開発する場合が少ないので大幅で4パートで分けて開発すると思いましょう。詳細設計がなく、すぐ開発を開始すると思えば、各パートでは工数(step count)が設定されます。それなら、私が業務パートを作成しようと思うと、作成中でcoreの特定なデータを取得するコードを作成すると思いましょう。でも、coreパートではまだその部分が作成せずに、重要度が低く、優先順位で離れています。そうなら我々はそのcoreが作成する時まで今の作業が止まります。networkを利用してclientにデータを送信しなければならない部分だとnetworkパートが作成する時まで待機するべきです。もっと大きく考えるとclientプログラムはserverプログラムが

Study / Project design

#projectdesign

作成日付 : 2021/10/18 18:23:15       修正日付 : 2021/10/18 18:23:59

7

こんにちは。明月です。この投稿は基本設計(画面設計とdb設計) に関する説明です。以前にプロジェクト工程に関して説明しました。link - [project design] プロジェクトを工程(ウォーターフォール vs アジャイル)プロジェクト工程というのは全体的にプロジェクトをどの順番で進めるかを設定することなら、基本設計はプログラムをどのように作ろうかを設定することです。ウォーターフォールの工程での基本設計はuml(unified modeling languagu:統合モデリング言語)のユーズケース、アクティブダイアグラムを通ってユーザがプログラムをどの目的で使うかどのように利用するかを設定することです。必ず、ユーズケースやアクティブダイアグラムではなく、ストーリボードを通って設定することも悪くないです。ユーズケースのreference - https://www.javatpoint.com/アクティブダイアグラムのreference - https://sourcemaking.com/ストーリボードのreference - http://nmasse.com/この方法の利点はプログラムの目的を正確に設定することができるしプログラムを一緒に作成するメンバーとコミュニケーションがしやすいことと結果物に確実な目標設定が可能なことがあります。問題は工程で上の設計書をすべて作成すると時間がすごく長くなる欠点があります。そして次の工程の詳細設計とコーディングの工程に進める時、お客様とユーザの追加要請事項ができた場合に変更の柔軟性がずいぶん厳しくなります。なので、私の場合は別にumlやストーリボードの設計を省略する方法です。(もちろん、お客様の要請がある場合は作成しますが、時間と金額に関して説明します。)でも、すべて省略することではプログラムの目標を設定することが難しいですが、私は画面設計(htmlコードでプログラムを作成)してコメントに利用してストーリボードの流れを作成します。画面設計というのは別にエクセルやパワーポイントのワードプロセッサーで作成することではなく、apacheを起動してvisual codeを利用して直接にhtmlを作成します。この方法の利点はウェブプログラムというのはwas(web application server)からパーシングされたhtmlタイプとデータをブラウザーに転送するこ

Study / Project design

#projectdesign

作成日付 : 2021/10/17 21:21:11       修正日付 : 2021/10/17 21:21:11

8

こんにちは。明月です。この投稿は要件定義(要求事項整理)に関する説明です。要件定義はプログラムの工程に関係せずにどのプロジェクトでも必ず整理しなければならない段階です。要件定義というのはプログラムをなぜ作るか、どのところで活用するか、どのプログラムを作るかを定義することの意味です。プログラムというのはどのデータや情報を収集してそれをどのように出力することや統計、算出数値を計算することがほとんどです。ほとんどというのはプログラムがデータ収集だけではなく、便利性のためのバッチプログラム、人ができない仕事を代わりにやるロボットや機械をコントロールするためのプログラムも存在します。しかし、私の場合は主なプロジェクトがウェブプログラムだし、ウェブプログラムは普通にデータを収集、掲示の目的が多いです。ウェブプログラムというのはもっと詳しく説明すると、普通のプログラム流れが申請や要請などのページでデータを入力するとユーザやプログラムによりデータが収集、加工になり、データが算出して最終的にウェブページにテーブルや統計グラフなどを通って表示することが一般的です。もちろん、特殊な要請事項により申請や要請は省略してボットや収集、検索プログラムによりデータが自動に生成してウェブにデータ結果が表示する流れも多いです。この流れでみると、ウェブプログラムの要件定義の構造はinput -> calculate -> outputの流れで定義されます。上の例は私が簡単に作成した要件定義表です。実務にはもっと詳細な内容がありますが、機能的にinput、calculate、outputの内容があれば、次の段階の設計をするときにどの内容が重要か、コーディングとunitテストの区分とシナリオテストのアクションのタイプを定義する時に明確になります。上の構造は個人的に私はこのようにすればやりやすかったと意味で、その方法が必ず正解ということではないので、ただ参考だけしたら良いです。要件定義の構造を考え終わったら誰からの要件定義かを考えなければならないです。普通のプログラムは自分が必要から作る場合もありますが、実務は誰からプログラムの開発要請がある場合が多いです。その要請がお客様がなることもあるし、現場の上司や他部署の仲間から必要により開発要請がある場合もあります。要請の種類は様々ですが、形態はほぼ似てます。まず、要請者のタイ

Study / Project design

#projectdesign

作成日付 : 2021/10/15 19:28:58       修正日付 : 2021/10/15 19:28:58

9

こんにちは。明月です。この投稿はプロジェクトを工程(ウォーターフォール vs アジャイル)に関する説明です。普通にどのプログラムを作成する時に、多い方がパソコンをパワーを付けて、ideツール(visual studioやeclipse)を実行し、コードを作成してプログラムを作ろうと思います。私も大学生時代にはそう思ったと思います。でも、この方法でプログラムを作成すればプログラムが思ったより違うか想像したことよりクオリティ(品質)がすごく悪く完成する場合が多いです。凄く素晴らしいプログラム作成能力や頭が天才ほど良い方にはこんなに作成しても良い品質なプログラムを作られるかもしれませんが、私の場合は思った通りに出来なった場合が多かったんです。理由はいろいろがあると思いますが、一応始めに考えた計画内容を忘れたり、作成しながら欲心が出来て元々考えた内容より様々な機能を入れ込んだり、テストが足りなくて思われないバグが発生することなどの理由があります。勉強する時にはこのことでプロジェクト失敗にしても別に損害がないですが、実務でそのようにしてプロジェクト失敗にするとすぐ損害になります。また、勉強する時とは違い、実務では一人ではなく、チーム単位で動くので、チーム員が目標をちゃんと決められないとかプロジェクトの方向が見えないのでチーム内の雰囲気が悪くなる場合もあります。そのようにならないためにはプロジェクトを設計する人には先に工程に関して考えなければならないです。プロジェクト工程は我々がどのプログラムを作成するかを設定して、そのプログラムを作成するためにはどの過程を通って作成するか、どの方法でテストをするかどの方法で情報を共有するかを設定することだと思えば良いです。理論的には代表的にウォーターフォール工程とアジャイル工程があります。理論的な説明はここで説明することよりウィキペディアで確認する方法が良いです。link - https://ja.wikipedia.org/wiki/ウォーターフォール・モデルウォーターフォールは簡単に説明すると下記通りの工程です。簡単に説明すると要件定義はお客様が作りたい定義、どのデータをどのように出力するか、どの環境で使うかを決定する部分です。普通にはpm(project manager)がお客様と会議などを通って決める部分です。基本設計はumlで色々なダイアグラムを作成することも良いですが、

Study / Project design

#projectdesign

作成日付 : 2021/10/14 18:36:04       修正日付 : 2021/10/14 18:36:04