ソフトウェア工学

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

9
複数のクライアントに対して同じソフトウェアの異なるカスタマイズされたバージョンを維持する方法
ニーズの異なる複数のクライアントがあります。ソフトウェアはある程度モジュール化されていますが、すべてのモジュールのビジネスロジックをあちこちで調整する必要があることはほぼ確実です。モジュールごとにクライアントを個別の(物理)モジュールに分割することを正当化するには、おそらく変更が小さすぎるため、ビルドの問題、リンクの混乱を恐れます。しかし、これらの変更は大きすぎて、構成ファイルのスイッチで構成するには多すぎます。これは、展開中に問題を引き起こし、特にティンカータイプの管理者では多くのサポートトラブルを引き起こす可能性があるためです。 ビルドシステムに、クライアントごとに1つずつ、複数のビルドを作成させて、問題の単一の物理モジュールの特殊バージョンに変更が含まれるようにします。だから私はいくつか質問があります: ビルドシステムに複数のビルドを作成させることをお勧めしますか?ソース管理、特にsvnにさまざまなカスタマイズを保存するにはどうすればよいですか?

5
C#開発者として、Javaを学習してAndroid用に開発するか、代わりにMonoDroidを使用しますか?[閉まっている]
私は、C#に精通していると思います。現時点では私の選択言語であり、基本的に私の専門的な経験はすべてここにあります。 それでも、MonoDroidプロジェクトの存在に戸惑っています。私の理解では、C#とJavaは非常に近いということです。例えば、あなたが一方を知っていれば、もう一方を本当に素早く学ぶことができます。ですから、最初のAndroidアプリの開発を検討しているとき、Javaを使い始めて、学習しながら学習するのに十分なJavaに精通していると思いました。 これは、Java Android SDKよりも機能豊富ではない可能性が高いMonoDroidを使用するよりも理にかなっていないのでしょうか。あなたが経験している技術にこだわるよりも、新しい言語(そして、その時点で非常に人気のある言語)を学び、その言語で経験を積む方がいいと思います。で、それ以上の貴重なスキルを獲得することなく。 たぶん、私は平均的な潜在的なMonoDroidユーザーをひどく間違って伝えています。たぶん、Javaと.NETの経験があり、.NETを好む人にとってはもっといいでしょう。または多分(実際にはそうであるかもしれません)私がちょうど考慮しなかった他の要因があります。Javaを使用してAndroid用に開発するのではなく、なぜMonoDroidを使用するのでしょうか?
46 java  c#  .net  android  monodroid 

14
なぜみんながSharePointを嫌うのですか?[閉まっている]
最も話題になっているテクノロジーに関するこのトピックを読んで、SharePointがほぼ例外なく非難されていることに気付きました。 SharePoint(特に最新バージョン)での私の経験は、SharePointのコアコンピテンシーをスマートに達成することです。すなわち: 一元化されたドキュメントリポジトリ -すべてのこれらのオフィスドキュメントを電子メールから取得します(バージョニングを使用) 内部情報の普及のためのユーザー編集可能なコンテンツ作成 -外観、現在の電話番号と休暇ポリシーを備えたHRサイト プロジェクトコラボレーション -数回クリックするだけで、プロジェクトのドキュメント、タスクリスト、単純なスケジュール、スレッドディスカッション、および場合によってはすべてのプロジェクト関連メールのリストを含むサイトが作成されます。 非常に基本的なビジネスオートメーション -休暇フォームに記入すると、HRにメールが送信されます。 私の経験では、SharePointが設計されていない方向にSharePointをプッシュしようとした場合にのみ、SharePointが非常にくなります。SharePointは、CRM、ERP、バグデータベース、または外部Webサイトではありません。SharePointはピンチで十分な柔軟性を備えていますが、専用ツールに代わるものではありません。(Microsoftは、SharePointが所属していないドメインにSharePointをプッシュするのと同じように有罪です。) SharePointをその目的のために使用している場合、本当に機能します。 考え?
46 sharepoint 

5
クラスメソッドから「return self」の目的は?
私はオープンソースプロジェクトでこのようなものに出会いました。インスタンス属性を変更するメソッドは、インスタンスへの参照を返します。この構成の目的は何ですか? class Foo(object): def __init__(self): self.myattr = 0 def bar(self): self.myattr += 1 return self

13
プログラミングのメンターを見つける方法 [閉まっている]
プログラミングを学ぶことにしました。私は数日間SOを読んでおり、いくつかの記事を読んでいるので、C ++から始めると思います。ループ、配列、プログラムロジック、オブジェクトについては少し知っているので、最初のプロジェクトを行うときに得られる小さな質問で私を見て助けてくれる人が必要です。 だからここに質問があります-私はそのような人をどこで見つけますか?プログラミングをしている友人は誰もいません。 編集:2年後、私はまだメンターを探しています。私は積極的にコードを作成しませんでした。Cocos2dを使用して、Objective-CおよびiOSプログラミングとゲームプログラミングに取り組んでいます。あなたが私のメンターになりたいなら、私をドロップするかコメントしてください。
46 learning  c++  teaching 

