ソフトウェア工学

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

9
コードの中であなたの場所を維持するための良いテクニックは何ですか?
この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 ブックマークを使用してコードの1つのポイントを覚えていることを理解しています。しかし、調査しているコードの流れをどのように追跡しますか?例:複数のブックマークとそれらが作成された順序。 例: バグレポート:「壁の角で衝突が機能していません」 バグを再現すると、特定のポリゴンが衝突しないことがわかります。 衝突コードは利用できない開発者によって書かれました。そのため、調査は次のようになります。 調査中、特にGoogleなどの非コードアイテムを確認する場合、コード内での位置を失うことが合理的に予想される場合があります(このコードパスを既に見ましたか?またはどのコードパスを調査しましたか?この関数などに)。避けられない中断についても同じことが言えます(ボス:[Lengthy Pointless Report] NOWなどが必要です) コード内での自分の位置を追跡する方法を提供するためのテクニックやツールのリソースがあると便利です。 編集:上記の例は、回答を必要とする実際の問題ではなく、潜在的な説明として意図されています。 この質問を表現する別の方法は次のとおりです。 新しいシステムを学習するとき、コードを学習する際に現在の状態をどのように追跡しますか?それは理解することはありません理由コードは(コメントはのためにどうあるべきかである)、それが何を行いますが、どのようにそれはそれをしない(これはコードのみではなく、コメントを読んを通じて学習されます)。

9
ストアドプロシージャにビジネスロジックを配置するかどうか。
この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 「ビジネスロジックをストアドプロシージャに入れるかどうか」というトピックについては常に議論があります。ORMツールを使用せず、ビジネスロジックをストアドプロシージャに入れないことにした場合、どこにビジネスロジックを入れますか? 以前のアプリケーションでは、すべてのビジネスロジックをストアドプロシージャにのみ配置することを常に好みました。次に、.NETコードから、データアクセスアプリケーションブロックを使用してこれらのストアドプロシージャを呼び出します。SQLHelperなど。しかし、これは常にシナリオになることはできません。だから私はいくつかのグーグルをしましたが、混乱してしまいました....... 何か提案...?
21 c#  .net  sql 

2
Big Thetaの代わりにBig Oが教えられるのはなぜですか?
Big O表記は関数の上限を提供しますが、Big Thetaは厳密な制限を提供します。しかし、Big O表記法は、通常、Big Thetaを本当に意味する場合に、一般的に(そして非公式に)教えられ、使用されることがわかります。 たとえば、「Quicksort is O(N ^ 2)」は、「Quicksort isΘ(N ^ 2)」という非常に強力なステートメントに変換できます。 Big Oの使用は技術的には正しいですが、Big Thetaのより一般的な使用はより表現力があり、混乱が少なくなりませんか?このBig Oがより一般的に使用される歴史的な理由はありますか? ウィキペディアのメモ: 非公式に、特にコンピュータサイエンスでは、Big O表記法は、Big ThetaΘ表記法を使用することが特定のコンテキストでより実際に適切である場合に、漸近的タイトバインドを記述するためにしばしば乱用されることがあります。

6
ワークロードと新入社員の支援のバランス[終了]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 4年前に閉鎖されました。 私は最初の仕事に約2か月かかりましたが、ワークロードと新入社員の支援には微妙なバランスがあることに気づき始めました。バグを修正し、できるだけ多くの顧客の問題を解決するよう管理者から多くのプレッシャーがあるので、チームの全員が新入社員のスピードアップを支援するのではなく、仕事のバックログに非常に集中しているようです。新入社員は質問をすることができ、時には開発者に座って助けてもらうこともありますが、多くの場合、製品のベテランだけが仕事に忙しすぎるので理解できるというあいまいな答えを受け取ります。 新入社員もバランスを維持しなければならないことを理解しています。場合によっては、ベテランが20分でできたはずの問題を調査して修正するのに、新入社員に3日かかることがあります。新入社員は、製品とコードベースを学習するための努力を示す必要があります。 退役軍人のワークロードを単純に削減することなく、新入社員を支援することと、手頃なレートでバックログに取り組み続けることとのバランスをどのように取ることができますか?

