ソフトウェア工学

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


4
あなたの会社は知識と情報をどのように管理していますか?
あなたの会社が知識を収集して保存するために使用するアーキテクチャ、方法、ソフトウェアに興味があります。 情報は(特に技術者以外によって)簡単に検索できますか? 中央リポジトリに保存されていますか、それとも複数の場所に保存されていますか? 現在の実装は適切ですか?何を改善できますか?

6
「スプレッドシートプログラミング」の用途はありますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 少し前に、プログラミングロジックを指定する方法としてスプレッドシート(​​マクロコードではなくセルと数式を使用する)を使用するという概念に出会いました。アイデアは次のとおりです。 明確に定義された計算フローでスプレッドシートを作成します(プロシージャまたはオブジェクト指向のプログラミングスタイルではなく、スプレッドシートの「データフロー」パラダイムにより適している場合があります) 入力セルを定義する 出力セルを定義する 全体をスタンドアロンの実行可能クラス(または関数、プロシージャなど)にコンパイルする より広範なソフトウェアプロジェクト内の通常のコードで使用する スプレッドシートをソースコードとして使用し、長期にわたって維持する アイデアは、モデルに実際に適合する問題に対してこの手法を使用することであり、これにより、自然に文書化された、保守が容易なコードが作成されるということです。このテクニックの使用経験があるかどうか、また何のために興味があるかを知りたいです。私の頭に浮かんだアプリケーションの例は保険料金計算機で、通常Excelシートでアクチュアリーによって作成、作成、検証され、保守が難しいプログラミングロジックで後でコーディングされます(苦痛なプロセスです)。

6
オブジェクトの適切なインスタンス化に失敗する可能性のあるコンストラクターの作成方法
場合によっては、失敗する可能性のあるコンストラクターを記述する必要があります。たとえば、次のようなファイルパスでオブジェクトをインスタンス化するとします。 obj = new Object("/home/user/foo_file") パスが適切なファイルを指している限り、すべて問題ありません。ただし、文字列が有効なパスでない場合は、問題が発生するはずです。しかし、どのように? あなたは出来る: 例外を投げる nullオブジェクトを返します(プログラミング言語でコンストラクタが値を返すことができる場合) 有効なオブジェクトを返しますが、そのパスが適切に設定されなかったことを示すフラグが付いています(ugh) 他の? さまざまなプログラミング言語の「ベストプラクティス」がこれを異なる方法で実装すると思います。たとえば、ObjCは(2)を好むと思います。ただし、(2)は、コンストラクターが戻り型としてvoidを持たなければならないC ++で実装することは不可能です。その場合、(1)が使用されると考えます。 選択したプログラミング言語で、この問題の処理方法とその理由を説明できますか?

