ソフトウェア工学

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

11
すべてをテストする必要がありますか?
Ruby on Railsで最初の実際のプロジェクトを開始し、TDDテストの作成を強制します。テストを書くことに本当の利点はないと思いますが、それは非常に重要だと思われるので、試してみます。 静的ページを含むアプリケーションのすべての部分をテストする必要がありますか?
28 testing  tdd 

7
CスキルよりもC ++スキルが高いですか?[閉まっている]
よく見られるC / C ++は、CVでのスキルを実際には説明していないように感じます。それで、私はそれを高度なC ++知識と平凡なCスキルに分けることを計画しています。 これは読者を混乱させると思いますか?「CはC ++のサブセットです。だから、この男は私に電話をかけようとしているのでしょうか?」まあ、私が伝えようとしているのは、私が趣味だけの純粋なCプロジェクトである間に、私はいくつかの現実世界のC ++プロジェクトをしました。熟練したC ++プログラマーが必ずしも資格のあるCの人ではないことに同意しますか、またはこの切り替えは簡単に行われると思いますか?
28 c++  c  skills 

12
スマートフォン用のアプリケーションの開発には、Webアプリケーションと同じアプリケーションの開発よりもどのような利点がありますか?
Facebookアプリケーションを例に取りましょう。ユーザーが自分のページにアクセスして同じことを実行できるのに、なぜアプリケーションを開発したのですか?私にとっては、Webアプリケーションに追加された各機能について、その機能もスマートフォンアプリケーションに追加する必要があるため、メンテナンスとコストが増加します。 では、Webアプリケーションを1つだけ持つことができるのに、なぜ(patform iOS、Androidなどごとに)複数回開発したいのですか?どのようなメリットがありますか?頭に浮かぶのはGPS機能だけです。 編集: 私の質問は、企業の一部のメンバーのみが使用するビジネスアプリケーションに向けられたものであり、アプリケーションの販売(プライベート使用)に関するものではありません。スマートフォンアプリケーションとして開発することにより、「スマートフォンストア」のおかげでより多くの売り上げの恩恵を受けるといういくつかの答えとは反対に、アプリケーションは個人使用であるため、この点は重要ではありません。 アプリケーションをWebアプリケーションとして開発することは、スマートフォンブラウザーおよびPC(任意の対応ブラウザー)からアクセスできることを意味しますが、ネイティブアプリケーションとして開発すると、これが特定の種類のスマートフォンのみに制限されるため、つかいます。一方、Webアプリケーションとして開発するということは、アプリケーションにアクセスするためにインターネット接続が利用可能でなければならないことを意味します。 それで、これを念頭に置いて、上司に特定のスマートフォンプラットフォーム(iOS / Android)向けのアプリケーションをWebアプリケーションとして開発するよう説得する方法を教えてください。

7
ハンガリーの表記法は、表現が不十分な静的型付けの言語の回避策ですか?[閉まっている]
Eric Lippertの記事「What's Up With Hungarian Notation?」、彼はハンガリー記法(良い種類)の目的は ストレージ表現情報に加えてセマンティック情報を含むように「タイプ」の概念を拡張します。 簡単な例は、X座標を表す変数の前に「x」を、Y座標を表す変数の前に「y」を付けることです。これらの変数は整数か浮動小数点かどうかに関係なく、xFoo + yBar、コードは明らかに間違っています。 しかし、私はHaskellの型システムについても読んでおり、Haskellでは、コンパイラがチェックする実際の型を使用して同じことを達成できるようです(つまり、「型の概念を拡張して意味情報を含む」)。したがって、上記の例ではxFoo + yBar、プログラムを正しく設計すると、Haskellで互換性のない型として宣言されるため、実際にコンパイルに失敗します。つまり、Haskellの型システムは、ハンガリー語表記と同等のコンパイル時チェックを効果的にサポートしているようです。 それでは、ハンガリー記法は、型システムが意味情報をエンコードできないプログラミング言語の単なるバンドエイドなのでしょうか?または、ハンガリー記法は、Haskellのような静的型システムが提供できる以上のものを提供しますか? (もちろん、私はHaskellを例として使用しています。他の言語も同様に表現力豊かな(リッチ?ストロング?)型システムを備えていると確信していますが、私はまったく遭遇していません。 明確にするために、私はしていないと、変数名に注釈を付けるの話データタイプではなく、に関する情報を意味プログラムのコンテキスト内の変数の。たとえば、変数は整数、浮動小数点、倍精度、長整数などの場合がありますが、変数の意味は、インチ単位で測定される相対x座標であることです。これは、ハンガリー記法(およびHaskell型)を介したエンコードについて話している種類の情報です。

