ソフトウェア工学

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

3
C ++ 11 Uniform Initializationは、古いスタイルの構文の代わりですか?
C ++ 11の統一された初期化は言語の構文上の曖昧さを解決することを理解していますが、多くのBjarne Stroustrupのプレゼンテーション(特にGoingNative 2012の講演中のプレゼンテーション)では、彼の例は主にオブジェクトを構築するときに常にこの構文を使用しています。 すべての場合に均一な初期化を使用することをお勧めしますか?コーディングスタイルと一般的な使用法に関する限り、この新しい機能に対する一般的なアプローチはどうあるべきですか?使用しない理由は何ですか? 私の考えでは、ユースケースとして主にオブジェクトの構築を考えていますが、考慮すべき他のシナリオがある場合はお知らせください。
172 c++  c++11 

15
開発者は、ステートメントに否定条件を含めるべきではなく、常にelseブロックを用意する必要がある場合、
私には知り合いがいて、私よりもベテランの開発者です。私たちはプログラミングの実践について話していましたが、「if」ステートメントに関する彼のアプローチには驚かされました。彼は、私がかなり奇妙だと思うifステートメントに関するいくつかの慣行を主張しています。 まず、ifステートメントの後にelseステートメントを続ける必要があります。挿入するものがあるかどうかは関係ありません。次のようなコードになります。 if(condition) { doStuff(); return whatever; } else { } 第二に、偽よりも真の値をテストする方が良いです。つまり、「!doorOpened」変数の代わりに「doorClosed」変数をテストする方がよいということです。 彼の議論は、コードが何をしているのかを明確にするということです。 これら2つのルールを組み合わせることで、条件が満たされていないときに何かを実行したい場合、この種のコードを書くようになる可能性があるため、かなり混乱しています。 if(condition) { } else { doStuff(); return whatever; } これについての私の考えは、それは実際には非常にいことである、および/または品質改善があったとしてもごくわずかであるということです。しかし、私は後輩として、本能を疑う傾向があります。 だから私の質問は次のとおりです。それは良い/悪い/「問題ではない」プラクティスですか?それは一般的な習慣ですか?

