ソフトウェア工学

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

4
疑似コーディングによるソフトウェア設計?
疑似コードに基づく方法でソフトウェアを設計する(つまり、書き留める)良い方法を知っていますか? 私はソフトウェア設計に不慣れで、UMLに関する情報を読んでいます。私の控えめなクラス階層はこれまでのところ良好ですが、複雑になったら、「全体を見る」ことで、将来の拡張性のために別の構造を使用できることに気付きました。Pythonはプロトタイピングに適しているので、書き始めたばかりで大丈夫ですが、まったくそうではありません。 そこで、UMLクラス図を試しましたが、あまり役に立たないようです。そこで解決する問題は、頭の中でささいなことです。しかし、実際のメソッドの疑似コード化を開始すると、追加の設計要件に気づきます。 では、疑似コードで設計したい場合、どうすればよいでしょうか?私にとっては、コードとほぼ1対1の方法が最も効果的だと思います。しかし、ほとんどのUMLソフトウェアはメソッドのコードさえ表示しません(たとえば、GoFの画像とは対照的です)。 誰かがUMLはドキュメンテーションとプレゼンテーションのためだけのものであり、デザインのためにはそれほど優れていないと主張しましたか?私もその感覚を得ます。Envision APDTが見つかるまで、純粋なUMLといくつかの単純化したホワイトボードスケッチがソフトウェアを設計する方法であると思いました。 それで、アジャイル開発は私が注意すべきものですか、それともランダムにそのアジャイルと呼びますか-アジャイルはスケジュールのみに関するものだと思いましたか?または、私は(UMLを使用して)間違って設計していますか-誰かが疑似コードで設計していますか?どうすればそのための優れたツールを見つけることができますか?
9 agile  uml  design 

3
マルチコアプロセッサ向けのLinuxにおけるロックフリーIPC
マルチコアプロセッサを搭載したCで、Linux上のロックフリーIPCを使用してアプリケーションを作成する方法を見つけようとしています。 FIFOまたは共有メモリに書き込むプロセス1とプロセス2があるとします。次に、プロセス3とプロセス4がその共有メモリまたはFIFOから読み取ります。 これはロックフリーアルゴリズムで可能ですか? ご指導をよろしくお願いいたします。

2
CDNはどのようにしてDDoS攻撃からフェイルオーバーサイトを保護しますか?
私は、おそらく最終的にGoogle App Engine(GAE)にデプロイされるJava Webアプリの設計プロセスにいます。GAEの良い点は、恐ろしいDDoS攻撃からアプリを強化することを本当に心配する必要がないことです。「請求上限」を指定するだけで、トラフィックがこの上限(DDoSまたはそれ以外)に達すると、GAEアプリをシャットダウンします。言い換えると、GAEは、アプリを実行し続ける余裕がなくなるまで、基本的に任意の量にスケーリングされます。 したがって、私は、この請求の上限に達し、GAEがアプリをシャットダウンした場合、WebアプリドメインのDNS設定が別の非GAE IPアドレスに「フェイルオーバー」するような不測の事態を計画しています。一部の初期の調査では、CloudFlareなどの特定のCDNがこの正確な状況に対応するサービスを提供していることが示されています。基本的に、私はDNS設定を保持するだけで、フェイルオーバー手順を自動化するために使用できるAPIを提供します。したがって、GAEアプリの請求上限が99%になっていることを検出した場合、このCloudFlare APIにアクセスできます。CloudFlareは、DNS設定を動的に変更して、GAEサーバーから他のIPアドレスを指すようにします。 私の最初の不測の事態は、おそらくGoDaddyまたはRackspaceによって他の場所でホストされているWebアプリケーションの「読み取り専用」(静的コンテンツのみ)バージョンにフェイルオーバーすることです。 しかし、それから突然私に気づきました。DDoS攻撃がドメイン名をターゲットにしている場合、GAE IPアドレスから(たとえば)GoDaddy IPアドレスにロールオーバーするとどのような違いがありますか?要するに、フェイルオーバーはDDoS攻撃者が私のバックアップ/ GoDaddyサイトをダウンさせること以外は何もしません! 言い換えると、DDoS攻撃者は、GAEによってホストされている私のWebアプリへの攻撃を調整しますwww.blah-whatever.com。これは、実際にはIPアドレス100.2.3.4です。これにより、トラフィックが課金上限の98%に急上昇し、カスタムモニターが100.2.3.4から105.2.3.4へのCloudFlareフェイルオーバーをトリガーします。DDoS攻撃者は気にしません!彼らはまだ攻撃を仕掛けていwww.blah-whatever.comます!DDoS攻撃が続いています! だから私は尋ねます:CloudFlareのようなCDNはどのような保護を提供するので-別のDNSにフェールオーバーする必要があるときに-同じ、継続的なDDoS攻撃の危険にさらされませんか?そのような保護が存在する場合、フェイルオーバーサイトに課されている技術的な制限(読み取り専用など)はありますか?そうでない場合、彼らは何が良いのですか?前もって感謝します!

