ソフトウェア工学

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

7
.cppファイルのみを含めるとすべてが機能するのに、なぜ.hを含める必要があるのですか?
ファイルを含めるだけで機能させることができるのに、なぜファイル.hと.cppファイルの両方を含める必要があるの.cppですか? 例:file.h包含宣言を作成し、次にfile.cpp包含定義を作成し、両方を包含しmain.cppます。 または、file.cppを含む包含宣言/定義(プロトタイプなし)を作成しmain.cppます。 両方とも私のために働く。違いがわかりません。コンパイルとリンクのプロセスに関する何らかの洞察が役立つかもしれません。
18 c++  c  headers  linking  include 

8
カスタムフィールドを持つユーザーデータベースをどのように設計しますか
この質問は、データベースをどのように設計する必要がありますか?それは、より良いソリューションになるものに応じて、リレーショナル/ nosqlデータベースにすることができます 「会社」と「ユーザー」を追跡するデータベースを含むシステムを作成する必要があるという要件があるとします。1人のユーザーは常に1つの会社にのみ属します ユーザーは1つの会社にのみ所属できます 会社は多くのユーザーを持つことができます 「会社」テーブルの設計は非常に簡単です。会社には次の属性/列があります:(簡単にしましょう) ID, COMPANY_NAME, CREATED_ON 最初のシナリオ シンプルでわかりやすい、ユーザーはすべて同じ属性を持っているため、これはリレーショナルスタイルのユーザーテーブルで簡単に実行できます。 ID, COMPANY_ID, FIRST_NAME, LAST_NAME, EMAIL, CREATED_ON 2番目のシナリオ さまざまな企業がユーザーのさまざまなプロファイル属性を保存する場合はどうなりますか。各会社には、その会社のすべてのユーザーに適用される定義済みの属性セットがあります。 例えば: 会社Aは、LIKE_MOVIE(ブール値)、LIKE_MUSIC(ブール値)を保管したいと考えています。 会社Bが保存したい:FAV_CUISINE(文字列) 会社Cは、OWN_DOG(ブール値)、DOG_COUNT(整数)を保存したい アプローチ1 ブルートフォースの方法は、ユーザーに単一のスキーマを持たせ、彼らが会社に属していない場合にnullを持たせることです: ID, COMPANY_ID, FIRST_NAME, LAST_NAME, EMAIL, LIKE_MOVIE, LIKE_MUSIC, FAV_CUISINE, OWN_DOG, DOG_COUNT, CREATED_ON 多くのNULLと、それらに関係のない列を持つユーザー行(つまり、会社Aに属するすべてのユーザーはFAV_CUISINE、OWN_DOG、DOG_COUNTのNULL値を持つ)になってしまうため、これはやや厄介です アプローチ2 2番目のアプローチは、「自由形式フィールド」を持つことです。 ID, COMPANY_ID, FIRST_NAME, LAST_NAME, EMAIL, CUSTOM_1, CUSTOM_2, CUSTOM_3, CREATED_ON カスタムフィールドとは何なのかわからないため、それ自体は厄介です。データ型は、格納されている値を反映しません(たとえば、int値をVARCHARとして格納します)。 アプローチ3 …

9
ユーザーストーリーが要件を含まず(カードに記述されている場合)、実装可能である方法
「ユーザーストーリーは要件ではなく、顧客が望むものを思い出させるだけであり、ストーリー内に要件を置くことはできません」と言われました。しかし、顧客がクレジットカードごとに異なる処理を望んでいる例を見てみましょう。テストケースを作成できるように、実装する必要のある厳密な要件があります。ユーザーストーリーにない場合、要件はどこに行くべきですか? より低い要件がない場合、開発者はストーリーからどのように開発できますか?テスターはユーザーストーリーに基づいてテストケース(詳細なケース)をどのように作成できますか?DB制約、フィールドの検証などの要件は、ユーザーストーリーの外側にありますか?

1
Gitlabワークフロー、ブランチでのコードレビューまたはマージリクエストの強制
私は、会社でGitlabをワークフロー戦略で実装することに取り組んでいます。私の考えは、開発者はリポジトリへのアクセスを許可されるが、コミットしようとするときはいつでも、コードをレビューする必要があるということです。 コミットする前にブランチを作成し、レポジトリにプッシュされた後にマージリクエストを作成できることを知っています。特定の事柄についてはまだ不明です...ブランチを作成するために人に頼ってからマージリクエストを行うという考えは間違っているように見えますが、マスターブランチがadmin」は、統合しようとしているコードを承認します。「github team workflow」を読みましたが、実行可能なソリューションを提供していないようです。プロセスまたはご自身のベストプラクティスに関するアドバイスを歓迎します。ありがとう!

