ソフトウェア工学

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

11
typedefsおよび#defines
私たちは皆、間違いなくtypedefsと#definesを使用しました。今日、彼らと仕事をしている間、私は物事について熟考し始めました。 int別の名前のデータ型を使用するには、以下の2つの状況を考慮してください。 typedef int MYINTEGER そして #define MYINTEGER int 上記の状況のように、多くの状況で、#defineを使用して非常にうまく処理でき、typedefを使用して同じことを実行できますが、同じことを行う方法はまったく異なる場合があります。#defineは、typedefではできないMACROアクションも実行できます。 それらを使用する基本的な理由は異なりますが、動作はどの程度異なりますか?両方を使用できる場合に、一方が他方よりも優先される場合 また、一方の状況では、他方よりも高速であることが保証されていますか?(たとえば、#defineはプリプロセッサディレクティブであるため、すべてがコンパイルまたは実行時よりも早く実行されます)。

8
Qtフレームワークを通じてC ++を学習していますC ++を実際に学習しています[非公開]
私が抱えている問題は、私が読んだC ++の本のほとんどは、構文や言語の基本(forループwhile、配列、リスト、ポインターなど)にほぼ永遠に費やしていることです。 しかし、彼らは学習に使用するのに十分シンプルでありながら、言語の哲学と力を理解するのに十分な実用的なものを決して構築しないようです。 それから素晴らしいライブラリーであるQTを見つけました! しかし、彼らが持っているデモを通して、私は今、逆のジレンマに陥っているようです。金持ちの息子が父親の助成を受けたスポーツカーを走り回っているような気がします。私は素晴らしいソフトウェアを構築できたが、内部で何が起こっているのか見当もつかないように。 私のジレンマの例として、単純なWebブラウザーを構築するタスクを取り上げます。純粋なC ++では、どこから始めればよいのかさえわかりませんが、Qtライブラリを使用すると、コードの数行以内で実行できます。 私はこれについて文句を言っていません。言語の基本構造とQtフレームワークが提供する高レベルのインターフェースとの間の知識の空白を埋める方法を疑問に思っていますか?

3
「Readme」の由来
人々はいつReadmeファイルを書き始めましたか? フォーマットに関係なく、ほとんどすべてのプログラムにこのファイルがあるようです。 このドキュメントの最初の使用が文書化されていますか?

5
オープンソースのデスクトップTwitterクライアントのOAuth v1コンシューマキーとシークレットをユーザーに公開せずに保存するにはどうすればよいですか?
シッククライアント、デスクトップ、オープンソースのツイッタークライアントを作りたいです。言語として.NETを使用し、OAuth / TwitterラッパーとしてTwitterizerを使用しているため、アプリがオープンソースとしてリリースされる可能性があります。 OAuthトークンを取得するには、4つの情報が必要です。 アクセストークン(twitterユーザー名) アクセスシークレット(twitterパスワード) 消費者キー 消費者の秘密 PGP秘密鍵のように、2番目の2つの情報は共有されません。ただし、OAuth認証フローの設計方法により、これらはネイティブアプリ上に存在する必要があります。アプリケーションがオープンソースではなく、コンシューマキー/シークレットが暗号化されていたとしても、かなり熟練したユーザーはコンシューマキー/シークレットペアにアクセスできます。 だから私の質問は、この問題をどのように回避するのですか?デスクトップTwitterクライアントが消費者の鍵と秘密を保護するための適切な戦略は何ですか?

5
最新のソフトウェア製品には元のコードがどれだけ残っていますか?[閉まっている]
あなたの多くは、有名なソフトウェアを出荷する大企業で働いています。Firefox、Photoshop、Windows、Linuxなどの最新の大規模アプリケーションには、元のコード(基本的には「v1.0」リリースだったコード)がどれだけ残っているのだろうかと思いました。私は実際の体験と現実世界の戦争物語を本当に好むでしょう。 好奇心を満たしてくれてありがとう。 編集 ある程度の誤解があることがわかりました。私は後だとして、基本的なことは、次のとおりです。あなたがたときに責め / 注釈のソースコードは、最初の1.0のリリース以来、手付かずの任意の部分、あるいは全部のファイルがあります。