1
地理的に分散したチーム間でのDVCSの祝福されたレポレプリケーション
私の会社では、PerforceからDVCSへの移行を模索しています。現在、ソフトウェア開発チームはドイツ、中国、米国、メキシコに分散しており、ある場所から別の場所への帯域幅がそれほど大きくない場合があるため、現在、多くのPerforceプロキシを使用しています。 ITと話して、地理的に分散された観点から物事をスムーズに実行する方法を探し始めました。これにより、どのリポジトリサーバーが真のソースであるかを決定せずに(つまり、透過的に複製することなく)すべての人が最新かつ最高の状態を得ることができます。 おそらくpre-pushおよびpre-pullフックを介してDNSメカニズムをエミュレートできると思いました。たとえば、国A、B、Cについて考えてみます。祝福されたAからプルすると、A自体がBからの変更をプルし、次にBからCへの変更をプルします。BとCに新しい変更がある場合、Aに落ちます。逆に、プッシュがある場合、それはすべての祝福されたリポジトリに伝播される可能性があります。 私がいることを承知している、一般的に一つだけ恵まれレポを持っているが、これは世界的に拡大しないことがあり、それぞれの祝福されたリポジトリがただ一つの国からのチームに適用可能です。 私の質問は、DVCSレポレプリケーションの概念は実際に使用されているものですか?それを成功させた人はいますか?その場合、正しい方法は何ですか?

2
プロジェクトの初期段階から直接VCSを使用するための標準的なアプローチは何ですか?
バックグラウンド 私はgit過去にVCS(主に)を使用して多くの既存のプロジェクトを管理してきましたが、うまく機能します。通常、既存のプロジェクトでは、全体的な機能を最適化または変更するコードを変更するたびにチェックインします(変更するすべての行ではなく、適切な手順で私が意味することを知っています)。 問題 私があまり練習していないことの1つは、新しいプロジェクトを作成することです。私はおそらく非常に大きく成長する自分自身の新しいプロジェクトを開始する過程でんだけど、私はそこにあることを発見していますたくさん行うと、最初の数日/時間/週/期間までに変更する多くの製品が実際に最も基本的な形で機能するまで。 既存のプロジェクトの場合と同様に、プロセスの各ステップでチェックするポイントはありますか?まだ機能していないので、私は自分が加えた変更でプロジェクトを中断していません。現時点では、毎日の終わりにコンピュータを離れるとき、単にVCSをバックアップとして使用しています。 私の最初の数回のコミットは、「基本的なディレクトリ構造」や「作成されたDBテーブル」のようなものでした。新しいプロジェクトを開始するときにVCSをどのように使用すればよいですか?