10
プロパティのポイントは何ですか?
プロパティと私の反論に対するいくつかの議論は次のとおりです。 getterおよびsetterメソッドを書くよりも使いやすい ゲッターメソッドとセッターメソッドのペアはコードのにおいです。これらの記述を簡単にすることは、Scantronフォームを使用してすべての「C」を入力することにより、数学テストに失敗しやすくするようなものです。永続化のために状態のみを含むオブジェクトは、getter / setterを使用してはならず、永続化時に不変オブジェクトを作成する必要があります。 オブジェクトのコンシューマーにとって重要なのは、オブジェクトが行う方法ではなく、オブジェクトが行うことです。その振る舞いはそれがすることです。その状態は、その方法です。オブジェクトの状態を気にかけている場合(永続性を除き、これもオブジェクト指向を破壊します)、OOPを実行せず、その利点を失います。 彼らは消費者にパフォーマンスの大まかな指標を与えます これは、特定のプロパティについて、将来変更される可能性があるものです。リリース1.0で、PropertyXにアクセスするとフィールドが返されるだけだとします。リリース1.5では、フィールドがnullの場合、PropertyXはNull Objectパターンを使用して新しいnullオブジェクトを作成します。リリース2.0では、PropertyXのgetterメソッドによってフィールドがさらに検証されています。 プロパティがますます複雑になるにつれて、プロパティを使用することによるパフォーマンスの指標はますます真実になりそうです。 パブリックフィールドよりも優れている これは本当です。しかし、メソッドもそうです。 これらはメソッドとは根本的に異なるオブジェクトの側面を表し、オブジェクトのすべてのコンシューマーはこれに注意する必要があります 上記のステートメントの両方が正しいと確信していますか? 入力しやすいです 確かに、タイピングmyObject.Lengthはタイピングよりも簡単ですがmyObject.Length()、それを少しの構文糖で修正することはできませんか? プロパティの代わりにメソッドを使用する理由 パフォーマンスの保証はありません。メソッドがより複雑になっても、APIは真実のままです。消費者は、パフォーマンスの問題に直面している場合、コードをプロファイルする必要があり、APIに依存しません。 消費者が考えることは少なくなります。このプロパティにはセッターがありますか?メソッドは確かにそうではありません。 消費者は適切なOOPの考え方から考えています。APIのコンシューマーとして、オブジェクトの動作と対話することに興味があります。APIでプロパティを見ると、状態によく似ています。実際、プロパティの実行が多すぎる場合は、プロパティであってはなりません。したがって、実際には、APIのプロパティはコンシューマに表示される状態です。 APIのプログラマは、戻り値を持つメソッドについてより深く考え、可能であれば、そのようなメソッドでオブジェクトの状態を変更することを避けます。可能な限り、コマンドをクエリから分離する必要があります。 それでは、なぜメソッドの代わりにプロパティを使用するのですか?MSDNのほとんどのポイントは、それ自体がコードの匂いであり、プロパティにもメソッドにも属していません。 (CQSについて考えた後、これらの考えが浮かびました。)

9
コードのドキュメントを最初に?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 2年前に閉店。 実際にコードを記述する前に、完全なコードドキュメントを最初に作成しようとしたことがありますか?これについては、具体的なインターフェイスを記述し、クラスがどのように相互作用するかを考えさせることで、初期設計がフロア化されないようにするのに役立つと考えたため、以前考えていました。これはいいアイデアですか?誰もが試しましたか?エル

6
プログラミングの方法と、プログラミングの方法を学ぶ方法は知っていますが、システムを適切に作成する方法と場所はどこで学びますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 4年前に閉鎖されました。 システムを作成する際に考慮しなければならないことがたくさんあります。たとえば、ユーザーがログインして相互作用し、コンテンツを作成および編集するWebベースのシステムを考えてみましょう。今、私はセキュリティ、バリデーション(私はそれが何を伴うのかを100%確信しているとさえ思わない)、「ユーザーがお互いの足を踏まないことを確認する」(これを言う?)、多くのエラーを防ぐことを考えなければならない予期せぬ状況でデータベースデータが問題にならないようにしていますか?どのように、どこで学ぶべきかわからないこれらすべてのことについて、この種のものに関する本はありますか?私が言ったように、コードを書くことと実際に正しいコードを書くことの間には大きな違いがあるように思えます。私の現在のプログラミング作業は、私が説明したものの多くを欠いているように感じ、後でそれが引き起こす問題を見ることができます。そして、データが存在し、人々がそれを使用しているため、問題を解決するのははるかに困難です。だから誰も私にこのタイプの学習のための本やリソース、またはプログラミングの適切なサブセット(?)を教えてもらえますか? PS:自由にタグを修正してください。何を言っているのかわかりません。 編集:私が書いた例のいくつかは他のタイプのシステムにも当てはまると思います。私は主にウェブの仕事に携わっているので、他の良い例は知りません。

