ソフトウェア工学

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

3
C#のさまざまなコレクションジェネリックインターフェイスの違い
しばらくの間、C#for WindowsおよびASP.net MVC開発で遊んでいます。しかし、私はまだいくつかの領域で不明です。私は、類似の種類のGeneric Collection Interfacesの使用と交換に関するパフォーマンスの問題の基本的な違いを理解しようとしています。 基本的な違いは何ですかIEnumerable<T>、ICollection<T>、List<T>(Class)? アプリケーションで問題が発生することなく、それらを使用および交換しているようです。また、これらの3つと交換できるこれらのような類似の汎用コレクションはありますか?

5
レガシアプリケーションでコヒーレントアーキテクチャを開始する
私は、Asp.Netベースの大規模なWebサイトを担当しています。現在、これはWebアプリケーション(Webアプリケーションではない)、一部のWindowsサービス、および多数のクラスライブラリです。 データレイヤーは、LLBLGEN とLinq To LLBGenの混合、およびリファクタリングされていないレガシーインラインSQLのインスタンスを使用します。 マネージャータイプの実装がいくつかありますが、多くの場合、アプリケーションはスマートUIアンチパターンを示します(つまり、クラスの背後にあるコードのビジネスロジックが多すぎる) サイトのトラフィックはかなり高く、パフォーマンスは良好ですが、開発能力を約10人のチームにまで拡大しており、既存のミドルウェアの上に包括的な階層化設計が必要であることがますます明らかになっています。 私の質問はどこから始めればいいですか?私たちには10年のコード(ASP Classicのものを移行したものもあります)、さまざまなアプローチ、スタイルがあります。 コードベース全体のリファクタリングは現実的ではなく、おそらく望ましくありません 私はこれが新しい状況ではないことを知っています、この問題にどのようにアプローチするかに関して有用なアイデアや概念はありますか?

3
マイクロvsモノリシックサーバーアーキテクチャ
現在、新しい製品/プロジェクトに取り組んでいます。これは、特定の特定の産業/サービス企業向けのクライアント/サーバーアプリケーションです。Javaフロントエンドを備えたTCP上でカスタムプロトコルを実行するサーバー(C言語およびLinuxのみ)を構築しています。私たちはコーディング作業に約20%取り組んでおり、マイクロカーネルアーキテクチャまたはモノリシックカーネルアーキテクチャを選択する必要がある状況に直面しています。 Micro vs. Monolithicは通常カーネルアーキテクチャに関連していることは承知していますが、具体的にはサーバーについて話しています。 既存のサーバーではなく、カスタムサーバーが必要な理由 UIのニーズは非常に大きく、非常に動的であるため、Web / Webブラウザーベースのソリューションは適切ではありませんでした。 統計処理はクライアント側で重要であるため、ブラウザーもほとんど役に立ちませんでした。(もちろん、サーバー側で処理を実行し、処理されたデータをクライアントに渡すこともできますが、これはサーバーの負荷が大きくなり、クライアントリソースが浪費されることを意味します)。 さらに、少なくとも3つのテクノロジー(JS / HTML / CSS)で1つのイベントを管理することで、砂漠の嵐の中で家を一掃するような全体の体験ができます。 マイクロサーバーとモノリシックサーバーはどうですか?あなたは何をしゃべってますか? 次の(仮想の)クライアント要求を検討してください。 request-id: 123 request-service: HistoricDataSets request-message: Fetch all records upto the year 2010 そのようなリクエストを受信すると、サーバーは通常、次のことを行います(簡単にするために、スレッドやフォークなどの同時実行技術は無視しています)。 リクエスト文字列を解析する アクションを特定する(HistoricDataSets LIMIT Year (2010)この場合はフェッチ) 永続化レイヤー(この例ではOracle、と言うことができます)と対話して、データをフェッチします。 プロトコルに従ってデータをフォーマットします。例: response-id:123 success:true response-text:DataSets このようにフォーマットされたデータでクライアントに応答します。 これは、モノリシックサーバー(すべてのOSの動作がカーネル空間で行われるモノリシックカーネルに似ています)と呼ばれるものです。 再度、同じリクエストを受け取り、今回はサーバーを考慮します(簡単にするため、共有メモリのみをIPCと仮定しました)。 Parserプロセスの共有メモリに要求を入れます Parserタスクを特定し、文字列を解析し、指示するExecutionerタスクを実行するためのプロセス。 次にExecutioner、Fomatterプロセスにデータを渡し、データをプロトコル文字列にフォーマットした後、サーバーに戻ります。 サーバーはそれをクライアントにディスパッチします(応答)。 もちろん、代わりのParser、ExecutionerそしてFormatterそれは、単一のが、別のプロセスだったかもしれません。これは、私たちがマイクロサーバーと呼んでいるものです(マイクロカーネルが最低限必要なことをやっていることに似ています)。サーバーは実質的にリスニングと応答のみを行いますが、すべてのステップは異なるプロセスによって処理されます。 どれを選ぶべきですか?混乱しています!モノリシックサーバーは試行およびテストされていますが(ほとんどのHTTP-Webサーバー?)、プログラミングが容易であり、同時実行性を非常にうまく処理できます。マイクロサーバーは、一見、迅速で、1つのタスクを実行する1つのプログラムというUNIXの原則に沿っているように見えますが、特に開発が複雑です。並行性を念頭に置いてください。 質問 -各アプローチの長所と短所は何ですか(場合によっては)。 …