2
置換変数を使用してメールテンプレートを編集するためのユーザーフレンドリーなソリューションは何ですか?
私は、データベースからユーザーにメールを送信する多くの「管理者/マネージャー」に依存しているシステムに取り組んでいます。主な機能の1つは、同時に複数の人にメールを送信できることです。もう1つの重要な機能は、メールを手作業で作成できることです。これは、毎回わずかに変更する必要がある傾向があるためですが、基本的なテンプレートを使用すると、多くの時間を節約できます。 このため、典型的な「テンプレート」ソリューションがあり、次のようなテンプレートがあります。 Hello {{recipient.full_name}}, Your application to {{activity.title}} has been accepted. You have requested to participate on dates {{application.dates}}, in role {{application.role}} Blah blah blah 私たちが抱えている問題は、(予想どおり)マネージャーが「変数」のアイデア全体を理解していないこと、そしてそれらを上書きするようなことをしていることです。それらは置き換えられず、システムが壊れているか、または「こんにちは{{ジョン}}」のような不可解なものですらある。 大きな問題は、これがいつものように、自動的に送信されるテンプレートの編集にアクセスできるパワーユーザーが数人しかいない "admin"セクションに追いやられておらず、何をしているのかを知っていることが期待されることです。システムのすべてのユーザーがこの問題にさらされます。 明白な解決策は、ユーザーが編集できるようにこのテンプレートを表示する前に変数を置き換えることですが、複数の人にメールを送信する場合は機能しません。 これはかなり一般的な問題のようですが、誰かがすでに解決していることを期待しています。 この問題の適切な解決策をどこかで見た/作成した/思いつくことができますか? 更新 ダニエルBの答えに基づいて私が最終的に行ったのは、カーソル位置とコード内の{{}}の位置に基づいて、ユーザーが現在「変数内」か「外」かを検出することでした。内部では、大きなテキスト領域の下に小さなテキストを表示して、これが置き換えられること、および必要に応じて完全に削除できるが、編集できないことを説明しています。 私はこれをonClick、onChange、onKeyDown、onKeyUpで行います。「キー」イベントの場合、変数内にいる場合、keyCodeがいくつかの「ナビゲーション」キーの1つである場合にのみ、TRUEを返します。それ以外の場合は、FALSEを返します。これにより、その変数の編集が事実上防止されます。 完璧ではありませんが、とても安く、効果があるようです。

2
任意のサイズのデータ​​に対して、BLOBはvarcharよりも効率的ですか?
データベースをセットアップするときは、かなり長い可能性のあるデータに最も効率的なデータ型を使用したいと思います。現在私のプロジェクトは、曲のタイトルとその曲に関する考えを保存することです。一部のタイトルは5文字または100文字を超える場合があり、思考はかなり長く続く可能性があります。 8000に設定されたvarcharを使用するか、blobを使用する方が効率的ですか?blobはvarcharと同じですか?保持されているものに関係なく割り当てられたセットサイズがありますか?それとも単なるポインタであり、実際にはテーブル上の多くのスペースを使用しませんか?KBでBLOBの特定のセットサイズはありますか、それとも拡張可能ですか?
9 mysql 

7
メモリ管理に関するエントリーレベルのエンジニアの質問
入門レベルのソフトウェア開発者としてのポジションを始めてから数ヶ月になります。いくつかの学習曲線(言語、専門用語、VBやC#の構文など)を過ぎた今、より優れたソフトウェアを書くために、より難解なトピックに焦点を合わせ始めています。 同僚に簡単な質問をしたところ、「間違ったことに集中している」と答えました。私はこの同僚を尊重していますが、これが「間違ったこと」に焦点を当てていることには同意しません。 ここにコード(VB)があり、その後に質問が続きました。 注:関数GenerateAlert()は整数を返します。 Dim alertID as Integer = GenerateAlert() _errorDictionary.Add(argErrorID, NewErrorInfo(Now(), alertID)) 対... _errorDictionary.Add(argErrorID, New ErrorInfo(Now(), GenerateAlert())) 私は後者を最初に作成し、「Dim alertID」を使用して書き直したので、他の誰かが読みやすくなっています。しかし、ここに私の懸念と質問がありました: Dim AlertIDでこれを書き込むと、実際にはより多くのメモリを消費します。有限ではありますが、このメソッドを何度も呼び出す必要がありますか?.NETはこのオブジェクトAlertIDをどのように処理しますか。.NETの外では、使用後にオブジェクトを手動で破棄する必要があります(サブの末尾近く)。 ガベージコレクションだけに頼らない知識豊富なプログラマーになりたいです。私はこれを考えすぎていますか?私は間違ったことに集中していますか?

4
ユーザーストーリーを採用する場合、要件の指定が不要であることをチームにどのように説得できますか?
ユーザーストーリーを採用して、重いSRS(ソフトウェア要件の仕様)ではなく、軽量な方法で利害関係者の「意図」を捉えることを計画しています。ただし、彼らはストーリーの価値を理解していますが、すべての属性、優先度、入力、出力、ソース、宛先などを備えたSRSのような言語にストーリーを「変換」したいという要望がまだあるようです。 ユーザーストーリーは、アーティファクトのような正式なSRSの必要性を "排除"するため、SRSを持つことのポイントは何ですか?システムの機能要件を取得するためにユーザーストーリーを採用した場合、SRSは「排除」されることを私のチーム(ちなみに、教育と実践の両方で非常に有能なCSスタッフ)にどのように説得する必要がありますか?(NFRなどもキャプチャできますが、それは質問の意図ではありません)。 だからここに私の「ワークフロー」の引数があります:ユーザーストーリーとして初期要件をキャプチャし、後でユースケースにそれらを詳しく説明します(これは低レベルでドキュメント化する必要がある、つまりUIプロトタイプ/モックアップとの相互作用を説明し、成果物です)展開)。したがって、ユーザーストーリーからユースケースへと移行するのではなく、ユーザーストーリーからSRSへと移行します。 現在、職場でユーザーストーリーをキャプチャしている場合(ある場合)、ユーザーストーリーが存在する場合にSRSが存在しないことを「主張する」ことをどのように提案しますか?

