ソフトウェア工学

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

3
新しいブラウザの複数のブラウザタブとクライアント状態に対処するオープンソースのJavaScriptライブラリはありますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 タブ、ブラウザウィンドウ、同じドメインウィンドウなどの間で状態を共有できる最近のブラウザになったHTML5の新しい機能がいくつかあります。したがって、おそらく、クライアントおよびタブやウィンドウ間で状態をインテリジェントに管理します。 現在、単一のタブまたは単一のウィンドウで状態を管理するのに役立つBackbone.jsのようなライブラリがあります。複数のタブ(またはウィンドウ)がグローバルな状態、タブ固有の状態、およびクロスタブイベントを管理するのに役立つものはまだありますか?

3
モバイルプラットフォームが世代別ガベージコレクションをサポートしないのはなぜですか?
Windows Phone / XboxとAndroidの両方で、世代別ガベージコレクションがサポートされていません。これは多くのプログラマにとってイライラさせられます。それには正当なエンジニアリング上の理由があるように見えますが、私はそれを理解できません。 現在の携帯電話は、2001年に世代別GCを備えた.NET 1.1を実行しているデスクトップ/ラップトップよりも多くのメモリとおそらく優れたCPUを備えています。また、電話やコンソールでのマルチタスクの必要性が少なくなるため、比較的多くの空きヒープスペースがあります。 それで何が得られますか? 編集:明確にするためのいくつかのポイント: これらのプラットフォームはアプリ専用のガベージコレクションを使用するため、私の質問はGCがサポートされない理由ではありません。私の質問は、世代別ガベージコレクションがそうではない理由についてです。 世代別GCの欠如に人々が不満を抱いている理由は、非世代別GCが非常に非効率的だからです。(つまり、バッテリーの寿命が理由ではないことを意味します。) 世代別GCのサポートがないことには、正直な技術的理由があると思います。これは修辞的な質問ではありません。

6
開発者向けの80/20ルールをどのように効果的に実装しますか?
私は、80/20ルールが実装されている銀行の開発者です。割り当てられたプロジェクトに取り組む時間の80%、興味のあることに取り組む時間の20%。しかし、私はそれをどうやってやるかわからない。どうすればいいかアドバイスしてくれる他の人がいることを望んでいます。 私の問題は、実際に「ゾーン内」に入ったときに、手元にあるタスクしか考えられないことです。これが20%未満の場合、私が最後にやりたいことは、停止して実行し、勢いを失い、メインプロジェクトの作業に戻ることです。 私は何かに4日間、他の何かに1日間働くと思いますか?または4週間と1週間? これは会社に依存することは知っていますが、業界全体でどのようにこれが行われているのかを知りたいと思っています。

