パースペクティブ ソフトウェア開発プロセスの難しさ_PHP チュートリアル
著者: Tian Zhanhai 1 はじめに プログラマーであれば、時間内にタスクを完了できないことに悩むことがよくあるかもしれません。あなたがプロジェクト マネージャーである場合、予算とスケジュールの要件を満たすソフトウェアを開発するのが難しいと感じるかもしれません。実際、ソフトウェア プロジェクトは大幅に期限を過ぎたり、予算を超過したりすることが多く、これは依然としてほとんどのソフトウェア組織を悩ませている問題です。米国の評価報告書によると、国防総省の主要なソフトウェア契約17件のうち、平均28カ月のスケジュールが20カ月遅れた。 4 年以内に完了するはずのタスクが 7 年経っても提出されておらず、期限内に完了したプロジェクトは 1 件もありません。 B1爆撃機の配備はソフトウェアの問題で遅れ、580億ドルのA12航空機計画も同じ理由で部分的に中止された。 20~30年続いてきたソフトウェア危機はなぜ激化しているのでしょうか?ソフトウェア開発はなぜそれほど難しいのでしょうか?この記事では、著者の経験に基づいてソフトウェア開発の難しさを分析し、いくつかの提案を提示します。 2 問題点 2.1 非常に複雑 大規模なソフトウェア製品のほとんどは、数十行または数百万行のソース コードで構成されています。たとえば、Windows95 オペレーティング システムは、約 1,100 万行のコードで構成されています。コードの各行はプログラムの他の部分に影響を与える可能性があり、各部分は相互に影響を与える可能性があります。このように複雑かつ巨大なシステムでは、ほんの小さなミスがシステム全体の崩壊を引き起こす可能性があります。 Windows などの大規模なソフトウェアは、人類がこれまでに構築したものの中で最も複雑なものの 1 つである可能性があり、古代から現代までの最も複雑な建物と比較することはできません。 2.2 不確実性の高さ ソフトウェアプロジェクトには当初から不確実な要素が多く存在します。 1: ユーザーのニーズを判断するのは難しい。なぜなら、ソフトウェア開発者にとってユーザーのニーズを詳細に把握することは難しく、ユーザー自身も製品を見る前には何が必要なのか正確には分からないため、プロジェクト開発の最初から最後まで新たなニーズが発生する可能性があります。システム構造は常に変更され、最終的には認識を超えて変更されます。その 2: デザインは完全に予測できるわけではありません。場合によっては、設計中に実現可能と考えられたソリューションが実装時には機能しない場合や、初期設計ソリューションに時間内に発見されなかった重大な欠陥があった場合、または設計中に予期していなかった技術的な問題が突然発生してプロジェクトの進行が妨げられる場合があります。実際、設計から実装までには予測不可能なことがたくさんあります。 3 番目: ユーザーのニーズは常に変化します。最初のユーザーのニーズが明確に理解されていない場合、プロジェクト全体がすぐに変化するニーズに巻き込まれ、そこから抜け出すことができなくなる可能性があります。第 4 に、客観的条件の不確実性。プロジェクトの進行中には、人員の移動やリソースの調整が発生したり、プロジェクトの正常な進行を妨げる何らかの客観的条件による制限が発生したりする場合があります。このような高いレベルの不確実性の中で、初期段階でプロジェクトを正確に見積もることは困難であるだけでなく、不可能ですらあります。 3 プロジェクト遅延の理由 3.1 開発者の過度の楽観主義 多くの開発者は、この種の盲目的な自信はプロジェクト開発にとって間違っています。最も楽観的な見積もりによれば、ソフトウェア開発には不確実性が多すぎるため、ほとんどのタスクは時間通りに完了できない可能性があります。タスクの複雑さと難しさ、自由に使える時間、起こり得る緊急事態の影響を明確に理解して見積もっていなければ、たとえ自分のスケジュールを保証したとしても、納品が時間通りに行われないこともよくあります。 3.2 外部からの圧力 プロジェクト マネージャーや顧客は皆、プロジェクトができるだけ早く終了することを望んでおり、プロジェクトにタイム ノードを設定します。 これらの時間ノードは実装が不可能または非常に難しいように設定されている可能性がありますが、開発者は時間通りに作業を完了し、必要な機能をできるだけ早く完了するために残業する必要があり、システム構造の検討は脇に置かれます。これを二次的な位置に置くと、将来のプログラムのメンテナンスに潜在的な危険が生じます。さらに恐ろしいのは、圧力が高まるにつれて次々とバグが発生し、最終的には手戻りが増えることだ。プログラムはプログラマーの子供のようなものです。誰もが自分の子供が丈夫に成長することを望んでいますが、子供が増えて出産が早ければ、それは不可能です。 3.3 プロジェクト外からの干渉 プロジェクトの開発者がプロジェクト外のものに頻繁に邪魔され、プロジェクトの開発に専念できなくなると、進捗に影響が出ることがよくあります。この現象は、小規模なソフトウェア会社でより一般的です。開発者は複数の役割を担っており、同時に複数のプロジェクトの開発に参加することもあります。他のプロジェクトの完了を急ぐと、そのプロジェクトも遅れざるを得なくなります。 3.4 プロジェクト管理の混乱 ソフトウェア会社内のプロジェクト管理の混乱は、世界中で共通の問題のようです。カーネギーメロン大学のソフトウェア工学研究所 (SEI) は、混乱から持続可能な発展に至るまでのソフトウェア企業の状態を測定するための一連の基準を確立しました。これが CMM の 5 段階の基準です。最初のレベルが最も混乱しており、レベルが上がるごとに状況は良くなっていきます。5 番目のレベルが最高です。 2001 年 1 月末までに、さまざまなレベルの認定に合格したのは、世界で 1,654 社のソフトウェア企業および団体だけでした。下の図から分かるように、これはピラミッド型の分布状況となっており、この図では2級以上の企業のみを示しており、ピラミッドの最下位にある1級企業の数は1,654社となっています。したがって、世界的に見ると、ソフトウェア管理の全体的なレベルは依然として非常に低いです。 3.5 開発者の不足 世界中で人材をめぐる競争が最も激しいのは IT 業界かもしれません。人材の絶対的な不足により、多くの企業が緊急に必要な人材を採用できなくなっている一方で、人材の流出により企業は容易に従業員を失うことにもなりました。プロジェクトの人員が不足していたり、人材が頻繁に異動したりすると、プロジェクトの正常な進行は保証されません。 4 建設遅延を回避する方法 4.1 不確実性に対して十分な準備をする 中国人は皆、「三国志演武」で諸葛孔明が赤壁で何人もの待ち伏せをして曹操を追いかけ、迎撃したことをよく知っています。たった一度の行動で、プロセス全体が注意深く準備され、展開されたため、彼は素晴らしい勝利を収めました。ソフトウェア開発でも同様で、プロジェクトの初期段階では、行き場がなくなってしまうことがないよう、途中で起こり得るさまざまな状況に備えておく必要があります。 4.2 製品の柔軟性に基づく 設計の柔軟性はソフトウェア製品の核心です。優れた設計は常にメンテナンスとアップグレードが容易ですが、悪い設計は将来のメンテナンスに多大な問題を引き起こし、製品全体が廃棄されて再構築される可能性もあります。したがって、ソフトウェア開発の初期段階では、急いでコードを書いたり、スキルを磨いたりするのではなく、全体の設計に多大な労力を費やす必要があり、初期の投資により高い利益が得られます。 4.1 ソフトウェア管理レベルの向上 ISO9000品質マネジメントシステム規格シリーズは、生産体制や管理体制に問題がなければ、提供される製品やサービスに問題がないことを前提としており、その管理方法を示しています。レベルは製品の品質に重大な影響を与えます。 ソフトウェア会社が管理レベルを向上させるための最善の方法は、CMM レベル認証の取得や ISO9000 品質システム認証の取得などの目標を設定し、その目標に向かって取り組む過程で徐々に管理レベルを向上させることだと思います。 。 1 結論 この記事では、ソフトウェア開発プロセスの困難さと、プロジェクトの遅延を引き起こすことが多い要因について表面的な分析を行いましたが、あまり体系的かつ包括的なものではありません。建設の遅延を回避する方法についてもいくつかの提案がなされました。読者の皆様は、それらを批判し修正していただくようお願いいたします。 2 参考文献 1.カーネギー メロン大学ソフトウェア エンジニアリング研究所、ソフトウェア機能成熟度モデル (CMM): ソフトウェア プロセス改善ガイド、2001 年 7 月。 2. [ドイツ] Hoch、Ledin、Puckett、Lindner、Miller、ソフトウェア業界の成功の秘密、2000 年 3. Gong Jianya、現代 GIS の理論と技術、武漢測量地図出版局、1999 年 3 月 4. Liao Bin、CMM の紹介 1. 2001.09

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









