ソフトウェア工学

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

6
固い原則とコード構造
最近の就職の面接で、私はSOLIDについての質問に答えることができませんでした-さまざまな原則の基本的な意味を提供する以外に。本当にバグです。数日かけて掘り下げましたが、まだ十分な要約を出していません。 インタビューの質問は: SOLIDの原則に厳密に従っていると言った.Netプロジェクトを見るとしたら、プロジェクトとコード構造の観点から何を期待しますか? 私は少しもがいて、質問に本当に答えなかったので、爆撃されました。 この質問をどのようにうまく処理できますか?
150 c#  .net  solid 

2
クローズドソースコードの既存のベストライセンス[終了]
私は自分でいくつかのクローズドソースのアプリケーションを作成しています(私の背後には大企業はありません)。それらを保護する方法を正確に知りたいと思っています。すべてのソースコードファイルの先頭に、次の非常に基本的な著作権表示があります。 /******************************************************* * Copyright (C) 2010-2011 {name} <{email}> * * This file is part of {project}. * * {project} can not be copied and/or distributed without the express * permission of {name} *******************************************************/ しかし、それだけでは不十分だと思い始めています。弁護士を雇うお金がなければ、私は本質的に「あなたはそれを使うことができ、それだけだ」と言っているクローズドソースライセンスに興味があります。私はオープンソースライセンスの比較または「弁護士を見つける」答えしか見つけることができないので、1つを見つけることは非常に困難でした。 これに似たものを使用できるクローズドソースライセンスはありますか?

13
「変更しない」とマークされたコードをリファクタリングする必要がありますか?
私はかなり大きなコードベースを扱っており、既存のコードをリファクタリングするために数ヶ月を与えられました。リファクタリングプロセスが必要なのは、すぐに製品に多くの新しい機能を追加する必要があり、現在のところ、他の機能を壊すことなく機能を追加することができなくなっているためです。要するに:私たちの多くが彼らのキャリアで見た、乱雑で巨大なバグのあるコード。 リファクタリング中に、時々、クラス、メソッド、または次のようなコメントのあるコード行に遭遇します モジュールAに何かをする時間を与えるためのタイムアウトセット。このようにタイミングが合わないと、壊れてしまいます。 または これを変更しないでください。私を信じて、あなたは物事を壊すでしょう。 または 私はsetTimeoutを使用することは良い習慣ではないことを知っていますが、この場合は使用しなければなりません 私の質問は、著者からのそのような警告に遭遇したときにコードをリファクタリングする必要がありますか(いいえ、著者と連絡を取ることができません)?

8
プロジェクトをどのように整理しますか?[閉まっている]
プロジェクトを整理する特定のスタイルはありますか? たとえば、現在ボリビアのいくつかの学校でプロジェクトを作成していますが、これが私がそれを整理した方法です。 TutoMentor (Solution) TutoMentor.UI (Winforms project) TutoMentor.Data (Class library project) プロジェクトをどのように整理しますか?あなたが組織し、誇りに思っているものの例はありますか?ソリューションペインのスクリーンショットを共有できますか? 私のアプリケーションのUI領域では、さまざまなフォームとそれらが属する場所を整理するための適切なスキーマを決定するのに苦労しています。 編集: .UIプロジェクトでさまざまなフォームを整理するのはどうですか?どこで/どのように異なるフォームをグループ化する必要がありますか?それらをすべてプロジェクトのルートレベルに配置するのは悪い考えです。

22
ストアドプロシージャは、世界最大のITソフトウェアコンサルティング会社の1つで悪い習慣ですか?
私は世界のトップ3のITコンサルティング会社の1つのプロジェクトで働いており、DBAから、会社のベストプラクティスのステートストアドプロシージャは「ベストプラクティス」ではないと言われました。これは私が学んだことすべてに反している。 ストアドプロシージャにより、コードの再利用、カプセル化(ソフトウェア開発の2つの柱)、セキュリティ(個々のストアドプロシージャに対するアクセス許可の付与/取り消しが可能)、SQLインジェクション攻撃からの保護、スピードの向上(DBAによるとSQL Server 2008以降では、通常のSQLクエリでも十分な回数実行されるとコンパイルされます)。 アジャイルソフトウェア開発方法論を使用して複雑なアプリを開発しています。誰もがストアドプロシージャを使用したくない理由を考えることができますか?私の推測では、DBAはこれらのストアドプロシージャを維持することを望んでいませんでしたが、そのような設計上の決定を正当化するには、あまりにも多くのネガが存在するようです。

