ソフトウェア工学

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

4
ドキュメントはユーザーストーリーですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 過去数回のスプリントで取り組んできた製品のユーザーマニュアルを作成する必要があります。現在、私たちは次のスプリントで新しいプロジェクトを開始しており、POは以前に作成された製品のドキュメントをこのスプリントのユーザーストーリーにしています。 このアプローチについてのあなたの意見を知りたいだけです。個人的には、ドキュメントはコードを生成しないため、スクラム内のユーザーストーリーであることに同意しません。 編集:ご意見ありがとうございます。私は頭の後ろで、スプリントが作業ソフトウェアの増分を実装することであると思っていましたが、あなたの意見は私の見通しを変えました。答えてくれてありがとう。
13 scrum  user-story 

5
ケベック州では、内部ログを含むすべての出力をフランス語にする必要がありますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 マイクロソフトのアーキテクトが、ケベックでは、フランス語を話さない、またはケベック語である他の国のサービス技術者が使用するカスタムログ出力を含めて、プログラム出力はフランス語でなければならないと言うのを聞いたことがあります。 どうやら、それはビル101 条5にあります。あなたは、ドキュメントを読んでいる場合、正しく(感謝マチュー)を、第5条に言います 5.商品およびサービスの消費者には、フランス語で情報を提供し、サービスを受ける権利があります。 1977、c。5、s。5。 マイクロソフトの技術者の言うことは正しいですか? これは、プログラムからのすべての出力に影響しますか、それともフランス語を話す視聴者向けの出力だけに影響しますか(たとえば、この場合のログは適用されません)。 それは政府機関(彼らのために行われた契約作業を含む)のみを対象としていますか、それとも私的使用と販売にも影響しますか?
13 law 

2
GitHubでプロジェクトのバージョンを制御するにはどうすればよいですか
今日、GitHubでできる限り多くの時間を費やして(実際に仕事をしているチームの唯一の人でも)、実際の企業アプリケーションにどのようになるかを実際に感じています。 私が持っている1つの質問は、バージョンを制御することです。プロジェクトを始めたとしましょう。次に、チームメンバーはいくつかのブランチを作成し、そこで開発しました。本番の準備ができたら、すべてのブランチをmasterブランチにマージしました。最後に、versionでライブを開始し1.0ます。 現在、そのバージョン1.0は公開されており、そのバージョンのソフトウェアに関していくつかの問題が報告されています。1.1プロジェクトを急いで導入した問題を修正するために、バージョンの開発を開始したいと思います。 さて、質問はこれです: ここでバージョニングをどのように制御する必要がありますか? 新しいブランチを作成し、そこにソフトウェアv1.0のバージョン1.0を保持し、いくつかのブランチで開発する(またはしない)場合、それらをマージしmaster、バージョンを公開する必要があり1.1ますか? そのような状況に慣習はありますか?

3
インスタンス、ローカル変数、パラメータ変数の命名規則[非公開]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 私はプロジェクト(主にJava / JEEプロジェクト)に適用するために、シニア開発者のコ​​ーディング規約と話し合っていました。私は彼が提案した一つのコンベンションに反対しました: インスタンス変数名は「_」で始まり、ローカル変数は「loc」で、メソッドパラメーターは「par」で始まる必要があるため、変数の起点とスコープを簡単に識別できます。 彼は短期記憶と読みやすさについて議論を進めましたが、読みやすさをむしろ低下させるという事実、EclipseのようなIDEは変数をその型によって異なるようにフォーマットするという事実に異議を唱え、この問題は適切なクラスとメソッドの設計で回避されるでしょう。 私の主張を支持する(または反対する)意見、議論、研究はありますか?
13 java  naming  variables 

2
区切り文字としてのカンマと区切り文字としてのカンマ
で、このビデオ、スピーカーは言います: 「コンマの仕組みについて混乱する人もいます。コンマは区切り文字ではなく区切り文字とすべきだと考えています。どちらの方法でも考えることができます。」 区切り記号と区切り記号(ある場合)の違いがわかりません。ビデオの含意は、現在(末尾のコンマが有効である)、区切り記号ではなく区切り記号と考えることができるということです... ところで問題の言語はJavaScriptです。私の理解では、コンマトークンには2つの意味があります。 演算子として(めったに使用されません) セパレーターとして(引数およびパラメーターリスト、配列およびオブジェクトリテラルなど) コンマ区切り文字がこれにどのように収まるのかわかりません...
13 javascript 

