ソフトウェア工学

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

2
表現力のあるメンバーを使用するのはいつが適切ですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 C#6では、式の結果を返すメソッドとプロパティのコードを簡略化できる、式を使用したメンバーが導入されています。 public override string ToString() { return string.Format("{0} {1}", _field1, _field2); } になる: public override string ToString() => string.Format("{0} {1}", _field1, _field2); 現在、2つの完全に同等で有効な構文があるため、どちらを使用するかを決定するために、ある程度の経験則を使用する必要があります。新しい選択肢はいつ適切ですか?
24 c# 

3
「計画の制限を超えました」応答の推奨HTTPステータスコード
ユーザーが常にいくつかの「プラン」のいずれかを使用するプロジェクト用のREST APIを設計しています。各プランは、アカウントに含めることができるユーザーの最大数やアップロードできるデータの最大数など、リソースの制限を定義します。これらの制限の1つに達すると、ユーザーはプランをアップグレード(基本的に支払い)して、より多くのリソースを取得できます。 アカウントのリソース制限のためにアクションを実行できない状況を示す特別なステータスコードを返します。プランをアップグレードすると解決します-たとえば、ユーザーがストレージ容量の100%を使用して追加のファイルをアップロードしようとした場合、彼らはこの応答を受け取ります。 候補者は次のとおりです。 403 Forbidden -ただし、このケースと、ユーザーがこのアクションを実行するための許可を単に持たない他のケースとを区別したいと思います。 401 Unauthorized -良いアイデアではありません。認証関連の問題にこれを使用しています。 402 Payment Required -ある意味理にかなっていますが、標準ではないが予約済みのステータスコードの使用が心配です 423 Locked将来的には他のものに使用する可能性が低いため、さらに標準以下のもの 別のオプションは、非常に標準的なもの403を使用することです。ただし、応答本文にエラーの詳細を示します。 どのアプローチが(a)長期的に最も効果的であり、(b)RESTfulな原則にもっとうまく適合すると信じているのか疑問に思っています。
24 rest  api-design  http 

4
2つの異なるデータベース間でデータを同期する最良の方法
構造がまったく異なる2つの大きなデータベース間でデータ同期を実装する必要があります。基本的に、最初のデータベースのさまざまなテーブルにある製品に関するデータを収集し、2番目のデータベースの他のテーブルに再配置する必要があります。 初めて製品を作成することはそれほど複雑ではありません。しかし、私はすべてのデータではなく、各製品に関する特定のデータを更新する方法を探しています。 明らかに、これを難しくするいくつかの問題があります。 選択クエリを除いて、ソースデータベースで何もすることはできません。 ターゲットデータベースでは、通常のクエリ(選択、更新、挿入、作成)を実行できますが、既存の構造/テーブルを変更することはできません。 ターゲットとソースDBは完全に異なる構造を持ち、テーブルはまったく同じではないため、データを実際に再配置する必要があります-テーブルの比較は機能しません。 ターゲットデータベースはMySQLサーバーを使用します。ソースはDB2である場合があります。 どこにも「更新時間」フィールドはありません。 そのため、プロセス全体を1つのPython(理想的には)スクリプトで実行する必要があります。 ターゲットデータベースで更新するフィールドに基づいて、各製品のハッシュを作成することを検討します:md5(code + description + supplier +約10の他のフィールド)。同じデータに基づく新しいハッシュが、ソースデータベースから毎日作成されます。パフォーマンスのために、すべてのハッシュを単一のテーブル(項目コード、current_hash、old_hash)に保存します。次に、新しいハッシュが古いハッシュと異なる場合、製品を比較して更新します。 約50万の製品があるので、パフォーマンスが少し心配です。 それは良い方法ですか?

5
WebサイトのわかりやすいURLとデータベースIDの現実の提供
製品、ブログ投稿など、リソースのデータベースがあります。パブリックWebサイト用に、それらに対処するURLスキームを設計する必要があります。 データベースIDがバインドされている2つの例を次に示します。 https://www.youtube.com/watch?v=7FPS6llqhXw http://www.amazon.co.uk/gp/product/B000NHOMSQ わかりやすい例は次のとおりです。 http://en.wikipedia.org/wiki/LED_circuit (そこでのブラウジング生活を少し垣間見ます) メールまたはドキュメントでホバーまたは表示するときにURLの末尾に何があるかを知っているので、わかりやすいURLが好きです。SEOの方が良いか、以前はそうでした。 ドキュメントまたは製品の名前が変更されるとどうなりますか?変更された(Wikiは変更されないかもしれませんが、リソースは変更される可能性があります)か、タイプミスのためですか?私たちのリソースは非常に技術的で、長い言葉であり、間違いを起こしやすいものです。 また、数値であるデータベースIDがあります。仮装レンタルストアを使用して、ビデオのアドレスのアイデアを見てみましょう。 http://vidsyeah.com/video/sliding-doors/287171 IDは明らかであり、DBルックアップで使用されます。いいよ スライドドアビットは一意ではなく、ビデオタイトルから生成されただけで、GETで検証できます。したがって、スライドドアが入力され、doc 287171に実際にあるものと一致しない場合、404と応答します。 あるいは、誰かが気にかけた場合、人間が好きなものをそこに貼り付けることができるようにすることもできます。したがって、このURLも機能します。 http://vidsyeah.com/video/anything-at_all/287171 友好的な部分を検証する際の問題は、前述のように、名前の変更またはタイプミスの修正の問題です。名前が変更され、ドメイン内で実際に発生した場合、そこにあるURLを壊したくないので、次のようにします。 友好的な部分を確認しないでください。 確認しますが、以前のフレンドリIDが引き続き機能するように、フレンドリパーツの「履歴」をデータベースレコードに追加します。 あなたの考えやアイデアは大歓迎です。 ルカ