6
DI / IoCを使用すると、「新しい」キーワードの出現をすべて削除する必要がありますか?
Dependency InjectionとInversion of Controlコンテナを使用すると、コードから" "キーワードがすべて削除さnewれますか? 言い換えれば、どのオブジェクト/依存関係も、どれほど単純または短命であっても、IoCコンテナー内に「登録」し、それらを使用する必要があるメソッド/クラスに注入する必要がありますか? いいえの場合、依存関係/オブジェクトがIoCコンテナに登録される線と、具体的な参照として「インライン」で作成されるものとの間に、newキーワードを介してどこで線を引きますか?

7
チームの新人でありながら、既存の統合と単体テストの品質について何ができますか?
私がキャリアで出くわした繰り返しのテーマは、チームに到着する新しい開発者であること、そして既存のユニットと統合テストスイートに対する固有の不信をすぐに持つことです。 面接中に、経営陣から「ユニットテストを強力にサポートしている」ことと、それを公然と奨励していることが伝えられます。彼らはそうしますが、テスト自体についてのすべては単に間違っています。100%の統合テストカバレッジがあり、10%未満の反復可能な単体テストカバレッジがある場合、100%のカバレッジを主張しているという事実と同様です。私が見つけた他のいくつかの問題: 単体テストと統合テストの間に明確な兆候はありません。単体テストと統合テストは、同じクラスに混在しています。 特定の環境のデータベース上の非常に特定の動的データに対する未宣言の明示的な依存関係がある統合テスト。 非トランザクション統合テスト。基本的には、後からクリーンアップするかどうかわからないテストであり、テストを再現可能にするために手動のデータベース「スクラビング」が必要になる場合があります。 モッキングは一切行われません。アプリケーションコードでは、モッキングを可能にするためだけに大幅な見直しが必要です。つまり、テストを考慮せずに設計します。 テスト名をすばやく確認して、実行中のテストを大まかに判断するための明確な命名規則はありません。 これは、すべてのテストが役に立たないか悪いというわけではなく、かなりの数のテストが非常に良く、維持する価値があると言っているわけではありませんが、金のためにパンするような気がします。ブラックボックステストケースのデータベースを台無しにするのが怖かったからといって、意図的にテストを実行することは避けました。 これは本質的に、私が個人的に何らかの方法で書いたりレビューしたりしていないユニットおよび統合テストの固有の不信感を与えました。あるレベルでは、テストスイートの品質を信頼していない場合、チームやプロジェクトにはまったく価値がありません。 この状況に陥ったとき、あなたはどうしますか?攻撃の最善の計画は、このようなものに取り組むことだと思いますか? すべてのテストをリリース間で途方もない努力でリファクタリングする必要がありますか?このレガシープロジェクトが1日の強固な単体テストの対象となる可能性があるという考えを捨てる必要がありますか?

11
1960年代に人工知能に取り組んでいる科学者とエンジニアが最初に自信過剰になった理由はありますか?
AIとデータマイニングのクラスと本を始めたばかりです。AIアプリケーションプログラミングは、AIの歴史の概要から始まります。最初の章では、1940年代から現在までのAIの歴史を扱います。ある特定の声明が私に突き出ました: [60年代] AIエンジニアは、約束を超えて不十分に... 自信過剰の理由は何ですか?それは、ブレークスルーが間近に迫っていることを示す数学的予測モデルによるものなのでしょうか、それとも利用し続けるハードウェア能力の増大によるものなのでしょうか?