23
科学的コードを書くときのきれいなプログラミング
私は大規模なプロジェクトを実際に書いていません。私は巨大なデータベースを維持したり、何百万行ものコードを扱ったりしていません。 私のコードは、主に「スクリプト」タイプのもの-数学関数をテストするためのもの、または何かをシミュレートするためのもの-「科学プログラミング」です。ここまでに取り組んだ最長のプログラムは数百行のコードであり、私が取り組んでいるプログラムのほとんどは約150行です。 私のコードもがらくたです。先日私が書いたファイルを見つけようとしていたので、これに気づきましたが、おそらく私は上書きしており、バージョン管理を使用していないことを知っています。これはおそらく私の愚かさに多くの人が苦しんでいます。 私のコードのスタイルは複雑で、何かを行う別の方法を記した古いコメントや、コピーされたコード行で満たされています。変数名は常に非常にわかりやすく説明的に始まりますが、たとえば、誰かがテストしたい新しいものを追加または変更すると、コードが上にオーバーレイされて上書きされます。このことをすぐにテストする必要があると思うので、私は安っぽい変数名を使用し始め、ファイルがポットに行くフレームワークを持っています。 私が現在取り組んでいるプロジェクトでは、私はこれらすべてが私に大きな意味で噛み付いてくる段階にあります。しかし、問題は(バージョン管理を使用し、新しい反復ごとに新しいファイルを作成し、そのすべてをどこかにテキストファイルに記録することを除いて、状況を劇的に改善する可能性があります)私の実際のコーディングスタイル。 より小さなコードを書くために単体テストは必要ですか?OOPはどうですか?大規模なプロジェクトで作業するのではなく、「科学的プログラミング」を行うときに、適切でクリーンなコードを迅速に記述するのにどのようなアプローチが適していますか? 多くの場合、プログラミング自体はそれほど複雑ではないため、これらの質問をします。私がプログラミングでテストまたは研究しているのは、数学または科学に関するものです。たとえば、2つの変数と関数がおそらくそれを処理できる場合、クラスは必要ですか?(これらは一般に、プログラムの速度が速いほうが望ましい状況であると考えてください-シミュレーションの25,000,000以上のタイムステップを実行しているとき、それを望んでいます。) おそらくこれは広すぎるので、もしそうなら、私は謝罪しますが、プログラミングの本を見ると、しばしばより大きなプロジェクトで対処されているようです。私のコードはOOPを必要とせず、すでにかなり短いので、「ああ、でもそうすればファイルは1000行減ります!」これらの小さくて高速なプロジェクトで「やり直す」方法ときれいにプログラムする方法を知りたいです。 私はもっ​​と具体的な詳細を提供したいのですが、アドバイスがより一般的であればあるほど、役に立つと思います。Python 3でプログラミングしています。 誰かが重複を提案しました。標準のプログラミング標準を完全に無視することについては話していないことを明確にしましょう。明らかに、これらの標準が存在する理由があります。しかし、一方で、いくつかの標準的なことを実行できたときにOOPと呼ばれるコードを書くことは本当に意味がありますか?プログラム? 例外があります。さらに、科学的なプログラミングには、単なる標準を超えた標準がおそらくあります。私もそれらについて尋ねています。これは、科学的なコードを書くときに通常のコーディング標準を無視すべきかどうかではなく、きれいな科学的なコードを書くことです! 更新 「まったく1週間後ではない」種類の更新プログラムを追加すると思いました。あなたのアドバイスはすべてとても役に立ちました。現在、バージョン管理を使用しています-git、グラフィカルインターフェイス用のgit kraken。非常に使いやすく、ファイルを大幅にクリーンアップしました。古いファイルを残したり、「念のため」に古いバージョンのコードをコメントアウトしたりする必要はもうありません。 また、pylintをインストールし、すべてのコードで実行しました。最初に1つのファイルが負のスコアを獲得しました。それがどのように可能だったのかさえ私には分かりません。私のメインファイルは、〜1.83 / 10のスコアから始まり、〜9.1 / 10になりました。すべてのコードは現在、標準にかなり準拠しています。また、自分の目で行った変数名を更新しました。 特に、私はこのサイトで最近の質問をして、私の主な機能の1つをリファクタリングしました。そして今ではずっときれいで短くなっています。サイズと何が起こっているかを把握するのがはるかに簡単です。 次のステップは、ある種の「単体テスト」を実装することです。つまり、メインファイルで実行できるファイルで、アサートステートメントとtry / exceptsを使用して、その中のすべての関数を調べます。これはおそらく最善の方法ではなく、多くの重複したコードになります。しかし、私は読み続けて、それをより良くする方法を見つけようとします。 また、すでに作成したドキュメントを大幅に更新し、Excelスプレッドシート、ドキュメント、関連するペーパーなどの補足ファイルをgithubリポジトリに追加しました。それは今や本当のプログラミングプロジェクトのように見えます。 だから...私はこれがすべてだと思います:ありがとう。

10
Clean Codeが保護された変数を避けることを示唆しているのはなぜですか?
クリーンコードでは、「書式設定」の章の「垂直距離」セクションで保護された変数を避けることを推奨しています。 密接に関連する概念は、垂直方向に互いに近づける必要があります。明らかに、このルールは別々のファイルに属する概念には機能しません。ただし、非常に適切な理由がない限り、密接に関連する概念を別のファイルに分割しないでください。実際、これは保護された変数を避けるべき理由の1つです。 理由は何ですか?

6
RESTとCRUDの違い
RESTを学びましたが、CRUDによく似ています(CRUDについて読んだことから)。 私はそれらが異なっていることを知っています、そして、それらが似ていると思うことは私がそれらを理解しないことを意味するのだろうか。 RESTはCRUDの「スーパーセット」ですか?CRUDでできることはすべてありますか?
168 rest  crud 