7
ずさんな企業文化を変えるにはどうすればよいですか?[閉まっている]
解決する必要がある問題があるとき、それを解決する最も簡単な方法は、小さなプログラムを個人的なツールとして書くことです。使用するのは私だけなので、使いやすくしたり堅牢にしたりすることはありません。 その後、同僚はプログラムを見て、同じ問題にぶつかり、ツールが役立つ可能性があるため、それを要求します。私は彼に「それはきれいではないが、仕事をやり遂げるだろう」という免責事項を与え、彼にそれを手に入れました。 私が知っている次のことは、上司が私に電話して、クライアントのコンピューターでソフトウェアを動作させようとしているが、Xエラーメッセージが表示されていると言っていることです。WTF ?? そのソフトウェアはリリースの準備ができていません。また、リリースの準備が必要だとは言われませんでした。しかし、何らかの理由で、上司はそれが十分であると考え、元の開発者に伝えることなくそれをリリースしました。 現在、この特定の問題はを使用して簡単に修正できますMessageBox.Show("DO NOT GIVE TO CLIENTS!");。しかし、この問題はより深い問題を示しています。当社の企業文化はずさんです。ずさんなソフトウェアは問題ありませんし、ずさんなプロセスは問題ありません。将来について心配する必要はありません-現在はほとんど動作しないように十分な努力を払い、バイナリを.zipファイルに入れて、出荷してください。政府の仕事には十分です。 これは、10人の正社員を抱える小さな会社で、成長を続けており、しばらく前から存在しています。誤解しないでください。ここで働くのが大好きで、会社が大好きです。走るように言わないでください。私は会社をより良くするための一部になりたいです。この種の文化にどのように良い変化をもたらし始めますか?

5
短いEULAを使用しても大丈夫ですか?
(商用)ソフトウェアにEULAを追加する必要がありますが、弁護士を雇う余裕はありません。また、インターネットでさまざまなEULAの例を見てきましたが、それらはすべて特定のソフトウェアまたは国向けであり、おそらく他の商用ソフトウェアからコピーされています。 だから私は、必要不可欠なものに言及するだけの短いカスタムEULAの使用を考えています。何かのようなもの: このソフトウェアの試用版を再配布できます ライセンスを購入した場合、再配布または販売することはできません このソフトウェアの使用に起因する金銭的または重大な損失について私を訴えることはできません このソフトウェアの著作権はXXXであり、すべての権利は保護されています。 ほとんどの場合、そのようなEULAは私を保護しますか?また、短いEULAを使用している会社を知っていますか?

10
CとC ++を知っているのに、なぜC ++ 11を学ぶのですか?[閉まっている]
私はCとC ++のプログラマーですが、どちらの言語にも固執せず、2つの混合物を作成します。場合によっては、演算子のオーバーロードやテンプレートを使用したクラス内のコードを使用することもありますが、非常に優れたSTLは明らかに優れた方法です。単純なC関数ポインターを使用すると、はるかに読みやすく、明確になる場合があります。だから、私は両方の言語に美しさと実用性を見出しています。「それらを混ぜてC ++コンパイラでコンパイルすれば、それはもはや混同ではなく、すべてC ++である」という議論には入りたくありません。また、C対C ++については説明しません。この質問はすべてC ++ 11についてです。 C ++ 11では、C ++の動作に大きな変化があると思うものを紹介していますが、さまざまな機能が異なる状況でどのように動作するかを変更する多くの特殊なケース、例外、不規則性を導入し、多重継承、キーワードとして機能する識別子、拡張機能を制限しています文字列リテラル、ラムダ関数変数のキャプチャなど 将来のある時点で、C ++と言うとき、誰もがC ++ 11を想定することを知っています。最近Cを言うときと同じように、おそらくC99を意味します。そのため、C ++ 11の学習を検討します。結局、C ++でコードを書き続けたい場合、同僚が持っているという理由だけで、これらの機能の使用を開始する必要があるかもしれません。 Cを例にとります。何年も経った今でも、Cでコードを学んだり書いたりする人がたくさんいます。なぜですか?言語が良いからです。良い意味は、優れたプログラミング言語を作成するための多くの規則に従っていることです。そのため、Cは強力である(ほとんどすべてのプログラミング言語がそうであるか難しい)ことに加えて、Cは規則的であり、もしあれば例外はほとんどありません。しかし、C ++ 11はそうは思いません。C ++ 11で導入された変更によって言語が改善されているかどうかはわかりません。 質問は次のとおりです。なぜC ++ 11を学ぶのでしょうか。
28 learning  c++  c  c++11 


