ソフトウェア工学

システム開発ライフサイクル内で働く専門家、学者、学生向けのQ&A

2
廃棄するために1つを構築する対第2システム効果
一方では、「捨てる人を作る」というアドバイスがあります。ソフトウェアシステムを完成させて最終製品を確認した後にのみ、設計段階で何がうまくいかなかったかを理解し、実際にそれを行う方法を理解します。 一方、設計されている同じ種類の2番目のシステムは通常、最初のシステムよりも悪いという「2番目のシステム効果」があります。最初のプロジェクトには収まらず、2番目のバージョンに組み込まれた多くの機能があり、通常は非常に複雑で過度に設計されています。 ここで、これらの原則の間に矛盾はありませんか?問題に対する正しい見解は何ですか?また、これら2つの境界はどこですか? 私は、これらの「良い習慣」が、フレッド・ブルックスによる独創的な本「The Mythical Man-Month」で最初に宣伝されたと信じています。 これらの問題のいくつかはアジャイル方法論によって解決されることを知っていますが、根本的には、問題は依然として原則のままです。たとえば、重要な設計変更を3回スプリントすることはありません。

2
NASAは、開発したソフトウェアのライセンスを取得していますか?
NASAはPanoplyと呼ばれる視覚化ソフトウェアを提供します。ソフトウェアの依存関係のライセンスを確認および一覧表示する[ クレジットと確認]ページがありますが、独自のライセンスに関する情報は提供されません。 GISSのソースコードなど、NASAが作成した他のソフトウェアを調べましたが、ライセンスに関する情報が見つかりません。 私が見つけることができる最も近い情報は、コードが「パブリックドメイン」にあると言っている地球気候モデルEdGCM Global のFAQにあります。 コードをパブリックドメインにリリースすることは、NASAの標準的なプラクティスですか? 例外はありますか? Panoplyはパブリックドメインであり、ソフトウェア依存関係のライセンスによって課される制限以外の制限なしで使用できると想定できますか? コードを再利用するための特定の許可がないことが懸念事項です(この問題は別の質問への回答で提起されました) この慣行は政府機関全体でどの程度一般的ですか?

5
サードパーティのコードとは何ですか?
この質問に触発されたサードパーティライブラリの使用-常にラッパーを使用しますか? 人々が実際にサードパーティのライブラリと見なしているものを知りたかった。 PHPの例: Zendフレームワークを使用してアプリケーションを構築している場合、Zendフレームワークライブラリをサードパーティのコードとして扱う必要がありますか? C#の例: デスクトップアプリケーションを構築している場合、すべての.Netクラスをサードパーティのコードとして扱う必要がありますか? Javaの例: JDKのすべてのライブラリをサードパーティライブラリとして扱う必要がありますか? 一部の人々は、ライブラリが安定していて頻繁に変更されない場合、それをラップする必要はないと言います。ただし、サードパーティのコードに依存するクラスをラップせずにテストする方法はわかりません。