3
MITライセンスの意味
MITライセンスの下でリリースされたこのActionScript APIを使用してソフトウェアをビルドするとします:http : //www.cove.org/ape/docs/api/ そのソフトウェアを販売できますか? ソフトウェアのソースコードを提供する必要がありますか? ソフトウェアを受け取った人は、ソフトウェアの再販を許可されていますか?

10
「はい、.NETはクロスプラットフォームです」と言うのによく使われます。その主張はどの程度有効ですか?[閉まっている]
では何がこの時点で、.NETとJava間のプロジェクトのために選びますか?「常にWindowsに展開しますか?」を検討すると言います。新しいWebプロジェクトで先行するための単一の最も重要な技術的決定であり、答えが「いいえ」であれば、.NETではなくJavaをお勧めします。 非常に一般的な反論は、「Linux / OS X / Whateverで実行したい場合は、Monoを実行するだけです」1です。これは表面的には非常に説得力のある議論ですが、理由。 OpenJDKとすべてのベンダーが提供するJVMは、Sun Sunの公式TCKに合格し、正常に機能することを確認しています。MonoがMicrosoft TCKを渡すことを知りません。 Monoは.NETリリースを追跡します。現在、どの.NETレベルが完全にサポートされていますか? すべてのGUI要素(WinForms?)はMonoで正しく機能しますか? 企業は、公式計画Bとしてオープンソースフレームワークに依存したくない場合があります。 オラクルによるJavaの新しいガバナンスでは、将来は安全ではないことを認識していますが、たとえばIBMは Linuxを含む多くのプラットフォームにJDKを提供しています。それらはオープンソースではありません。 では、Monoはどのような状況で.NETアプリケーションの有効なビジネス戦略ですか? 1 マーク・Hは、としてそれをまとめた「主張があることである場合:『私は.NETで書かれたWindowsアプリケーションを持っている』、それはモノで実行する必要があり、その後ではない、それは有効な請求ではありません-しかしモノは、このようなアプリケーションを移植作るための努力をしていますよりシンプルです。」
168 java  .net  mono 

28
バグのないプログラマになるには?[閉まっている]
上司はいつも、良いプログラマーは、自分が変更したコードが信頼でき、正しく、完全に自己検証されていることを確認できるはずだと言ってきました。変更が引き起こすすべての結果と影響を完全に理解する必要があります。何度も何度もテストすることで、この種のプログラマになるために最善を尽くしましたが、バグはまだ残っています。 どうすればゼロバグプログラマになり、コードのすべての文字が何を引き起こし、どのような影響を与えるのかを知ることができますか?
168 code-quality 


12
OSを実行せずにオペレーティングシステムを実行するにはどうすればよいですか?
私は今、本当に興味があります。私はPythonプログラマーであり、この質問に戸惑いました。あなたはOSを書いています。どのように実行しますか?どういうわけか実行する必要があり、その方法は別のOS内ですか? OSにいなくてもアプリケーションを実行するにはどうすればよいですか?コンピューターに、たとえばCを実行し、実行するOSがない場合にこれらのコマンドを画面に対して実行するように指示するにはどうすればよいですか? UNIXカーネルと関係がありますか?もしそうなら、Unixカーネルとは何ですか、それともカーネル全般ですか? OSはそれよりも複雑なはずですが、どのように機能しますか?

9
1つのメソッドシグネチャを変更しましたが、現在25,000以上のエラーがあります。今何?
私は最近、非常に大きなアプリケーション(15M loc)で作業している新しい仕事を始めました。私の以前の仕事では、同様に大きなアプリケーションがありましたが、(良くも悪くも)OSGiを使用しました。これは、アプリケーションを独立して変更、コンパイル、デプロイできる多数のマイクロサービスに分割することを意味しました。新しいアプリケーションは、たった2つの.dllを備えた1つの大きなコードベースにすぎません。 ですから、このクラスのインターフェースを変更する必要があります。それが上司が私に要求したことだからです。彼らは当初、あまり一般化されていないいくつかの仮定でそれを書きました。しばらくの間、リファクタリングの問題は非常に密に結合されているため回避していました。インターフェイスを変更しましたが、現在25000以上のエラーがあります。エラーの一部は、「XYZPriceCalculator」のような重要な名前のクラスにあり、これは本当に壊れてはいけません。しかし、すべてのエラーが解決されるまで、アプリケーションを起動して動作するかどうかを確認することはできません。また、ユニットテストの多くは、そのインターフェイスを直接参照するか、そのインターフェイスを参照する基本クラスに結合されるため、それらを修正するだけでも非常に大きなタスクです。さらに、これらのすべてのピースがどのように組み合わされるかについては本当にわからないので、たとえ始めたとしても、物が壊れた場合にどのように見えるかはよくわかりません。 私は最後の仕事でこのような問題に本当に直面したことはありません。私は何をしますか?