6
SQLキーワードを大文字にする正当な理由は何ですか?
キーワードを大文字にしてSQLを作成する開発者が多いようです。 SELECT column FROM table INNER JOIN table ON condition WHERE condition GROUP BY clause HAVING condition なぜ人々はこのアプローチに固執するのだろうか?明らかに、これは長い間確立された慣習ですが、大文字を必要とするRDBMSに出会ったことはありません。 個人的には、キーワードが小文字で正確に記述されているのは、クエリの間違った部分に注意を喚起するキーワードを見つけるためです。 それでも、十分な人がこの慣習を使用しているので、何かが足りないと思うので、この質問をします。

4
Haskellのreturn-type-(only)-polymorphismは良いことですか?
Haskellで私がまったく思いつかなかったことの1つは、次のように、入力型では戻り型を決定できない多相定数と関数をどのように持つことができるかということです。 class Foo a where foo::Int -> a 私はこれが好きではない理由のいくつか: 参照の透明性: 「同じ入力が与えられたHaskellでは、関数は常に同じ出力を返します」が、それは本当ですか?コンテキストでread "3"使用すると3を返しIntますが、たとえば(Int,Int)コンテキストで使用するとエラーをスローします。はい、あなたはそれreadも型パラメータを取っていると主張することができますが、型パラメータの暗黙性は、私の意見ではその美しさの一部を失うことになります。 単相性の制限: Haskellで最も厄介なことの1つ。私が間違っている場合は修正してください。しかし、MRの全体的な理由は、共有されているように見える計算は、型パラメーターが暗黙的であるためではない可能性があることです。 デフォルトのタイプ: 繰り返しになりますが、Haskellで最も厄介なことの1つです。たとえば、出力で多相関数の結果を入力で多相関数に渡す場合に起こります。繰り返しますが、間違っている場合は修正してください。ただし、入力タイプ(および多態定数)で戻り値のタイプを判別できない関数がなければ、これは必要ありません。 だから私の質問は(「議論の質問」としてスタンプされるリスクを実行している):型チェッカーがこれらの種類の定義を許可しないHaskellのような言語を作成することは可能でしょうか?もしそうなら、その制限の利点/欠点は何でしょうか? 私はいくつかの差し迫った問題を見ることができます: 、たとえば、場合2のみのタイプを持っていたInteger、2/3現在の定義ではもうチェックを入力しないでしょう/。しかし、この場合、機能的な依存関係を持つ型クラスが助けになると思います(はい、これは拡張機能であることがわかります)。さらに、入力タイプが制限されている関数を使用するよりも、異なる入力タイプを使用できる関数を使用する方がはるかに直感的であると思いますが、ポリモーフィック値をそれらに渡すだけです。 []およびのNothingような値の入力は、クラックするのが難しいナットのように思えます。私はそれらを処理する良い方法を考えていません。

4
NHibernateユーザープログラマーが犯す最も一般的な間違いとアンチパターンは何ですか?
NHibernateユーザープログラマーが犯す最も一般的な間違いとアンチパターンは何ですか?それらが悪い習慣である理由を説明するか、さらに読むためにリソースへのリンクを提供してください。 例えば: 新しいNHibernateプログラマに共通するアンチパターンの1つは、ORMスタイルの1回ではなく、アイデンティティ/ネイティブPOIDを使用することです。詳細はこちら...
28 nhibernate 

8
ガベージコレクションがヒープをスイープするだけなのはなぜですか?
基本的に、これまでのところ、ガベージコレクションは現在指定されていないデータ構造を永久に消去することを学びました。ただし、これはそのような状態のヒープのみをチェックします。 データセクション(グローバル、定数など)やスタックもチェックしないのはなぜですか?ヒープについて、ガベージコレクションが必要な唯一のものは何ですか?

3
Pythonに明示的なアクセス修飾子がないのはなぜですか:
「明示的が暗黙的よりも優れている」場合、Pythonには明示的アクセス修飾子がないのはなぜですか:Public、Protected、Privateなど? プログラマーはヒントを通して何をすべきかを知っておくべきだという考えを知っています-「ブルートフォース」を使用する必要はありません。しかし、IMOの「カプセル化」または「情報隠蔽」は単に人を締め出すためだけではなく、組織と構造の問題です。物理層システムのように、開発レイヤーは明確に区切られたスコープと境界を自己定義する必要があります。 Pythonでアクセス制限が明示されているのではなく、それ以外の場合は完璧に近いと思われる言語について、なぜアクセス制限が暗黙的に含まれているのかについて、誰かがここで助けてくれますか? 編集:これまでに3つの提案された答えを見てきましたが、私の質問には2つの部分があることに気付きました。 たとえば、キーワードがないのはなぜですか private def myFunc(): dostuff.... IMOの代わりに、typeいアンダースコアを入力します。しかし、それは重要なポイントではありません。 さらに重要なことには: これらのアクセス修飾子が「推奨事項」またはヒントのみであり、強制されないのはなぜですか。後で変更するのは難しいでしょうか?「保護された」を「パブリック」に変更するのは非常に簡単です-複雑な継承チェーンがあり、それが難しくなると、デザインが貧弱になります-書きやすい言語機能に依存するのではなく、デザインを洗練する必要があります不十分な構造のコード。 アクセス修飾子が適用されると、コードは自動的に区分化されます。特定のセグメントが範囲外であることを知っているので、必要な場合と必要な場合を除き、それらを処理する必要はありません。そして、あなたのデザインが良くなく、物事をさまざまな範囲に出し入れしていることに気付いた場合、言語はあなたの行為をきれいにするのに役立ちます。 Pythonが大好きなのと同じように、この2番目の点は深刻な欠陥であると感じています。そして、これに対する良い答えをまだ見ていません。

