ソフトウェア工学

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

4
テキストの自動フォーマットを使用することをお勧めしますか?
私はEclipseを使用しており、例としてそれについてお話しますが、これは他のIDEにも当てはまると確信しています。 Eclipseは持ってCTRL- Shift- F自動的にあなたのコードをフォーマットするコマンドを。この種のフォーマットを使用するのは良い習慣ですか?多くのプログラマーが同じファイルで作業している可能性があり、これらはすべてCSVシステムで管理されている大きなプロジェクトのコンテキストでお願いしています。 ありがとうございました!

2
サーバー側のサンドボックススクリプトの選択は何ですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 ユーザーがデータとスクリプトを共有して一部のデータを実行する公開Webサイトを構築しています。このサイクルは、このサイクルで他の対話なしに何らかのサンドボックスでサーバーサイドで実行されます。Perlプログラムはデータベースからユーザー作成スクリプトを読み取り、処理するデータをスクリプト(JSONドキュメント)に追加し、インタープリターを呼び出します。応答(JSONドキュメントまたはプレーンテキスト)を返し、perlスクリプトを使用してデータベースに保存します。スクリプトは、自分でスクリプト言語に追加された組み込み関数にアクセスできる必要がありますが、それ以上ではありません。 だから私は、JavaScriptインタープリターとしてnode.jsに出くわし、そして1時間ほど前にGoogleのV8を使いました(v8はこの種のことには意味がありますか?)。CoffeeScriptも見栄えがよく、Javascriptのままなので、思い浮かびました。 javascriptはOS呼び出しやリモートで安全でないものがないため、十分に普及しており、「サンドボックス化可能」だと思います(私は思う)。 ところで、私はPerlとPHPでフロントエンドのシステムを書いています。 質問を改善するために:node.jsで実装するのに十分安全でシンプルだと思うのでJavascriptを選択していますが、この種のタスクを達成するための他の選択肢はありますか?ルア?Python?サンドボックスインタープリターを適切な方法で実行する方法に関する情報が見つかりません。

4
純粋なJavaScriptフレームワークよりもGWTのようなツールの実証済みの利点は何ですか?
GWTは、JavaコードとJavaランタイムのクラスライブラリのサブセットをJavaScriptコードに変換するソフトウェアスタックです。 JavaScriptツールキットと比較すると、GWTは本質的にも使用法によっても疎外感があり、JavaScriptを直接使用することで得られるきめ細かな制御の多くを奪い、非常に複雑で単純なこともできます。 Web開発者が、純粋なJavaScriptおよびJavaScriptフレームワークとツールキットを使用する代わりに、もともとWebを対象としていない言語を使用するGWTのようなツールを使用することを選択するのはなぜですか? それはかなり良いもので、どの基準に基づいていますか?