2
Memcachedの使用:データベースを更新するときにキャッシュを更新することをお勧めしますか?
この質問は、アーキテクチャのベストプラクティスに関するものです。 現在のアーキテクチャ ユーザー情報のためにMySQLにアクセスするPHPクラスがあります。それを呼び出しましょうUser。 Userに何度もアクセスされるため、負荷を軽減するためにキャッシュのレイヤーを実装しました。 最初のレイヤーは、「リクエストごと」キャッシュと呼ばれるものです。MySQLからデータを取得した後、データをのプライベートプロパティに保存しますUser。データに対する後続のリクエストは、MySQLからデータを再リクエストする代わりにプロパティを返します。 Webリクエストはリクエストごとに存続および終了するため、このキャッシュは、アプリケーションが1回のリクエストでMySQLに複数回アクセスすることを防ぎます。 2番目のレイヤーはMemcachedです。プライベートプロパティが空の場合、最初にMemcachedでデータを確認します。Memcachedが空の場合、MySQLにデータを照会してMemcachedを更新し、のプライベートプロパティを更新しますUser。 質問 私たちのアプリケーションはゲームであり、いくつかのデータが可能な限り最新であることが不可欠な場合があります。約5分間で、ユーザーデータの読み取り要求が10回または11回発生する場合があります。その後、更新が行われる場合があります。後続の読み取り要求は最新である必要があります。そうしないと、ゲームの仕組みが失敗します。 そのため、データベースの更新が発生したときに実行されるコードを実装しました。このコードは、更新されたデータを使用してMemcachedのキーを設定するため、Memcachedへの後続のリクエストはすべて最新です。 これは最適ですか?このような「リビングキャッシュ」のようなものを維持しようとするとき、パフォーマンスの問題やその他の「注意点」を知っておく必要がありますか?

4
社内環境とソフトウェア開発環境[非公開]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 業界では、ソフトウェア開発者が会社自身が使用するコードを書いている「社内開発」環境と、ソフトウェアが販売/配布されるように構築されている適切な「ソフトウェア開発」環境との間で区別があります。一般に。 とりわけ、両者の明らかな違いの1つは、ソフトウェア開発志向の企業は通常、仕様作成、テスト、構築などのソフトウェア開発ライフサイクルを順守するのに対し、社内志向のショップは通常、彼ら自身がエンドユーザーであり、正しく行われなかった何かを常に修正できるため、よりカジュアルな方法で物事を行います。 学生として(他のほとんどの学生と同じように)、ソフトウェア開発環境で仕事をすることを期待していましたが、社内のやり方で運営する会社で最初の地位を得ました。 時には、本格的なソフトウェア開発の経験を逃していないのではないかと思います。この気持ちの根拠はありますか?適切なソフトウェア開発環境に参加しようとする必要がありますか?

6
SVNの使用が不十分-Mercurialが答えですか?
職場ではSVNを使用していますが、名前のみです。分岐もマージもしません。リポジトリの2つのコピーを保持します。1つは展開の際にコピーされ、バグ修正のために保持される「タグ」ブランチとして機能します。一方のコピーで行われた変更をもう一方のコピー(「トランク」)にコピーすることを忘れないでください。リポジトリ内の単一のフォルダー内に、プロジェクトを分割するのではなく、12個のプロジェクトがあります。要するに、SVNを使用するのはコミットできることだけです。他のすべては手動で行われます。 Mercurialを評価しています。私は過去にGitを使用しました(DVCSを使用したのはチームで1人だけです)。Mercurialをすぐに使用しています。ブランチは簡単で、マージははるかに簡単で、ローカルに心のこもった内容をコミットして中央にプッシュするだけなので、物事を行う「より良い方法」としてMercurialをチームの他のメンバーに紹介することを議論しています準備ができたら分岐します。SVNのすべての利点が得られます(そして、SVNを本当に理解していないので、今のところ多くの利点が得られません)。また、新しい機能については、バージョン管理されていないファイルがたくさんあります。失敗した。ワークフローは少し単純に思えます-「コミット」はローカルであり、「プッシュ」はSVNのコミットに似ていることを覚えておく必要があります。 これは取るべき良いアプローチですか?チームは非常に柔軟であり、仕事の質を向上させ、物事を簡単にする方法を提供することを心に留めておいてください。CIOは、SVNを使用していない可能性について述べたときに私に尋ねましたより良いものがありますか?」彼も一緒に乗っています。

