ソフトウェア工学

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

5
製造vsソフトウェア開発[終了]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、専門知識によって裏付けられると期待していますが、この質問は、議論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 6年前休業。 ソフトウェア業界は製造業に比べると未熟だとよく言われます。具体的には、プロセス主導であること。 質問:開発者は製造業のプロセスから学ぶことができますか?彼らのプロセスを採用することで、ソフトウェア開発の成功率を上げることができますか? 私の見解:製造において、製品の作成はプロセス主導型です。各人が特定の一連のタスクを実行する工場があるとします。作業者(またはロボット)は、一日中ねじを締めることがあります。次に、プロセスの次のタスクが次のスペシャリストによって実行されます。ワーカー(およびロボット)は、プロセスを妨害したり、「その場で」何かを作成したりしません。部品はプロセスを経てチャーンし、出力は完成品です。それはうまく機能し、企業は99.99966%の欠陥のない製品を実現します。企業は時間の経過とともに非効率を解消します。これは印象的であり、成熟した産業の兆候である可能性が非常に高いです。 定義されたプロセスの製造では、文字通り完成品を作成できます。これはソフトウェアには当てはまらないと思います。ソース管理、コードレビュー、チェックインシート、要件収集、SDLCなどのプロセスがある場合があります。ただし、これらのプロセスを実行しても、それ自体では完成品は作成されません。これらのプロセスは有益かもしれませんが、実際の作成とは直交しています。 あなたの会社が、何百万もの画像を検索して犯罪者の顔を見つけるソフトウェアを作成するように契約しているとします。重いプロセス主導の環境にもかかわらず、開発者は「オンザフライ」で物事を作成することに従事しなければなりません。その場で物事を行うことは、製造の精神に反しています。ロボットに意識されることなく、良い製造工程を実行できます。 人間の頭の中ではまだ十分に理解されていない複雑なアルゴリズムを作成するためには、その場で物事を作成する必要があります。ソフトウェア開発とは、プロセスの後に続くものではなく、コンピュータによって実行されるプロセスの作成です。それは根本的な違いです。開発に関係する直交プロセスがいくつあっても、作成に関しては常に「オンザフライ」で実行します。 私が話をする誰もが製造の考え方に同意しているようです。私は私の考えの中で一人ですか?

7
アーキテクチャから開発への移行に関してベストプラクティスはありますか?
アーキテクチャから開発にタスクを引き渡すプロセスの改善を検討しています。 スケールの一端では、各開発者が自分のやり方で物事を行っているため、混乱を招くリスクのあるアーキテクチャガイダンスはありません。 すべてが指定されているスケールの反対側では、仕様よりも開発に時間がかかり、非常に退屈な開発タスクが発生するリスクがあります。 誰かがこれらの両極端の間の最適な中間点を見つけましたか?どの成果物を開発に提供しますか?例:モジュール、クラス構造、またはシーケンス図?

5
プリプロセッサディレクティブまたはif(定数)ステートメントを使用する方が良いですか?
多くの異なる衣装に使用されるコードベースがあり、タイプXの衣装にのみ関連するいくつかのコードがあるとします。このコードをタイプXの衣装にのみ含めるには、プリプロセッサディレクティブを使用する方が良いですか、またはifステートメントを使用するには?より明確にするために: // some code #if TYPE_X_COSTUMER = 1 // do some things #endif // rest of the code または if(TYPE_X_COSTUMER) { // do some things } 私が考えることができる引数は次のとおりです。 プリプロセッサディレクティブにより、コードフットプリントが小さくなり、ブランチが少なくなります(最適化されていないコンパイラでは) ステートメントが常にコンパイルされるコードで発生する場合、たとえば、誰かが間違いを犯して、彼が取り組んでいるプロジェクトの無関係なコードに悪影響を与える場合でも、エラーは表示され、コードベースは破損しません。そうでなければ、彼は腐敗に気づかないでしょう。 私は常に、プリプロセッサーの使用よりもプロセッサーの使用を優先するように言われました(これがまったく議論の場合...) 何が望ましいですか-多くの異なる衣装のコードベースについて話すとき?
10 c++  c 