5
ソフトウェアプロジェクトのオフショアリング—競合の解決[終了]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 8年前に閉鎖されました。 私は、一部のウクライナの開発者に外部委託されたプロジェクトの管理を任されていました。 同社は、を介してそれらを雇ったElanceをで固定価格。その時点で、上司はそれらを処理し、仕事を成し遂げるために私を一人にしました。行う必要がある完全なものの詳細な仕様を作成しました。 このプロジェクトには、XMPP、RabbitMQ、データベースなどの処理が含まれていました。彼らとの最初の会議(常にIM)で、彼らが何をする必要があるかを徹底的に説明しました。彼らはそれを理解しているようでした-そして彼らはそれが簡単に行われると非常に確信していました。 ここまでは順調ですね。しかし、1週間後、私たちが再会したとき、彼らは何をすべきかについての誤解に満ちていました。開発者の1人にXMPPを知っているかどうか尋ねたとき、彼はXMPPを初めて使用していると言いました。最初の会議で、プロジェクトの複雑さと関連する技術について具体的に言及しました。加えて、私は彼らに彼らがそれを行う正確な方法の機能仕様を書くように繰り返し求めました。しかし、彼らはノーと言い、むしろコードを書きたいと主張しました。私はオーケーと言った。 プロジェクトは3週間後に完了し、必要なものを提供しました。その時点で、コードのレビューを開始しました。大部分は大丈夫でしたが、いくつかの重要な問題がありました。 彼らは設定ファイルに分離する必要があるもののいくつかをハードコーディングしました 1つに統合する必要がある複数の構成ファイルがありました 彼らはまったくドキュメントを書いていません その他の小さな変更 これらの変更を行うように依頼しました(ドキュメントを除く)-そして、議論がありました。 彼らは、価格が修正されたので、私は彼らが作業コードを完成したら変更を加えるように頼むことにおいて不公平であったと言った。彼らがプロジェクトに不合理な時間を費やし、今では何かを求めるのは完全に間違っていました。 最後に、彼らは変更を加え、プロジェクトは終了しました。しかし、それは私の心にいくつかの質問を残します... 彼らは必要なことをしましたが、私はそれを適切に行う必要がありました。私は本当に不公平でしたか? 機能仕様がなくてもコードを許可することに同意したのはなぜですか? 彼らがすべてを初めて理解したことを確認しなかったのはなぜですか? 誰もが同じ立場にいますか?外部委託プロジェクトを管理するより良い方法があると思いますか? -更新- すべての意見をありがとう-全体の経験を反映した後、私は結論づけることができます... 私は自分の側から仕様を曖昧にしたわけではありませんでしたが、私は確かにそれらを示唆されたように鉄で覆いませんでした。したがって、テイクアウェイは次のとおりです:常にできるだけ具体的にしてください-スペックもその観点から読んで、何かを見逃していないかどうかを確認してください。少なくとも3回繰り返します。 コードが何をすべきかを指定するだけでは不十分です。コードの外観を指定する必要があります。ディレクトリ構造は何ですか。可能であればファイル名も。これにより、後で多くの迷惑からあなたを救います。コーディングガイドライン、変数の命名規則、内部ドキュメント形式などを厳密に指定します。それらのガイドラインに従っていることを確認し、そうでない場合は悲鳴を上げます。 彼らの側から機能仕様を要求します-それはコードの前に書かれることを主張します。これにより、多くの混乱と誤解がなくなります。 開発中のコードを確認し、異常を早期に特定して修正できるようにします。1日おきに少なくとも1回は話しかけます。 最後に、彼らと良い関係を築こうとする。彼らの仕事に感謝していると感じさせます。ガイドラインに合わせて誇張してプッシュしないでください。代わりに、そうするように要求し、プロジェクトが完了したらコードのメンテナンスが非常に簡単になることを伝えてください。

8
プロジェクトのログまたは日記はどの程度役立ちますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 7年前に閉鎖されました。 プロジェクトのログや日記を保存するのがどれほど難しい/役に立つか知りたいです。私がやったことを追跡するのに時間がかかりすぎるのではないかと心配しています...

11
テーブルの継続的な作成と削除は、アーキテクチャ上の欠陥の兆候ですか?
最近、私はプログラム開発中に、彼らがアジャイル開発プロセスを使用する場合はこれが正常であると言って、新しい機能と正当化された事に取り組んでいる間、定期的にテーブルとカラムを定期的に作成および削除することを述べた開発者と議論しました。 私のバックグラウンドのほとんどはウォーターフォール開発環境にあるので、これがアジャイル開発で実際に適切であると考えられているのか、またはこれが根本的な問題の兆候であるのか、プログラムアーキテクチャまたはアジャイルプロセスのフォローに関するものなのか疑問に思います。