6
新製品の初期バージョン番号はどのように機能しますか?
現在、友人のために小さなデスクトップアプリケーションを作成していますが、私は主に自分自身の学習体験としてそれを行っています。教育を受けて正しいことをするという精神で、このアプリのバージョン番号が欲しいです。 私の研究はこれらの関連する結果をもたらしました どの「バージョン命名規則」を使用していますか? ファイルのバージョン管理方法(バージョン番号) プロジェクトを分岐しました。バージョン番号はどこから始まりますか? ただし、アルファ、ベータ、リリース候補、およびcの番号付けに対処するものはありません。1.0未満のバージョン番号の規則は何ですか?私は彼らがしばらく続けることができることを知っています。たとえば、PuTTYは少なくとも10年間使用されており、まだバージョンベータ0.60のままです。
11 naming 

5
変更された戦略設計パターン
私は最近、デザインパターンの調査を開始しましたが、コーディングしていることの1つは、小さな違いを除いて、戦略パターンに完全に適合します。 基本的に、私のアルゴリズムの一部(すべてではない)には、追加のパラメーターまたは2つを渡す必要があります。 だから私はどちらかをする必要があります 計算メソッドを呼び出すときに追加のパラメーターを渡します または それらをConcreteAlgorithmクラス内の変数として保存し、アルゴリズムを呼び出す前にそれらを更新できるようにします。 このニーズに合ったデザインパターンはありますか/戦略パターンにこだわってこれを実装するにはどうすればよいですか? クライアントオブジェクトをすべてのアルゴリズムに渡し、変数をそこに格納し、特定のアルゴリズムで必要な場合にのみ使用することを検討しました。しかし、これは扱いにくく、戦略パターンのポイントを打ち負かすと思います。 明確にするために、私はJavaで実装しているので、オプションのパラメーター(これをうまく解決できる)の贅沢はありません。

4
単体テストの使用方法
前に何度も質問がありましたが、特定の傾斜twds mvc開発がありました。 私は非常にいい子で、対応する単体テストですべてのコントローラーアクションをコーディングしてきました。正直に言うと、私は実際に初期のユニットテストのほとんどの骨を書くために小さなT4テンプレートを作成し、使用法に応じて適切に調整しました。パーシャルビューを含むビューでテストを処理する方法がよくわからないことは認めますが、それは別の質問の話です。 今、私が判断するのが難しい部分は、サービスレイヤーでカバレッジをどれだけ深くするかです。その理由は、私のサービスメソッドのいくつかは(良くも悪くも)実際にさまざまなlinqクエリを実行し、メソッド内の後続のロジックに個別の情報を提供するためです。私はこれらのメソッドを分解して、各linqステートメントに必要なロジックのみを呼び出し、メソッド内でそれらを適用できることを知っています。ただし、多くの場合、linqの「関数」の再利用は一切行われないため、これによりコードのレベルが過度にリファクタリングされると考えられます。 私が求めているのは、メソッド内で複雑なロジックが発生している場合、必要な結果および/または予想されるエラーを単にアサートするテストメソッドがあるか、すべてのロジックラインもシミュレートしてテストする必要があるということです。私が見ている方法、テストを正しく行うために、メソッドロジック(行ごと)も何らかの種類のカバレッジを取得する必要があります。しかし、それは(私の素朴な意見では)テストと実装されたメソッドをテスト自体にコテージ業界を作成するように密接に整列させようとする(私は彼らがそうであるべきだと知っています)ことを試みる終わりのないサイクルにつながる可能性があります。 私の質問は、これを簡単なこととは思わないTDD信者の一部を怒らせるかもしれません。TDDキャンプにいないので、これは私にとって「はい」ので、問題です。 ところで-アイデアのためにこれをチェックアウトしていました: http://dotnetslackers.com/articles/aspnet/Built-in-Unit-Test-for-ASP-NET-MVC-3-in-Visual-Studio-2010-Part-1.aspx 今着実にdownvotesにfwdを探しています:) [編集] -シングルの利益のために(今のところシングル!!)「近い」投票者。この質問は主観的なものではありません。私は非常に焦点を絞った主題に関するコンセンサスを探しています。私は否定的な情熱をかき立てようとはしていません。テクノロジーの欠陥を公開しようとは思っていません。私は大ファンです。したがって、曖昧さや誤報がある場合に質問を再構築するのに役立つ可能性があるため、閉会に投票する場合、私の利益のために丁寧なコメントをドロップしてください。この質問は、mvc人口の大部分に利益をもたらす可能性があります。 ありがとうございました!! ジム
11 c#  .net  asp.net-mvc 