世界初の AI プログラマー Devin の誕生から 1 か月も経たない 2022 年 3 月 3 日、プリンストン大学の NLP チームはオープンソース AI プログラマー SWE-agent を開発しました。 GPT-4 モデルを利用して、GitHub リポジトリの問題を自動的に解決します。 SWE ベンチ テスト セットにおける SWE エージェントのパフォーマンスは Devin と同様で、平均 93 秒かかり、問題の 12.29% を解決しました。専用端末と対話することで、SWE エージェントはファイルの内容を開いて検索したり、自動構文チェックを使用したり、特定の行を編集したり、テストを作成して実行したりできます。 (注: 上記の内容は元の内容を若干調整したものですが、原文の重要な情報は保持されており、指定された文字数制限を超えていません。) SWE-A

Python パッケージ マネージャーは、Python パッケージを管理およびインストールするための強力で便利なツールです。しかし、使い方に注意しないと、さまざまな罠に陥る可能性があります。この記事では、これらの落とし穴と、開発者がそれらを回避するための戦略について説明します。トラップ 1: インストールの競合の問題: 複数のパッケージが同じ名前でバージョンの異なる関数またはクラスを提供すると、インストールの競合が発生する可能性があります。応答: インストール前に依存関係をチェックして、パッケージ間に競合がないことを確認してください。依存関係の自動インストールを回避するには、pip の --no-deps オプションを使用します。落とし穴 2: 古いバージョンのパッケージの問題: バージョンが指定されていない場合、より安定した、またはニーズに合った古いバージョンがある場合でも、パッケージ マネージャーは最新バージョンをインストールすることがあります。応答: インストール時に必要なバージョンを明示的に指定します (例: p)

