ソフトウェア工学

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

3
それを可能にする言語で関数をネストする必要がありますか、それを避けるべきですか?
JavaScript、PL / SQL、および他のいくつかの言語では、関数をネストできます。つまり、別の関数内で宣言できます。これは、大きな機能を小さな部分に分割するために使用できますが、それらの部分を大きな機能のコンテキスト内に保持します。 function doTooMuch() { function doSomething () { ... } function doSomethingElse() { ... } function doYetAnotherThing() { ... } // doTooMuch body doSomething(); doSomethingElse(); doYetAnotherThing(); } 場合によっては、これらの小さい関数が大きい関数のローカル変数を使用しない場合、これはすべての関数がネストされていないバージョンに簡単に変更できます。 function doSomething () { ... } function doSomethingElse() { ... } function doYetAnotherThing() { ... } function doTooMuch() { doSomething(); …

6
印刷の使用法/ヘルプ(--help)のベストプラクティスと考えられるものは何ですか?
UNIXのCLI用のツールを作成する場合、プログラムにヘルプや使用法を出力するにはどうすればよいですか? 私は通常を使用しますがfprintf(stderr, "help text here");、それにはいくつかの問題があります。 まず、を使用すべきかどうかはわかりませんstderr。大丈夫ですか、それとも使用すべきstdoutですか? ご想像のとおり、ヘルプテキストは非常に長く、ツールのオプションの数によって異なります。今、私は通常、"strings like that\n"2番目のパラメータにいくつかを入れます。ただし、これにより、ソースコードが50行以上のヘルプテキストで埋められます。簡単に管理できるものではありません。代わりに何をすべきですか? ツールがCまたはCに似た言語で記述されていない場合、可能であればhere-docsを使用する傾向があります(最も顕著なのはPerlです)。私はCでそれを使用できませんが、私が使用できるようなものがありますか? 私はそれを入れて検討していたheaderfile.hの内側には#define HELP "help text here"、私は野生の中でそれを見たことがない、私は実際にそれを使用する必要があるかどうかわかりません。 理想的には、テキストを外部ファイルに入れて含めることができます。#includeただし、そのために使用するのは間違っているようです。どうすればいいですか? アイデアは、ヘルプテキストを用意して、簡単に管理できるようにすることです。ソースコード内に配置することは、あまり便利ではありません。

4
データアクセスレイヤー内のビジネスオブジェクト
そのため、TDDを介してデータアクセスレイヤーを作成してきましたが、やや懸念がありました。私はむしろ間違った道を進んで行きたくないので、私の考えがきれいなアーキテクチャに沿っているかどうかを確認するように皆さんにお願いしたいと思いました。 私のデータアクセスレイヤー(略してDAL)内のメソッドは非常に単純です。これらはデータベース内のストアドプロシージャと一致しており(これを呼び出して物事をきれいにする方法はありません)、プロシージャと同じパラメータが含まれています。次に、データベースに接続し、クエリ結果を返します。次に例を示します。 public int DeleteRecord(int recordId) { recordId.RequireThat("recordId").NotZeroOrLess(); List<SqlParameter> parameters = new List<SqlParameter>(); parameters.Add(new SqlParameter { ParameterName = "@RecordId", SqlDbType = SqlDbType.Int, Direction = ParameterDirection.Input, Value = recordId}); return this.ExecuteNonQuery("DeleteRecord", parameters.ToArray()); } 私は結果セットで何も意味のあることをしていないので、これはこのタイプのメソッドには完全に機能します。コマンドが機能したことを確認したいだけなので、非クエリの結果、つまり影響を受けた行だけを返し、その番号を使用してロジックを検証できます。 ただし、別のDALメソッドで、レコードをロードしたいとします。マイロード手順が実行されようとしているselectsテーブルの束と戻っに対してDataSet、私はビジネスを作成する必要があり、私のDALは使用方法内のオブジェクトかどうかと戦っていますDataSet、または私のビジネスオブジェクトの場合自身がちょうど持っている必要がありますLoad()取得するメソッドをDataSetDALから、そして基本的にそれ自身を埋めます。 DALを介してそれを行うと、Business Objectsのロジックが少なくなります(これは単なる選択ロジックですが、それでもロジックです)が、DALを少し混雑させて、本当にすべきでないことをしているように感じさせますやってる 皆さんはどう思いますか?

7
アジャイルのバージョンが機能していません。チップ?
私は4人の開発者から成る小さなチームで働いています。私たちは、毎週同じ問題を継続的に提供していると思われるアジャイルのバージョンを実装しています。プロセスの改善に役立つ提案を探しています。 背景: 通常、2週間のスプリントを行いますが、各スプリントは作業を過小評価する傾向があり、スケジュールが遅れているため、マネージャーとトラブルを起こします。 私たちは、マネージャーが私たちのために作成したストーリーをタスクアウトすることで、各スプリントを開始します。時々彼もタスクを投入し、それらを推定します。ストーリーポイントは使用しません。ソフトウェアUrban Turtleを使用して、「スプリントを管理」します。これは、基本的に単なるストーリーとタスクであり、関連するバーンダウンです。スプリントの終わりにリリースする予定はありません。 発生する最も一般的な問題は、スプリントの開始時にタスクを計画することです。これは、スコープがはるかに大きいが優先度が高いことを発見するためだけであるため、さらに時間をかける必要があります。2番目に一般的な問題は、私たちの1人が技術的な問題に遭遇し、それが燃焼時間を遅らせ、障害を引き起こすことです。 私たちに提供された唯一の提案は、午前中のスタンドアップ中に予測を調整し、更新を提供することにより積極的になり、必要な余分な時間に調整できるようにすることです。 しかし、私たちが物事をしている方法には根本的に間違った何かがあるようです。おそらく、プロジェクトレベルでのマネージャーの期待とスプリントレベルでの期待との間には断絶があるでしょう。プロジェクト計画に従ってこれらのスプリントの反復を行っているため、スプリントを延長したりアイテムを延期したりすると、プロジェクト計画が台無しになります。そのため、開発者として、必要に応じて見積もりを延長することでアジャイルを実行することをお勧めしますが、スプリントを時間通りに完了させることは混乱を招きます。 これはめったにない問題ではないので、スプリントごとにこの同じ問題にぶつかるのをやめる方法について、提案が1つまたは2つあるよりも賢明なことを望んでいます。イライラします。
12 agile 

2
複数のチームのGitワークフロー
Gitの使用を開始し(まだ使用していない)、ワークフローを定義します。 4つの異なるグローバルロケーションに4つのチームがあり、同じ製品を一緒に開発しています。各チームは製品のコードの一部を所有していますが、他のチームが所有するコードを変更する必要がある場合もあります。 そのような環境のGitワークフローに推奨事項はありますか? 私はすでにこの記事を見てきましたが、ここでのアプローチは「できるだけまれに追加のブランチを作成する」ことであり、「ユーザーストーリーごとのブランチ」アプローチをより重視しています。 また、この記事は素晴らしいアプローチを提示します。 マスターブランチ、定期的にマスターにマージされる各チームごとの永続的なブランチ、およびチームのブランチにマージされるユーザーストーリーごとのブランチを念頭に置いていました。それは理にかなっていますか、それともうまくいきませんか?

4
なぜヘッダーファイルを記述する必要があるのですか?
気味の悪いコメントを出す前に、私は知っています-これはヌービーな質問です。Cベースの言語を使用するのは初めてです。 私は、モバイル開発に関するコンピューターサイエンスコースのObjective Cを学んでいる学部生です。アカデミックな環境では、小規模なプロジェクトを構築したり、小規模なチームで作業したりするため、多くの現実世界の考慮事項は必要ありません。 しかし、私たちの教授は、.m実装ファイルごとに.hヘッダーファイルを要求し、XCodeがサポートします。私には、それは一種の忙しい仕事のように思えます。すべてのメソッドシグネチャとインスタンス変数を他のファイルにコピーする必要があります。1つのファイルを変更する場合、それが他のファイルと一貫していることを確認する必要があります。そのような小さな煩わしさの束のように思えます。 しかし、私はがなければならない知っているいくつかのヘッダファイルの実際の使用。素晴らしい答えは両方に対処します: 実装ファイルが適していないのに役立つヘッダーファイルとは何ですか?その目的は何ですか? プログラマーとしてヘッダーファイルを手動で記述する必要があるのはなぜですか?簡単に自動生成できるようです。 前もって感謝します!

3
OO Cのパブリック関数とプライベート関数の一般的な命名規則は何ですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 短い質問 OO Cプロジェクトの「パブリック」メンバーと「プライベート」メンバーに名前を付ける一般的な方法はありますか? 背景 私は、パブリックおよびプライベートメンバーがC言語に実際に存在しないことを完全に理解しています。ただし、ほとんどのCプログラマーと同様に、OO設計を維持するためにメンバーをパブリックまたはプライベートとして扱います。典型的なオブジェクト指向の方法に加えて、私は私がされている方法を区別することが容易になり、パターン(以下の例を参照)、以下の私の自己を発見したもので、より少ないチェックを有することができるプライベートメンバー対外の世界のために/より効率的などです...そのようなことに対して標準またはベストプラクティスが存在するか、またはこれにアプローチするための良い方法は私の例ですか? ヘッダーの例 #ifndef _MODULE_X_H_ #define _MODULE_X_H_ bool MOD_X_get_variable_x(void); void MOD_X_set_variable_x(bool); #endif /* _MODULE_X_H_ */ サンプルソース // Module Identifier: MOD_X #include "module_x.h" // Private prototypes static void mod_x_do_something_cool(void); static void mod_x_do_something_else_cool(void); // Private Variables static bool var_x; // Public Functions - Note the upper …

5
RSpecとCucumberは本当に価値がありますか?
私はほとんどのRoRプログラマーがテスト中毒者であり、大規模なテストスイートの利点を理解していますが、テストを開始したとき、そのような大規模なスイートを取得することはなく、「正しい方法でテストしていますか?本当に効率的ですか?」多くの場合、アプリケーションの動作のみをテストする統合テストを扱っています。 まず、テストする価値は本当にありますか?つまり、テストの作成に費やした時間は本当に価値があるのでしょうか? 次に、RSpecを使用し、最近Cucumberを発見し、しばらく使用しましたが、これらすべての手順を書くことが本当に面倒な価値があるかどうかわかりませんか?私はステップを再利用できることは知っていますが、これらのステップが完了しすぎているかどうかはわかりません:たとえば、aを使用していますが、作成した場合にユーザーを複製する可能性があるためGiven I am logged in as (.+)、その定義で言う必要があるかどうかはわかりませんGiven there's a user called $1しかし、それは常に一歩前にある価値はありませんGiven I am logged in as (.+)。非常に多くのコードであり、おそらくほとんど役に立たないでしょう。毎日テストされた部品に新しいバグはないのではないかと思います...それで、CucumberはRSpecと比較して本当に価値がありますか?

2
従来のプレーンなCプロジェクトへの単体テストの追加
タイトルはそれをすべて言います。私の会社は、完全にプレーンCで記述されたマイクロコントローラーデバイス用のレガシーファームウェアプロジェクトを再利用しています。 明らかに間違っており、変更が必要な部分があります。C#/ TDDのバックグラウンドから来たので、機能を変更しないことを保証するためのテストなしでランダムにリファクタリングするというアイデアは好きではありません。また、バグを見つけるのが難しいことは、わずかな変更(多くの場合、回帰テストを使用した場合に修正されると思います)によって導入されたことがわかりました。これらの間違いを避けるために、多くの注意を払う必要があります。コードの周りの多くのグローバルを追跡するのは難しいです。 要約する: リファクタリングする前に、既存の密結合コードに単体テストをどのように追加しますか? どのツールをお勧めしますか?(それほど重要ではありませんが、知っておくといいです) 私はこのコードの作成には直接関与していません(私の責任はさまざまな方法でデバイスと対話するアプリです)が、使用できる可能性がある場合、良いプログラミングの原則が残されていると悪いでしょう。

3
OOPのクラス設計にどのように取り組みますか?
オブジェクト指向ソリューションを設計しようとすると、通常、CRCモデリングを使用して、クラス名(名詞)、それらが行うこと(動詞)、および他のクラスとのコラボレーション方法をリストします。 このブログには、この名詞動詞のアプローチについて以下のことを述べています ...This approach, which I will call “noun and verb,” is so limited I’ll dare to call it brain damaged.... 私の質問は、オブジェクト指向アプローチを使用するためのより良いモデリング手法が存在するかどうかです。

11
自分の時間で作ったプログラムの著作権を所有していますか?[閉まっている]
この質問が将来の訪問者に役立つことはまずありません。それは、小さな地理的領域、特定の瞬間、またはインターネットの世界的な視聴者には一般に適用できない非常に狭い状況にのみ関連します。この質問の適用範囲を広げるには、ヘルプセンターをご覧ください。 8年前に閉鎖されました。 電気技術者が現場で使用される一般的な計算(特定の変電所)を支援するソフトウェアパッケージを作成しました。私はパッケージを自分の時間に作成しました。質問もガイダンスもなしに。このパッケージは現在、社内で広く使用されており、全国に配布する予定です。 著作権を所有していますか?私の契約では、生産された仕事はすべて自分のものであると述べていますが、これは仕事の範囲外であり、私の「仕事の範囲」の範囲外でした。私の会社は主に土木建設会社であり、プログラムの作成に影響はありませんでした。 コメントから:これは、「サービスの過程で、サービスの過程で、またはサービスに関連して学習、発見、または進化したすべての情報、式、プロセス、発明、または改善を会社に開示する」という段落です。会社の業務に従事しており、会社がまだサービスを受けているかどうかに関係なく、会社が特許保護を取得できるようにするために必要な文書に署名します。」 更新::::::::::::::::受信したばかりのメール デイブ、 ご承知のとおり、私たちはあなたとあなたの弁理士が今年初めに提起した要求を追求してきました。 ...弁理士。会社を立ち上げる前に、知的財産権と著作権の所有権について{編集済み}から公式の説明を求めるようアドバイスしてくれました。実際には、すべてのMUSエンジニアの{編集済み}の無料コピーと引き換えに、すべてのIPと著作権は私の自己が所有しているという法的契約を作成します。無料提供はパートナー企業には適用されません。 この審査プロセスは、{redacted}および雇用主{redacted}との契約上の立場を審査する義務があるため、予想よりも時間がかかりました。 しかし、{編集さ}我々は引き続き使用することを条件に、すべてのIPに著作権を解放するために喜んでいる{編集さ}私たちのために、{編集さ}エンジニアとの販売から得られる利益に15%のロイヤリティを受け取る{編集さ} A以上のライセンス合意される期間。 相互に都合のよいときにこの提案についてお話しできることをうれしく思います。また、私たちはあなたの法律顧問または私たちのものを使用してIP移転契約を起草することができます。 敬具、 {編集済み}

5
bool / intを返し、実際のオブジェクトを出力パラメーターとして持つメソッドがあるのはなぜですか?
私の会社のコードベース(.NET 3.5アプリケーション)のいたるところに次のコードパターンがあります。 bool Foo(int barID, out Baz bazObject) { try { // do stuff bazObject = someResponseObject; return true; } catch (Exception ex) { // log error return false; } } // calling code BazObject baz = new BazObject(); fooObject.Foo(barID, out baz); if (baz != null) { // do stuff …

2
地図データを保存するための理想的なデータ構造ですか?
私はインタビューテストでこれを尋ねられました。私はテストで大丈夫でしたが、この質問に答えるのに十分な知識がありませんでした。データをすばやく照会するために使用できるデータ構造を知りたいです。 基本的には、ある種のデータ構造に格納された道路セクション(ライン、ポイントで構成される)があるという考えです。どの道路セクション(またはポイント)がポイント(半径)から特定の距離内にあるかをすばやく照会する必要があります。

4
n-gramデータの保存
nグラムのデータを保存することについて少しブレインストーミングしたいと思っていました。私のプロジェクトでは、すべての(n -1)データ項目を知っており、適用可能なすべてのnグラムに対する線形補間を使用して統計的にnを推測したい言語の問題を解決しようとしています。(はい、用語集に従ってタグを既知の単語に割り当てるタガーと、未知の単語の単語の種類を推測するサフィックスツリーがあります。ここで説明するnグラムコンポーネントは、曖昧さの解決を担当します。) 私の最初のアプローチは、観測されたすべてのnグラム(n = 1..3、つまりモノグラム、バイグラム、トライグラム)のデータをそれぞれのSQLデータベースに単純に格納し、それを1日と呼ぶことです。しかし、私のプロジェクトの要件は、他のベクトルの長さ(n)を含むように変更される可能性があり、多くの作業(スキーマの更新、アプリケーションコードの更新など)なしにアプリケーションを4グラムに適応させたいです。理想的には、コードを大幅に(またはまったく)変更せずに、4グラムで動作するようにアプリケーションに指示し、特定のデータソースからのデータをトレーニングするだけです。 すべての要件をまとめるには: nグラムのデータを保存する機能(最初はn = {1、2、3}の場合 使用するnグラムの種類を変更する機能(アプリケーションの実行間) nグラムデータを(再)トレーニングする機能(アプリケーションの実行間) データストアを照会する機能(たとえば、A、B、Cを観察した場合、トレーニング済みの4、3、2、1グラムのデータセットを使用して、最も頻繁に観察されるアイテムを知りたい) ほとんどの場合、アプリケーションは読み込みが重くなり、データセットはほとんどの場合再トレーニングされません このソリューションは、.NET Framework(最大4.0)を採用しています では、そのようなタスクに適した設計は何でしょうか? 各nの SQLサーバー(MSSQL、MySQLなど)によって管理される固定テーブル(たとえば、2グラム、3グラムなどの専用テーブル) または、ドキュメントのキーとして最初のn -1 を保存し、ドキュメント自体にn番目の値と観測頻度が含まれるNoSQLドキュメントデータベースソリューションですか? または何か違う?

3
HL7メッセージを使用する場合、どのような問題が発生する傾向がありますか?
私はヘルスケア事業向けの製品をテストしていますが、HL7メッセージを使用しています。HL7の問題について別の質問でうめき声をあげているが、詳細については言及していない。誰かが私たちが特に探しているべき問題や問題のクラスのアイデアを教えてもらえますか? 解析によく使用されるライブラリを使用しています。これらの詳細や私たちがやっていることが役立つ場合は、コメントで知らせてください。できれば質問に追加します。
12 testing  parsing  hl7 

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