4
動的言語の開発
非常に単純な言語用にいくつかの手書きコンパイラを作成しましたが、今は単純化されたPythonやRubyに似た動的言語の開発に挑戦したいと考えています。しかし、コンパイラがどのように機能するかについて頭をかき回すのは簡単でした。プリミティブコンパイラは翻訳するだけです。しかし、言語が動的な場合、これを行うことはできません。実行時に情報を追跡し、より多くの作業を行うインタープリターまたはVMを作成する必要があります。 要するに、コンパイラがどのように機能するかを知っているが、インタープリターの作成に移行したいと考えているので、チェックアウトすべきリソースはありますか?動的言語用にいくつかのVMがありますが、自分でローリングしても問題ありません。これは私の個人的な経験のためだけです。 コンパイラーからインタープリターへの移行方法に関する情報を探しています。すでに言語Xのコンパイラーを作成しているが、今はインタープリターを作成する場合、何をする必要がありますか。また、プロセスを実行するリソースはありますか? コンパイラや仮想マシンの動作を網羅する幅広いリソースや抽象的なリソースは必要ありません。このテーマに関する教科書がたくさんあります。私がオンラインで見つけたすべてのリソースは、経験がないことを前提としているため、語彙分析または構文分析から始めるか、非常に抽象的です。動作するコンパイラはありますが、これをインタープリターに変換して、言語に動的機能を追加したいと考えています。 このプロセスでリソースを見つけることができませんでした。スコープが限定的すぎるか、理論的すぎずにインタープリターの「バックエンド」のリソースを見つけることができなかったため、ここに投稿しました。

3
スクラム:モチベーションの欠如の処理
よると、この、「スクラムは非常に意欲的、密接に協力し、クロスファンクショナルと自己組織化チームに依存しています。」それでは、コードの所有権を取得する意欲がない同僚をどのように処理しますか?所有権の取得に興味がある人をどのように獲得しますか?
11 scrum  teamwork 

11
プログラミングの特定の部分を理解できないと思われる場合はどうしますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 8年前に閉鎖されました。 進行中に新しい言語を学び、非常に基本的なプログラムのコードを複数の言語で記述し、クラスに行きます。私は本、記事、レッスン、ビデオを読んだことがありますが、あなたはそれを名付けましたが、特定のもののこつをつかむことができないようです。 例えば、私はポインターを理解していませんでした-それらが得意なもの。(質問の一部ではありません-「ポインタ」でタグを付け直す必要はありません...) しかし、私の質問は、ポインターが何をするかではなく、代わりにそのようなことをどのように理解できますか?プログラミングの特定の部分に関する本または記事を読んだ後、理解できない場合、どうすればよいですか?プログラミングの特定の機能でコードを書くことは確かに役立ちますが、実際にはそれほど理解するのには役立ちません。理論的な部分は理解する上で重要です。

2
「結果」と「ステータス」を分けることの利点は何ですか
一般的に次の状態を経る自動化されたプロセスがあるとしましょう。スケジュール済み-開始済み-検証中-実行中-完了 その上、これらのプロセスは、エラーまたは明示的なユーザーのキャンセルにより、途中で終了する可能性があります。 私の最初の衝動は、単純にエラーを追加し、可能なステータス値のリストにキャンセルすることですが、結果をステータスから分離する(概念的な)利点について疑問に思っていました(エラーとキャンセルは完了状態とは単に異なる状態)。

5
このキャッシュ戦略に使用するデータ構造は何ですか?
私は.NET 4.0アプリケーションに取り組んでいます。これは、doubleを返す2つのdoubleに対してかなり高価な計算を実行します。この計算は、数千のアイテムのそれぞれに対して実行されます。これらの計算はTask、スレッドプールスレッドで実行されます。 いくつかの予備テストでは、同じ計算が繰り返し実行されることが示されているため、n個の結果をキャッシュしたいと思います。キャッシュがいっぱいになったら、最近使用したアイテムのうち、最も使用頻度の低いアイテムを破棄したいと思います。(編集:キャッシュがいっぱいになったときので、私は少なくとも、しばしばを実現することは、意味がないと私は1つが最も頻繁に使用されると、すぐに新しい結果が計算され、次回に置き換えられるであろうと、新たに計算されたものと結果を置き換えますキャッシュに追加されました) これを実装するために、私はDictionary<Input, double>(Input2つの入力double値を格納するミニクラスになる)を使用して、入力とキャッシュされた結果を格納することを考えていました。ただし、最後に結果がいつ使用されたかを追跡する必要もあります。このためには、キャッシュがいっぱいになったときに辞書から結果を削除するために必要な情報を格納する2番目のコレクションが必要だと思います。このリストを常にソートしておくと、パフォーマンスに悪影響が出るのではないかと心配しています。 これを行うためのより良い(つまりよりパフォーマンスの高い)方法、または私が知らない一般的なデータ構造さえありますか?ソリューションの最適性を判断するには、どのようなことをプロファイリング/測定する必要がありますか?