21
速くて汚いプログラマーは、どうやってそれが正しいことを知るのでしょうか?
プログラマーにきれいなコードを書くべき理由を尋ねると、一番の答えは保守性です。それは私のリストに載っていますが、私の主な理由はより直接的で利他的ではありません:新しいコードが汚れていると正しいかどうかわかりません。個々の関数とコードの行に重点を置いているので、最初のドラフトを終えて戻って全体像を見ると、ときどききれいに合わないことがあります。クリーンさのために1〜2時間のリファクタリングを行うと、ラフドラフトでは検出が非常に困難であったコピー/貼り付けエラーまたは境界条件が明らかになることがよくあります。 ただし、一部の人々は、「後でそれをクリーンアップする」計画で、ソフトウェアを出荷するために意図的にダーティコードをチェックインしてもよいと時折感じています。可読性が理想よりも低い場合に、コードの正確性に自信を与える実用的な手法はありますか?開発しようとする価値はありますか?または、コードに対する自信の欠如は、一部の人々が受け入れやすいと感じるものですか?
166 design 

30
有名な一人軍のプログラマーはいますか?
最近、私は彼らが一人で作業している場合、彼らはより速く、より多くの品質を提供すると思う多くのプログラマーのことを学んでいます。通常、その感覚は、彼らがチームで最高のプログラミングを行うという感覚に結びついており、結局のところ、この考えは非常に妥当です。彼らが最高のプログラミングをしていて、単独で(そしてもっと多分)働いたなら、最終結果はより良いソフトウェアになるでしょう。 このアイデアがうまく機能するのは、あなたが24時間年中無休で、優れた規律を持って仕事をするのに十分な情熱を持っている場合だけです。 アイデアを検討し、もう少し学ぼうとした後、過去に(有用な)ソフトウェアを提供した有名な一人軍のプログラマーがいるのだろうか?

7
マジックストリングの何が問題になっていますか?
経験豊富なソフトウェア開発者として、私は魔法の文字列を避けることを学びました。 私の問題は、それらを使用してから非常に長い時間であり、その理由のほとんどを忘れてしまったことです。その結果、私が経験の浅い同僚になぜ彼らが問題なのかを説明するのに苦労しています。 それらを避けるための客観的な理由は何ですか?それらはどのような問題を引き起こしますか?

11
「The Mythical Man-Month」の「外科チーム」パターンはどうなりましたか?
何年も前に、The Mythical Man-Monthを読んだとき、他の情報源からすでに知っているものをたくさん見つけました。しかし、1975年からの本にもかかわらず、そこには新しいものもありました。そのうちの1つは次のとおりです。 外科チーム ミルズは、大規模な仕事の各セグメントはチームに取り組むことを提案しますが、チームは豚の屠殺チームではなく外科チームのように組織されることを提案します。つまり、各メンバーが問題を切り捨てる代わりに、1人がカットを行い、他のメンバーが彼の有効性と生産性を高めるすべてのサポートを提供します。 これは、ソフトウェア開発チームを編成するための非常に興味深いパターンですが、他のソフトウェアエンジニアリングの本では説明されておらず、どこにも記載されていません。 何故ですか? 「手術チーム」は当時も珍しかったですか? または、試行されて失敗しましたか? もしそうなら、どのように失敗しましたか? そうでない場合、今日のソフトウェアプロジェクトでそのパターンが実装されていないのはなぜですか。

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