6
私のコードをチーム内の他のプログラマーにとって読みやすくする必要がある
私はデルファイでプロジェクトを進めており、アプリケーションのインストーラーを作成しています。主に3つの部分があります。 PostgreSQLのインストール/アンインストール myapplication(myapplicationのセットアップはnsiを使用して作成されます)インストール/アンインストール。 スクリプト(バッチファイル)を使用してPostgresでテーブルを作成します。 すべてがうまくスムーズに実行されますが、何かが失敗した場合は、 このようにプロセスのすべてのステップをLogToFileするLogToFilegerを作成しました LogToFileToFile.LogToFile('[DatabaseInstallation] : [ACTION]:Postgres installation started'); 関数LogToFileToFile.LogToFile()これは、内容をファイルに書き込みます。これはうまく機能していますが、問題は、コードのどこでも関数呼び出しを見るだけでコードを読むことが難しくなっているため、コードが台無しになっていることLogToFileToFile.LogToFile()です 例 if Not FileExists(SystemDrive+'\FileName.txt') then begin if CopyFile(PChar(FilePathBase+'FileName.txt'), PChar(SystemDrive+'\FileName.txt'), False) then LogToFileToFile.LogToFile('[DatabaseInstallation] : copying FileName.txt to '+SystemDrive+'\ done') else LogToFileToFile.LogToFile('[DatabaseInstallation] : copying FileName.txt to '+SystemDrive+'\ Failed'); end; if Not FileExists(SystemDrive+'\SecondFileName.txt') then begin if CopyFile(PChar(FilePathBase+'SecondFileName.txt'), PChar('c:\SecondFileName.txt'), False) then LogToFileToFile.LogToFile('[DatabaseInstallation] …

5
テスト可能なコードの作成と投機的一般性の回避
私は今朝いくつかのブログ投稿を読んでいて、これに出くわしました: Customerインターフェースを実装する唯一のクラスがCustomerImplである場合、実際には実行時に代用するものがないため、ポリモーフィズムと代替性はありません。それは偽の一般性です。 インターフェースを実装すると複雑さが増し、実装が1つしかない場合は、不必要な複雑さが加わると主張するかもしれません。必要以上に抽象的なコードを記述することは、「投機的一般性」と呼ばれるコードの匂いと見なされることがよくあります(投稿でも言及されています)。 しかし、TDDを使用している場合、インターフェイス実装または他のポリモーフィックオプションの形式であるかどうかにかかわらず、クラスを継承可能にし、そのメソッドを仮想にすることで、その投機的な一般性なしにテストダブルを作成することはできません。 それでは、このトレードオフをどのように調整するのでしょうか?テスト/ TDDを促進するために投機的に一般的であることは価値がありますか?テストdoubleを使用している場合、これらは2番目の実装としてカウントされ、一般性が推測されなくなりますか?具体的な協力者のモックを可能にする、よりヘビーなモックフレームワークを検討する必要があります(たとえば、C#の世界でのMolesとMoq)。または、具体的なクラスでテストし、デザインが自然にポリモーフィズムを必要とするときまで、「統合」テストと考えられるものを記述する必要がありますか? 私はこの問題に関する他の人々の見解を読んでみたいです-あなたの意見を事前に感謝します。

6
バックエンド開発者の作業を簡単にするために、HTML、CSS、およびJavaScriptを作成するにはどうすればよいですか?
デザイナーからデザインを取得すると、PSD(Photoshop)ファイルとして取得します。私は常に適切なレイヤーとフォルダー名、基本的にはクリーンで管理されたPSDを期待しています。この設計から、HTML、CSS、およびJavaScriptを開発し、バックエンド開発者に提供します。彼らが理解しやすくするために、私は セマンティックコードを書く、 JavaScriptとCSSを外部ファイルに保存し、 HTML、CSS、JSファイルに有用なコメントを追加し、 CSSスプライトを使用します(開発者は気に入らないが)。 HTML5ボイラープレートを使用し、 JavaScriptにjQueryを使用し、 可能な限り、新しいHTML5タグとCSS3を使用してみてください。 HTML、CSS、JS、および画像を含むZipファイルを送信しました。 レイアウトに小さな変更を加える必要がある場合、開発者がそれを処理できると期待しています。 バックエンド開発者や他のCSS忍者から、バックエンドシステムとの統合を容易にするためのファイルの構成とマークアップの観点から、もっとできること(つまり、バックエンドテクノロジー、PHP、.NET)を聞きたいです。 、Rubyなど)異なるクライアントは異なるシステムを使用します。
11 javascript  html  css  jquery 

3
Blackboard Patternの最新のJava実装?
「The Pragmatic Programmer」で詳述されているBlackboard Patternの Javaの実用的な最新アプリケーションの余地はありますか?この概念の実装を支援しようとする特定のライブラリはありますか?現在のソフトウェアコミュニティ(特にJava)におけるこのパターンに関する一般的なコンセンサスは何ですか? このアイデアは興味をそそるものですが、本のこの部分は時代遅れかもしれないと感じています。 この概念に慣れていない場合:http : //flylib.com/books/en/1.315.1.55/1/
11 java 

3
プログラミングにおける「移植」という言葉の使用に関する質問
現在、UNIXシステム用に作成されたC ++コードを変更して、Visual Studioからコンパイルすることで動作するようにしています。いくつかの組み込み関数の名前を変更する必要があり、動的配列の定義方法を変更する必要がありました。 私の質問は、このコードをUNIXからWindows / Visual Studioに「移植」しているのか、あるプログラミング言語から別のプログラミング言語に変更するとき(C ++からJavaに移植するとき)にのみ「移植」を使用しているのですか?

3
ScalaとLWJGLを使用した簡易ゲームの関数型プログラミングアプローチ
Javaの命令型プログラマであるIは、関数型プログラミングの設計原則(特に参照の透明性)に基づいて、スペースインベーダーの単純なバージョンを生成する方法を理解したいと考えています。しかし、デザインを考えようとするたびに、極端な可変性の泥沼で迷子になります。これは、関数型プログラミングの純粋主義者によって回避される同じ可変性です。 関数型プログラミングを学習する試みとして、LWJGLを使用してScalaで非常にシンプルな2DインタラクティブゲームであるSpace Invader(複数形の欠如に注意)を作成することにしました。基本的なゲームの要件は次のとおりです。 「A」キーと「D」キーでそれぞれ画面の下部にあるユーザーシップを左右に移動しました 発射間隔が0.5秒になるようにスペースバーで起動したユーザー船の弾丸を真っ直ぐ発射 射撃の間に0.5秒から1.5秒のランダムな時間で起動するエイリアン船の弾丸が真下に発射されました 元のゲームから意図的に除外されたものは、画面の上部にあるWxHエイリアン、分解可能な防御バリアx3、高速ソーサー船です。 さて、実際の問題領域に移りましょう。私にとって、決定論的な部分はすべて明らかです。アプローチ方法を検討する私の能力を妨げているのは、非決定的な部分です。決定論的な部分は、弾丸が存在する場合の弾道、エイリアンの連続的な動き、およびプレイヤーの船またはエイリアンのいずれか(または両方)の衝突による爆発です。(私にとって)非決定的な部分は、ユーザー入力のストリームを処理し、エイリアンの弾丸の発射を決定するためのランダムな値のフェッチを処理し、出力(グラフィックとサウンドの両方)を処理します。 私はこの種のゲーム開発を長年にわたって行うことができます(そして、これまでしてきました)。しかし、それはすべて命令型パラダイムからでした。さらに、LWJGLは、スペース侵略者の非常にシンプルなJavaバージョンを提供します(これは、セミコロンなしのJavaとしてScalaを使用してScalaに移行し始めました)。 Java / Imperativeプログラミングから来た人が理解する方法でアイデアを直接扱ったものはいないように思われる、この領域に関するいくつかのリンクを以下に示します。 純粋に機能的なレトロゲーム、パート1ジェームズハーグ 同様のスタックオーバーフローポスト Clojure / Lispゲーム スタックオーバーフローに関するHaskellゲーム Yampaの(Haskellでの)関数型リアクティブプログラミング Clojure / LispとHaskellのゲーム(ソース付き)にはいくつかのアイデアがあるようです。残念ながら、私は単純なJava命令型脳にとって意味のあるメンタルモデルにコードを読み取ったり解釈したりすることはできません。 FPが提供する可能性に非常に興奮しており、マルチスレッドのスケーラビリティ機能を味わうことができます。Space Invaderの時間+イベント+ランダム性モデルのような単純なものをどのように実装し、高度な数学的理論のように感じることなく、適切に設計されたシステムで決定論的部分と非決定論的部分を分離する方法を理解できたと思います; すなわちヤンパ、私は設定されるでしょう。単純なゲームの生成にYampaの理論レベルの学習が必要と思われる場合、必要なすべてのトレーニングと概念フレームワークを取得するためのオーバーヘッドが、FPの利点の理解を大きく上回ります(少なくともこの単純化された学習実験の場合) )。 フィードバック、提案されたモデル、問題領域へのアプローチ方法(ジェームズハーグがカバーしている一般性よりも具体的)をお勧めします。

