ソフトウェア工学

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

10
競争で開発に「lingua obscura」を使用している場合(なぜ)心配する必要がありますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 私はポール・グラハムのエッセイ-Beating The Averages(2003)を読んでいたのですが、彼が言わなければならないことは次のとおりです。 職務記述書のITフレーバーが多ければ多いほど、会社の危険性は低くなります。最も安全な種類は、Oracleの経験を必要とする種類でした。それらを心配する必要はありませんでした。また、彼らがC ++またはJava開発者を望んでいると言っても安全でした。彼らがPerlやPythonのプログラマーを望んでいたなら、それは少し恐ろしいことでしょう-少なくとも技術的な側面が本物のハッカーによって運営されている会社のように聞こえ始めています さて、これは時代遅れのエッセイです。ただし、一般的ではない言語(C / C ++ / Java、C#)を使用することが「危険性が低い」ことを確認できません。組織のプログラマーが開発言語に非常に精通している場合、彼らはまともなペースでコードを作成するのに等しく熟練する必要があります。実際、一般的でない言語を使用しても、長期的にはあまり多くのプログラマーが利用できないので、メンテナンス/拡張の問題に直面することはありませんか? Quick-n-Dirtyシステムを作成する場合、一部の言語では他の言語よりも比較的早く離陸できることに同意します。しかし、ポール・グラハムのエッセイ/コメントは2012年以降に意味をなしますか?スタートアップが開発に典型的なIT言語を使用する場合、競争の心配を減らす必要があるのはなぜですか? 言語自体がどのように違いをもたらすのか、私は理解できません。私見では、重要なのは開発者の経験であり、フレームワークを利用できるので、特定の言語でコーディングするだけでなく、DRY(繰り返しはしない)です。 私が見逃しているのは何ですか?スタートアップがIT風味のない言語を選択した方がよいということを意味しますか(開発者が非常に熟練している場合でも)。この主張の背後にある(プログラミング)経済/市場力とは何ですか? PS:「lingua obscura」は誰かの気持ちを傷つけることを意図したものではありません:)

5
C#とNUnitを使用してGUIアプリの単体テストを構成する方法
簡単なアプリケーションを顧客の1人に提供するために、小さなサイドプロジェクトを行うように依頼されました。通常、テストニーズをすべて把握しているバックエンドコードで作業しますが、GUIのテストを作成することについてまだ疑わしい喜びがありません。 EXEのテストコードとツール。 私の最初の本能は、テストをアプリケーションコードに単純に含めることでしたが、テスト固有の多数の依存関係を提供する必要があり、特に顧客に出荷しないように指示されました。また、専用のテストツール用に現金を絞り込めないため、手元にあるツール(StoryQ、RhinoMocks、およびNUnitを使用する必要があります。)、これは実際に単純なGUIアプリの動作をテストするのに十分なはずです。したがって、私が見る限り、これにより、デザインを本当にシンプルに保つか、テストのために意図的にオーバーエンジニアリングするかのバランスをとろうとしています。別のライブラリでビジネスロジックを使用してアプリを構築し、通常どおりにライブラリに対してテストするか、アプリケーション設計ではない追加のモジュールを壊さずに実行可能ファイルを許可する他のメカニズムを見つけているようです本当に必要。 編集: この質問は、DLLとは対照的に、NUnitと実行可能ファイルの関係を構築する方法に関するものであり、プレゼンテーションとビジネスロジックを分離する方法に関するものではないことに注意してください。 /編集 だから私の質問は: 単純なGUIアプリケーションを単体テストで構成して、手元にあるツールを使用して、過剰なエンジニアリングに頼らずに状態と動作を適切にチェックできるようにする特定の/推奨の方法はありますか? (DLLではなく)EXEをテストするときにNUnitを起動/構成する方法に関する基本的なことを見逃していませんか? このすべてをどのように達成するかの例の方向性を提供または指示できますか? これを行うには複数の方法があるかもしれないことを理解しているので、あなたの経験に基づいて特定の実装ガイドラインを探しています。
16 c#  testing  gui  nunit 

5
顧客固有のソフトウェアパッチを処理する現実的な方法は何ですか?
私は、他の人が次の問題を解決した効果的な方法を集めようとしています。職場では、特定のお客様にのみ表示したいソフトウェアパッチ(エンドユーザーシステムにインストールする)のリリースを余儀なくされています。カスタムコードは、独自のソース管理ブランチにあります。問題は、同期を保つために2つの並列コード行(およびビルドスクリプト)があり、元のコードにパッチを適用するたびに、顧客固有のコードにパッチを適用してテストする必要があることです。 他の組織はこのシナリオをどのように処理しますか?技術的な(ソース管理に関連する)ソリューションだけでなく、ビジネスソリューションにもオープンです。たとえば、そのブランチで更新を受信できないことを顧客に伝えることについて話してきました。 分岐戦略は次のようになります(Visual Studio TFS Branching Guideに基づいていますが、Subversionを使用しています)

1
本当に同期したいときに非同期関数を処理する方法
私はNodeJSが初めてであり、同期呼び出しで1つの呼び出しを他の呼び出しに追従させたいときに、関数の非同期性に頭を悩ませるのに苦労しています。 たとえば、Webサービスメソッドを呼び出しているとします。すべてのメソッドにはコールバック関数があります。しかし、特定の順序で10個を呼び出したい場合はどうすればよいでしょうか?最初のコールバックですべての関数を本当にチェーン/埋め込みする必要がありますか?チェーンが2回目にわずかに異なる場合はどうなりますか? 実際に同期したい状況に対処するエレガントなパターンはありますか? それとも、この種のプログラミングを別の考え方に慣れさせるべきでしょうか?もしそれが本当なら、誰かがコールバックを使用した関数の長いチェーンのきれいな例を私に指摘するかもしれません...
16 node.js 

6
オブジェクトに属性、状態、動作があると言えますか?
OOPの概念に対するOracleの紹介を読んでいたときに、この説明に出会いました。 実世界のオブジェクトには2つの特性があります。それらはすべて状態と動作を持っています。犬には状態(名前、色、品種、空腹)と行動((える、フェッチング、尾を振る)があります。ソフトウェアオブジェクトは、概念的には実世界のオブジェクトに似ています。それらも状態と関連する動作で構成されています。 そのパッセージに関する私の問題は、状態を記述するときに、その属性もそこにあるということです。たとえば、犬の名前と色はその属性であり、空腹または喉が渇いているのはその状態です。 したがって、私の意見では、オブジェクトの特性を属性、状態、および動作の 3つの部分に分ける方がより正確です。 確かに、これをプログラミング言語に翻訳すると、属性と状態の両方がフィールド/変数に格納され、動作がメソッド/関数に格納されるため、3分割パーティションが2分割パーティションになることがわかります。 しかし、概念的に言えば、3つのものを分離する方が理にかなっています。 別の例を次に示します。ランプを考えてみましょう。ランプのサイズと点灯するかどうかの両方が状態であると言うことは、私の意見では広まっています。ランプサイズは状態ではなく属性であり、ランプのオン/オフは状態です。 または私は何かを見逃しましたか?

10
どの時点で、Windows開発者にWindowsの最新リリースにアップグレードさせる必要がありますか?
開発者のマシンを後のWindowsリリースにアップグレードするには、どの時点から始めるべきですか? 経験から、Microsoftは通常、他のすべてのOSについて壮大な失敗を抱えています(これについて議論を始めようとはしていません、それは私の認識です)つまり、2000は安定した有用なOSでしたが、私はうまくいきませんでした、xpは多くの企業がまだ使用している優れたOSでしたが、Vistaはうまくいきませんでした(この1つがうまくいかなかった理由はMicrosoftのせいではなく、Vistaと7は同じメジャーリビジョンであることがわかります) 7はしばらくの間使用される優れたOSのようです。XPのようなものが今ではあります。 とにかく、これは開発マシンをWindows 8にアップグレードすることに消極的です。 a。OSを1〜2年しか使用しないために、私たちのビジネスに多額の費用をかけたくありません。 b。また、Linuxのデュアルブートが必要であり、Windows 8とgrubがうまく連携しないことを読みました。 開発者に最新の環境で開発し、開発しているあらゆる技術の最先端を持っていることを望みます。テクノロジーカーブよりも先を走り続けるか、少なくともそれを維持したいのですが、ビジネスに意味を持たせたいです。 したがって、特に、この時点でマシンをアップグレードする必要がありますか?一般的に、この種のことを決定するためにどのような計算を使用すべきですか? 編集する ASP.NETアプリケーションだけでなくデスクトップUIアプリケーションも作成します。また、常にVisual Studioの最新リリースを使用していることを確認します。

13
顧客の技術的意見ではなくRuby on Railsを守るにはどうすればよいですか?
翻訳ビジネスのオーナーである私の顧客は、Ruby on Railsについて読んでいると言って、「そこにはもっとPHPの人がいる」と「コミュニティはそれを好むようだ」と言った。ソフトウェアエンジニアおよびフリーランサーとして、これらの目標を達成するために顧客に何を言いますか。 売る 技術は私の専門家の決定であり、Railsはこの特定のプロジェクトのPHP(+フレームワークは何でも)と同等かそれ以上であることを彼に見てもらいます。 更新:提案をありがとう!明日、彼との別の会議があります。どうなるか見てみましょう。もう一度更新します:) 更新2:最後に、このスレッドを読むように彼に言ったが、結果は素晴らしいものだった。彼は私にプロジェクトをくれたので、今から始めようとしています。助けてくれてありがとう、私たちがいつか見たら、あなたは私の担当で無料のビールを持っています:) ところで:私は教訓を学びました:あなたがあなた自身とあなたの仕事を信じるなら、あなたを打ち負かすのに十分妥協する疑いがないので、できるだけ透明になってください。 よろしく

