ソフトウェア工学

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

7
この関数の最悪の場合はなぜO(n ^ 2)ですか?
私は、任意の関数のBigO表記を計算する方法を自分自身に教えようとしています。この機能は教科書で見つけました。この本は、関数がO(n 2)であると断言しています。これがなぜなのかを説明していますが、私はそれに従うのに苦労しています。これがなぜそうなのか、誰かが数学を教えてくれるのではないかと思います。基本的に、O(n 3)より小さいことを理解していますが、O(n 2)に単独で着陸することはできませんでした A、B、Cの3つの数字のシーケンスが与えられたと仮定します。個々のシーケンスには重複した値が含まれていないが、2つまたは3つのシーケンスにある数字があると仮定します。3方向の集合のばらばらの問題は、3つのシーケンスの共通部分が空かどうか、つまり、x∈A、x∈B、x∈Cのような要素xがないかどうかを判断することです。 ちなみに、これは私にとって宿題の問題ではありません-その船は何年も前に航海しました:)、私はもっと賢くしようとしています。 def disjoint(A, B, C): """Return True if there is no element common to all three lists.""" for a in A: for b in B: if a == b: # only check C if we found match from A and B for c in C: …
44 python  big-o 

8
ドメイン駆動型設計はアンチSQLパターンですか?
私はドメイン駆動設計(DDD)に飛び込んでいますが、さらに深く掘り下げていくと、得られないことがいくつかあります。私が理解しているように、主なポイントは、ドメインロジック(ビジネスロジック)をインフラストラクチャ(DB、ファイルシステムなど)から分離することです。 私が疑問に思っているのは、マテリアルリソース計算クエリのような非常に複雑なクエリがある場合、どうなりますか?この種のクエリでは、SQLが設計された種類の重いセット操作を操作します。ドメインレイヤー内でこれらの計算を行い、その中の多くのセットを操作することは、SQLテクノロジーを破棄するようなものです。 DDDパターンでは、ドメインレイヤーを変更せずにMongoDBにSQL Serverなどの同じ機能がないことを認識せずにインフラストラクチャを変更できるため、インフラストラクチャでこれらの計算を行うこともできません。 それはDDDパターンの落とし穴ですか?

5
SVNとGitのブランチの違いを理解する
私はSVNのユーザーであり、現在Gitを学んでいます。 SVNでは、通常、ローカルマシンでレポジトリをチェックアウトします。レポジトリには、プロジェクトのすべてのブランチが含まれており、興味のあるブランチのフォルダーを選択してそこで作業していました。 Gitを使用すると違いがわかります。 現在、私はリポジトリをクローンし、gitkを使用して特定のブランチをクローンしています。 プロジェクトフォルダーにはそのブランチのコンテンツのみが含まれており、SVNのようにすべてのブランチを表示することはできません。 Gitを使用してローカルリポジトリ内のすべてのブランチを表示する簡単な方法が見つかりません。 私が説明したGitプロセスが「標準」であるかどうか、そしてある程度正確であるか、何か不足しているのかを知りたいです。 また、たとえば、マスターで修正プログラムを作成する必要があるが、別のブランチのコンテンツも保持する必要がある場合に備えて、2つのブランチで同時に作業する必要があるプロセスの処理方法を知りたいと思います。 Gitのリポジトリからクローンされたブランチを含むフォルダーを作成するための推奨される名前の規則は何myproject-branchnameですか?
44 git  github 

3
ボブおじさんのクリーンアーキテクチャ-各レイヤーのエンティティ/モデルクラス?
バックグラウンド : 私はAndroidアプリでボブおじさんのクリーンアーキテクチャを使用しようとしています。私はそれを行う正しい方法を示しようとしている多くのオープンソースプロジェクトを研究し、RxAndroidに基づいた興味深い実装を見つけました。 気づいたこと: すべてのレイヤー(プレゼンテーション、ドメイン、およびデータ)には、同じエンティティ(UMLを話す)のモデルクラスがあります。さらに、データが境界を越えたとき(レイヤーから別のレイヤーへ)にオブジェクトを変換するマッパークラスがあります。 質問 : すべてのCRUD操作が必要な場合、すべてのモデルクラスが同じ属性で終わることがわかっている場合、すべてのレイヤーにモデルクラスが必要です。または、クリーンアーキテクチャを使用する場合のルールまたはベストプラクティスですか?