4
CPUキャッシュ(C)を最適化する際に重要なことは何ですか?
これら 2つの質問を読んで、メモリ内の大量のデータを扱う場合、CPUキャッシュの動作を理解することが重要になることがわかります。最適化ツールボックスに別のツールを追加するためのキャッシュの仕組みを理解したいと思います。 CPUキャッシュがうまく機能するように、キャッシュを賢明に使用するコードを書くことができる中核となる点は何ですか?これに関連して、コードのプロファイルを作成して、キャッシュの使用が悪いために速度が低下していないかどうかを確認する方法はありますか?

2
デプロイスクリプトはビルドのアーティファクトである必要がありますか?
これはJavaで書かれたWebプロジェクトです。 それで、ビルドとデプロイのスクリプトを書いています。ビルドを作成するために、antを使用しました。継続的なビルドはJenkinsで行われます。 ビルドは3つの異なる成果物を生成します。 戦争ファイル レイアウト付きのzip 画像を含むzip これまでのところ、これでいいのですが、今度はdeployスクリプトを記述する必要があります。 サーバー1で実行されているTomcatに戦争(アーティファクト1)をデプロイします サーバー1のアーティファクト2を特定のディレクトリに配置します サーバー2のアーティファクト3を特定のディレクトリに配置します そこで同僚と話していて、正しいサーバーに配置したときにこれらのアーティファクトをデプロイするアーティファクト(多分deploy.xml)も生成する必要があると彼は言いました。 したがって、別のスクリプトがあります。 ジェンキンスのアーティファクトをダウンロードする 各サーバーにscpし、そこにdeploy.xmlを配置します deploy.xmlをリモートで呼び出す 私を少し不快にしているのは、build.xmlをビルドアーティファクトとして持つ行為です。この背後にある動機は、VCSリポジトリにアクセスする必要なしにデプロイできるため、ビルドは自己完結型になります。つまり、すべてのビルドはJenkinsによって生成されたものでのみ本番稼働できます。 配置スクリプトはどこに配置する必要がありますか?それらはVCSにのみあるべきですか、それともビルドアーティファクトであるべきですか?

3
ドメインドリブンデザインのドメインオブジェクトは書き込み専用である必要がありますか?
私はほぼ2年間ドメインドリブンデザインについて読んでおり、日々の仕事にいくつかの概念を慎重に導入するか、少なくともドメインドリブンデザイン内で定期的に行うことができる方法の計画を立てています。 特に、ドメインオブジェクトは書き込み目的にのみ使用されることを意図しているイベントソーシングとコマンドクエリの責任分離(CQRS)についての詳細を読んで、私が始めた結論の1つです。より明確にするために、私が読んだドキュメントの多くで人々が微妙に示唆していることは、ドメインオブジェクトがドメイン中心の操作/計算、検証を行う責任があること、そして主に永続化への道を提供するためにそこにあることを示唆しているようですリポジトリ実装内で提供されるインフラストラクチャ。状態を公開する責任を排除するため、これによりドメインモデルが大幅に簡素化される可能性があるという事実は気に入っていますが。 ドメインオブジェクトが主に書き込み専用オブジェクトとして使用されることが実際に正しい場合は、誰かに答えられることを望んでいるという疑問が生じます。 セッターを持つオブジェクト、またはオブジェクトの状態を変更するがC#のプロパティゲッターなどから状態を読み取る外部へのパブリックインターフェイスを提供しないメソッドで単体テストを実行するにはどうすればよいですか?そのオブジェクトをテスト可能にするためだけに状態を公開しても大丈夫ですか? ドメイン内で行われた計算または操作の結果を、それらを永続化せずにユーザーに表示し、ドメインのコンテキスト外の永続化ストアから結果をプルするにはどうすればよいですか?結果を表示するためだけに状態を公開しても大丈夫ですか? 唯一のプロパティゲッター(getアクセサー)はドメインでも書き込み可能なものでなければならないという経験則ですか?または、読み取り専用プロパティは読み取り専用であり、実際のドメインモデルで必要な役割を果たさないため、読み取り専用プロパティは避けるべき唯一のものであると言いますか? 関連資料: TDD、DDD、およびカプセル化

7
エンジニアでなくても「ソフトウェアエンジニア」の仕事に応募できますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 私は、「エンジニア」または「エンジニアリング」という言葉の使用が法律で厳密に規制されている国から来ました。つまり、エンジニアリングの学位を取得し、エンジニアの専門家協会に参加してタイトルを使用するには試験に合格する必要があります。世界的に業界で使用されている「ソフトウェアエンジニア」という用語について少し混乱しています。 ソフトウェアエンジニアに関するウィキペディアのページと、用語の使用に関するページのリンクされたセクションを読み、詳細な議論を提供します。しかし、私の質問はなんとなく具体的​​です。 私が工学の学位を持っていないことを知っている(まだ、機能的で適切に設計されたソフトウェアを生産していると思うのが好きです!) ?工学の学位を取得していないことを何らかの形で強調する必要がありますか?