11
適切に設計された/高品質のオープンソースソフトウェア[非公開]
私は、ソフトウェアデザインの観点から分析するオープンソースソフトウェアを選択する必要があるソフトウェアデザインクラスを受講しています。 それは大きなプロジェクトでなければなりません:100,000行以上のコード。 優れたソフトウェア設計に関する優れた洞察を得るために、非常によく設計され、設計されたソフトウェアを選択したいと考えています。 良い設計とは、意味のあるクラスとアーキテクチャ、(設計)パターンの適切な使用、抽象化の適切な使用、コンポーネントの適切な編成、コンポーネント間の高い凝集性と低い結合などを意味します。 私に提案するソフトウェアはありますか? ソフトウェアには適切な設計が必要なだけで、設計を文書化する必要はありません。:) エンドユーザー用のアプリケーションである必要はありません...また、ライブラリ、ツールなどにすることもできます...

15
極度の不安を感じることなく、本番の展開を自動化するにはどうすればよいですか?
当店では、ソース管理にSVNを、CIにCruiseControlを使用して、開発、テスト、および統合環境への自動ビルドと展開を処理しています。 これはすべてスムーズに機能しますが、ハードウェアとリソースの制約により、統合環境は運用環境のような2サーバーの負荷分散環境ではありません。それ以外はすべて同じですが、それが統合環境と実稼働環境の唯一の違いです(ただし、大きな環境です!) 理論的には、違いはアプリサーバーのわずかに異なる構成であり、デプロイスクリプトはビルドアーティファクトを1つだけではなく2つのサーバーにドロップするだけでよいのですが、なぜ本番デプロイを自動化するのにそんなに緊張するのでしょうか?! 私は一般的にコントロールマニアではありませんが、手作業でプロダクションにプロダクションを展開する必要性を常に感じています。私はこれが一般的に本当に悪いこと™であると同僚から聞いたが、彼らはそれに対して主張をすることに失敗した。 手動で行うと、正しいファイルを物理的にコピーしていること、アプリサーバーを物理的にシャットダウンし、正常に終了したことを確認できます。正常に起動し、展開が成功したことを確認してください。それは私に心の安らぎを与えます。 自動スクリプト化された運用展開のこのOR引数に対する引数は何ですか?

16
シンプルさは常に可読性を向上させますか?
最近、私は会社のために一連のコーディング標準を開発していました。(私たちは会社の新しい言語に分岐する新しいチームです。) 最初のドラフトでは、コーディング標準の目的を、読みやすさ、保守性、信頼性、およびパフォーマンスの向上として設定しました。(書き込み可能性、移植性、コスト、以前の標準との互換性などを無視しました。) このドキュメントを書いているときの私の目標の1つは、コードのシンプルさのアイデアを推し進めることでした。アイデアは、1行につき1つの関数呼び出しまたは操作のみが必要であるというものでした。私の希望は、これにより読みやすさが向上することでした。以前の言語から引き継いだアイデアです。 ただし、このプッシュの背後にある仮定に疑問を投げかけました。 シンプルさは常に読みやすさを向上させますか? より単純なコードを記述すると読みやすさが低下する場合はありますか? それは明らかなはずですが、「シンプル」というのは「書くのが簡単」という意味ではなく、1行あたりの処理が少ないことを意味します。

7
経験のない仕事に就くには?[閉まっている]
私は新しい大学の卒業生になりそうで、インターンシップまたはジュニアソフトウェアエンジニアの地位を得ようとしています。しかし、私はこの分野でまったく経験がありません。 私が持っているのは、私の学位と完了したクラスのプロジェクトだけです。面接を受けるために履歴書をもっと魅力的にするにはどうしたらいいですか?また、クラス内のプロジェクトの詳細をどのように構成する必要がありますか?詳細を提供する必要がありますか?
32 skills 

4
「制御の反転」は「貧血領域モデル」を促進しますか?
前回のプロジェクトでIoC Containerを使用したとき、貧弱なエンティティとステートレスサービスでのビジネスロジックの大部分になりました。 「Inversion of Control」を利用する他の開発者によって書かれたプロジェクトを見てきましたが、それらは常に「Anemic」です。 「Anemic Domain Model」はアンチパターンであるため、IoCとRich Domainを使用できますか?彼らの良い例、それを行うオープンソースプロジェクトはありますか?