4
ページネーションを使用すると、サーバーの負荷が軽減されますか?(理論)
ページネーションの背後にある理由は何ですか?ページごとに返される行の量を技術的に制限するため、サーバーの負担を軽減するために使用されていますか? ページネーションなしで何かをしたかったのですが、私はこれが初めてなので(私はアマチュアです)、技術的にOKかどうか疑問に思い始めました。
11 php  pagination 

1
描画スレッドの相互作用
UML(-like)表記でスレッドの相互作用(ペンと鉛筆)を描きたいです。私はUMLを主張しません。読者に明らかなことはすべきです。 私はシーケンス図から始めましたが、これが最善の方法だとは思いません。常に、画面外から来る「アクションイニシエーター」が存在し、SSDのアイデアを壊します。それぞれがステートマシンを所有する9〜10個のスレッドを持つ中規模のコードベースを継承し、その仕組みを理解しようとしています。 スレッドの相互作用を視覚化するにはどうすればよいですか?

2
「自由な時間」で創造性を活用する
一部の企業は、プログラマーが非常に創造的な人間であることを驚きと利益に発見しました。例えば、GoogleとAtlassianは、プログラマーが(承認を得て)やりたいことを何でもやり遂げ、会社が報酬を得る定期的な(月次、私は信じる)「フリーデイ」を許可していると思います。 引用された例は、新製品、以前誰も修正したくなかったバグ修正、新しいチームの形成などです。別の結果(そしておそらく元の目標)は、空き時間の間の残りの日の間、プログラマーがより多くのモチベーションを持っていることです。 「制御された」創造的なアウトプットを許可することは、動機付けと士気に良いというこの理論への裏付けはありますか?

8
「真実」は合法的なプログラミング用語ですか?
SOには、「真偽」という言葉を使用して、元の型に関係なく、ブール値として評価される式の真理値を意味する質問がかなりあります。動的言語では非常に便利です。 私の質問は、これは本当の用語ですか、もしそうなら、スティーブン・コルバートがそれを普及させる前にそれを使用していましたか?それとも、後でそれを採用しただけですか?その場合、上記で定義した正しい用語は何ですか?


5
Webアプリケーションの起動時間は本当に重要ですか?
アプリケーションの起動時に初期化コードを追加することについて誰かと会話し、起動時間の増加を引き起こすことについて不平を言いました。彼は本当に理由を述べることができませんでした(直感や何か、知らない)。これは頻繁に使用するアプリケーションではなく、約1分程度で開始され、年に数回展開します。 私はしばらく前にSOに関する質問でそのようなアドバイスを読んだことを覚えています。 私は30秒から4〜5分で開始したWebアプリで作業しましたが、オンラインになるとそれらは揺れ動きました。 だから私は何が欠けていますか?金融市場、医療アプリケーション、宇宙探査などのように、重要なアプリケーションでなければ...分からない...起動時間は本当に重要ですか? PS私は厳密にWebアプリについて言及していますが、デスクトップアプリは急速に起動します。

5
計算の複雑さの概念はソフトウェア開発者にとって重要ですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 私は時間と記憶の複雑さの概念はcompsciコースの卒業生にとって必須であるという印象を受けていましたが、工学を勉強していたので、その場合は知識がありません。私は最近、概念さえ知らない地元の大学の卒業生の何人かにインタビューして驚いた。私の質問は: 計算の複雑さの概念はソフトウェア開発者にとって重要ですか?そして、それは学部課程で教えられるべきですか?

3
JavaScriptとWebプログラミングのパラダイムシフト
私の記憶が正しければ、Web開発にJavaScriptを使用することが非常に嫌われる時期がありました。とりわけ、それはユーザーにとってプライバシーとセキュリティの懸念であり、一部の人々はそれをやめたためです。 最近では、JavaScriptを使用しない主要なWebサイトはほとんど見られなくなり、多くのWebサイトはJSなしでは完全に機能しなくなります。それか、SEサイトのように、使いやすさがひどく影響を受けます。 JavaScriptがWeb開発で事実上ユビキタスになった当時と現在で何が変わったのですか?それとも、JSは私の想像の虚構に眉をひそめられ、それはいつもそうだったという私の主張ですか?