6
抽象クラス、インターフェースの違い、およびそれらをいつ使用するか
最近、私は頭をOOPに巻きつけ始めました。そして今、抽象クラスとインターフェースの違いについて読むほど、混乱してしまいます。これまでのところ、どちらもインスタンス化できません。インターフェースは多かれ少なかれ構造的な青写真であり、スケルトンを決定し、抽象は部分的にコードを実装できることによって異なります。 私の特定の状況を通して、これらについてもっと学びたいです。背景情報をもう少し知りたい場合の最初の質問へのリンクは次のとおりです。新しいクラスに適した設計モデルは何ですか? ここに私が作成した2つのクラスがあります。 class Ad { $title; $description $price; function get_data($website){ } function validate_price(){ } } class calendar_event { $title; $description $start_date; function get_data($website){ //guts } function validate_dates(){ //guts } } ご覧のとおり、これらのクラスはほぼ同じです。ここに示されているが、他の機能があるではないlike get_zip()、save_to_database()私のクラスで共通しています。また、すべての一般的なメソッドと、もちろんそれらのクラスに固有のプロパティ(マイレージ、重量など)を持つ他のクラスのCarsとPetsを追加しました。 現在、DRYの原則に違反しており、複数のファイルにわたって同じコードを管理および変更しています。私は、ボート、馬、またはその他のようなクラスを増やすつもりです。 これは、インターフェイスまたは抽象クラスを使用する場所ですか?抽象クラスについて理解していることから、抽象クラスにすべての共通要素が組み込まれたテンプレートとしてスーパークラスを使用し、将来のクラスで特に必要な項目のみを追加します。例えば: abstract class content { $title; $description function get_data($website){ } function common_function2() { } function common_function3() …

1
引数とパラメーターに違いはありますか?
次のようになります:パラメータは呼び出し元のPOVから、引数はプロシージャ内、または他の方法で意味します。 それとも違いはありませんか? 更新 スウェーデン語では、「anropsparametrar」、つまり「プロシージャを呼び出しているパラメータ」と言い、「anropsargument」(「プロシージャを呼び出している引数」)とは言いません。

1
REST挿入に対する適切な応答-完全な新規レコード、またはレコードID値のみ?
データベースをアプリケーションに追加/更新するための挿入(i等ではなく、POST)および更新(PUT、べき等)の要求を許可するREST APIを構築しています。 POST(挿入)操作の応答でクライアントに返送するデータに関して、標準やベストプラクティスがあるかどうか疑問に思っています。少なくともレコードID値を返送する必要があります(たとえば、新しいレコードはレコード#1234です)。 オブジェクト全体で応答する必要がありますか?(たとえば、「GET / object_type / 1234」リクエストから返される本質的に同じ応答) 新しいID値のみで応答する必要がありますか?(たとえば、「{id:1234}」。つまり、レコード全体を取得する場合は、追加のHTTP GETリクエストを実行してレコード全体を取得する必要があります) 完全なオブジェクトのURLを指すリダイレクトヘッダー? 完全に何か他のもの?
15 rest 

6
より経験豊富な開発者がいない場合に、実際のプロジェクトで作業しながらスキルを向上させるにはどうすればよいですか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 4年前に閉鎖されました。 私はC#とASP.Netで働いている小さな会社の主任開発者です。私たちのチームは、開発と設計の経験が少ない2〜3人の小規模です。私はより多くの上級開発者から学ぶ機会がありません。自分のチームの誰も私を導き、最良のアプローチを選択するのを手伝ってくれる人はいません。 経験豊富な開発者がいない場合、実際のプロジェクトに取り組みながらソフトウェア開発スキルを向上させるにはどうすればよいですか?

6
コードカバレッジ分析のコードを除外する必要がありますか?
私はいくつかのアプリケーション、主にレガシーなものに取り組んでいます。現在、それらのコードカバレッジは非常に低く、通常は10〜50%です。 数週間以来、Cobertura(現在JaCoCoに移行している場合でも、コードカバレッジツール)のパッケージまたはクラスの除外について、バンガロールチームと頻繁に議論しています(開発の主な部分はインドのオフショアで行われます)。 彼らの視点は次のとおりです。アプリケーションの一部のレイヤーで単体テストを作成しないため(1)、これらのレイヤーはコードカバレッジ測定から単に除外する必要があります。言い換えれば、彼らはテストされているかテストされるべきコードにコードカバレッジ測定値を制限したいのです。 また、複雑なクラスの単体テストで作業する場合、その利点(純粋にコードカバレッジの観点から)は、大規模なアプリケーションでは見過ごされます。コードカバレッジの範囲を縮小すると、この種の作業がより明確になります... このアプローチの興味は、テスト可能であると考えるアプリケーションの部分の現在の状態を示すコードカバレッジ測定を持つことです。 しかし、私の見解では、私たちは何らかの形で数字を偽造しています。このソリューションは、労力をかけずに、より高いレベルのコードカバレッジに到達する簡単な方法です。気になるもう1つの点は、ある週から別の週へのカバレッジの増加を示した場合、この良いニュースが開発者の良い仕事によるものなのか、単に新しい除外によるものなのかをどのように見分けることができますか? さらに、コードカバレッジ測定で何が考慮されているかを正確に知ることはできません。たとえば、コード適用範囲が40%のコードアプリケーションが10,000行ある場合、コードベースの40%がテストされていると推定できます(2)。しかし、除外を設定するとどうなりますか?コードカバレッジが60%になった場合、正確に何を差し引くことができますか?「重要な」コードベースの60%がテストされていますか?どうやって 私が懸念している限りでは、「本当の」コードカバレッジ値を維持することを好みます。さらに、Sonarのおかげで、コードベースを簡単にナビゲートし、モジュール/パッケージ/クラスについて、独自のコードカバレッジを知ることができます。しかし、もちろん、グローバルなコードカバレッジはまだ低いでしょう。 その主題についてのあなたの意見は何ですか?あなたのプロジェクトはどうしますか? ありがとう。 (1)これらのレイヤーは、一般的にUI / Java Beanなどに関連しています。 (2)それは真実ではないことを知っています。実際、それは私のコードベースの40%

7
未解決の変更をコミットしてみませんか?
従来のVCSでは、ビルドを壊す可能性があるため、未解決のファイルをコミットしない理由を理解できます。ただし、DVCSで未解決のファイルをコミットしない理由を理解できません(実際には、ファイルのコミットを妨げるものもあります)。 代わりに、リポジトリをプッシュおよびプルからロックする必要がありますが、コミットしないでください。 マージプロセス中にコミットできることには、いくつかの利点があります(私が見ているように)。 実際のマージの変更は履歴にあります。 マージが非常に大きい場合は、定期的なコミットを行うことができます。 間違えた場合、(マージ全体をやり直すことなく)ロールバックするのがはるかに簡単になります。 ファイルは、解決済みとしてマークされるまで未解決としてフラグを立てたままにすることができます。これにより、プッシュ/プルが防止されます。 単一の変更セットではなく、変更セットのセットをマージとして機能させることもできます。これにより、などのツールを引き続き使用できますgit rerere。 それでは、なぜ未解決のファイルで眉をひそめたり、予防したりするのですか?伝統以外の理由はありますか?

6
なぜエクストリームプログラミング(XP)が時代遅れになって、アジャイル、かんばんなどが採用されたのですか?
XP(エクストリームプログラミング)、特に同じ画面に2人のプログラマーがいる部分が好きですやっています。 過去10年ほどで、XPスタイルの作業は時代遅れになり、作業方法論であるアジャイルおよび/またはかんばんが採用されたようです。どうして?XPは私にとって非常に優れた作業方法であるように思われ、プログラミングについて多くのことをしているのに対し、アジャイルとかんばんはプロセスに関するものです。

5
AIの最近のプログラミング言語?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 数十年の間、AIに選ばれたプログラミング言語はPrologまたはLISP でしたが、あまり知られていない他の言語もいくつかありました。それらのほとんどは、70年代以前に設計されました。 他の多くのドメイン固有の言語では多くの変更が発生しますが、AIドメインではWeb固有の言語やスクリプトなどほど表面化されていませんでした。 AIのゲームを変更し、以前の言語の不足から学ぶことを目的とした最近のプログラミング言語はありますか?

3
コードの課題に備えて準備する[非公開]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 ほんの数日前にCodilityを発見し、彼らの挑戦を試みました。そして言わなければならない。私は大皿で私の後ろに手渡されました。何が問題なのかはわかりませんが、傷をなめ、解決策が出て自分のものと比較されるのを待ちます。それまでの間、私は次のチャレンジに備えたいので、以前のブログ投稿を読んで、以前の問題を解決する方法を見ています。聞いたことのない新しいことがたくさんあります(デカルトツリー、さまざまな並べ替えアルゴリズムなど)。 そのため、このような課題(特にO(x)の時間と空間の複雑さ)にどのように準備しますか。そのようなタスクを準備するために何を読むべきですか?
15 skills 

5
メソッドから複数の戻り値を返す方法:戻り値を表すクラス内にメソッドを配置します。それは良いデザインですか?
メソッドから2つの値を返す必要があります。私のアプローチは次のとおりです。 これらの2つの値を保持するために使用される2つのフィールドを持つ内部クラスを作成します そのクラス内にメソッドを配置します クラスをインスタンス化し、メソッドを呼び出します。 メソッドで変更される唯一のことは、最終的にインスタンスのフィールドにこれらの2つの値を割り当てることです。次に、そのオブジェクトのフィールドを参照することで、これらの値に対処できます。 それは良いデザインですか?それはなぜですか?

7
プログラミングと計画[終了]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 4年前に閉鎖。 最近、私のチームの主任開発者が去ったため、私はより高度な計画の割り当てを任されました。長期計画は嫌いです。私の脳は自然に配線されていないように見え、学習するのに時間を費やすほど興味がありません(図のプログラミング側に追いつくのは十分に困難です)。 ハイレベルなプランナーでなくても、優れたプログラマーになることはできますか? 上級プログラマーとして、製品全体を計画し、完成日を選ぶのが得意な人はいますか?

9
アプリケーション仕様を簡素化する必要があることを非技術系クライアントに納得させる方法は?
多くの場合、文字通り何百もの不要な機能を備えたアプリケーションを使用して新しいクライアントが来るという状況に直面しますが、プロジェクトを成功させるには物事を大幅に簡素化する必要があることは明らかです。どのようにして、クライアントに、より多くのMinimum Viable Product(MVP)アプローチを取り、簡素化するよう説得しますか? 編集: したがって、現在の一番の答えは、クライアントに巨大なアプリケーションの時間/コストの見積もりを提供することです。この状況の本当の問題に対処していないので、私はこの答えがあまり好きではありません。そして、それは大規模なアプリケーションを特定し、それを始めから構築しようとするのは悪い習慣です。最初は小規模でシンプルなMVP基盤を構築する方がはるかに快適です。そして、その基盤に小さな機能を一つずつ追加します。それでは、クライアントにこの方法でソフトウェアを構築する方法を説得するにはどうすればよいですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.