18
開発者は、不要な機能や有害な機能に反対するべきでしょうか?
新しい機能、つまり非重要/疑わしい機能について議論するとき、開発者からの良い態度は何ですか? ある種のJavaのような言語を開発しているとします。上司は、「開発者がオブジェクトメモリを直接操作するにはポインターが必要です」と言っています。 開発者は想像を絶する複雑さとセキュリティの脆弱性を追加するため、アイデアを打ち倒すべきですか、それとも彼は求められていることをすべきですか? これは良い例ではないかもしれませんが、ワークフローを中断するボタンを追加したり、プログラムの内部構造に反するなど、灰色の領域にあるものについてはどうでしょうか? 通常のプログラマーにとって最適な「できる」対「できない」配布は何ですか? 編集:質問は悪いボスに関するものではありません:D わずかに役立つかもしれないが、目立った量の問題を追加する新しい問題に人々がどのように取り組むのか、私はもっと興味があった。 一般的な態度は次のとおりです。 はい、それを行います、複雑さを台無しにします 多分 いいえ、一般的な手直しと含意は変更を正当化しません 優れた開発者の反応はどうでしょうか?
32 design 

8
コンシューマーアプリのパフォーマンスが低下する原因は何ですか?[閉まっている]
私のComcast DVRはすべてのリモートコントロールキー押下に応答するのに少なくとも3秒かかり、テレビを見るという単純なタスクをイライラするボタンマッシングエクスペリエンスにします。私のiPhoneはテキストメッセージを表示するのに少なくとも15秒かかり、iPodアプリを起動しようとする時間の1/4でクラッシュします。単にメールを受信して​​読むには、1分以上かかることがよくあります。私の車のnavcomでさえ、どろどろで無反応のコントロールを備えており、数秒以内に離すと連続した入力を飲み込むことがよくあります。 これらはすべて、ユーザビリティを最優先すべき固定ハードウェアの最終消費者向けアプライアンスですが、それでも基本的な応答性とレイテンシーで失敗します。彼らのソフトウェアは遅すぎる。 この背後には何がありますか?それは技術的な問題ですか、それとも社会的な問題ですか?誰または何が責任を負いますか? これらはすべて、ネイティブコードではなく、管理されたガベージコレクションされた言語で記述されているためですか?これらのデバイス用のソフトウェアを作成したのは個々のプログラマーですか?これらのすべてのケースで、アプリ開発者はターゲットとするハードウェアプラットフォームとその機能を正確に把握していました。彼らはそれを考慮しませんでしたか?「最適化はすべての悪の根源である」と繰り返し言っている人ですか?それらすべてのミリ秒が合計して数分になるまで、それは毎回「おお、それはちょうど100msだけです」という考え方でしたか?そもそもこれらの製品を購入したのは私のせいですか? それはいくつかの点でたときにはっきりと「パフォーマンスが問題ではない、ああ、コードのスピードを心配しないでください」これは、単一の答えと主観的な質問ですが、私は頻繁に言って、ここで非常に多くの回答を見てイライラしていないため問題遅い、応答しない、ひどい体験にこだわるエンドユーザー。 それでは、これらの製品のどの時点で問題が発生しましたか?プログラマーとして、私たち自身の顧客にこの痛みを与えないようにするために私たちは何ができますか?

2
SQLの非公式な発音の歴史は何ですか?
SQLは、「SQL」のように/ ˌɛskjuːˈɛl /として正式に発音されます。 ボーリュー、アラン(2009年4月)。メアリーE.トレセラー。編 SQLの学習(第2版)。米国カリフォルニア州セバスタポル:オライリー ISBN 978-0-596-52083-0。 しかし、しばしば「sequel」のように/ ˈsiːkwəl /と発音されますが、この2番目の発音の背後にある歴史は何ですか?
32 sql  history 

6
固定範囲+固定期限+固定価格契約を「アジャイル」で機能させることはできますか?
社内で使用しているプロジェクトの一部はスクラムですが、それでもお客様に「すべてを修正」しています。私たちは複雑な成功を経験しています(顧客はバーンダウンチャートの可視性を好む)。作業するプロジェクトの種類は、アジャイルメソッドを使用して正常に実行できますか?
32 agile  scrum 

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