6
なぜCよりも速くて「良い」言語が出てこないのですか?[閉まっている]
今日のすべての新しい「現代」言語で、Cが依然として最速で「マシンに最も近い」と言われているのはどうしてですか。私は、物事を行う正しい方法が1つしかないことを本当に信じていません。Cは非常に長い間存在していました(60年代以来!)。ほぼ50年前に書かれたものよりも優れたものを思いついていないのでしょうか? 現代の言語は高レベルであり、ガベージコレクションやメモリ割り当てなどの特定のタスクを処理し、ライブラリなどを利用していることを認識しています。私は、なぜCに真の2番目の選択肢がなかったのかを尋ねています。 Cが非常に完璧なので、他の方法でコンピューターを操作することはできません(開発者採用は別として)。 編集見て、私はCやあなたの好きな言語をノックしようとはしていません。なぜCが標準になったのか、なぜ他の選択肢が出現せず、Cが「受け入れられた」のか疑問に思っています。
147 c 

22
「あまりにも多くを知る」ために立ち往生[閉鎖]
http://news.ycombinator.com/item?id=4037794での詳細な議論に注意してください。 私は比較的単純な開発タスクを持っていますが、それを攻撃しようとするたびに、深い思考でスパイラルになります-どうやって未来を広げることができますか、第2世代のクライアントは何を必要としますか?側面(例:パフォーマンス、承認...)、変更を許可するにはどのように設計するのが最善でしょうか... 私は少し前に、より若く、そしておそらくより熱心に自分を覚えています。そのとき、私だった「私」は、すべてについて考えたことはありませんでした-彼は先に進んで何かを書き、それを書き直し、それから書き直しました(そして再び...)。今日の「私」はもっとためらい、より慎重です。 今日は、コードを書くのが好きではないからではなく、実際に先に進んで自分でやるよりも、座って計画を立てたり、他の人に物事を行う方法を指示したりする方がずっと簡単だと思います。-しかし、キーボードに座るたびに、私はその同じ迷惑な場所にいるからです。 これは間違っていますか?これは自然な進化でしょうか、それとも私はわだちに追い込まれましたか? 公正な開示-過去に私は開発者でしたが、今日の私の肩書きは「システムアーキテクト」です。それが何を意味するのかを考えてみてください-しかし、それがタイトルです。 ワオ。正直なところ、この質問がそれほど多くの回答を生み出すとは思っていませんでした。まとめてみます。 理由: 分析の麻痺/過剰なエンジニアリング/金メッキ/(他の「前もって考えすぎるとあなたを傷つける可能性がある」)。 特定のタスクの経験が多すぎます。 重要なことに集中しない。 十分な経験(およびそれを実現)。 ソリューション(理由と一致しない): 最初にテストします。 コーディングを開始(楽しみのために+) 1つは捨てます(+ 1つのAPIは捨てます)。 時間の制約を設定します。 綿毛をはがし、物を持ち続けます。 柔軟なコードを作成します(「1つは捨てる」の反対です)。 皆さんに感謝します。ここでの主な利点は、私がこの経験をしているのは私だけではないことを認識することだったと思います。実際、私はすでにコーディングを開始しており、大きすぎるもののいくつかは自然に落ちています。 この質問は終了しているため、本日現在、ほとんどの投票で回答を受け入れます。いつ/変更された場合-私はフォローしようとします。