6
ロケーションの独立性を最大限に活用する方法…開発者として働くための私の個人的な第1のインセンティブ[非公開]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 8年前に閉鎖されました。 開発者として働くことの究極の美しさは、素晴らしい履歴書を与えられれば、いつでもどこでも新しい仕事を見つけることができるという事実です。 ですから、例えば旅行中に仕事をした経験がある人がここにいるかどうかを尋ねたいと思います。または、たとえば6か月ごとに大都市から大都市への就職活動。 たとえば、私はブラジルへの行き方を調査しています。しかし、ブラジルで従業員として働くことは選択の余地がないようです。b/ c適切なビザと許可を得るには多くの時間/お金/努力が必要です。したがって、唯一の実用的な解決策は、どこにいても仕事を終わらせながら、フリーランスで旅行することです。 私は、私が話していることを正確に知っているIT関係者が大勢いることを確信しています。 面白いアイデアやストーリーを楽しみにしています。 バウンティの編集: 私は一般的な知恵にあまり興味がありませんが、むしろ私の質問に関連し、共有する実際の個人的な経験を持っている人々からの主題に対処する個人的な経験の具体的な説明に興味があります。私は第二学位の性質の意見や説明を求めていません。 EDITためEVERYBODY(具体的な質問): 旅行中はどこで働いていますか?(オフィスプーリング?ライブラリ?カフェ?) あなたはどこで寝ますか?ホテルはいくぶん高価だと思います。(ホステル?カウチサーフィン?) 編集 私はアンディの返事を主にロマンティックでポジティブなトーンのb / cの「the」回答として受け入れました。もちろん、その質問に対する答えはありません。私は興味をそそられる議論を望んでいて、11の投票と5つのブックマークを与えられました。私は、いくらかのインプットに興味がある唯一の人ではないようです。 それで、もっと多くの人が自分の経験に耳を傾け、共有することを願っています。

6
仕様文書をsvnなどのソース管理システムに配置する必要がありますか?
今日、同僚の1人と「SVNなどのソース管理システムに仕様書を入れるべきか」について議論しています。私の意見では、そうあるべきです。プロジェクトの開発に関連するすべてのものは、ソース管理システムで慎重に管理する必要があります。ソフトウェア開発プロセスの概念は間違っていますか?