4
ロックの競合状態を防ぐものは何ですか?
データ競合とは何か、そしてロック/ミューテックス/セマフォがそれらを防ぐのにどのように役立つのかを理解しています。しかし、ロック自体に「競合状態」がある場合はどうなりますか?たとえば、おそらく同じアプリケーション内にあるが、異なるプロセッサで実行されている2つの異なるスレッドが、まったく同時にロックを取得しようとします。 それではどうなりますか?それを防ぐために何が行われますか?それは不可能ですか、それともまったくありそうもないことですか?それとも、実際に発生するのを待っている競合状態ですか?

5
すべての開発がブランチ上にあるときにリファクタリングする方法は?
私の会社では、すべての開発(バグ修正と新機能)は別々のブランチで行われています。完了したら、QAに送信し、QAがそのブランチでテストします。QAが青信号を出したら、メインブランチにマージします。これには、1日から1年かかることがあります。 ブランチでリファクタリングを絞り込もうとすると、どれくらいの期間「アウト」されるかわからないので、マージして元に戻すと多くの競合が発生する可能性があります。 たとえば、作業中の機能がこの関数を頻繁に使用しているため、関数の名前を変更したいとします。名前が実際には目的に合わないことがわかりました(これも単なる例です)。そこで、この関数のすべての使用法を見つけて、それらをすべて新しい名前に変更すると、すべてが完全に機能するため、QAに送信します。 その間、新しい開発が行われており、名前が変更された関数は、メインから分岐されているブランチのいずれにも存在しません。私の問題が再び統合されると、それらはすべて壊れてしまいます。 これに対処する方法はありますか? 経営陣がリファクタリングのみの問題を承認するようなことはないので、他の作業に絞り込まなければなりません。mainで直接開発することはできません。なぜなら、すべての変更はQAを通過する必要があり、mainを壊したジャークになりたくないので、彼は少しの非本質的なリファクタリングを行うことができるからです。

4
async + await == sync?
非同期Web要求の作成について説明しているこの投稿を見つけました。 さて、単純さはさておき、現実の世界であなたがすることは非同期リクエストを作成して次の行でそれを待つことだけです、そもそも同期呼び出しをするのと同じではないでしょうか?

4
型システム:名義対構造、明示対暗黙
名義型システムと構造型システムの違いについて少し混乱しています。誰かが彼らがどのように違うのか説明してもらえますか? 私が理解していることから: 名義:型の互換性は型名に基づいています。 構造:型の互換性は型構造に基づきます。たとえば、Cでは、2つの変数が異なる名前で同じ構造の構造体型である場合、それらの型は互換性があります。 ここで、明示的および暗黙的について:静的および動的型付けと異なるのはなぜですか?静的型付けでは型は明示的ですが、動的型付けでは型は暗黙的です。私は正しいですか?


8
UnixとLinuxの設計およびその他の面で基本的な違いはありますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 7年前に閉鎖されました。 私はこの文章を読み続けます: LinuxはUnixライクなシステムですが、Unixではありません。 両者の本当の違いはわかりません。LinuxはUnixから多くのアイデアを得ており、2つのライセンスは異なることを知っています。それとは別に、私はそれらのいずれかの専門家ではないので、デザインまたは他の重要な側面に基本的な違いがあるかどうかを知りたいです。

6
スタックですべてをより効率的に行うことができるのに、なぜヒープが必要なのですか?
これは実際、昨日私が今日使用するアプリケーションでスタックとヒープの両方が必要な理由について質問したことと、単純な&通過する単一の標準)。 ただし、応答の多くは、ヒープの割り当て/参照を試みるよりも数百(または数千)倍高速であるため、スタックはかけがえのないものであることを示しました。ヒープを廃止すると動的ストレージ割り当てに問題があることはわかっていますが、これを回避する方法はありませんか、またはおそらくスタックを改善して動的メモリ割り当てを処理できるようにする方法はありませんか?
24 stack  heap 

10
ステートマシンとスレッド
アラン・コックスはかつて「コンピューターは状態機械です。スレッドは状態機械をプログラムできない人々のためのものです」と言っていました。 Alanに直接質問することは謙虚な選択肢ではないので、ここで質問します。1つのスレッドとステートマシンのみを使用して、Javaなどの高レベル言語でマルチスレッド機能をどのように実現しますか?たとえば、実行する2つのアクティビティ(計算とI / Oの実行)があり、1つのアクティビティがブロックできる場合はどうなりますか? 高レベル言語のマルチスレッド化に代わる「ステートマシンのみ」の方法を使用できるか?