4
マルチテナントシステムの拡張性をどのように管理しますか?
現在、いくつかの大きなWebベースのマルチテナント製品がありますが、すぐにテナント固有のカスタマイズが多数行われることがわかります。 あちこちの余分なフィールド、おそらく余分なページ、またはワークフローの途中の追加のロジック-そのようなこと。 これらのカスタマイズの一部は、コア製品に組み込むことができ、それは素晴らしいことです。それらのいくつかは非常に具体的であり、他の人の邪魔になります。 これを管理するためのいくつかのアイデアを念頭に置いていますが、どれもうまく拡張できないようです。明らかな解決策は、クライアントレベルの設定を多数導入し、クライアントごとにさまざまな「機能」を有効にすることです。それの欠点は、もちろん、非常に複雑で混乱していることです。本当に膨大な数の設定を導入でき、時間の経過とともにさまざまなタイプのロジック(プレゼンテーション、ビジネス)が手に負えなくなる可能性があります。次に、クライアント固有のフィールドの問題があります。これは、既存のテーブルに多数のNULL可能フィールドを追加するだけでなく、よりクリーンなものを要求します。 では、これを管理するために人々は何をしているのでしょうか?Force.comは拡張性のマスターのようです。明らかに、彼らは一からプラットフォームを作成し、それは超拡張可能です。WebベースのUIを使用して、ほぼすべてに追加できます。FogBugzは、実際にForceに触発された可能性のある堅牢なプラグインモデルを作成するのと似たようなことをしました。私は彼らがそれに多くの時間とお金を費やしたことを知っています。もし私が間違っていなければ、意図は将来の製品開発のために実際に内部で使用することでした。 構築したいと思われるかもしれませんが、おそらくそうすべきではないようです。:) プラガブルアーキテクチャへの大規模な投資が唯一の方法ですか?これらの問題をどのように管理し、どのような結果を目にしていますか? 編集: FogBugzはかなり堅牢なプラットフォームを構築し、それを使用して画面をまとめることで問題を処理したかのように見えます。それを拡張するには、ISearchScreenGridColumnなどのインターフェイスを実装するクラスを含むDLLを作成し、それがモジュールになります。多数の開発者がいて、数か月間作業したことを考えると、構築するのに莫大な費用がかかったと確信しています。さらに、その表面積はおそらく私のアプリケーションのサイズの5%です。 現在、Force.comがこれを処理する正しい方法かどうかを真剣に考えています。そして、私はハードコアASP.Netの男なので、これは自分自身を見つけるのに奇妙な立場です。

5
フリーソフトウェアの免責事項は本当に必要ですか?
無料でダウンロードして使用できるソフトウェアをWebサイトに公開した場合でも、免責事項は必要ですか?つまり、私は何も売っていませんし、契約もありません。だから暗黙の保証が必要なのはなぜですか? (これはなぜMITライセンスのようなものに免責事項があるのか​​不思議に思う。) 編集:私は米国市民ではありません。可能な限り一般的かつ必要に応じて具体的な回答を探しています。
13 licensing  legal 

3
std :: stringのc_str()にはどのようなパフォーマンスが期待できますか?常に一定の時間ですか?
私は最近、いくつかの必要な最適化を行ってきました。私がやっていることの1つは、ostringstreams-> sprintfsを変更することです。私はたくさんのstd :: stringsをacスタイルの配列、alaにスプリントしています char foo[500]; sprintf(foo, "%s+%s", str1.c_str(), str2.c_str()); Microsoftのstd :: string :: c_str()実装は一定の時間で実行されることがわかりました(内部ポインターを返すだけです)。と思われるのlibstdc ++が同じことを行います。stdはc_strを保証しませんが、これを行う別の方法を想像するのは難しいと思います。たとえば、メモリにコピーした場合、バッファにメモリを割り当てる必要があります(呼び出し元に任せて破棄します-STLコントラクトの一部ではありません)または、内部staticにコピーする必要がありますバッファ(おそらくスレッドセーフではないため、その寿命については保証されません)。したがって、内部的に維持されているヌル終了文字列へのポインタを単に返すことが唯一の現実的な解決策のようです。

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