2
JSONのクエリ言語
非常に大きなJSONメッセージを返すサーバーがあり、クライアントアプリケーションはこの応答の一部にのみ依存しています。クライアントアプリケーションは、JSONメッセージに「xyz」プロパティが存在するかどうかを確認する必要があり、結果に応じて特定のユースケースを実行します。 この要件については、JSONメッセージ全体をオブジェクトに変換するのは少し費用がかかるため、この質問があります。 XMLのような標準のJSONクエリ言語はありますか?「はい」の場合、Javaでのこのクエリ言語の実装が最もよく知られています。 参考:サーバー側で新しいサービスを変更または追加することはオプションではありません。
11 java  json 

4
イテレーターには非破壊的な暗黙の契約がありますか?
スタックやキューなどのカスタムデータ構造を設計しているとしましょう(たとえば、論理的に同等なメソッドpushやpop破壊的なアクセサーメソッドを持つ他の任意の順序付きコレクションなど)。 IEnumerable<T>各反復でポップされたこのコレクションに対して(具体的には.NETで)イテレータを実装している場合、それはブレークIEnumerable<T>の暗黙のコントラクトですか? IEnumerable<T>この暗黙の契約を持っていますか? 例えば: public IEnumerator<T> GetEnumerator() { if (this.list.Count > 0) yield return this.Pop(); else yield break; }

2
コントローラーは、MVCパターンでビューにデータを渡す必要がありますか?
私はASP.NET MVC(およびその他のWebベースのMVC実装)を頻繁に使用しますが、これは私が確信したことのないことです。コントローラーとビューは通信する必要がありますか? もちろん、コントローラーは使用するビューを選択する必要がありますが、コントローラーがビューにデータを渡すのはどういうことですか?私の意見では、ビューがコントローラーからのデータを期待している場合、それらは(コントローラー、ビュー)のペアとして効果的に結び付けられています。代わりに、通常、ビューはモデル自体と通信し、コントローラーから独立しています。 私は正しいアプローチを持っていますか、これは誰も正しい答えがない場合ですか?Webで作業するときと他の環境で作業するときの答えは変わりますか?厳密に型指定されたビュー(ASP.NET MVCなど)の概念がある場合、答えは変わりますか?
11 architecture  mvc 

4
C ++の「インターフェース」という用語
Javaはとを明確に区別classしinterfaceます。(C#もそうだと思いますが、経験はありません)。ただし、C ++を記述するとき、クラスとインターフェイスの間に言語による強制的な区別はありません。 そのため、Javaには多重継承がないための回避策としてインターフェイスを常に見てきました。このような区別をすることは、C ++ではarbitrary意的で無意味に感じます。 私は常に「最も明白な方法で物事を書く」アプローチを採用する傾向がありました。そのため、C ++でJavaのインターフェースと呼ばれるものがある場合、例えば: class Foo { public: virtual void doStuff() = 0; ~Foo() = 0; }; そして、私Fooはおそらくほとんどの実装者が、おそらく私が書くだろういくつかの一般的な機能を共有したいと決めた。 class Foo { public: virtual void doStuff() = 0; ~Foo() {} protected: // If it needs this to do its thing: int internalHelperThing(int); // Or if it doesn't need the …

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