4
商用製品で自分のGPLライセンスコードを使用する
GPL v3の下でライセンスされたJava / Swingでソフトウェアプロジェクトを開発しています。後で、Java / Swingアプリケーションのアルゴリズムを使用するAndroidアプリケーションを作成したいと考えています。このAndroidアプリは商用製品になります(Google Playストアで販売)。 私が開発した商用ソフトウェアで自分のGPLコードを使用する場合、これは問題ですか?

2
ノンブロッキングORMの問題
私はSO について質問しましたが、私のお気に入りのWebフレームワークにはノンブロッキングORMがないことがわかりました。非ブロッキングとは、非同期検索のためのコールバックをサポートするORMを意味します。ORMには、データが受信されたときに実行されるコールバックなどが提供されます。 作成したいのですが、開発の開始を妨げるいくつかの質問があります。 ORMの開発時に発生する可能性のある問題は何ですか? ノンブロッキング検索をサポートすると、ORMの複雑さが劇的に増加しますか? なぜ非ブロッキングORMが非常に少ないのですか? 更新:質問を改善する必要があるようです。私たちはすでに非ブロッキングの方法でデータを受け取ることができるソリューションを持っています、そして私はそのようなソリューションを使用するほとんどの会社が生のSQLを使用すると信じています。今後のプロジェクトで再利用できる、より一般的なソリューションを作成したいと考えています。私たちはどんな困難に遭遇するでしょうか? 更新2:優先言語はpythonですが、私は原則に興味があります。この質問は実際に私のためです。私はすでにノンブロッキングORMを持っているプラ​​ットフォームを見ていきます。
9 web  orm  server-side 

9
フローチャートの代わりに疑似コードをいつ使用しますか?
私はプログラミングのさまざまな技法を使っている学生で、疑似コードとフローチャートに出くわしました。これらは両方とも、実際にプログラミングする前に問題を検討するために使用されることを知っていますが、これについていくつか質問があります。 いつ計画を立てるために疑似コードを使用し、いつフローチャートを使用しますか?または、実際にプログラミングする前に両方を行う方が良いでしょう。それは私の次のプロジェクトなので、特に、JAVAの小さなアーケードゲームに適しています。 疑似コードがフローチャートではなく実際のコードに非常に似ていることに気づきました。本質的にプログラムに疑似コードをコピー/貼り付けするので、これは疑似コーディングをより良くしますか(もちろん、言語に合わせて変更する必要があります。その部分は理解しています)。 プログラミング中にこれらの両方を使用することは現実的ですか?特に前述の同じゲーム。ありがとう。