4
C ++ '11が承認された場合、C ++初心者が言語を学習する方法は変わりますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 4年前に閉鎖されました。 私はしばらくの間C ++を学びたかったので、高校でAPコンピュータプログラミングを受講しました(JavaではなくC ++だった頃)。私はCを楽しんでいて、C ++を学ぶ時間を見つけていないか、生産性の高いC#に頼るだけです。 私の質問はこれです:C ++ '11が承認されていることを考えると(完全には実装されていませんが)、これはC ++の学習に取り組むべき方法を変えますか?C ++:The Complete Reference By Herb Schildtを1998年から所有しています。新しく承認された標準は、そのような本からの学習を標準からのものを含むいくつかの新しいチュートリアル/本よりも重要ではありませんか?古い本から学ぶことの利点はありますか?
21 learning  c++ 

5
オープンソースソフトウェアに直接起因するビジネス災害の注目すべき例はありますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 8年前に閉鎖されました。 「エンタープライズ」環境では、プロプライエタリなソフトウェアに対する強い偏見を観察しました。Javaを使用する大企業でも、MySQLやPostgreSQLを見つけることはまれであり、WebSphereやWebLogicはJBossやTomcatよりも強く推奨されます。 これは非常に理解しやすいです。多くの開発者はWebSphereやOracle DBよりもTomcatやPostgresを好みますが、これらの問題で最終決定を下すのは開発者ではありません。本番環境でどのDBとアプリケーションサーバーを使用するかを決定する人は誰でも、本当に、本当に、悪いことを引き起こしたフリーソフトウェアを選択したために解雇された場合と比較して、ライセンス料が非常に少ないように見えます。 PostgresがOracleと同じくらい良いかどうかの質問はしていません。それはポイントではありません。Oracleは、機能とベンチマークを慎重に検討した結果、Postgresよりも選択されません。特定の場所ではフリーソフトウェアが信頼されていないため、Postgresは会話に参加しません。 この信頼の欠如が特定の出来事に対応して生じたのではないかと思っています。だから私の質問はこれです:オープンソースソフトウェアの欠陥の結果であることが示されたビジネス災害(障害、収益の著しい損失、企業データの著しい損失など)の文書化された事例はありますか? 明確化: OSSを完全に採用している企業レベルの企業での経験がある場合は、問題を先入観せず、特定の状況のニーズに基づいて選択する必要があります。あなたの経験は、他の企業が非常に異なる態度を持っているという事実を変えることはなく、これらの企業が少数派であっても私の質問は有効です。

6
一人プロジェクトを整理する方法は?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 時々(読みます:ほぼ毎日)新しいアイデアを思いつき、お気に入りのエディター/ IDEで新しいプロジェクトを開始し、コーディングを開始し、翌日それを削除して新しいものを開始します。私は現在約6年間プログラミングを行っていますが、その6年間で非常に小さなプロジェクト(Pastebin.comのダッシュボードウィジェット)を実際に1つだけ完了しました。これはコーディングの学習には素晴らしいかもしれませんが、私は本当に何かを完成させたいです。 実際のコーディングの前、間、後に行うべきことは何ですか?そのようなワンマンプロジェクトを整理する方法を教えてくれる優れたリソースは何ですか? 問題があれば、WebまたはMacの開発をしたいです。