14
プログラミング全般に関するアドバイスを求めている初心者[非公開]
プログラミングが苦手だった時代に戻って覚えておく必要があります... (ソフトウェア開発者として)私の新しい仕事に2か月ほど付き、試用期間を過ぎました。プログラミング経験がほとんどなく(C ++のみ)、現在asp.net MVCおよびsilverlightを使用しています。そのため、同社が取り組んでいるウェブサイトがあり、私はそれを改善し、バグを取り除くなどの努力に参加しています。 問題は-既に作成されているシステム/ウェブサイトについて、Visual Studioを介して学習することです。いつも圧倒され、この行のどの部分を調べるべきか分からず、全体像をつかむのに苦労します。Visual Studio自体は、asp.netフレームワークは言うまでもなく、把握するのが難しいと感じています。 私の同僚は私よりも多くの経験を持っているので、彼らはすべての良い仕事を得ているという印象を受けます。つまり、彼らはより多くのことを学んでいます。私は士気を失い、何も言えないほど怖がっています。 私は愚かではありません、私は多くの基本的なプログラミングの概念を読んで実践しました...私はこのいまいましいフレームワークをただ怖がっています。私はそれを見て、ただ麻痺していると感じます。 その結果、ベテランの老人に質問をし続け、彼はいらいらするようになり、私を助けて時間を無駄にしないように、簡単/無知/非プログラミングの仕事を与えたいと思っています。それから私は何かを理解できないとき、私はまだ彼に尋ねるべきかどうかをaboutし、それが時間の無駄になるかどうかを決定しようとしています。 私は物事をゆっくりと拾うような人ですが、細部にまで気を配っています。前者は私が無能に見えるようにしていると思います。 私がどこから来たのか誰でも助けて何か言ってください....私は数ヶ月か何かで仕事を失うのが怖い...

14
クラスの階層でオブジェクトの動作やプロパティを「削除」できるようにする言語やデザインパターンはありますか?
従来のクラス階層のよく知られた欠点は、実世界のモデリングに関しては悪いことです。例として、動物の種をクラスで表現しようとしています。実際にそれを行うといくつかの問題がありますが、解決策を見たことがないのは、サブクラスが、ペンギンが飛べないようなスーパークラスで定義された動作またはプロパティを「失う」場合ですおそらくより良い例ですが、それが私の頭に浮かぶ最初の例です)。 一方では、すべてのプロパティと動作について、それが存在するかどうかを指定するフラグを定義し、その動作またはプロパティにアクセスする前に毎回チェックする必要はありません。Birdクラスでは、鳥が簡単かつ明確に飛ぶことができると言いたいだけです。しかし、その後、どこか恐ろしいハックを使用することなく、「例外」を後で定義できればいいと思います。これは、システムがしばらくの間生産的だったときによく起こります。突然、元の設計にまったく適合しない「例外」が見つかり、それに対応するためにコードの大部分を変更する必要はありません。 それでは、「スーパークラス」とそれを使用するすべてのコードに大きな変更を加えることなく、この問題をきれいに処理できる言語または設計パターンがありますか?ソリューションが特定のケースのみを処理する場合でも、いくつかのソリューションが一緒になって完全な戦略を形成する場合があります。 もっと考えた後、リスコフの代替原則を忘れていたことに気付きました。それができない理由です。すべての主要な「機能グループ」に対して「特性/インターフェース」を定義すると仮定すると、階層のさまざまなブランチに特性を自由に実装できます。たとえば、Flying特性はBirds、いくつかの特殊なリスや魚によって実装できます。 したがって、私の質問は「どのようにして形質を実装しないのですか?」スーパークラスがJava Serializableである場合、たとえば「ソケット」が含まれている場合など、状態をシリアル化する方法がなくても、1つでなければなりません。 それを行う1つの方法は、最初から常にペアですべての特性を定義することです:FlyingとNotFlying(チェックしないとUnsupportedOperationExceptionがスローされます)。Not-traitは新しいインターフェースを定義せず、単純にチェックすることができます。特に最初から使用する場合、「安い」ソリューションのように聞こえます。

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