7
大規模なプロジェクトをどのように追跡しますか?
多くの異なるファイルを持つプロジェクトを扱うとき、私は常に、パーツが相互にどのように相互作用するかについて、ゆるい追跡をしているように見えます。私は小さなコンポーネントを単独で理解するのに本当に大きな問題を抱えたことはありませんが、プロジェクトの複雑さが増すにつれて、何が起こっているのかを精神的に理解することができなくなります。メソッドとソースファイルの数が増えると、特にOOPプロジェクトでこれに気付きます。 私の経歴:私は独学のWebプログラマーです。私は主にpythonを使用して迅速で汚いスクリプトを処理しましたが、いくつかの基本的なdjangoプロジェクトも実行しました。私のようなWebフレームワークのようなフラスコ、単一ファイルレイアウトの単純さに、私は簡単に何が起こっているかの(主に)追跡することができますので。 私は今、誰かが開発した大規模なZend Framework PHPプロジェクトとやり取りする必要がある状況にいることに気づき、多数のファイルに広がるコードを理解しようとすることに圧倒されます。 他の誰かが開発した大規模なコードベースを理解するために、どのテクニックとプロセスが有用だと思いましたか?全体像を把握するのに役立つ特定の図はありますか?

4
特定のサイトがパスワードにスペースを入れないのはなぜですか?
新しいWebサイトではあまり一般的ではないようですが、アカウントを必要とする多くのWebサイト(請求書の支払いなど)で、スペースを含むパスワードを作成できません。これは物事を覚えるのをより難しくするだけであり、パスワードのスペース、暗号化された、または(天国では禁止されている)データベースまたはプログラミングの制限がないことを認識しています。では、なぜ、サイトへのサインアップに関して、スペースバーはそれほど一般的に差別されているのですか?