1
MicrosoftがWindowsストアアプリケーションでRESWのRESXモデルを削除したのはなぜですか?
Microsoftが.NETのRESXファイルからリソース管理システムを変更することにしたのはなぜですか? RESXには便利なコード生成機能があり、開発者にリソース名の自動補完を提供し、非常に読みやすいIMHOコードを出力しました。 私の知る限り、新しいRESW形式は同じ裸のXMLファイルですが、コード生成がなく、開発者はより多くのコードを記述し、コンパイル時のエラー検出を奪います。
18 c#  .net  winrt 

6
関数型プログラミングは、問題と解決策の間の「代表的なギャップ」を増やしますか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 機械言語(例:)は、0110101000110101一般にコンピューター言語がより高度な抽象化に進化してきたため、一般的に問題に適用されたときにコードを理解しやすくします。アセンブラーはマシンコードの抽象化であり、Cはアセンブラーの抽象化などでした。 オブジェクト指向設計は、オブジェクトの観点から問題をモデル化するのに非常に優れているようです。たとえば、大学の履修登録システムの問題は、Courseクラス、Studentクラスなどでモデル化できます。 OO言語では、責任を負う同様のクラスがあり、一般に設計、特にコードのモジュール化に役立ちます。この問題をOOメソッドで解決する10の独立したチームに与えた場合、通常、10のソリューションには共通して問題に関連するクラスがあります。これらのクラスの結合と相互作用を開始し始めると、多くの違いが生じる可能性があるため、「表現のギャップがゼロ」というものはありません。 関数型プログラミングの私の経験は非常に限られています(実際の使用はなく、Hello Worldタイプのプログラムのみ)。このような言語がOO言語のようにFPソリューションを問題に(低い表現のギャップで)簡単にマッピングできるようにする方法を私は見ていません。 並行プログラミングに関するFPの利点を理解しています。しかし、私は何かを逃していますか、またはFPは表現のギャップを減らすことではありませんか? これを尋ねる別の方法:同じ現実の問題を解決する10の異なるチームのFPコードには多くの共通点がありますか? 抽象化に関するウィキペディア(コンピューターサイエンス)から(強調鉱山): 関数型プログラミング言語は一般に、ラムダ抽象化(用語を変数の関数にする)、高次関数(パラメーターは関数)、ブラケット抽象化(用語を変数の関数にする)など、関数に関連する抽象化を示します。 [一部の]実際の問題はこのような抽象化では簡単にモデル化されないため、表現のギャップは潜在的に拡大する可能性があります。 表現のギャップを減らすもう1つの方法は、ソリューション要素を問題にまでさかのぼることです。0さんと1マシンコードでSは一方で、バックトレースすることは非常に困難であるStudentクラスは、トレースバックに簡単です。すべてのOOクラスが問題空間に簡単にトレースできるわけではありませんが、多くのクラスがトレースしています。 FPの抽象化は、常に彼らが(離れてから解決されている問題空間のどの部分を見つけるために説明する必要はありません数学の問題)?OK-私はこの部分でいいです。さらに多くの例を見ると、FPの抽象化がデータ処理で表現される問題の一部に対して非常に明確であることがわかります。 関連する質問に対する受け入れられた回答UMLは、機能プログラムのモデル化に使用できますか?-「機能プログラマーは、ダイアグラムをあまり使いません」と言います。それがUMLであるかどうかは本当に気にしませんが、広く使用されているダイアグラムがない場合、FPの抽象化が簡単に理解/通信できるかどうか疑問に思います(この答えが正しいと仮定して)。繰り返しになりますが、FPの使用/理解のレベルはささいなものなので、単純なFPプログラムのダイアグラムの必要はないと理解しています。 OOデザインには、機能/クラス/パッケージレベルの抽象化があり、それぞれにカプセル化(アクセス制御、情報隠蔽)があり、複雑さの管理を容易にします。これらは、問題から解決策へと簡単に戻ることができる要素です。 多くの答えは、オブジェクト指向に類似した方法でFPで分析と設計が行われる方法について述べていますが、これまで高レベルのものを引用する人はいません(paulはいくつかの興味深いものを引用しましたが、低レベルです)。昨日はグーグルで多くのことをして、興味深い議論を見つけました。以下は、サイモン・トンプソンによるリファクタリング機能プログラムからのものです(2004)(強調の鉱山) オブジェクト指向システムの設計では、プログラミングよりも設計が優先されることは当然のことです。デザインは、EclipseなどのツールでサポートされているUMLのようなシステムを使用して作成されます。初心者のプログラマーは、BlueJのようなシステムを使用して視覚的な設計アプローチを学ぶことができます。関数型プログラミングのための同様の方法論に関する作業がFAD:Functional Analysis and Designで報告されていますが、他の作業はほとんどありません。これにはいくつかの理由があります。 既存の機能プログラムは、設計を必要としない規模です。多くの機能プログラムは小さいですが、Glasgow Haskell Compilerなどの他のプログラムはかなりのものです。 機能プログラムはアプリケーションドメインを直接モデル化するため、デザインは無関係になります。関数型言語はさまざまな強力な抽象化を提供しますが、これらが現実世界をモデル化するために必要なすべての抽象化のみを提供すると主張することは困難です。 機能プログラムは、進化する一連のプロトタイプとして構築されます。 上記で引用された博士論文では、分析と設計の方法論(ADM)を使用する利点が、パラダイムとは無関係に概説されています。しかし、ADMは実装パラダイムと整合する必要があるという主張がなされています。つまり、OOADMはOOプログラミングに最適であり、FPなどの別のパラダイムにはあまり適用されません。これは、私が表現ギャップと呼ぶものを言い換えていると思う素晴らしい引用です: どのパラダイムがソフトウェア開発に最適なサポートを提供するかについては長々と議論できますが、問題の説明から実装および配信まで単一のパラダイム内にとどまると、最も自然で効率的かつ効果的な開発パッケージを実現できます。 FADが提案する一連の図を次に示します。 実装で使用する関数を関数に提示する関数依存図。 型に同じサービスを提供する型依存図。そして、 システムのモジュールアーキテクチャのビューを表示するモジュール依存関係図。 FAD論文のセクション5.1にはケーススタディがあります。これは、フットボール(サッカー)リーグに関連するデータの生成を自動化するシステムです。要件は100%機能的です。たとえば、サッカーの結果の入力、リーグテーブルの作成、得点表、出欠表、チーム間での選手の移動、新しい結果の後のデータの更新などです。 、「新しい機能は最小限のコストで許可する必要がある」と述べることは別として、テストすることはほぼ不可能です。 悲しいことに、FADを除いて、FP用に提案されているモデリング言語(視覚)の最新の参照はありません。UMLは別のパラダイムなので、それを忘れてください。