11
TDDで「実際の」コードを記述するのはいつですか?
トレーニングビデオで読んで見たすべての例には、単純化した例があります。しかし、グリーンになった後に「実際の」コードをどのように実行するかはわかりません。これは「リファクタリング」の部分ですか? 複雑なメソッドを持つかなり複雑なオブジェクトがあり、テストとそれをパスするための最低限のものを書いた場合(最初に失敗した後、赤)。いつ戻って実際のコードを書きますか?そして、再テストする前に実際のコードをどれだけ書くのでしょうか?最後の方がより直感的だと思います。 編集: 答えたすべての人に感謝します。あなたの答えはすべて私を非常に助けてくれました。私が質問したり、混乱させたりしたことについては、さまざまなアイデアがあるようです。 私のデザインには、最初に作りたいアーキテクチャ、ユーザーストーリーなどがあります。ここから、それらのユーザーストーリーを取得し、ユーザーストーリーをテストするためのテストを作成します。ユーザーは、「学校に入学して登録料を支払う人がいます」と言います。だから、私はそれを失敗させる方法を考えます。そうすることで、クラスX(多分Student)のテストクラスを設計しますが、これは失敗します。次に、クラス「Student」を作成します。たぶん「学校」は分かりません。 しかし、いずれにせよ、TD デザインは私に物語を考えさせることを強いています。テストを失敗させることができる場合、失敗する理由はわかりますが、これは合格することを前提としています。それは設計についてです。 私はこれを再帰について考えることに例えました。再帰は難しい概念ではありません。実際に頭の中でそれを追跡するのは難しいかもしれませんが、実際には、最も難しいのは、再帰が「壊れる」とき、いつ停止するかを知ることです(もちろん、私の意見です)。最初に再帰。これは不完全なアナロジーに過ぎず、各再帰反復が「パス」であると想定しています。繰り返しますが、単なる意見です。 実装では、学校は見にくいです。数値および銀行台帳は、簡単な算術を使用できるという意味で「簡単」です。a + bが表示され、0などが返されます。人々のシステムの場合、それを実装する方法をより厳しく考えなければなりません。私は失敗、合格、リファクタリングの概念を持っています(主に研究とこの質問のため)。 私の知らないことは、私の意見では経験の不足に基づいています。新しい学生のサインアップに失敗する方法はわかりません。誰かが姓を入力し、データベースに保存されるのを失敗させる方法がわかりません。私は簡単な数学のためにa +1を作る方法を知っていますが、人のようなエンティティでは、誰かがデータベースまたはその両方、またはどちらでもありません。 または、これは私がまだ混乱していることを示しているかもしれません。
147 tdd 