3
BitBucket-問題は何ですか?(TANSTAAFL、そうですか?)
BitBucketの機能と価格設定(最大5ユーザーまで無料)のおかげで、何が問題なのだろうと思いました。結局のところ、無料のランチなどはありません。 BitBucketは、(TOSに従って)販促資料に自由に含めるハンサムな男のほかに、私の無給の参加から抜け出しますか?


2
単一の関数を再利用するためだけにクラスを拡張するのは合理的な方法ですか?
私はワードプレスサイト用にさまざまな投稿フィルターを開発しており、最初の4つを単一のクラスで構築しました。 最後の2つはスコープが十分に異なるため、クラス内で1つの関数(最終リンクを生成するための関数)のみを共有します。 このインスタンスまたはいくつかの類似の仮想インスタンスのいずれかで、その機能を実現するために元のクラスを拡張することは合理的ですか、それともより良い方法がありますか?

7
自分で開発する場合の方法論/ツール[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 5年前休業。 中規模以上のソフトウェアを完全に自分で開発する必要があるとします。達成したい個人的なプロジェクトのように。 どのような方法論/ツールを使用して、開発、学習する必要があるかを定義し、システムの詳細と全体像を把握する必要がありますか? 基本的に自分を追跡し、途中で迷子にならないようにします。

7
大きなコードベースの(コンパイル)の問題に対処するにはどうすればよいですか?
コーディングはできますが、大規模なプロジェクトでの作業経験はまだありません。私がこれまでに行ったことは、数秒でコンパイルされる小さなプログラム(アルゴリズム、プログラミングの原則、アイデア、パラダイムなどのさまざまなc / c ++の演習、または単にapiを試す...)をコーディングするか、コンパイルが不要なスクリプト言語(python、php、js)で作成。 問題は、スクリプト言語でコーディングするとき、何かがうまくいったかどうかを試したいときはいつでも、スクリプトを実行して何が起こるかを確認することです。うまくいかない場合は、コードを変更し、スクリプトを再度実行してもう一度試すことができます。必要な結果が得られるまでそれを続けます。私のポイントは、待つ必要がないということです。コンパイルするものは何でも、そのため、大きなコードベースを取得、変更、何かを追加、または単に操作するのは非常に簡単です。変更を即座に確認できます。 例として、Wordpressを取り上げます。プラグインを作成する方法を理解するのはとても簡単です。最初に単純な「Hello World」プラグインを作成することから始め、次に管理パネルの単純なインターフェースを作成してAPIに慣れ、次にそれを構築してより複雑なものにし、その間にいくつかの外観を変更します回.. WPと同じくらい大きなものを何度も再コンパイルしなければならないという考えは、マイナーな変更を行うたびに、「動作するかどうか」と「動作するかどうか」を試すために、効率が悪く、遅くて間違っているように思えます。 さて、コンパイルされた言語で書かれたプロジェクトでどうすればいいですか?いくつかのオープンソースプロジェクトに貢献したいのですが、この質問は私を悩ませ続けています。状況はおそらくプロジェクトごとに異なり、事前に賢明に考えられていたもののいくつかは何らかの方法で「モジュラー」になる一方で、他のものは何度も再コンパイルする必要がある1つの大きなblobになるだけです。 これが適切に行われる方法について、もっと知りたいのですが。これに対処するためのいくつかの一般的な実践、アプローチ、およびプロジェクト設計(パターン?)は何ですか?この「モジュール性」はプログラマーの世界でどのように呼ばれていますか?これについてもっと知るために何をググる必要がありますか?プロジェクトが最初の思考の比率から大きくなり、しばらくすると面倒になることがよくありますか?うまく設計されていないプロジェクトの長いコンパイルを回避する方法はありますか?どういうわけかそれらをモジュール化する方法(開発中にプログラムの重要でない部分を除外する可能性があります(他のアイデア?))? ありがとう。

4
ソートされた浮動小数点数の配列を検索して、入力値を囲んでいる浮動小数点数のペアを見つける高速アルゴリズム
フロートの配列があり、最小から最大にソートされており、渡された入力値よりも大きいまたは小さい最も近いフロートを選択できる必要があります。この入力値は、必ずしも配列内の値として存在するわけではありません。 素朴なアプローチは、配列全体で単純な線形検索を行うことです。次のようになります。 void FindClosestFloatsInArray( float input, std::vector<float> array, float *min_out, float *max_out ) { assert( input >= array[0] && input < array[ array.size()-1 ] ); for( int i = 1; i < array.size(); i++ ) { if ( array[i] >= input ) { *min = array[i-1]; *max = array[i]; } …
10 c++  algorithms 

3
.NETのインターフェイスの「I」プレフィックス命名規則の背後にある理由は何ですか?
"I"規約がCOM以来存在していたことは知っていますが、.NETが登場する前に他のすべての命名規約のように再検討されなかった理由を理解したことはありません。 消費に関しては、たとえば抽象クラスからインターフェースを分離する唯一のことは、それらが多重継承できることです。しかし、Visual Studio 2003以降のすべてのツールチップには型シグネチャが表示されているため、破棄された他のすべてのハンガリー語の表記と同じくらい役に立ちません。 また、私はそれはあなたが同じ名前を持つインタフェースの基本的な実装を持つことができるようになるかもしれないと思った、例えばMessage継承IMessageが、.NETライブラリのほとんどは(例えば末尾に単語「ベース」を追加するために行っているSystem.Collections.ReadOnlyCollectionBase代わりに) -これはより意味のある意味になります。 COM相互運用機能は別の考えられる理由のようですが、それが生成するラッパークラスが完全に慣用的な.NETであるかのようではないので、それが審美的な考慮事項だったとは思えません。 私の新しいプロジェクトの1つで、私は大会を完全に断念しました。行方不明のものはありますか?
10 .net  naming 

2
アプリケーションのさまざまな部分間の相互作用の設計に関するアドバイスが必要
NetBeansプラットフォーム7に基づくリッチデスクトップアプリケーションの「メイン」クラスを設計しようとしています。このアプリケーションはHTTPサービスを消費し、TCP上の「プッシュシステム」を通じてメッセージを受信します。 私たちは3人の開発者であり、モジュールを並行して開発したいと考えています アプリケーションは階層化されます(データ、ビジネス、プレゼンテーション) 責任を分離するために、プレゼンテーションモデルを使用します いくつかの詳細なデータ(Bean Personなど)は複数の画面で共有されます(同時に複数の画面に表示される可能性があります) ... 個別の画面を開発することはできますが、アプリケーション全体を整理し、各モジュールのコンテンツを定義する方法を正確には知りません。 それでは、アプリケーション全体の相互作用を調整/管理するためのアドバイス(パターン/ベストプラクティス/本/サンプルアプリ)はありますか? モジュールのコンテンツを定義する方法について何かアドバイスはありますか? ありがとう! 私が構築したいものを説明する小さな例:Fooユーザー管理アプリケーション アプリケーションを起動します 左側の[エクスプローラ]にプラットフォームのリストがあります(リストはローカルファイルに保存されます) 上部には、新しいプラットフォームを追加するためのボタンがあります(右クリックでも利用可能) プラットフォームをダブルクリックすると、アプリはHTTPサービスを呼び出し、ユーザーの完全なリストを取得します。このリストは[エディタ]に表示されます(JTable内) バックグラウンドプロセスが開始されます:TCP接続を介してメッセージを受信します ツールバーのボタンのおかげで新しいユーザーを追加することが可能です アプリケーションが別のPCで起動され、ユーザーが同じプラットフォームに接続している場合、そのユーザーリストは動的に更新されます(追加/削除/ステータス:{オフライン/オンライン})(メッセージのおかげで) 将来的にはチャットモジュールが提供される予定です。 私の質問は(言い換えれば):各モジュールのコンテンツを決定するためのアドバイス/ベストプラクティスですか?PM(プレゼンテーションモデル)がビュー/ビジネスとデータを分離して画面を作成する良い方法である場合、PMに基づいて複数の画面をリンクする最良の方法は何ですか?チャットモジュールを開発し、ユーザーリストを右クリックして表示されるコンテキストメニューに「ディスカッション...」というエントリを追加する方法を想像してみてください。

3
C99はK&Rブックを古くしていますか?もしそうなら、代わりに何をお勧めしますか?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 5年前休業。 C99はしばらくの間私たちと一緒にいます。K&Rs Cプログラミング言語にはない多くの機能が導入されています。それらのどれも特に過激ではありません。ただし、宣言とコードを混在させることができるなどの小さな機能でも、コードの編成方法が変わります。 K&Rの本は非常に貴重な参考資料であり、その書体と同様に考えていますが、C99標準を考慮したより良い本はありますか?K&Rの第3版を一気に購入したいのですが、そうなるとは思いません。
10 books  c99 

3
プロトタイプ方式のポイントは何ですか?
私はJavascript:The Good Partsを読んでおり、プロトタイプに関するセクションを理解するのに苦労しました。 少しグーグルで調べたところ、オブジェクト宣言の後にオブジェクトにプロパティを追加するという結論に達しました。 w3schoolsからきらめくこのスクリプトを使用して、プロトタイププロパティを追加する行を削除しても効果がないことに気付きました。だからポイントは何ですか? //Prototyping function employee(name,jobtitle,born) { this.name=name; this.jobtitle=jobtitle; this.born=born; } var fred=new employee("Fred Flintstone","Caveman",1970); employee.prototype.salary=null; // <--- try removing this line fred.salary=20000; document.write(fred.salary);

7
DRY原則の違反
このアンチパターンの名前はどこかにあると思います。しかし、私はそれを知るためのアンチパターン文学に十分に精通していません。 次のシナリオを検討してください。 or0クラスのメンバー関数です。良くも悪くも、それはクラスメンバー変数に大きく依存しています。プログラマAがやってきて、をor0呼び出すのor0ではなく、クラス全体をコピーして名前を変更するような機能が必要です。私がor0言うように、それはその機能のためにメンバー変数に大きく依存しているので、彼女が呼び出さないと思います。または、彼女はジュニアプログラマであり、他のコードから呼び出す方法を知りません。これでor0、c0(コピーの場合はc)が得られました。私はこのアプローチでプログラマーAを完全に責めることはできません。全員が厳しい納期に直面し、コードをハッキングして作業を完了させます。 何人かのプログラマーがメンテナンスしているor0ので、バージョンになりorNます。 c0現在バージョンcNです。残念ながら、クラスを含むクラスを維持しているほとんどのプログラマーはor0完全に気付いていないようでしたc0-これは、DRY原理の知恵について私が考えることができる最も強力な議論の1つです。また、のコードの独立した保守もあった可能性がありますc。いずれにせよ、と思われるor0とc0、互いに独立して維持しました。そして、喜びと幸せ、エラーはで発生しcNていないのに発生していますorN。 だから私はいくつかの質問があります: 1.)このアンチパターンの名前はありますか?私はこれが起こるのを見たので、これが名前付きのアンチパターンではないと信じるのは難しいことがよくあります。 2.)私はいくつかの選択肢を見ることができます: a。)orN必要なすべてのメンバー変数の値を指定するパラメーターを取るように修正。次に、必要なすべてのパラメーターを渡しcNて呼び出すように変更しますorN。 b。)からorNに修正を手動で移植してみてくださいcN。(私はこれをしたくありませんが、現実的な可能性があります。) c。)orN-- cNagain、yuckに再度コピーしますが、完全を期すためにリストします。 d。)どこcNが壊れているかを把握し、とは独立して修復しorNます。 代替aは長期的には最良の修正のように見えますが、お客様がそれを実装することを許可するかどうかは疑問です。物事を正しく修正するために時間やお金を費やすことはありませんが、同じ問題を40または50回修復するための時間とお金は常に必要ですか。 誰かが私が考慮しなかったかもしれない他のアプローチを提案できますか?

3
C#のプライベート静的メソッドは何かを傷つけますか?
クラスで複数回発生する特定の検証用のプライベート検証メソッドを作成しました(検証されたデータをさまざまな理由で保存できません)。現在、ReSharperは、関数を静的にできることを示唆しています。静的メソッドの既知の問題のため、そうすることに少し消極的です。それはプライベート静的メソッドになります。私の質問は、プライベート静的メソッドは、パブリック静的メソッドのような同様の結合とテストの問題を引き起こす可能性があるのですか?それは悪い習慣ですか?私はそうは思いませんが、ここに落とし穴があるかどうかはわかりません。

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