2
「Gitユーザー向けのSVN」リソースはどこにありますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 そこで私は、会社がSVNを使用する仕事に就きました(ただし、将来Gitに移行する予定です)。問題は、SVNがわからないことです。多数のGoogleクエリを試しましたが、見つけることができるのはSVN-> Gitチュートリアル、「SVNよりGitが優れている理由」ブログ、および(一部の)比較可能なコマンドを提供する特定の「チートシート」だけです... SVNに関するO'Reillyの本を読む以外に、Gitユーザー向けのSVNへの簡単な(しかし、短すぎない)指示は何ですか?
18 git  svn 

5
同じ汎用の2つの非常に異なるファイルに同じ名前を付けるのは悪い習慣ですか?
同じ汎用の2つの非常に異なるファイルに同じ名前を付け、それらを異なるディレクトリに分けるのは悪い習慣ですか? <script src="client_scripts/app/player_stats/generator.js"></script> <script src="client_scripts/app/coach_settings/generator.js"></script> ファイル名を短くしたいと思います。両方のファイルは同一ではなく、同じ一般的な目的を持っています。これがプロのプログラミング環境で悪い習慣と見なされるかどうかはわかりません。この状況でベストプラクティスが何であるかを知りたいです。 または、名前の短い長さを犠牲にして、次を使用できます。 <script src="client_scripts/app/player_stats/player_stats_generator.js"></script> <script src="client_scripts/app/coach_settings/coach_settings_generator.js"></script>

4
関数型プログラミングの状態問題に対処する
私は主にOOPの観点からプログラミングの方法を学びました(私たちのほとんどがそうであるように)が、機能的な方法で問題を解決する方法を学ぶために多くの時間を費やしました。FPで計算上の問題を解決する方法はよく理解していますが、より複雑な問題になると、常に可変オブジェクトが必要になります。たとえば、パーティクルシミュレータを作成している場合、変更可能な位置を持つパーティクル「オブジェクト」を更新する必要があります。本質的に「ステートフル」な問題は、通常、関数型プログラミング手法を使用してどのように解決されますか?