10
どのプログラミング方法が私たちに適しているでしょうか?
残念なことに、誰かが私たちの経営陣に「アジャイル」という言葉を教えてくれました。私は(原則として)アジャイルの周辺的な理解を持っていますが、実際にアジャイルを使ったことはありません。私が知っていることから、それは私たちの組織によく合いません。今のところ、物事はかなり不潔です。その方法は次のとおりです。 私たちは非常に小さなチームです。2人の開発者、1人のDBA、1人のデザイナーです。私が働いている会社は、その規模に比べて不釣合いに多額のお金を稼ぎ、その95%近くが純粋なオンライン販売です。 開発の観点から、私たちは通常の日に多くのデスクの侵入を受けます(私たちは技術サポートであり、開発者でもあります)。営業チームのメンバーが誰かに何かを約束した場合、すぐに定期的に仕事が空から落ちます。私たちはより大きなプロジェクトにも着手していますが、それらは絶え間ない中断を伴う悪夢です。私たちの何人かは私たちの髪を引き裂き始めています!プロジェクト計画は、技術担当でない管理者がExcelスプレッドシートで作成します。そこでは、タスクを一口サイズの文に分解して、理解し、それぞれの横に日付を入れます。これらの日付は常にひどく非現実的で見逃されることが多く、私たちのミーティング(毎週開催)には、「なぜこれがまだ行われていないのか」と人々が尋ねる厄介な瞬間が定期的にあります。 アジャイルは私たちにとっては間違いないと思います。今、(そして私が試した)この会社はその方法を変えないことを考えると、開発チームだけが喜んで変更しますが、採用することができる開発方法論はありますか?

6
アジャイルで成功するには何が必要ですか?
一部の組織ではアジャイルの採用が失敗する場合があります。ウォーターフォールが唯一の(真の)方法である会社で働いていましたが、それは彼らがプロジェクトでアジャイルを試みて失敗したためです。 まだ覚えている人たちに聞いたとき(私は後輩でした)、本当に起こった悪い悪夢を思い出させたように、私は激しくシャットダウンされました。 プロジェクトが失敗した理由はわかりません。一部の企業ではアジャイルが失敗する理由がウェブ上に記載されていますが、その理由は主に経済的です。そこで、私はここでいくつかのフィードバックをお願いすると思った。 一部の組織でアジャイルの採用が失敗する理由は何ですか?または、別の言い方をすれば..アジャイルで成功するには何が必要ですか?

4
エンタープライズネットワークの仮想化開発環境
エンタープライズ組織内の4人の開発者から成る小さなチーム向けに、仮想化を使用した開発環境の実装を試みています。これにより、開発環境、テスト環境、ステージング環境を個別に設定できるようになります。また、評価対象のシステムやツールの要件である新しいオペレーティングシステムへのアクセスが可能になります。既存のワークステーションクラスのマシンを再利用し、24GBのRAMとRAID-10を投入し、マシンをドメインに追加しようとするまで問題なく動作していました。 今、私たちは、時間の初めからすべてのエンタープライズ開発者が戦わなければならない戦争、つまり開発およびテスト環境のローカル制御のための戦いを始めています。ネットワークおよびIT管理者は、「ESXサーバーはエンタープライズ標準です」から「サーバーはクライアントVLANで許可されていません」から「[空欄に記入]は現在ローカルにあるスキルセットではありません」またはエンタープライズIT組織」。 必要に応じて、実稼働クラスのハードウェアと正式なITサポートを正当化することもできますが、時間がかかり、頭痛の種になります。その場合でも、これを実稼働システムとして扱うことでITリソースを正式に割り当てるには数か月かかる場合があります。そうしても、必要なローカル制御を失う可能性があります。 多くの皆さんが、非実稼働環境、特に仮想化の開発者による制御をめぐる同様の苦労を経験していると思います。そのため、私の質問は次のとおりです。 インフラストラクチャ(ITおよびネットワーク)の人々を勝ち取り、これらのタイプのサイロを、一般に(そして当然のことながら)このタイプの非(集中管理)インフラストラクチャ? これは技術的な正当化の問題であると感じましたか?それとも、コントロールと所有権をめぐる政治的闘争の多くですか? IT管​​理の開発環境になった場合、日々の開発とテストにどれほどの障害がありましたか? これらのネットワークアクセスの問題を回避するために、開発環境を切断されたVLANまたは完全に独立したネットワークに移動することになった人はいますか? また、これはHyper-V対ESXの聖戦ではありません(どちらでも構いません-ただし、Hyper-Vはこれらの目的のためにMSDNで「無料」であるため選択されました[はい、VMWareにも無料ツールがあります-一般的に、優れた管理ツールはそうではなく、 "Microsoftショップ"のローカル開発者が管理しやすいでしょう)-どちらに対する賛否両論はこの質問の範囲外です。 これは、仮想化と物理ハードウェアの比較でもありません。仮想化コンポーネントを使用しなくても、同じ質問をすることができます。 また、開発チームがパッチ管理とウイルス対策を管理するか、既存のエンタープライズシステムをサポートする場合は既存のエンタープライズシステムと統合することを既に保証していると仮定します。このシナリオは、さまざまな質問とともに、SFにも投稿されており、うまくいけば反対の視点を引き出すことができます。

6
「グレースフルデグラデーション」とは何ですか?
この「優雅な劣化」という言葉についてよく耳にします。 例えば ​​、 "An application server should gracefully degrage when it is under heavy load " "Graceful degradation of user interfaces.... " この用語は私にとって抽象的なもののように見えます。それが意味するものの具体的な例はありますか?

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