10
コードを変更してライブWebサイトを更新するにはどうすればよいですか?
これは非常に基本的な質問です。誰かが私にユーモアを与え、彼らがこれをどのように処理するかを教えてくれたら、私はとてもうれしいです。 SynchToyをインストールして以下の問題を修正しようとしているため、これを投稿することにしました。 この状況にいると、何度も痛みを伴う明白な方法を見逃しています。これは、会社で唯一の開発者であることに起因しています。 職場のコンピューターで開発されたASP.NET Webアプリケーション ソリューションには2つのプロジェクトがあります。 ウェブサイト(ファイル) WebsiteLib(C#/ dll) Gitリポジトリを使用する GoGrid 2008R2 Webサーバーに展開 展開: コードを変更します。 Gitにプッシュします。 サーバーへのリモートデスクトップ。 Gitからプルします。 Windowsエクスプローラーでドラッグ/ドロップして、ライブファイルを上書きします。 ステップ5では、Webサイトのルートからすべてのファイルを削除します。これは良いことではありません。だから、SynchToyをインストールしようとしています... 更新:すべての有用な応答に感謝します。答えをマークするものを選択することはできません-Web展開を使用する間に-いくつかの有用な提案があるように見えます: Webプロジェクト=単一のDLLにパッケージ化されたサイト全体-単純な更新をプッシュすることはできません-50人の会社の孤独な開発者であるため、これは時々より単純なもののままです。 SCMからサイトのWebルートに直接移動します-私はもともと、SCMの隠しディレクトリが公開されることを恐れてこれをしませんでしたが、ここでの回答はそれを乗り越えるのに役立ちました(私はまだ1確認するのを忘れることを心配することは、時間の経過とともにまだ真実です) Webファームを使用し、ノードに体系的に展開する-これは、ダウンタイムがゼロの理想的なソリューションです。これは、サイトが本質的に会社のリアルタイムの収益源であるため、実際に私が気にしていることです。ただし、サーバーのコストは2倍になります。 ->最後に、サイトのシングルクリック展開が必要であるか、または他に何か間違っている必要があるという基本原則の強化は、おそらく私が答えから得た最も有用なものです。 更新2:私はこれに戻って、今何ヶ月もの間存在し、完全に機能している実際のソリューションで更新すると思った(私の単一のWebサーバーソリューション)。 私が使用するプロセスは次のとおりです。 コードを変更する Gitにプッシュ サーバーへのリモートデスクトップ Gitからプル 次のバッチスクリプトを実行します。 cd C:\ Users \ Administrator %systemroot%\ system32 \ inetsrv \ appcmd.exe停止サイト "/site.name:Default Web Site" robocopy Documents \ code …

10
マネージャーは、デモごとに要件仕様を変更し続けます[終了]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 職場環境の背景 私のマネージャーには、コンピューターやソフトウェアの背景や理解がまったくありません。彼は彼の人生でどんな形のコードも(10フィート以下の物理的距離からでも)見たことがない可能性が高いです。 私が実装を求められているものの複雑さを理解している人はいません。私が半ハードコード化すれば誰も知らないという点まで。 上ジョエルのテスト我々は信じられないほどのスコアスコア0。 問題点 マネージャーおよびその他の「シニア」は、要件の仕様を変更し続けます。パッチを適用した「修正」ではなく、適切なエンジニアリングを行った場合、基礎となるデザインの変更が必要な変更 コードを見る人は絶対にいません(おそらく、誰もその方法を知らないため、または行うべきであっても)。 問題の複雑さやソリューションの優雅さを評価してください。 アプローチの改善を提案します。 コードの品質を評価してください。 コードを改善できる場所を指摘します。 文法的には意味がありますが、他の方法では意味をなさない多くの専門用語が使用されます。 ソフトウェア会社のように感じたり、振る舞ったり、働いたりしません。 質問 何をすべきですか?特に、私のコードの改善点を指摘する人がいないことに関して。 更新 HLGEM(およびおそらく他の人)の質問に答えるために、それを試して修正するために何をしたかについて。Redmineをセットアップし、ソース管理をすべての人に紹介することを申し出ました。分散型(gitまたはmercurial)をお勧めしますが、一元化されたものについても話し、チームに決定させます。応答は、物事が行われており、数週間以内に行われることでした。それを見たことがないし、会社の他の部分がそれを使っているかどうかも知らない。

3
LISPのマクロは、DSLを作成するRubyの「能力」よりも優れているのはどの領域ですか
Rubyを輝かせるものの1つは、ドメイン固有の言語をより良く作成する機能です。 シナトラ Rspec レーキ Ruby on RailsのActiveRecord マクロを介してLISPでこれらのライブラリを複製できますが、Rubyの実装はよりエレガントだと思います。それでも、LISPのマクロはRubyのマクロよりも優れている場合があると思いますが、マクロは考えられませんでした。 それでは、LISPのマクロは、DSLを作成するRubyの「能力」よりも優れているのはどの領域ですか。 更新 現代のプログラミング言語がLISPの特異点に近づいているので、私はこれを尋ねました。 Cはマクロ展開プリプロセッサを取得しましたが、非常に原始的でエラーが発生しやすい C#には属性がありますが、これは読み取り専用であり、リフレクションによって公開されます Pythonは、関数(およびv 3.0のクラス)の動作を変更できるデコレーターを追加しましたが、かなり制限されています。 気をつければエレガントなDSLを作成するRuby TMTOWTDIですが、Rubyの方法です。 LISPのマクロは特別な場合にのみ適用でき、他のプログラミング言語機能はソフトウェア開発の今日の課題に対応するために抽象化を高めるのに十分強力であると思いました。
21 ruby  lisp  dsl 

4
githubチームのワークフロー-分岐するかどうか
この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 私たちは現在Subversionを使用しているWeb開発者の小さなチームですが、まもなくgithubに切り替えます。 私はさまざまなタイプのgithubワークフローを検討していますが、各開発者向けのgithubのフォーク概念全体がこのような良いアイデアであるかどうかはわかりません。 フォークを使用する場合、各開発者は独自のリモートおよびローカルリポジトリを持つことになります。変更セットをプッシュするのが難しく複雑になりすぎるのではないかと心配しています。また、私の最大の懸念は、各開発者に2つのリモートを強制することです:オリジン(リモートフォーク)とアップストリーム(メインリポジトリからの変更を「同期」するために使用)。それが物事を行うためのそのような簡単な方法であるかどうかはわかりません。 これは、ここで説明されているワークフローに似ています:https : //github.com/usm-data-analysis/usm-data-analysis.github.com/wiki/Git-workflow フォークを使用しない場合は、作業中のタスクごとにブランチを作成する中央リポジトリを使用して同じリポジトリの開発ブランチにマージすることで、おそらくうまくいくでしょう。つまり、ブランチのマージを制限することができず、中央リポジトリに多くのブランチを置くのは少し面倒かもしれません。 両方のワークフローを試したチームからの提案はありますか?
21 git  github 

4
60年代と70年代にプログラマーはどのようにネットワークを使用して高価なコンピューターリソースを共有しましたか?
この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 私は若く、かつてのようにネットワーキングとプログラミングを体験するために60年代と70年代に生きていませんでした。私はVan JacobsonによるContent Centric Networkingに関する講演を見てきましたが、これらの講演では、60年代および70年代に、ネットワークは希少なカードリーダーへのアクセスを取得するなどのリソース共有の問題を解決するために設計されたと述べている歴史的な視点を提供しますまたは高速テープドライブ。彼はその後、この時代にはデータがほとんどなく、そのデータは「コンピューター上に存在しなかった」と言い続けます。それはあなたが持ち歩いたもの、例えばテープや印刷物です。 これに関して2つの質問があります。 1)人々はどのように「リモート」でカードリーダーのようなものを使用しましたか?確かにある時点で、物理カードはコンピューターのある場所に届けられなければなりませんでした。あなたが100マイル離れていたら、それは彼らが事前にカードを掲示し、それからそれらのカードデッキを実行するのに必要なコマンドを実行するために単にネットワークを使用したことを意味しましたか? 2)人々は一般にどのようにしてプログラムの結果を取得しましたか?それはワイヤーを介して送り返されましたか、それともプログラムが遠隔研究者に戻った後に印刷物/テープなどが投稿されましたか? 私が言ったように、ここで私の時代が何らかの形で混同されてしまった場合、私は謝罪します、私はその時に生きていませんでした。 ありがとう。

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