16
履歴書の言語:「C / C ++」または「C、C ++」を置く方が良いですか?[閉まっている]
数週間で卒業し、履歴書には(予想どおり)経験した言語がリストされています。以前は"C / C ++"を使用していましたが、当時は今のようにこれら2つの言語でそれほど経験がありませんでした。 これら2つの言語を正式に習得したので、私(およびこれらの言語を本当に知っている人)は、それらが類似しており、同時に完全に非類似であることが明らかになりました。確かに、ほとんどのCコードはコンパイル可能なC ++コードですが、構文とライブラリ関数の組み込みは、これらの類似性が終わるところでほとんど行われます。ほとんどの自明でない問題では、望ましいC ++ソリューションが望ましいCソリューションと異なる可能性があります。 私の質問: リクルーターは、「C、C ++」ではなく「C / C ++」を配置するかどうかに注意したり、気にしたりしますか?彼らは、最初のフォームが含まれているため、または2番目のフォームが含まれていることを潜在的な「履歴書ビーフ」(「1」ではなく2言語としてリストする)のいずれかの動作に関する知識の欠如を想定しますか? ? さらに、これらの2つの言語に特に関心のある求人の場合、面接プロセスにはCプログラミングとC ++プログラミングの違いに関する質問が含まれていましたか(実際のプログラミング手法ではなく、後者の余分なパラダイムだけでなく)?
46 c++  resume  c 


8
パスワードの再利用を「保護」するために、送信する前にクライアントでパスワードをハッシュするWebページがほとんどないのはなぜですか(そしてサーバー上で再度ハッシュするのですか)。
インターネットにはログイン情報を必要とする多くのサイトがあり、パスワードの再利用を防ぐ唯一の方法は、サーバー上でパスワードがハッシュされるという「約束」です。 したがって、パスワードを再ハッシュするサーバーに送信する前に、クライアントコンピューターで(Javascriptを使用して)パスワードをハッシュするWebページを作成するのはどれくらい難しいでしょうか。理論的には、これは追加のセキュリティを提供しませんが、実際には、サーバーでパスワードをハッシュしない「不正サイト」から保護するために使用できます。


5
ユニットテストに「投資」するよう経営陣をどのように説得しますか?
どのようにしてユニットマネージャーにあなたをマネージャーに納得させましたか? 「使用」とは、ソース管理への開発、チェックイン、および長期にわたる単体テストの維持などを許可することを意味します。 一般的な管理の反対意見は次のとおりです。 顧客は単体テストの費用を支払わなかった このプロジェクトでは、単体テストの時間が許可されていません 技術的負債?どのような技術的負債ですか? 他の異議を知っていますか?あなたの答えは何でしたか? 前もって感謝します!



9
CI主導の開発をどのように回避しますか...?
私は非常に大規模な研究主導型のオープンソースプロジェクトに取り組んでおり、他の多くの定期的な貢献者もいます。プロジェクトは現在非常に大きいため、コンソーシアム(2人の常勤従業員と少数のメンバーで構成される)がプロジェクトの維持、継続的統合(CI)などを担当しています。外部の統合のための時間がありません。しかし貢献。 このプロジェクトは、「コア」フレームワーク、約50万行程度のコード行、コンソーシアムが管理する「プラグイン」の束、およびいくつかの外部プラグインで構成されています。気づいてさえいません。 現在、私たちのCIはコアとメンテナンスされたプラグインを構築しています。 私たちが直面している大きな問題の1つは、ほとんどの貢献者(および特に臨時の貢献者)がメンテナンスされたプラグインの90%を構築していないことです。 GitHubでプルリクエストを行う前に、コードがマシンでコンパイルされることを確認しました。 コードは機能し、満足し、CIはビルドを終了し、問題が始まります。コンソーシアムが管理しているプラ​​グインでコンパイルが失敗しました。コントリビューターは自分のマシンではビルドしませんでした。 そのプラグインは、たとえばCUDAなどのサードパーティライブラリに依存している可能性があり、ユーザーは壊れたプラグインをコンパイルしたくない、ハードウェア上の理由でコンパイルできない、または単にできない。 そのため、PRはマージされないPRの辺りにとどまるか、寄稿者が壊れたプラグインのソースで名前を変更した変数を把握し、コードを変更し、ブランチをプッシュし、 CIがコンパイルを終了し、通常はエラーが増え、CIが満足するまでプロセスを繰り返します-または、コンソーシアムで既にオーバーブッキングされている2人のパーマネントのうちの1人が手を差し伸べ、マシンのPRを修正しようとします。 これらのオプションはいずれも実行可能ではありませんが、どのように異なる方法を実行するのかわかりません。プロジェクトの同様の状況に直面したことがありますか?もしそうなら、この問題をどのように処理しましたか?ここに表示されていない解決策はありますか?