8
ビルドに失敗したコミットを自動的に元に戻す
私の同僚は、ビルドに失敗したコミットを元に戻すためにCIサーバーを作成することを考えていると言ったので、(少なくともビルドを渡す場合のようHEADにmaster)常に安定しています。 これはベストプラクティスmasterですか、それとも開発者が修正するまで壊れたままにしておくよりも問題がある可能性がありますか? 私の考えでは、コミットを元に戻すと、コミットと修正を読み直すタスクがより複雑になります(開発者は元に戻して修正をコミットする必要がありますが、これも混乱しますgit log)。修正。master安定していることにはいくつかの利点がありますが、失敗したコミットを元に戻すことは私を納得させません。 編集:それがmaster他の開発ブランチであるかどうかは関係ありませんが、質問は同じままです:ビルドに失敗したコミットをCIシステムが元に戻す必要がありますか? 別の(長い)編集:わかりgitました、奇妙な方法で使用しています。ブランチにコミットすると他の開発者とその変更から隔離され、ブランチを再統合して競合の可能性に対処する必要があるため、ブランチの概念は実際のCIに反すると信じています。全員がmasterこの競合にコミットすると、最小限に抑えられ、すべてのコミットがすべてのテストに合格します。 もちろん、これにより、安定性のみをプッシュする(またはビルドを中断する)ことを強制し、後方互換性を壊さないように、または新しい機能を導入するときに機能を切り替えないように、より慎重にプログラムします。 CIをこのように、またはそのように行う場合、トレードオフがありますが、それは質問の範囲外です(これに関する関連する質問を参照)。ご希望であれば、質問を言い換えることができます。開発者の小さなチームが機能ブランチで協力しています。1人の開発者がそのブランチのビルドを中断する何かをコミットした場合、CIシステムはコミットを元に戻すべきですか?

4
なぜC#開発者は括弧を開くのですか?[閉まっている]
私はここ数年のほとんどを主にC#とSQLで作業してきました。私がこれまでに取り組んできたすべてのプログラマーは、関数または制御フローステートメントの開始括弧を新しい行に配置する習慣がありました。そう ... public void MyFunction(string myArgument) { //do stuff } if(myBoolean == true) { //do something } else { //do something else } 特にif / elseステートメントでは、これがスペースの無駄であることに常に感銘を受けました。そして、C#の以降のバージョンには、次のような代替手段が存在することを知っています。 if(myBoolean == true) //do something on one line of code しかし、ほとんど誰も使用しませんでした。誰もが中括弧で改行をしました。 それから久しぶりにJavaScriptをやり直しました。私の記憶では、JavaScript開発者は以前とまったく同じ中かっこと改行を使用していましたが、ほとんどの開発者はすべての派手な新しいライブラリとものを使用して、宣言の後に開き中かっこを配置しました。 function MyJavaScriptFunction() { //do something } JavaScriptでクロージャーと関数ポインターを使用することが一般的になったため、多くのスペースを節約し、物事を読みやすくするため、この意味を理解できます。だから私はなぜそれがC#で完了したものとして見られなかったのだろうと思った。実際、Visual Studio 2013で上記のコンストラクトを試してみると、実際に再フォーマットされて、開き括弧が新しい行に追加されます。 今、私はコードレビューSEにこの質問を見た: https://codereview.stackexchange.com/questions/48035/questions-responses-let-me-tell-you-about-you これで私はJavaでそれを学んだ、A私があまり馴染みのない言語です。宣言の直後に中括弧を開くのは、最新のJavaScriptのように厳格であると考えられています。 …
44 java  c#  javascript  syntax 

3
実際のパラメーターが「引数」と呼ばれるのはなぜですか?
(引数)(プログラミングの意味で)という言葉はどこから来たのですか? すなわち、実際のパラメータが「引数」と呼ばれるのはなぜですか? 意味は関連していないようであり、その説明はどこにもありません。 用語に関する注意: 「正式な」パラメーター(単に「パラメーター」とも呼ばれます)は、「プレースホルダー」名(たとえば、x)- 関数の宣言されたパラメーターです。 (また、「引数」としても知られる)「実際の」パラメータは、実際の値れる渡された機能には、(たとえば、5)、それゆえ私は、任意の混乱を防止するために、上記のこの用語を使用します。

2
Google検索をどのように実装しますか?[閉まっている]
インタビューで「Google検索をどのように実装しますか?」そのような質問にどう答えますか?Googleの一部の実装方法を説明するリソース(BigTable、MapReduce、PageRankなど)があるかもしれませんが、これはインタビューに完全には適合しません。 どのような全体的なアーキテクチャを使用しますか?また、これを15〜30分でどのように説明しますか? 最初に、約1万件のドキュメントを処理する検索エンジンの構築方法の説明から始め、シャーディングを介して約5,000万ドキュメントに拡張し、その後、別のアーキテクチャ/技術的飛躍を実現します。 これは、20,000フィートのビューです。私が望んでいるのは詳細です-あなたがインタビューで実際にそれに答える方法です。どのデータ構造を使用しますか。アーキテクチャで構成されているサービス/マシン。典型的なクエリレイテンシはどうなりますか?フェイルオーバー/スプリットブレインの問題はどうですか?等...

3
複雑なRESTful検索メソッドを実行する適切な方法は何ですか?
RESTの原則に従って、いくつかの基準を使用して検索を行い、結果をクライアントに返すAPIのGETメソッドを作成します。問題は、基準に最大14個のパラメーターを設定できることです。そのうちの1つは複雑なオブジェクトのリストです。 これらの複雑なオブジェクトをURLパラメータとの間でエンコード/デコードできるかどうかさえわかりません。 URLが取得できる時間は計算しませんでしたが、十分に大きく、URLの長さの制限に達すると確信していますか? また、検索は結果を「リアルタイム」で表示する必要があります。つまり、ユーザーが検索フォームから何かを変更するたびに、「検索」ボタンを押さなくても新しい結果を表示できるはずです。 これらの点を明確にして、多くのパラメーターを使用して安らかな検索方法を作成することをお勧めしますか?
44 rest  api 


