ソフトウェア工学

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

3
仕事用と個人用のGitHubアカウントを別々に作成する必要がありますか?[閉まっている]
私はプログラミングにかなり不慣れであり、私は多くの個人的なプロジェクトに取り組んできました。私が持っているプロジェクトの種類は、Reddit Image Downloaderと、GMがロールプレイングゲームで使用するためのツールです。 選択したデータ分析分野のプロジェクト用にGitHubアカウントの構築を開始したいのですが、GitHubアカウントでプロジェクトを整理する方法がわかりません。主にさまざまな分析スクリプトを含む「プロフェッショナル」なGitHubを作成し、私の小さなプロジェクトのために個別の「個人用」アカウントを作成する必要がありますか?または、私はこれを考えすぎているのですか、1つのアカウントを維持するだけですか?
28 github 

6
フラグをチェックする必要をなくすためのデザインパターンはありますか?
データベースに文字列ペイロードを保存します。2つのグローバル構成があります。 暗号化 圧縮 これらは、構成を使用して有効または無効にすることができます。その場合、どちらか一方のみを有効にするか、両方を有効にするか、両方を無効にします。 私の現在の実装はこれです: if (encryptionEnable && !compressEnable) { encrypt(data); } else if (!encryptionEnable && compressEnable) { compress(data); } else if (encryptionEnable && compressEnable) { encrypt(compress(data)); } else { data; } デコレータパターンについて考えています。それは正しい選択ですか、それとももっと良い選択肢がありますか?

2
優れた/より良いソースコード管理慣行を実施する方法
私は間違った問題に焦点を合わせているのではないかと思うので、まず、私が思い描くかもしれない準最適な解決策を提示する前に、問題が何であるかを説明します。 現在の状況: 現在、私の同僚は、変更がプロジェクト全体に広がっている巨大な塊で、長い時間を経て初めてコードの変更をコミットします。かなり前のことですが、彼らはネットワーク共有に.zipアーカイブを置くだけだからです。それでも、マージは悪夢です-率直に言って、私はそれで十分でした。また、話したり説明したり、物beいをするのもうんざりです。これはやめなければならない-私なしで常に「悪者」である。 私の解決策: 問題に気づいていない、および/または問題に関心がないようであり、数日以上続く努力は期待できない...それを何時間も打って、subversionサーバーにそれをしてもらいたいしつこい。 私の質問: 私はここから離れたところにいるのでしょうか、それとも間違った問題を見ていますか?私は何かを見逃しているようで、問題を解決するツールを見ることで間違ったことを尋ねていると思います。 この問題を解決するツールを探しているべきですか、それともこれを修正するために何をすべきですか?

6
TDDを使用しない単体テストの感覚
TDDを使用して開発する予定の新しい(非常に大きな)プロジェクトが開始されました。 TDDのアイデアは失敗しました(多くのビジネス上の理由とビジネス以外の理由)が、今は会話があります-いずれにしてもユニットテストを書くべきかどうか。私の友人は、TDDを使用せずに単体テストを書くことには意味がない(またはゼロに近い)ため、統合テストのみに焦点を合わせる必要があると言います。単純な単体テストを記述することには、コードの将来性をより高めるために、まだある程度の意味があると私は反対に思います。どう思いますか? 追加:これは>> this question <<の複製ではないと思います-UTとTDDの違いを理解しています。私の質問は違いではなく、TDDなしで単体テストを書く感覚です。
28 unit-testing  tdd 

3
ユーザーにGoogle Playストアのアプリの最新バージョンへの更新を強制する
Google Playストアでアプリの「重要な更新」を行う方法はありますか? たとえば、いくつかのバグ修正をもたらすアップデートをプッシュするとしましょう。必須ではなく、必要に応じてユーザーが更新します。これは重要ではない更新です。 次に、アプリの非常に深刻なセキュリティ問題を修正し、すべてのユーザーがこのバージョンに更新してアプリを使用し続けるようにしたいとします。 基本的に、重要な更新があり、ユーザーがまだ更新していない場合、ユーザーは更新するまでアプリを使用できません。 これはPlayストアを使用して可能ですか? ご意見ありがとうございます!