4
コードベースが均一に遅くなることに対するアプローチ
適度なサイズのC ++コードベース(10Mloc)に取り組んでいますが、最適化の取り組みにより均一に遅くなっています。 このコードベースは、機能させるために組み合わせるライブラリのセットです。これらのライブラリが通信する方法の一般的なフレームワークが開発されたとき、パフォーマンスに重点が置かれ、後で追加された部分が増えても、一般的なフレームワークはあまり変更されませんでした。最適化は、必要なときに、ハードウェアの進化とともに行われました。これにより、高価な早期決定が明らかになったのはかなり後のことです。コードベースの大部分を書き直す必要があるため、さらなる最適化ははるかに高価になります。原則として、コードははるかに高速に実行できるはずであることがわかっているため、望ましくないローカルミニマムに近づいています。 簡単な最適化の機会によって簡単に混同されない、グローバルに最適なパフォーマンスのソリューションへのコードベースの進化を引き継ぐために何が変わるかを決定するのに役立つ成功した方法論はありますか? 編集 現在のプロファイリング方法に関する質問に答えるには: 実際、このコードを使用する方法は2つだけあり、どちらも恥ずかしいほど並行しています。プロファイリングは、大量の入力サンプルで平均化されたウォールクロック時間と、より詳細な実行(命令コスト、分岐予測ミス、キャッシュの問題)の両方で行われます。これは非常に均質なマシン(数千の同一マシンのクラスター)でのみ実行されるため、うまく機能します。私たちは通常、すべてのマシンをほとんどの時間、高速で稼働させているため、追加の新しいものを見ることができます。もちろん、問題は、新しい入力バリエーションが現れたときに、他のユースケースで最も明らかな非効率性を取り除き、「最適に実行される」シナリオの数を絞り込む可能性があるため、後期のペナルティが発生する可能性があることです。
11 c++  optimization 