7
ログには決して表示してはならない情報は何ですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 ログ(アプリケーションのトレース)に表示してはならないものについて、会社のガイドラインを作成しようとしています。実際には、一部の開発者は、トレース内のできるだけ多くの情報として含めるようにしようと、それは危険なこれらのログを保存すること、およびそれらを提出する非常に危険な彼女は、この気にしませんので、お客様は、この情報が格納されている知っていない場合は特に、ドキュメントや警告メッセージを決して読んでいない。 たとえば、ファイルを処理する場合、一部の開発者はファイルの名前をトレースしたいと思われます。たとえば、ファイル名をディレクトリに追加する前に、エラー時にすべてをトレースすると、たとえば、追加された名前が長すぎること、およびコードのバグが連結された文字列。これは役立ちますが、これは機密データであり、決してログに表示してはいけません。 同じやり方で: パスワード、 IPアドレスとネットワーク情報(MACアドレス、ホスト名など)¹、 データベースアクセス、 ユーザーおよび保存されたビジネスデータからの直接入力 トレースに表示されることはありません。 それでは、他にどんな種類の情報をログから追放する必要があるのでしょうか?私が使用できるガイドラインはすでに書かれていますか? ¹明らかに、私はIISやApacheのログなどについて話をしているのではありません。私が話しているのは、信頼されていないエンティティのアクティビティを追跡するのではなく、アプリケーション自体をデバッグすることだけを目的として収集される情報です。 編集:回答とコメントをありがとう。私の質問はあまり正確ではないので、コメントで尋ねられた質問に答えようとします。 ログで何をしているのですか? アプリケーションのログはメモリに保存される場合があります。つまり、ローカルホストのハードディスクにプレーンで、データベースに、プレーンに、またはWindowsイベントに保存されます。すべての場合において、懸念はそれらのソースが十分に安全でないかもしれないということです。たとえば、顧客がアプリケーションを実行し、このアプリケーションがログを一時ディレクトリのプレーンテキストファイルに保存すると、PCに物理的にアクセスできる人は誰でもそれらのログを読むことができます。 アプリケーションのログはインターネット経由でも送信できます。たとえば、顧客がアプリケーションに問題がある場合、このアプリケーションをフルトレースモードで実行し、ログファイルを送信するように依頼できます。また、一部のアプリケーションは、クラッシュレポートを自動的に送信する場合があります(そして、機密データに関する警告がある場合でも、ほとんどの場合、顧客はそれらを読みません)。 特定の分野について話していますか? いいえ。一般的なビジネスアプリケーションのみに取り組んでいるので、機密データはビジネスデータのみです。特定の規制の対象となる健康やその他の分野に関連するものはありません。しかし、それについてお話しいただきありがとうございます。おそらく、ガイドラインに含めることができるものについての手がかりを得るために、これらのフィールドを見てみる必要があります。 データを暗号化する方が簡単ではありませんか? いいえ。特にC#診断とを使用する場合は、すべてのアプリケーションが非常に難しくなりTraceSourceます。また、承認を管理する必要がありますが、これは最も簡単なことではありません。最後に、顧客から提出されたログについて話している場合、機密データにアクセスすることなく、ログを読み取ることができる必要があります。したがって、技術的には、機密情報をログに一切含めず、それらのログがどのように、どこに保存されているかを気にすることは簡単です。

5
読みやすくするための名前付き引数(パラメーター)
かなり前にADAで多くのプログラムを作成しましたが、関数を呼び出すときに引数に名前を付けるのは正常でした-SomeObject.DoSomething(SomeParameterName => someValue); C#が名前付き引数をサポートするようになったので、引数の意味が明らかでない場合にこの習慣に戻すことを考えています。 引数の意味が常に明らかであると主張するかもしれませんが、ブール引数を持ち、呼び出し元が「true」または「false」を渡す場合、名前で値を修飾すると、呼び出しサイトが読みやすくなります。 contentFetcher.DownloadNote(note、manual:true); trueまたはfalse(この場合は手動、自動)を使用する代わりにEnumを作成できると思います。 コードを読みやすくするために、時々名前付き引数を使用することについてどう思いますか?

5
ファーストクラス機能
今週末、私は真剣にLispに目を向け始めました(つまり、Lispを学習しているだけで、C#のプロジェクトに戻らないことを意味します)。私は他の関数型言語(F#、Haskell、Erlang)に手を出したことがありますが、Lispから得られた魅力を感じていません。 Lispを学び続けると、なぜ非関数型言語が一流の関数をサポートしないのか疑問に思い始めました。C#などの言語はデリゲートで同様のことができ、C / C ++の関数へのポインタを使用できる範囲でできることを知っていますが、これがこれらの言語の機能にならない理由はありますか?関数をファーストクラスにすることに欠点はありますか?私にとっては、非常に便利なので、なぜ機能パラダイム以外の言語でそれを実装しないのかが分からなくなっています。 [編集]これまでの回答に感謝します。現在、多くの言語がファーストクラスの機能をサポートしていることが示されているので、言語を実装するのになぜ時間がかかるのかという質問を言い換えます。[/編集]

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