8
C#Generics-冗長な方法を避ける方法
次のような2つのクラスがあると仮定しましょう(コードの最初のブロックと一般的な問題はC#に関連しています)。 class A { public int IntProperty { get; set; } } class B { public int IntProperty { get; set; } } これらのクラスは、いかなる方法でも変更できません(これらは、サードパーティアセンブリの一部です)。したがって、同じインターフェイスを実装したり、IntPropertyを含む同じクラスを継承したりすることはできません。 IntProperty両方のクラスのプロパティにいくつかのロジックを適用したいのですが、C ++ではテンプレートクラスを使用してそれを非常に簡単に行うことができました。 template <class T> class LogicToBeApplied { public: void T CreateElement(); }; template <class T> T LogicToBeApplied<T>::CreateElement() { T retVal; retVal.IntProperty = 50; return retVal; …
28 c#  generics 

2
次の(アンチ)パターンの名前は何ですか?その長所と短所は何ですか?
過去数ヶ月間、私は次のテクニック/パターンで数回つまずきました。しかし、特定の名前を見つけることはできないようです。また、その長所と短所を100%確信しています。 パターンは次のとおりです。 Javaインターフェース内では、一般的なメソッドのセットが通常どおり定義されます。ただし、内部クラスを使用すると、デフォルトのインスタンスがインターフェースを介してリークされます。 public interface Vehicle { public void accelerate(); public void decelerate(); public static class Default { public static Vehicle getInstance() { return new Car(); // or use Spring to retrieve an instance } } } 私にとって、最大の利点は、開発者がインターフェイスについてのみ知る必要があり、実装についてではなく、インスタンスをすぐに作成したい場合などです。 Vehicle someVehicle = Vehicle.Default.getInstance(); someVehicle.accelerate(); さらに、構成に応じてインスタンスを動的に提供するために、Springと共にこの手法が使用されているのを見てきました。この点で、これもモジュール化に役立つようです。 それにもかかわらず、インターフェイスを実装の1つと結合するため、これがインターフェイスの誤用であるという感覚を揺るがすことはできません。(依存性反転の原理など。)誰もがこの技術がどのように呼ばれるか、そしてその長所と短所を私に説明してもらえますか? 更新: しばらく検討した後、次のシングルトンバージョンのパターンがはるかに頻繁に使用されていることを再確認しました。このバージョンでは、パブリックの静的インスタンスは、(フィールドが最終であるために)1回だけ初期化されるインターフェイスを介して公開されます。さらに、インスタンスはほとんどの場合、Springまたは実装からインターフェイスを分離する汎用ファクトリーを使用して取得されます。 public interface Vehicle …

4
プログラミング言語は関数をどのように定義しますか?
プログラミング言語は、関数/メソッドをどのように定義して保存しますか?Rubyでインタープリター型プログラミング言語を作成しています。関数宣言の実装方法を見つけようとしています。 私の最初のアイデアは、宣言の内容をマップに保存することです。たとえば、次のようなことをした場合 def a() { callSomething(); x += 5; } 次に、マップにエントリを追加します。 { 'a' => 'callSomething(); x += 5;' } これの問題はparse、文字列に対してメソッドを呼び出す必要があるため再帰的になり、parse遭遇したときに再度呼び出す必要がありdoSomething、最終的にスタックスペースが不足することです。 では、インタープリター言語はこれをどのように処理しますか?

6
イベント/アクティビティデータにリレーショナルデータベースとJSONオブジェクトを使用する
私は、標準のSQLリレーショナルデータベースまたはJSONオブジェクトを使用して、イベントまたはアクティビティに関するデータを保存するかどうかを決定しようとしているプロジェクトに取り組んでいます。 プロジェクトは複数のイベントタイプのデータを保存するため、この質問に対して1つのイベントタイプのみを説明することにしました。 ライブ音楽イベント(この質問の最後にあるJSONスキーマを使用して詳細に説明します)は、イベントが行われる場所、イベントの日時、イベントのコストなどのデータを格納するオブジェクトです。ライブ音楽イベントオブジェクトには、1対1(イベント->名前、イベント->説明)と1対多(イベント->会場、イベント->日付、イベント->チケットタイプの両方があります。 )関係。さらに、イベントオブジェクトには、パフォーマーオブジェクトにリンクする1つ以上のパフォーマーIDを含めることができます。演奏者オブジェクトは、ライブ音楽イベントで演奏しているミュージシャンのデータを保存します。 データは、単純(「x名前のイベントを検索」)と複雑(「現在の音楽ジャンルから半径「z」以内の「x」音楽ジャンルと「y」コストのイベントを検索」」の両方を使用してユーザーに照会されます場所」)クエリ。データは、ユーザーがWebフォームを使用して送信します。 おそらく定義済みのJSONスキーマからわかるように、私はもともとJSONオブジェクトを使用してこのデータを保存するつもりでしたが、私のデータは純粋にリレーショナルであるため、古いメソッドに固執する必要があると言う人がいます。 私のニーズを考えれば、それぞれのアプローチの長所と短所についてのご意見をいただければ幸いです。明確なものが必要な場合は、お気軽にお問い合わせください。 { "event": { "eventID":{ "type":"string" }, "eventType":{ "type":"array", "eventTypeItem":{ "type":"string" } }, "eventName":{ "type":"string" }, "eventDescription":{ "type":"string" }, "eventVenueList":{ "type":"array", "eventVenueListID":{ "type":"integer" } }, "eventURL":{ "type":"string" }, "eventTwitter":{ "type":"string" }, "eventFB":{ "type":"string" }, "eventInstagram":{ "type":"string" }, "eventEmail":{ "type":"string", "format":"email" }, "eventContactPerson":{ "type":"string" }, …
28 design  sql  json 

2
歴史的に成長したソフトウェアに名前付きのアンチパターンはありますか?[閉まっている]
複数の開発者がシステムに新しい機能を追加しただけで、アーキテクチャ全体を実際に監視したり、リファクタリングを実行したりしない、歴史的に成長したソフトウェアシステムを説明するアンチパターンはありますか? これは、管理者/顧客が絶えず新しい機能を要求し、誰も何もリファクタリングせず、他の開発者が以前に行ったことに追加するだけの場合に起こると思います。 開発者がソフトウェアシステムに圧倒されており、現在どのように機能するかを実際に理解していないため、コードをリファクタリングして変更するのではなく、最後にコードを追加/接着するだけの場合もあります。 そのため、時間の経過とともに、システムの保守がますます難しくなっています。 (これらの種類のアンチパターンの写真は、プログラミング全体に誰もがこれをより明確にするためにありますか?全体的なデザインを考えずに機能を追加するだけで構築された車のように。後方に移動しながらトレーラーを牽引し、エンジニアが車両の前面に牽引バーを溶接するだけです。作業は完了しました。しかし、カウルはもう開きません。)

3
関数パラメーターに注釈を付けないのはなぜですか?
この質問に答えられるようにするために、プログラマの心の中にある曖昧さのコストは、いくつかの余分なキーストロークよりもはるかに高価であると仮定しましょう。 それを考えると、なぜ私のチームメイトが機能パラメーターに注釈を付けないで逃げることができるのですか?はるかに複雑なコードの例として、次のコードをご覧ください。 let foo x y = x + y これで、ツールチップを簡単に調べると、F#がxとyがintを意味すると判断したことがわかります。それがあなたが意図したものであるなら、すべては順調です。しかし、それがあなたが意図したものかどうかはわかりません。2つの文字列を連結するためにこのコードを作成した場合はどうなりますか?または、ダブルスを追加するつもりだったと思う場合はどうなりますか?または、すべての単一の関数パラメーターの上にマウスを置いてそのタイプを決定する必要がない場合はどうなりますか? これを例として見てみましょう。 let foo x y = "result: " + x + y F#では、おそらく文字列を連結することを想定しているため、xとyは文字列として定義されます。ただし、コードを保守している貧弱なシュマックとして、私はこれを見て、xとy(int)を一緒に追加し、UI目的のために文字列に結果を追加するつもりだったのではないかと思うかもしれません。 確かにこのような単純な例では手放すことができますが、明示的な型注釈のポリシーを強制しないのはなぜですか? let foo (x:string) (y:string) = "result: " + x + y 明確であることにはどのような害がありますか?確かに、プログラマーは自分がやろうとしていることに対して間違ったタイプを選択する可能性がありますが、少なくとも私は彼らがそれを意図していたことを知っています。 これは深刻な質問です...私はまだF#が初めてであり、会社の道を切り開いています。私が採用する標準は、今後のF#コーディングの基礎となり、今後数年間、文化に浸透していくと確信している無限のコピーペーストに組み込まれます。 それで... F#の型推論に特別な何かがあり、それを保持する価値のある機能にし、必要な場合にのみ注釈を付けますか?または、専門のF#-ersは、自明ではないアプリケーションのパラメーターに注釈を付ける習慣をつけていますか?
28 f#  parameters 

2
毎年の初めにgithubでMITライセンスの更新が必要ですか?
私はすべてのgithubプロジェクトでMITライセンスを使用しています。2行目は2013年のトップを示しています。著作権を将来(2013年以降)保持するために、毎年変更する必要がありますか、それともそのままですか?追加したり、変更したり、そのままにしておきますか? The MIT License (MIT) Copyright (c) 2013 Aseem Bansal <aseembansal@ymail.com> //Rest of the MIT LICENSE

4
ゼロ知識コードのホスティング?[閉まっている]
オンラインサービスプロバイダーによって保存されたデータの政府による広範囲な監視に関する最近の啓示に照らして、現在、ゼロ知識サービスが大流行しています。 ゼロ知識サービスは、すべてのデータがサーバーに保存されていないキーで暗号化されて保存されるサービスです。暗号化と復号化は完全にクライアント側で行われ、サーバーはプレーンテキストデータまたはキーを認識しません。その結果、サービスプロバイダーは、たとえ暗号化を解除したい場合でも、第三者にデータを解読して提供することはできません。 例を挙げましょう。SpiderOakは、Dropboxのゼロ知識バージョンとして見ることができます。 プログラマとして、私たちはコードのホスティングサービス(Bitbucket、Assemblaなど)の特定のクラスに対して、最も機密性の高いデータ(コード)に大きく依存し、信頼しています。もちろん私はここでプライベートリポジトリについて話しています-ゼロ知識の概念はパブリックリポジトリには意味がありません。 私の質問は: ゼロ知識コードホスティングサービスを作成するための技術的な障壁はありますか?たとえば、SVN、Mercurial、Gitなどの一般的なバージョン管理システムで使用されるネットワークプロトコルについて、クライアントとサーバー間で通信されるデータを暗号化するスキームの実装を困難(または不可能)にするものがありますか?サーバーが知らないキー? 今日存在するゼロ知識コードホスティングサービスはありますか?

1
仕様に欠陥がある場合、引き続き従うべきですか?
私は、雇用主のアプリケーションの1つと、クライアントが開発した外部システムとの統合を開発するように割り当てられました。セキュリティに関連するいくつかの露骨な欠陥がある統合のためのクライアントの仕様。この欠陥により、不正なユーザーがシステムにアクセスして、制限されたデータを表示できます。 設計どおりに実装された場合の欠陥とその潜在的なセキュリティリスクを指摘し、欠陥のない代替手段を提供しましたが、(要するに)クライアントから「指定どおりに行う」と言われました。 プログラマには、既知のセキュリティリスクのあるコードを実装しないという倫理的な責任がありますか?安全なアプリケーションを作成するためのソフトウェア開発者としての倫理的責任を、クライアントの要件がどの時点で上回るのでしょうか?

5
あるチームで設計し、別のチームでコーディングする
私は、すべてのソフトウェア設計がローカルチームによって行われ、これらの設計がコーディングのためにオフショアチームに送られるプロジェクトに関与します。 この特徴を持つプロジェクトに直面するのはこれが初めてであり、私にとってはちょっと奇妙に感じます。マネージャーは、私たちが非常に詳細な設計文書を作成することを期待しています。私の観点からは、IDEで行うことはできますが、彼らは紙でコーディングすることになります。 だから、私の質問はこのアプローチが良いですか、それとも正しいですか?ソフトウェアプロセスがプロジェクトで成功するために必要な主な考慮事項は何ですか?

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