9
私の同僚はナイスガイですが、彼のパフォーマンスは平均以下です。上司に伝えますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 私は約3か月前にプロジェクトに参加しましたが、それまで遅れていたため、新しく雇われた1人の開発者によって開発されていました。公平を期すと、このプロジェクトは、微妙な点が多く、比較的複雑な医療機器へのインターフェイスであるため、会社で経験のない人物を1人プロジェクトに配置することは、経営者の観点からはおそらく悪い決断でした。 とにかく、いったん作業を開始すると、...うまくいきませんでした。UIは素晴らしく見えましたが、実際には何もしませんでした。繰り返しになりますが、これは多くの場合、この開発者がデバイスへのインターフェイスを作成する準備が適切に行われていないためです。しかし、適切なコードが壊れやすく、保守が非常に難しいこともすぐにわかりました。 今、私は世界で最高のプログラマーであると主張していません。私は、私よりも優れた開発者である非常に頭の良い人たちと仕事をしています。しかし、できる限りシンプルで堅牢なコードを書くことは非常に難しいです。チェックインをテストします。コードが乱雑になり、作業が難しくなっていることがわかった場合は、変更します。私は同僚がより良いコードを書くのを手伝うために、同僚と何度か話をしました。a)彼は20年以上の分野での経験があり、私は5歳しかいません。b)彼はいわゆる「UXエキスパート」として雇われ、他の人は彼を経験豊富な個人と見なしています。 とは言っても、私はそれを見ないだけです。彼はとてもいい人であり、理にかなっていますが、壊れやすいコードを何度もチェックインし、最も楽観的なケースでのみ動作し、10回のうち9回は彼の作品のバグを修正します。彼のコードはアマチュアっぽいようで、明らかに、彼が雇われたときに持っていたと主張するレベルの経験を持っていません。彼のコードのリファクタリングとバグの修正に費やした余分な時間が私に負担をかけたというところまで来ました。私がそれを見る方法には、2つのオプションがあります: 何もせず、この製品が時間通りに出て、堅牢であり、将来的に彼が失敗するのを待つために、お尻をつぶしてください(最初のリリースの後、このプロジェクトで彼と一緒に仕事をするつもりはありません) 上司に彼のパフォーマンスについて話してください。私の上司は理にかなった人ですが、このアプローチをとるのは気まずいです。私は同僚を「バッシング」するのが好きではありません(より良い用語がないため)同僚と私は彼がそれを取る方法を知りません。 だから、それはそれについてです。彼の実装が機能しない理由や、コードをより保守しやすくする方法を説明することで、同僚とこれを解決しようとしましたが、彼は同じ間違いを犯し続けています。他の人が同じような状況をどのように扱っているのか、特に現在管理職の人たちがどのように扱っているかを聞くことに非常に興味があります。アドバイスをありがとうございます。

4
各ユニットテストは、他のテストとは独立して実行できる必要がありますか?
クラスの2つのメソッドのテストがあるとします。最初の方法では、別の層からデータを収集し、ランタイムに依存しない何らかの種類のストレージ(SQLテーブルなど)に格納するため、このテストで処理されるすべてのデータはテストにハードコーディングされます。2番目のメソッドは、最初のメソッドがデータを残した場所からデータを取得し、何らかの方法で変換(計算、特定の部分を他の場所に移動するなど)を担当します。 この2番目の方法では、最初の方法と同様に入力をハードコーディングするか、2つのテストを連続して実行し、最初のテストで実際に保存されたデータを取得して、1番目のテストが中断した場所から再開できると想定できます。 2番目のオプションを選択した場合、2つの方法がうまく機能するというのは本当に良い考えですが、1番目のテストが失敗した場合、それ以降のすべてのテストは失敗し、バグをより迅速に特定するのに役立つテストの利点がなくなります。 最初のオプションを選択した場合、各メソッドは独立して分離され、テストされますが、それらが実際に適切に連携できることを本当に知ることはありません。 ここでより良いオプションはどれですか?ハードコーディングを使用して分離されたメソッドごとに単一のテストを実行し、次に両方のメソッドを1つに含むより大きなテストを実行するなど、何らかの方法がありますか?

6
チーム全体がTDDに慣れたら、TDDの実際のオーバーヘッドはどうなりますか?
TDDの実行に費やす時間の割合。 このコストと報酬の割合は、プロジェクトのライフサイクル中に変化すると想定しています。 私は想像する最初の段階は、添付のより多くのコストが、少しの報酬を持っています。さらに(リファクタリング中)テストの利点を得ることができます。 あなたの時間の30-50%がユニットテストを書いていると聞いています。ただし、これらのテストを記述することで節約される時間は考慮されていません。 これに関するみんなの経験はどうですか? ウェス 編集時間の節約だけでなく、時間の節約もできますか?バグ修正とリファクタリングで?
24 productivity  tdd 

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