JavaServerPages (jsP) は、動的な WEB アプリケーションの作成に使用される Java テクノロジです。 JSP スクリプトはサーバー側で実行され、クライアント側で HTML にレンダリングされます。ただし、JSP アプリケーションは、データ漏洩、コード実行、またはサービス妨害につながる可能性のあるさまざまなセキュリティ脆弱性の影響を受けやすくなります。一般的なセキュリティの脆弱性 1. クロスサイト スクリプティング (XSS) XSS の脆弱性により、攻撃者は悪意のあるスクリプトを Web アプリケーションに挿入することができ、被害者がページにアクセスしたときにスクリプトが実行されます。攻撃者はこれらのスクリプトを使用して、機密情報 (Cookie やセッション ID など) を盗んだり、ユーザーをリダイレクトしたり、ページを侵害したりする可能性があります。 2. インジェクションの脆弱性 インジェクションの脆弱性により、攻撃者は Web アプリケーションのデータベースにクエリを実行できます。

バージョン管理システム (VCS) は、開発者がコードの変更を追跡および管理できるようにする、ソフトウェア開発に不可欠なツールです。 git は、Java 開発で広く使用されている、人気のある強力な VCS です。このガイドでは、Git の基本概念と操作を紹介し、Java 開発者にバージョン管理の基本を提供します。 Git リポジトリの基本概念: コードとバージョン履歴が保存される場所。ブランチ: コード ベース内の独立した開発ライン。開発者は、開発の主要ラインに影響を与えることなく変更を加えることができます。コミット: コードベース内のコードへの変更。ロールバック: コードベースを以前のコミットに戻します。マージ: 2 つ以上のブランチの変更を 1 つのブランチにマージします。 Git 入門 1. Git をインストールする 公式 Web サイトからダウンロードしてダウンロードします