2
動的プログラミングの問題を解決する方法
私は最近この質問に出くわしました。「シンボルの文字列で構成されるブール式が与えられます。true、false、and、or、xor。括弧で囲む方法の数を数えますtrueと評価されるような式。たとえば、trueと評価されるように 'trueとfalse xor true'を括弧で囲むには2つの方法があります。 私はそれが動的プログラミングの問題であることを知っていたので、次のような自分で解決策を考え出そうとしました。ABC .... D where '。'のような式があるとします。操作のいずれかを表します。または、xorおよび大文字はtrueまたはfalseを表します。このサイズKの式がtrueを生成する方法の数はNであるとしましょう。新しいブール値Eがこの式に追加されると、この新しい式1を括弧で囲む2つの方法があります((ABC .... D) .E)つまり ABC .... Dの可能なすべての括弧で、最後にEを追加します。2.(ABC(DE))すなわち まずDEを評価してから、サイズKのこの式が真を生成する方法の数を見つけます。 T [K]がサイズKの式がtrueを生成する方法の数であるとすると、T [k] = val1 + val2 + val3で、val1、val2、val3は次のように計算されます。 1)EがDとグループ化されている場合。 i)Dの値を変更しない ii)Dの値を逆にします 最初のケースではval1 = T [K] = Nです(これは最初のABC ... D式に減少するため)。2番目のケースでは、Dの値を逆にしてdp [K]を再評価します。これはval1です。 2)Eが式全体とグループ化されている場合。 // val2には、「true」の数が含まれます。Eは、括弧で囲まれたABCのすべてのインスタンスの中で「true」を与えた式で生成されます...... D i)true.E = trueの場合、val2 = N ii)true.E = falseの場合、val2 = …

3
最新のWebキットのみのWebアプリケーションでjQueryを使用することには意味がありますか?
最近、Android(2.3以降)およびiOS(4以降)用のいくつかのモバイルWebアプリに取り組んでいます。彼らのブラウザは非常に強力なECMAScript5のほとんどをサポートしており、必要なときにだけjQueryを使用して、可能な限り言語機能を使用したいと考えていました。 私がjQueryを使用する唯一のことは、のより短い代替手段を持つことですdocument.querySelectorAll。それも取り除くかもしれません。 最新のWebKitブラウザーのみをサポートする必要がある場合、jQuery(および他の汎用ライブラリー)を取り除くことは良い考えですか?結局のところ、これらは間接的なレイヤーです。 (これまでのところ、アプリはAJAX呼び出しを行う必要はありません。これは醜くなりそうなことの1つだと思います。しかし、そのためだけにjQueryを維持する価値はありますか?)

1
CMMIの有効性に関する経験的な証拠はありますか?
CMMI指向の組織におけるソフトウェアプロジェクトの有効性を調査する研究があるかどうか疑問に思っています。たとえば、CMMI組織は、非CMMI組織よりも時間どおりに、または予算通りにプロジェクトを完了する可能性が高いですか? CMMIは「能力成熟度モデル統合」の略です。カーネギーメロン大学(SEI-CMU)のソフトウェア工学研究所によって開発されました。 これは認定ではありませんが、レベル2やレベル3など、さまざまなレベルのCMMIに組織を「評価」するさまざまな会社があります(CMMIレベル1は、誰も望んでいない動物学のホッブス自由であると思いますつまり、以前にCMMIを聞いたことがない場合でも、全員が少なくともCMMIレベル1です。 私は間違いなく専門家ではありませんが、組織はさまざまな仕事の範囲内でCMMIレベルを評価できると考えています。つまり、サービス提供、ソフトウェア開発、ばかげているなどです。私の質問はソフトウェア開発の評価に焦点を当てています:組織ですソフトウェアプロジェクトのCMMIレベルXに評価されたソフトウェアプロジェクトは、CMMIレベルXに評価されていない別の組織よりも、ソフトウェアプロジェクトを予定どおりに予算内で完了する可能性が高いですか。 ただし、ソフトウェア指向のCMMIに関する明確なデータがない場合、CMMIの評価が他の活動にも及ぼす影響に興味があります。 私が最初に質問したのは、ソフトウェアで行われたさまざまな調査を見たからです(たとえば、The Mythical Man Monthのエッセイは、McConnellのCode Completeがそうであるように、多数の実証的調査を参照しています)。したがって、ソフトウェア開発の実証的調査を実施している組織があることを知っています。 。

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