24
Pythonの欠点は何ですか?[閉まっている]
Pythonは最近大流行しているように見えますが、それは当然のことです。なぜなら、Pythonは本当に解決すべき新しい問題を与えられることを楽しんでいる言語だからです。しかし、賢者がかつて言ったように(実際に誰がそれを言ったのかわからないので、彼を賢者と呼ぶ;彼がその賢者であったかどうかはまったくわからない)、本当に言語を知ることはそのことを知っているだけではない構文、設計など、利点だけでなく、欠点もあります。完璧な言語はありません。一部の言語は他の言語よりも優れています。 だから、あなたの意見では、Pythonの客観的な欠点になります。 注:ここで言語比較を求めているわけではありません(つまり、C#はPythonよりも優れています... yadda yadda yadda)-より多くの客観的(ある程度)の言語機能は、適切に設計されているかどうか、あなたがそれに欠けているものなど。比較として別の言語を使用する必要がある場合、ただし他の言語では詳しく説明するのが難しい点を説明するためにのみ使用します(つまり、理解を容易にするため)

15
9〜5人のプログラマーは見下されていますか?
私は自分を9対5のプログラマーと考えています。これが意味することは、私はプログラミングの仕事をしているということですが、仕事を辞めた後は、仕事をそこに置いて家に持ち帰りません。私は自分のキャリアの選択をとても楽しんでおり、現在の仕事でやっている仕事を楽しんでいます。また、プログラミング業界の新技術や進歩など、私の分野で新しいことを学ぶことも楽しんでいます。自分の仕事以外に、もっと重要だと思う他の趣味があるので、もっと時間とエネルギーを捧げたいと思っています。また、1つのテーマに週40時間以上専念するのは少し疲れるので、プログラミングの仕事から帰ってもっとプログラミングをしたいというプログラマーが本当にいるのでしょうか。 たぶんそれは私の現在の雇用者だけかもしれませんが、彼らはキャリア開発のための時間をほとんど残していないように感じます。私の最新のテクノロジーとプログラミング技術を維持する唯一の方法は、自分の時間にそうすることです。なぜなら、私の雇用主は勤務時間中にこうした種類のことをするための時間を割り当てないからです(期限== $$$)。雇用主について他の誰かが同じように感じていますか? あなたの経験から、マネージャーやプログラマーを雇う人は、9〜5人のプログラマーをそれほど価値のないリソースと見なしていますか?私は、オープンソースプロジェクトなどに貢献して履歴書を改善できることを知っていますが、時間がないと感じています。 芸術などの別の科目にあなたの余暇を捧げることは、会社にとって望ましい特性である可能性のあるバランスのとれたものを示すように、逆のことが言えますか?

14
ボブおじさんが、コーディング標準を避けることができれば書き留めてはならないと提案するのはなぜですか?
私がこの質問を読んでいる間、トップ投票の回答はコーディング基準についてボブおじさんを引用しましたが、私はこのヒントに混乱しました: 回避できる場合は書き留めないでください。むしろ、コードを標準の取得方法にしてください。 これは私の脳内で跳ね返りましたが、固執する場所を見つけることができませんでした。新しい人がチームに参加した場合、またはコーディング標準が変更された場合、情報の混乱はありませんか? コーディング標準を書き留めてはいけないのはなぜですか?

30
1日あたり実際に何時間生産的ですか?どうやって?[閉まっている]
私は1日8時間アラートを維持するのに非常に苦労しています。1日4時間の労働契約を交渉した人の話を聞いたことがありますが、8時間ではこれ以上のことはできないと主張しています。 私はしばしば眠気、退屈、気晴らしに圧倒されます。ある日、私は生産性の猛烈な爆発の中で8時間を燃やすようです。他の日は、ほとんど何もしません。ほとんどの日、それは中間のどこかにあり、一日中ずっと集中力を最大限に発揮することができないので、多くの時間を無駄にするのは気分が悪い。 私はあなたの経験を聞きたいです(私は私だけではないことを教えてください!)、そしてもし見つかれば、このジレンマに対するあなたの解決策を。 毎日ほぼ8時間生産的ですか?どうやって?
145 productivity 

30
どのようにして大規模なコードベースに飛び込みますか?
未知のコードベースを探索および学習するために、どのツールとテクニックを使用しますか? 私はのようなツールを考えていますgrep、ctagsコードメトリクスが好き、ユニットテスト、機能テスト、クラス図ジェネレータは、グラフを呼び出すsloccountように、と。私はあなたの経験、あなたが使用または書いたヘルパー、そしてあなたが働いたコードベースのサイズに興味があります。 コードベースに精通することは時間の経過とともに発生するプロセスであり、「コードを要約できる」から「リファクタリングしてサイズの30%に縮小できる」まで、なじみがあることを意味します。しかし、どのように始めるのでしょうか?

14
ギャングオブフォーは「パターンスペース」を徹底的に探索しましたか?
少なくとも10年前にギャングオブフォー(GoF)のデザインパターンを初めて知って以来、これらの23のパターンは、パターンスペースと呼ぶのが非常に大きなものの小さなサンプルにすぎないという印象を持っています。この架空のパターンスペースは、一般的なオブジェクト指向ソフトウェア設計の問題に対するすべての推奨ソリューション(既知または未知)で構成されています。 そのため、既知の文書化された設計パターンの数が大幅に増加すると予想しました。 それは起こりませんでした。GoFの本が出版されてから20年以上経っても、Wikipediaの記事には12個の追加パターンしかリストされていません。(特定のトピックを扱っているため、ここでは同時実行パターンを含めませんでした。) その理由は何ですか? GoFのパターンセットは、実際には私が考えているよりも包括的ですか? 新しいパターンを見つけることに興味がなくなったのは、おそらくそれらがソフトウェア設計にあまり役に立たないことがわかったからでしょうか? 他に何か?

16
コードレビューが非常に難しい場合はどうしますか?
わかりましたので、多くのコードレビューはかなり日常的です。しかし、時折、既存の複雑で脆弱なコードに広く影響を与える変更があります。この状況では、変更の安全性、リグレッションの欠如などを検証するのにかかる時間は過剰です。おそらく、開発自体を行うのにかかった時間を超えることさえあります。 この状況で何をすべきか?マージして何も抜けないことを望みますか?(それを提唱しない!)最善の方法は、明らかな欠陥を見つけることだけが可能です(おそらく、これがコードレビューよりも目的とするべきものでしょうか?) これは、コードレビューの一環としてテストを行う必要があるかどうかという問題ではありません。これは、特に差し迫った締め切り、利用可能な単体テストの包括的なスイートがない、または変更された断片化されたコードに対して実行できない単体テストで、説明されている状況で最良のオプションが何であるかを尋ねる質問です。 編集:私はこれまでの回答/コメントのいくつかが私のフレーズ「広範に影響する」に気づいており、おそらくそれが変更が多数のコード行を含むことを意味すると考えていました。私はこれが解釈であることを理解できますが、それは本当に私の意図ではありませんでした。「大幅な影響」とは、たとえば、コードベースの相互接続性またはノックオン効果の範囲のために、回帰の可能性が高いことを意味します。変更自体が必ずしも大きなものではありません。たとえば、開発者は、多くの低レベルルーチンへの呼び出しをカスケードする既存の高レベルルーチンを呼び出すことにより、1行でバグを修正する方法を見つけるかもしれません。バグ修正が機能したことをテストおよび検証するのは簡単です。すべてのノックオン効果の影響を(コードレビューを介して)手動で検証することは、はるかに困難です。

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