2
重い企業通信、構成管理およびテスト要件を備えたMercurialリポジトリ構造
私は、分散バージョン管理のタオで自分自身を再教育するのに苦労している別のSubversionユーザーです。 Subversionを使用するとき、私はプロジェクトマイナーアプローチの大ファンであり、以前の雇用主のほとんどと一緒にリポジトリブランチを構築しました。次のようなタグとトランク: branches-+ +-personal-+ | +-alice-+ | | +-shinyNewFeature | | +-AUTOMATED-+ | | +-shinyNewFeature | +-bob-+ | +-AUTOMATED-+ | +-bespokeCustomerProject +-project-+ +-shinyNewFeature +-fixStinkyBug tags-+ +-m20110401_releaseCandidate_0_1 +-m20110505_release_0_1 +-m20110602_milestone trunk 実際のソースツリー内では、次のような構造(のようなもの)を使用します。 (src)-+ +-developmentAutomation-+ | +-testAutomation | +-deploymentAutomation | +-docGeneration | +-staticAnalysis | +-systemTest | +-performanceMeasurement | +-configurationManagement | +-utilities +-libraries-+ | …

9
大規模なLinux / makefileプロジェクトに効果的に取り組む方法は?
私は10年ほど前からC ++でWindowsアプリケーションを開発しています。そして最近、私はいくつかのLinuxプロジェクトを掘り始めましたが、私がどれほど非生産的かは我慢できません... 私は早い学習者で、しばらくの間、Linuxを主要なプラットフォームとして使用しています。そして、シェル、OSの原則、GUIには非常に満足しています。しかし、開発に関しては、学校に戻ったように感じます。 より大きなプロジェクトを開くとすぐに行き詰まります。それらのほとんどはmakefileベースであるため、基本的にQTまたはCodeBlocksでナビゲートしようとすると、せいぜいファイルごとにインテリセンスを使用できます。そして、ほとんどの時間変数はスコープから漏れます。 次に、定義に移動するものがありますが、それは存在しないようで、sourceforgeからより大きなプロジェクトに参加しようとしますgrep -r "this_def" . --include "*.cpp" --include "*.h"。 そして、デバッグ、gdbは動作しますが、私が何をしても、WinDbgやVisualStudioデバッガーに遅れを取っているようです。 そして、これらのことは私を必死にし、コードを書きたいが、それはとても遅くなる...私はLinux開発者が関数定義を暗記し、コードを目で分析すると考え始めているが、それが信じられないそう。 誰もこれを経験しましたか?生産性を高めるために足りないものはありますか?
16 c++  linux 