6
リリースに適した分岐戦略の選択
新しいプロジェクトの新しい開発チームから始め、ソースリポジトリ(Microsoft Team Foundation Server 2010など)の分岐戦略を定義する必要があります。私たちは...するべきかどうかという難しい議論にぶつかりました... A。実稼働ビルドを行うリリースブランチが1つあり、実際に何かがリリースされたときにラベルを付ける または B。本番環境への新しいリリースごとに新しいリリースブランチを作成します(例:バージョン1、2、3など...) オプションAは非常に簡単に思えますが、これが長期的に問題を引き起こすかどうかはわかりません。オプションBは、時間の経過とともに積み重なる1回限りの長寿命ブランチを作成するだけのようです。 私たちが決めるのを助けることができる経験はありますか?具体的には、いずれか1つの選択肢のどこに問題があるのか​​を聞きたいと思っています。TFSおよび/またはリリース管理の意味に関連する特定の経験を提供してください。

3
グリッド上で有向グラフをランダムに生成します
ポケモンのアイススライディングパズルに似たパズルゲームを作成するために、有向グラフをランダムに生成しようとしています。 これは基本的に、http://bulbanews.bulbagarden.net/wiki/Crunching_the_numbers:_Graph_theoryをランダムに生成できるようにしたいものです。 xおよびy次元でグラフのサイズを制限できる必要があります。リンクに示されている例では、8x4グリッドに制限されます。 私が直面している問題は、グラフをランダムに生成するのではなく、ノードの反対側に何か(岩のようなもの)が必要なので、2D空間に適切にマップできるグラフをランダムに生成することですスライドを止めると視覚的に意味があります。これに伴う問題は、岩が他の2つのノード間のパスまたは場合によっては別のノード自体のパスになり、グラフ全体が破損することがあることです。 私が知っている少数の人々と問題について議論した後、解決策につながる可能性のあるいくつかの結論に達しました。 グリッドを構築するときに、グリッドの障害物をグラフの一部として含める。 完全に満たされたグリッドから始めて、ランダムなパスを描画し、そのパスを機能させるブロックを削除します。 問題は、追加の短いパスの導入を避けるために、どれを削除するかを判断することとなります。また、動的プログラミングアルゴリズムは有益であると考えていましたが、動的プログラミングアルゴリズムをゼロから作成するのに熟練している人はいませんでした。この問題が公式に呼ばれているものについてのアイデアや参考文献(公式のグラフの問題である場合)が最も役立ちます。 ブロックをランダムに配置し、選択した開始/終了からナビゲーショングラフを生成することで、これまでに達成したことの例をいくつか示します。アイデア(前のリンクで説明)は、緑のSから始めて緑のFに到達することです。これを行うには、上/下/左/右に移動し、選択する方向に移動し続けます。壁。これらの写真では、灰色が壁、白が床、紫色の線が開始から終了までの最小の長さであり、黒い線と灰色の点が可能な経路を表しています。 ランダムに生成されたグラフの悪い例は次のとおりです。 ランダムに生成された(または手で調整された)グラフの良い例を次に示します。 また、パズルとして実際にこれをプレイするときに、より難しいものが最小パスに沿って多くの高度なノードを持つものであることに気づいたようです。