3
共同プログラマーによって行われるまだ実装されていないメソッドをどのように扱うか?
これは、チームでの作業方法に関する質問です。 最近、私は6人のチームで最初の大規模(〜80クラス、Java)プログラミングプロジェクトに取り組みましたが、コードに継続的に取り組んでいたのは4人だけでした。私たちは早い段階で行われる作業を配布しましたが、ある時点で、私は共同プログラマーの1人によってまだ実装されていないメソッドを呼び出す必要がありました。これに対処するための推奨される方法はどうですか? 私が見たオプション、私はそれらのどれも本当に好きではありませんが: 自分の書き込み//TODO及び方法がその間に実装されているかどうかを確認するために、後のコード行を再訪。 対応するチームメンバーに今それを実装するよう頼む。 まだ実装されていないものの明確な説明を含むカスタムruntimeExceptionをスローします。(少なくとも、何が足りないかを見つけるために長い時間を探す必要はありません) するために必要なメソッドを追加し、そのクラスとそれらの書き込み//TODOメッセージ本文に、おそらくも彼らにその変更についての簡単なメッセージを送信します。(これはもう私の問題ではありませんが、その間にこのメソッドで作業していた場合、迷惑なマージ競合が発生する可能性があります) 実際に作業を行うコードを記述する前に、すべての抽象クラスまたはインターフェースを定義します。(これらのインターフェイスは頻繁に変更されたため、うまく機能しませんでした)
45 teamwork 

9
有害と考えられる返品?コードがなくてもコードは機能しますか?
さて、タイトルは少しクリックされていますが、真剣に私は言いました、しばらくキックを求めないでください。私は、メソッドが真のオブジェクト指向の方法でメッセージとして使用されることを奨励する方法が好きです。しかし、これには頭の中のガタガタする問題があります。 よく書かれたコードは、オブジェクト指向の原則と機能の原則を同時に満たすことができると疑うようになりました。私はこれらの考えを調和させようとしています、そして、私が着陸した大きなこだわりポイントはreturnです。 純関数には次の2つの性質があります。 同じ入力で繰り返し呼び出すと、常に同じ結果が得られます。これは、不変であることを意味します。その状態は一度だけ設定されます。 副作用はありません。呼び出しによって引き起こされる唯一の変更は、結果の生成です。 それでは、return結果を伝える方法として使用することを誓った場合、どうすれば純粋に機能的になりますか? TELLは、聞いていない、いくつかの副作用を検討するものを使用してアイデアの作品を。オブジェクトを扱うとき、その内部状態については尋ねません。何をする必要があるかを伝え、その内部状態を使用して、私がそれを行うように指示したことで何をすべきかを見つけます。一度言ったら、何をしたのかは聞かない。私は、それがするように言われたことについて何かをしたと思っています。 Tell、Den's Askは単にカプセル化の別の名前以上のものだと思います。私が使うとき、私はreturn何が私を呼んだのかわかりません。私はそれのプロトコルを話すことができません、私はそれが私のプロトコルに対処することを強制する必要があります。多くの場合、これは内部状態として表されます。公開されているものが正確な状態ではない場合でも、通常は状態と入力引数に対して実行される計算にすぎません。応答するインターフェースがあると、結果を内部状態や計算よりも意味のあるものにマッサージする機会が与えられます。それはメッセージパッシングです。この例を参照してください。 昔、ディスクドライブには実際にディスクが搭載されていて、指で触れるにはホイールが冷たすぎるときに親指ドライブが車で行っていたものでした。void swap(int *first, int *second)とても便利に見えましたが、結果を返す関数を書くことが奨励されました。それで私はこれを信仰で心に留め、それを追い始めました。 しかし、今では、オブジェクトを構築する方法によって結果の送信先を制御できるアーキテクチャを構築する人々がいます。以下に実装例を示します。出力ポートオブジェクトを注入することは、出力パラメーターの考え方に似ています。しかし、それが、tell-don't-askオブジェクトが他のオブジェクトに何をしたかを伝える方法です。 副作用について最初に学んだとき、それを出力パラメーターのように考えました。私たちは、仕事のいくつかを驚くべき方法で、つまりreturn result慣習に従わないことによって人々を驚かせないように言われていました。確かに、副作用が発生する並列非同期スレッドの問題が山積みになっていることはわかっていますが、戻り値は実際には単に結果をスタックにプッシュしたままにしておくため、呼び出されたものは後でポップオフできます。それだけです。 私が本当に求めていること: あるreturnすべてのその副作用の悲惨さを回避し、ロックせずに、スレッドの安全性を取得する唯一の方法は、など、または私は従うことができます聞いていない、言う純粋に機能的な方法で?

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