ファイルは、コンピュータ システムにおける情報の保存と管理の基本単位であり、Java ファイル操作の中核でもあります。ファイルを効果的に操作および管理するには、ファイルの性質を理解することが重要です。抽象化と階層 ファイルは本質的に、ディスクやメモリなどの永続的な媒体に格納されているデータのセットを表す抽象化です。ファイルの論理構造は通常、オペレーティング システムによって定義され、データを整理してアクセスするためのメカニズムを提供します。 Java では、ファイルは File クラスによって表され、ファイル システムへの抽象アクセスを提供します。データの永続性 ファイルの重要な特性の 1 つは、データの永続性です。メモリ内のデータとは異なり、ファイル内のデータはアプリケーションが終了した後も保持されます。この永続性により、ファイルは情報の長期保存や共有に役立ちます。

分散システムとマルチコア プロセッサの台頭により、最新のソフトウェア開発では同時コレクションが重要になっています。 Java 同時コレクションは、同時アクセスの複雑さを管理しながら、効率的でスレッドセーフなコレクション実装を提供します。この記事では、新機能とトレンドに焦点を当てて、Java での同時コレクションの将来について探ります。新機能 JSR354: 復元力のある同時コレクション jsR354 は、極端な同時実行条件下でもパフォーマンスと信頼性を確保するための、柔軟な動作を備えた新しい同時コレクション インターフェイスを定義します。これらのインターフェイスは、変更可能な不変式やノンブロッキング反復のサポートなど、アトミック性の追加機能を提供します。 RxJava3.0: リアクティブな同時コレクション RxJava3.0 では、リアクティブ プログラミングの概念が導入され、同時コレクションをリアクティブ データ フローと簡単に統合できるようになります。

クロスプラットフォーム開発は、複数のオペレーティング システム上で同時にシームレスに実行されるアプリケーションを構築するために重要です。 Python と Jython は、主要なプログラミング言語として、クロスプラットフォーム開発のための強力なソリューションを提供し、その可能性を解き放ちます。 Python のクロスプラットフォーム互換性 Python は、仮想マシンを使用してコードを実行するインタープリタ言語です。このアーキテクチャにより、Python コードを Windows、Linux、MacOS、モバイル デバイスなどの複数のプラットフォームで実行できます。 Python は幅広いプラットフォームをサポートしているため、クロスプラットフォーム アプリケーションの構築に最適です。さらに、Python には、データ処理や WEB 開発から機械学習やデータに至るまで、幅広い機能を提供するサードパーティ ライブラリの豊富なエコシステムがあります。

PHPPhar 拡張機能は、PHP 開発者にスクリプト、ライブラリ、リソースをパッケージ化する強力かつ柔軟な方法を提供します。 Phar アーカイブを作成すると、開発者はファイル システムのアクセス許可や依存関係を気にすることなく、複雑なアプリケーションを簡単にデプロイおよび配布できます。 Phar ファイルの利点 単一ファイルのデプロイメント: Phar アーカイブは、アプリケーションのすべてのコンポーネントを単一のファイルにパッケージ化し、配布とデプロイメントを容易にします。独立性: Phar ファイルはファイル システムから独立しているため、アプリケーションは PHP インタープリターを備えた任意のマシン上で実行できます。コード保護: Phar ファイルを暗号化して、コンテンツを不正アクセスから保護できます。バージョン管理: Phar 拡張機能は Phar ファイルのバージョン管理サポートを提供し、開発者が Phar ファイルを追跡できるようにします。