1
反復的なドキュメント開発は可能ですか?また、効果的なドキュメントを提供しますか?
大学向けのプロジェクトがあり、すぐには始めませんが、かなり長い間考えていました。大学のプロジェクト開発は産業のようなものではないことを理解しています(私は現在インターンです)。そのため、現時点で指摘する状況は、実際のソフトウェア開発者にとってはおそらくばかげているように思われます。^^ ' プロジェクト自体では、多くの作業を文書化する必要があります。したがって、いくつかのマークにカウントされるコードを配信することに加えて、次のようなドキュメントを配信する必要があります。 要件分析ドキュメント プロジェクト計画 ユースケース、オブジェクトモデル、動的モデル、および受け入れテストの計画リスト テストプロセスのドキュメントとテストの成功度 時間の使用などに関する他の議論と分析 これらの成果物は、次の方法で配信されます。 RADファースト プロジェクト計画、ユースケース、モデル、およびテストが続きます(約3週間後) 最後に、実際のプログラムのドキュメント、テストプロセスなど+実際のプログラミング自体(約5週間後) だから、私が理解していることから、これはプロジェクトへのウォーターフォールスタイルのアプローチに向けられています。(私の意見では)唯一の問題は、これが大学のプロジェクトであり、学生がプロジェクト週の学期の終わりにプロジェクトを開発しようとするのと同様に、すでに十分なプレッシャーを持っていることです。学期の終わりにすべてをコーディング/開発/テストしたくはありません。私が対処しなければならない他の多くの評価でパニックに陥ります。 少なくとも、ある種の反復的な開発サイクルを試してみてください。つまり、コーディング/プロトタイピングを早期に開始でき、最後の瞬間にすべてを行うことに集中せず、このプロジェクトを終了する学期の終わり。そして今、私の実際の質問が来ます: すべてのドキュメントを高速の反復/プロトタイピング開発サイクルで提供する必要性を何らかの形で調整できますか? ドキュメントを反復的に生成するための戦略はありますか? 私はこれを尋ねて、それが大学で実行可能になると期待しているのはまったく不合理ですか? また、私はこの質問が非常にローカライズされていることを理解しているので、業界の観点から上記で質問したのと同じ質問をしたいと思います。または会社。 とにかく、これがどれくらい長いのかごめんなさい。最後まで読み終えたら、ありがとう!あなたが答えるために時間をかけることができれば、私は非常に感謝します!ありがとうございました!

3
大量のRAMを必要とするアプリケーションにC ++またはJavaを選択しますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 6年前に閉鎖されました。 私は、主にプロセッサに依存し、ヒープ使用量が重い(少なくとも数ギガバイト)科学アプリケーションを考えています。1年のどの時期でもC ++を喜んで使用しますが、この場合、C ++メモリマネージャーにとって自然な断片化がJavaの圧縮コレクターの利点と比較して重大な問題になるのではないかと思います。 誰もこれに関連する実世界の例を指すことができますか?
11 java  c++  memory  big-data 

6
QAは開発部門の一部ですか?
私はかなり長い間製品開発部門を持っていた小さな会社で働いています。ただし、これまでになかったのはQA /テストグループです。 テストグループの追加を検討していますが、会社の組織構造のどこに配置するのが最適かを判断するのに苦労しています。具体的には、「リードテスター」のポジションを採用します。それらは製品開発部門の一部として配置されるべきですか、それとも新しい部門になるべきですか?彼らはどこか別の場所にいるべきですか? 当社は大まかに次のように構成されています。 最高経営責任者(CEO CTO 製品開発ディレクター ディレクターカスタマーケア 開発者 VPオペレーション ネットワークエンジニア セールス/セールスエンジニア 大統領 コントローラ

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