7
型名と大文字と小文字が異なるだけのパラメーター名を使用しているのは、C#の悪い習慣と見なされていますか?
クラスのプロパティに一致するパラメーター名に関して、これに似た質問が表示されますが、C#の大文字と小文字を除いて、パラメータータイプ名と同じパラメーター名の使用に関しては何も見つかりません。それは私が見つけることができる違反ではないようですが、それは悪い習慣と見なされますか?たとえば、次の方法があります public Range PadRange(Range range) {} このメソッドは範囲を取り、パディングが適用された新しい範囲を返します。したがって、一般的なコンテキストを考えると、パラメーターのよりわかりやすい名前を考えることはできません。しかし、「心理的距離」についてのCode Completeを読んだときに拾ったヒントを思い出します。それは言います 心理的距離は、2つの項目を区別できる容易さとして定義できます...デバッグするとき、類似する変数名間および類似するルーチン名間の心理的距離が不十分であることに起因する問題に備えてください。コードを作成するときに、問題を回避できるように、大きな違いのある名前を選択してください。 私のメソッドシグネチャには多くの「範囲」が続いているため、この心理的な距離に関して問題があるように感じます。今、私は多くの開発者が次のことをしているのを見ます public Range PadRange(Range myRange) {} 私は個人的にこの大会に強い嫌悪感を持っています。変数名に「my」プレフィックスを追加しても、追加のコンテキストは提供されません。 私はまた次を見る public Range PadRange(Range rangeToPad) {} 「私の」プレフィックスよりもこれが好きですが、それでも全体的には気にしません。私には過度に冗長で、変数名としてぎこちなく読みます。私には、メソッド名のために範囲がパディングされることが理解されています。 このようにすべてをレイアウトしたら、私の最初は最初の署名を使用することです。私には、きれいです。不要なときにコンテキストを強制する必要はありません。しかし、私は自分自身または将来の開発者にこの慣習を傷つけていますか?ベストプラクティスに違反していますか?

7
スクラムは公開入札と互換性がありませんか?
公的機関から、スクラム、かんばんなどの用語と概念を説明するアジャイル開発の101に関する非公式ワークショップを行うように依頼されました。私は約5年間アジャイル環境で働いてきましたが、私はスクラム伝道者とは思いません。 ワークショップの後、彼らはそのアイデアを気に入りました。しかし、彼らは外部のソフトウェア会社に彼らのためにソフトウェアを開発するよう依頼する必要があるので、彼らにはアプローチがおそらく適用されないだろうと説明した(彼らは少数の開発者しかいない)。この活動は、結果、価格、および期間を説明する公開入札プロセスで行う必要があります。これは、この組織(公的研究機関)の予算を申請するための法的要件です。 これらの制約は、アジャイル開発の基本原則とは幾分矛盾しています。 スクラムはそのような環境では互換性がありませんか? この組織に何をお勧めしますか?

7
ソフトウェアプログラミングでは、CPUとGPUの両方の負荷を100%にすることは可能ですか?
これは、私がゲーマーとして面白いと思った主題に関する一般的な質問です:CPU / GPUのボトルネックとプログラミング。間違っていなければ、CPUとGPUの両方が計算を行うことを理解するようになりましたが、アーキテクチャの違いにより、ある計算では他の計算よりも優れていることがわかりました。たとえば、クラッキングハッシュまたは暗号通貨マイニングは、CPUよりもGPUの方が効率的であると思われます。 だから私は疑問に思った:CPUが50%(例えば)である間、100%の負荷でGPUを持っていることは避けられない? または、より正確に:最初に1つが100%の負荷である場合、GPUによって通常行われるいくつかの計算はCPUによって行われ、両方とも100%の負荷に達することができますか? 私はこの主題について少し検索しましたが、かなり手ぶらで戻ってきました。これがこのサブセクションに位置し、あなたが私に与えるかもしれないどんな文書や講義にも開かれていると思います!

10
単体テストは設計をどのように促進しますか?
私たちの同僚は、ユニットテストの作成を、実際に設計を改良し、リファクタリングするのに役立つものとして推進していますが、その方法はわかりません。CSVファイルを読み込んで解析する場合、ユニットテスト(フィールドの値の検証)は設計の検証にどのように役立ちますか?彼は結合やモジュール性などに言及しましたが、私にはあまり意味がありません-しかし、私は理論的な背景があまりありません。 それはあなたが重複とマークした質問と同じではありません。私は、「それが役立つ」という理論だけでなく、これがどのように役立つかの実際の例に興味があります。私は以下の回答とコメントが好きですが、もっと学びたいです。


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