11
Pythonがエントリレベルのプログラミング言語として推奨されるのはなぜですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 P.SEについては、初心者プログラマがPythonを最初のプログラミング言語として選択することをお勧めします。 誤解しないでください、私はPythonが好きです。それは大好きです!しかし、その哲学は「私たちは全員ここで大人に同意している」ことを中心に展開しています。 経験/知識の観点から見ると、初心者プログラマーは大人ではありません。それはちょっと傷を乗り越えても足で自分を撃ち、いくつかの悪い習慣を拾いやすくなることを意味します。 「より静的な」言語では、制限が厳しくなるため、自分自身を足で撃つことは難しくなると考えています。 質問に戻ります。Pythonがエントリレベルのプログラミング言語として推奨されるのはなぜですか? プログラミング言語を教えるのに適している点は何ですか。または...アドバイザーの個人的な好みですか?

1
すべてのコードを一連のMap / Filter / Reduce操作として表現できますか?
私は最近、大量のコードをリファクタリングし、それらをLinqクエリに置き換えています。 言語バイアスの除去-Linqは、基本的に一連のデータを操作するMap / FilterおよびReduce操作のセットです。 これは、理論的にこれをどこまで引き継ぐことができるかを考えさせられました。コードベース全体を一連の(または単一の)Map / FilterおよびReduce操作に書き換えることができますか? 残念なことに、私は有用なことをするために報酬を受け取っているので、これ以上実験することはできませんでしたが、そのように再構築できないコード構造は考えられません。副作用コードは、モナドを介して処理できます。出力でさえ、基本的にメモリアドレスをスクリーンアドレスにマッピングします。 (理論的に)Linqクエリとして書き直せないものはありますか?

4
データ構造は単なる愚かなプログラミング言語であると言うことで、ビルゴスパーは何を意味しましたか?[閉まっている]
この投稿を改善したいですか?引用や回答が正しい理由の説明など、この質問に対する詳細な回答を提供します。十分な詳細のない回答は、編集または削除できます。 閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 ラルフウィリアムゴスパーJrによる次のような引用があります。 データ構造は単なる愚かなプログラミング言語です。 これはどういう意味ですか?残念ながら、Googleで見つけることができるのは、文脈のない引用自体の容赦ないコピー/貼り付けだけです。

8
C ++を使用し、言語固有の機能を使用しない場合、Cに切り替える必要がありますか?
趣味としてNESエミュレーターを開発しています。C ++を使用している理由は、私が主に使用している言語であり、ほとんどを知っており、ほとんどの言語が好きだからです。 しかし、プロジェクトにある程度前進したので、C ++の特定の機能をほとんど使用していないことに気付き、プレーンなCでも同じ結果を得ることができたはずです。テンプレート、演算子のオーバーロード、ポリモーフィズム、継承は使用しません。それで、あなたは何と言いますか?C ++のままにするか、Cで書き直す必要がありますか? パフォーマンスを上げるためにこれを行うことはありませんが、副作用として生じる可能性がありますが、それが必要ないのであれば、なぜC ++を使用する必要があるのでしょうか? 私が使用しているC ++の唯一の機能は、データとメソッドをカプセル化するクラスですが、構造体と関数でも同様に行うことができ、newとdeleteを使用していますが、mallocとfreeを使用することもできます関数へのポインタで達成できるコールバックのためだけに継承を使用します。 趣味のプロジェクトであり、締め切りがないので、書き直しが必要なオーバーヘッド時間と作業は問題ではなく、楽しいかもしれません。だから、質問はCまたはC ++ですか?
16 c++  c 

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