1
自動スタッフスケジューリング機能を作成するには、どのアルゴリズムを使用する必要がありますか?
数十人のパートタイム従業員がいる小さな地元のビジネス(私の場合は犬の託児所)を想像してください。目標は、毎週のスタッフスケジュールを自動的に作成することです。私の質問は、この問題についてどのアルゴリズム的アプローチを検討するかについてです。 心に留めておくべき多くの制約があります。主に(1)スタッフの可用性と(2)各シフトのニーズ。各シフトのスタッフ数だけでなく、各シフトに必要なスキル(例えば、特定のシフト、犬の送迎を行うための運転方法を知っている人が必要な場合があります。また、犬の入浴方法を知っている人が必要な場合もあります。 他の制約としては、特定のスタッフのコンボを回避または必要とすることなどがあります-おそらく一方の人格の衝突、または他方では先輩から後輩のスタッフへの浸透によるトレーニングの必要性が原因です。 また、考慮すべき設定があります。一部のスタッフは、月曜日や木曜日などと言うよりも、2日連続で午前中を好む場合があります。実際、従業員が自分の選択を最初に受ける階層があります。 この問題を既存の解決済みのアルゴリズムに還元または表現する方法があると思います。しかし、どのアルゴリズムを探索するのかわかりません。どの既存の特定のアルゴリズムが最も有望ですか?
18 algorithms 

3
うまく機能していても、シニアや上司と一緒にプログラムを見直すのは良いことですか?
私の会社では、プロジェクトを実施する前に、上司は先輩に私や他のチームメンバーによって書かれたプログラムをレビューするように依頼します。 知識を得るには良い方法だと思いますが、プログラムがうまく機能していると、レビュー後も同じように機能しない場合があり、プログラムをもう一度調べる必要があります。 彼らは、レビューがプログラムとクエリの実行を最適化するのに役立つと言いますが、プログラムの実際の機能よりも最適化を好むことができますか?

1
Scala関数をJava 8メソッドに渡す
次のScalaコードは機能し、関数を必要とするJavaメソッドに渡すことができます。これを行うよりクリーンな方法はありますか?これが私の最初のパスです。 val plusOne = new java.util.function.Function[Int,Int] { override def apply(t:Int):Int = t + 1 override def andThen[V](after:function.Function[_ >: Int, _ <: V]): function.Function[Int, V] = ??? override def compose[V](before:function.Function[_ >: V, _ <: Int]): function.Function[V, Int] = ??? } 2番目のパスは次のとおりです。Java-8Functionインターフェイスの汎用ラッパーを使用して、Scalaの構文を簡素化します。 // Note: Function1 is Scala's functional interface, // Function (without …

2
依存性注入を使用して構成を管理するにはどうすればよいですか?
私はDI / IOCの大ファンです。ハードな依存関係の処理/抽象化に最適であり、作業が少し楽になります。 しかし、私はそれについて少し不満があり、それを解決する方法がわかりません。 DI / IOCの基本的な考え方は、オブジェクトがインスタンス化されると、その依存関係はすべてコンストラクター内で事前に入力されるということです。 ただし、IMHOには、コンストラクター用のパラメーターのタイプがいくつかあります(特にオブジェクトが不変の場合)。 依存関係(オブジェクトが機能するために必要なオブジェクト) 構成(作業を行うために必要な環境に関する情報) パラメーター(作業が行われるデータ) IOCは依存関係でうまく機能することがわかりました。しかし、私はまだ他の2つに対処する最善の方法を考えています。ただし、コンストラクターはIOCコンテナーによって実行されるように実行されるため、これらのアイテムをIOCコンテナーに配置する必要があるようです。 人々が採用している戦略/パターンと、人々が発見した利点と欠点を知りたい。 NB。これは非常に主観的な質問であることを認識しており、SEガイドラインに従って「良い」主観的な質問にしようとしました。

4
通常、文字列リソースがコード内ではなくコードの外部に保持されるのはなぜですか?
一般に、多くのプラットフォームでは、文字列リソースを.resxまたは.xmlファイルに書き込み、プラットフォームに依存するアプローチを使用してそれらを取得しています。 つまり、iOSでは、を介してNSBundle.MainBundle、Context.ResourcesAndroidで使用して取得しています。 このアプローチの利点は何ですか?また、コードで直接アクセスできない理由は次のとおりです: クロスプラットフォームプロジェクトでは、どのプラットフォームでも統合せずに直接アクセスできます。 構築中、リソースが適切に構築されたかどうかについての懸念はありません。 コーダーは、多言語処理などの機能を使用できます 要するに、文字列リソースがそのように構成されている理由は何ですか? [編集] 私のファイルが他のプロジェクト間で共有される「コア」プロジェクトの一部であるとしましょう。(PCL、クロスプラットフォームプロジェクトのファイル構造について考えてください。) そして、私のファイルは.resx / .xmlファイルとまったく同じで、次のようになっていると仮定します(私はxmlのプロではありません、ごめんなさい!):パラメーターParamètres したがって、これは基本的にカスタムxmlであり、適切な文字列を取得するためにキー/言語をポイントします。 ファイルは、アプリケーション内にアクセス可能なファイルを追加するのと同じようにアプリケーションの一部になり、PCLを使用してコーディングされた文字列リソースにアクセスするシステムになります。これにより、アプリケーションにオーバーヘッドが追加されますか?

6
スクラムをボランティア設定にどのように適合させることができますか?
私は最近、まだ自分自身をセットアップしている若いハッカースペースに参加しました。幸いなことに、このスペースには作業が必要な内部プロジェクトがいくつかあり、作業を行うボランティアが不足していません。 これらのプロジェクトを整理する方法についていくつかの議論がありました。私の最近の専門的な経験はスクラムであったため、ソフトウェアプロジェクトにスクラムアプローチを提案することを検討していますが、それが適切かどうかはわかりません。 スクラムはフルタイムの小規模なチームでうまく機能しますが、この組織の性質は異なります。 メンバーはボランティアです。一部はフルタイムの学生です。他の仕事はフルタイムで仕事をしています。実際の生活が優先されるため、誰からも一定レベルの貢献は期待できません。 ほとんどすべての人がソフトウェアを作成する長年の経験を持っていますが、専門家やチームでこれほど多くのメンバーはそうしていません。 プロダクトオーナーはいません。これらのプロジェクトの要件は、委員会によって決定されます。この委員会のメンバーも実装に取り​​組んでいます。つまり、専任の専任のプロダクトオーナーはいません。 期限はありません(ソフトまたはハード)。プロジェクトは完了すると完了します。 これらはかなり重要な違いですが、私は彼らがスクラムを適用するためのブロッカーになるとは確信していません。ちょっとした微調整でこのハードルを克服できると思います。 スプリントを固定してストーリーポイントサイズを固定するが、継続時間(時間)が流動的である場合、ボランティア開発者に非現実的な配信のプレッシャーをかけることなく、繰り返しのリリースから利益を得ることができます。 バーンダウンチャートと速度計算を捨てることができます。私が正しく理解していれば、これらは開発チームと経営陣の間の橋渡しとして機能するツールと指標です。開発者と利害関係者の両方にとって意味のある形式で進捗状況を報告するのに役立ちます。報告する人がいない(プロジェクトマネージャー、プロダクトオーナー、外部関係者がいない)ことを考えると、これを完全に削除できると思います。 微調整を必要としないメリットがあると思います。 要件収集会議(複数可)。全員がテーブルの周りに座って、ユーザーストーリーについて議論し、UIモックをスケッチし、製品バックログを作成します。 スプリントの回顧展。これは、ボランティアチームとして機能する開発プロセスに集中するための興味深い方法です。 よくわからないこと: 毎日のスタンドアップはどのように扱われるべきですか?私たちの環境では、彼らは非常に価値があるのでしょうか。スタンドアップ式の儀式についての私の理解は、チーム全体に自然に情報を広めることでコミュニケーションを支援することです。私たちのスプリントはおそらく平均的なスプリントよりもはるかに少ない複雑さを提供する可能性があるという事実を考慮すると、他のすべてのチームメンバーの進捗状況/開発に遅れをとる必要が少なくなる可能性があります。 継続的インテグレーション、コードレビュー、TDDなどのXPを推進すべきですか?私はこれが多くを求めているのではないかと心配しています。人々がスクラムに精通し、チームとして働くようになれば、将来のプロジェクトでこれらの概念を取り入れたいと思うでしょう。 私の質問: スクラムはボランティアベースの環境に適応できますか? そして、私の計画したアプローチはこれまで正しい方向に向かっていますか?

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