ソフトウェア工学

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

17
あなたが書いたいコードにどのように対処しますか?[閉まっている]
そのため、クライアントからコードを書くように依頼されます。彼はその後、予想どおりに仕様を変更し、あなたは彼の新機能を熱心に小さな若者のように実装します。例外として、新しい機能は古い機能と競合するため、コードは混乱します。あなたは本当に戻ってそれを修正したいのですが、彼は新しいものを要求し続け、あなたが何かを掃除し終えるたびに、それは再び混乱を巻き起こします。 職業はなんですか?OCDマニアであるのをやめて、あなたのコードがあなたが何をしようとしても混乱を巻き起こすことを受け入れるだけで、この怪物に機能を付け続けますか?バージョン2のクリーニングを保存しますか?

28
JavaScriptの適切な劣化はどれほど重要ですか?
Web開発者は、JavaScriptを使用してWebアプリケーションを段階的に強化し、機能を適切に低下させ、それによりアクセシビリティを確保する努力を続ける必要がありますか?それとも、その時間を新機能やその他の開発分野に集中すべきですか? その質問のサブテキストは次のとおりです。JavaScriptを無効にしたWebサイトまたはアプリケーションを利用している顧客/クライアント/ユーザーは何人ですか?JavaScriptの機能を特に要求する(私のほとんどすべてが必要とする)要件を持つプロジェクトがありますか?また、それらの要件は、適切な劣化も要求しますか? この質問をするために、JavaScriptを有効にせずにProgrammers.stackexchange.comを呼び出しました。「プログラマー-Stack ExchangeはJavaScriptを有効にした場合に最適に動作します」というメッセージを受け取りました。サイトは一般的には正常に機能しているように見えましたが、ログインするのは困難でした。(質問に投票することができませんでした。) これは開発に対する満足のいくアプローチだと思います。サイトのすべての機能を、従来の単純なHTMLおよびサーバー側のロジックで動作させるための労力を想像してください。一方で、このアプローチによって疎外されているユーザーの数は疑問です。 プログレッシブエンハンスメントを使用し、Webアプリケーションの動的機能が確実に低下するように、私たち全員(少なくとも私たちの中の優秀な開発者)は訓練されています。このプログレッシブな機能強化は風に放たれているだけですか、それとも一部のお客様はJavaScriptを有効にせずに特定のWebサービスを実際に利用していますか?

30
PHPにはどのような機能が必要ですか?[閉まっている]
今はホリデーシーズンであり、誰もが希望を抱いているので、PHPでどの言語機能を追加したいのでしょうか。私は、言語に対する実用的な提案/要望に興味があります。実用的には: 実際にできること(「PHPが私のコードの意味を推測してバグを修正してくれることを望んでいる」または「コードが5ミリ秒未満で実行されることを望んでいる」) PHPを別の言語に変更する必要のないもの(「中括弧の代わりに$記号を削除してスペースを使用したい」または「PHPをコンパイルし、静的に入力し、名前に#を含めたい」) 既存のすべてのコードを壊す必要のないもの(「500個の関数の名前を変更し、それらのパラメーターの順序を変更しましょう」) 何かない言語やそれのいくつかの興味深い側面を変更(ない:「私はXYZのプロトコルをサポートするための拡張があったことを望む」または「私はバグ#12345を希望するが最終的に固定されました」) 暴言以上のもの(「PHPがそんなにひどく吸わないように」) 誰にも良い願いがありますか? Mod編集:Stanislav MalyshevはコアPHP開発者です。

5
連結に対して+が%sよりも優れているのはなぜですか?
Python %sではなく、文字列の連結に使用する必要があることを理解しています+。 私は次のことができます: hello = "hello" world = "world" print hello + " " + world print "%s %s" % (hello, world) print "{} {}".format(hello, world) print ' '.join([hello, world]) しかし、なぜ私は以外のものを使用する必要があり+ますか?単純なを使用して連結を記述する方が簡単+です。次に、フォーマット文字列を見る場合%s、%dandなどのタイプを指定します。型について明示する方が良いかもしれないことを理解しています。 しかし、それから私は、+連結のために使用することは、入力するのが簡単であっても避けるべきだと読みました。文字列を他の方法のいずれかで連結する必要があるという明確な理由はありますか?
88 python  strings 

3
ハードウェアアクセラレーション付きのベクターグラフィックスが削除されないのはなぜですか?
私は、60fpsでベクターパスをリアルタイムで操作するアプリを開発していますが、このテーマに関する情報が非常に少ないことに非常に驚いています。最初は、CoreGraphicsを使用してアイデアを実装しようとしましたが、目的に対して十分に機能しませんでした。それから、OpenVGと呼ばれるハードウェアアクセラレーションベクターグラフィックス用のKhronos標準があり、ありがたいことに、親切な魂がMonkVGと呼ばれるOpenGL ES準実装を書いていたことを発見しました。 しかし、OpenVGは非常に実用的なAPIであるという事実にもかかわらず、多かれ少なかれKhronosによって放棄されているようです。ウィキペディアによると、2011年以降、ワーキンググループは「さらなる標準化のために定期的な会議を開催しないことを決定しました」。私が見つけられる最高のドキュメントは、たった1枚のリファレンスカードで構成されています。さらに、インターネット上のどこにもOpenVGの例はほとんどありません。瞬く間に何百ものOpenGLチュートリアルを見つけることができますが、OpenVGは著しく欠落しているようです。 ハードウェアアクセラレータを使用したベクトルは、解像度が急速に向上する今日の世界でより重要になると思われます。多くの企業が独自の方法でこれを実装しているようです。たとえば、QtとFlashにはハードウェアアクセラレーションベクターのスキームがあり、アドビのツールの多くにはオプションとしてハードウェアアクセラレーションがあります。しかし、標準がすでに存在する場合、ホイールは再発明されつつあるようです! OpenVGが実世界での使用に適していないことについて、私が不足しているものはありますか?それとも、標準が間に合わなかっただけで、今ではあいまいになっているのでしょうか?将来、ハードウェアアクセラレーションベクターグラフィックス用の標準化されたAPIの余地があると思いますか、それとも従来のラスターベースの技術を使用する方が簡単でしょうか?それとも、ベクターは、出入りする前に単に出て行くところにありますか?

9
最初の処理と例外処理を確認しますか?
私は「Head First Python」という本を読んでいます(今年は私の言語です)。2つのコードテクニックについて議論するセクションに行きました: 最初のチェックと例外処理。 Pythonコードのサンプルを次に示します。 # Checking First for eachLine in open("../../data/sketch.txt"): if eachLine.find(":") != -1: (role, lineSpoken) = eachLine.split(":",1) print("role=%(role)s lineSpoken=%(lineSpoken)s" % locals()) # Exception handling for eachLine in open("../../data/sketch.txt"): try: (role, lineSpoken) = eachLine.split(":",1) print("role=%(role)s lineSpoken=%(lineSpoken)s" % locals()) except: pass 最初の例では、.split関数の問題を直接扱います。2つ目は、例外ハンドラーで処理できるようにします(そして問題を無視します)。 彼らは本の中で、最初にチェックする代わりに例外処理を使用するよう主張しています。引数は、例外コードがすべてのエラーをキャッチするということです。最初のチェックでは、考えていることだけをキャッチします(そして、コーナーケースを見逃します)。私は最初にチェックするように教えられたので、私の最初の本能はそれをすることでしたが、彼らのアイデアは面白いです。例外処理を使用してケースを処理することを考えたことがありませんでした。 2つのうち、どちらが一般的にベタープラクティスと見なされますか?

11
main()を短くする必要があるのはなぜですか?
私は9年以上プログラミングを行ってきました。最初のプログラミング教師のアドバイスによれば、私は常に自分のmain()機能を非常に短くしています。 最初は理由がわからなかった。私は、理解することなく、ただ教授の喜びに耳を傾けました。 経験を積んだ後、コードを正しく設計すれば、ちょっとしたmain()機能が発生することに気付きました。モジュール化されたコードを記述し、単一の責任原則に従うことで、コードを「束」に設計することmain()ができ、プログラムを実行するための触媒としてしか機能しませんでした。 数週間前に早送りして、Pythonのソースコードを見て、main()関数を見つけました。 /* Minimal main program -- everything is loaded from the library */ ... int main(int argc, char **argv) { ... return Py_Main(argc, argv); } やったパイソン。短いmain()関数==良いコード。 プログラミングの先生は正しかった。 もっと深く見たいので、Py_Mainを見てみました。全体として、次のように定義されます。 /* Main program */ int Py_Main(int argc, char **argv) { int c; int sts; char *command = NULL; char …


8
「副作用」とは何ですか?
副作用の概念を明確に理解していません。 プログラミングの副作用とは何ですか? プログラミング言語に依存していますか? 外部および内部の副作用などがありますか? 副作用を引き起こす原因の例をいくつか挙げてください。

29
私の会社は、時間外に別のスタートアップに書き留めたアプリケーションの知的財産権を譲渡できますか?[閉まっている]
私は健康会社(未払い)のインターンです。会社Aと呼びましょう。コンピューターでできることのために多くの紙のフォームを使用していることに気付きました。ExcelにあるべきではないもののExcelファイル。だから私は自分のプログラミングを改善したかったので、それが最善の機会だと考えました。 私はそれらを使用するためのアプリをいくつか開発しました。これらのアプリケーションはすべて、会社の時間外でした。私がした1つのアプリケーションと彼らは大好きで、ディレクターの1人には健康スタートアップ会社を持つ兄弟がいます。彼は、彼の兄弟の会社がそれをさらに開発し、おそらく販売できるように、私のソースコードを渡してほしいと思っています(私は方程式から外れています)。 コードを引き継ぐつもりはありませんが、外で多くの時間を費やしていますが、社内の誰とでも橋を燃やしたくはありません。監督のところに行って「そうは思わない」と言うことはできません。 私は兄弟にそれがどのように機能するかをデモすることで大丈夫ですが、行は私のコードを放棄しています。彼らがそのようなものを作りたいなら、彼らはすぐに先に進むことができます。 これにアプローチする正しい方法は何ですか?彼らは私にこれを行う権利を持っていますか? 編集:私は何も署名したことがない契約はありません

10
ユニットテストアプリケーションロジックと不信な言語構成要素の境界線はどこですか?
次のような関数を考えてみましょう。 function savePeople(dataStore, people) { people.forEach(person => dataStore.savePerson(person)); } 次のように使用できます。 myDataStore = new Store('some connection string', 'password'); myPeople = ['Joe', 'Maggie', 'John']; savePeople(myDataStore, myPeople); 独自の単体テストがあるか、ベンダーが提供していると仮定しましょうStore。いずれにせよ、私たちは信頼していStoreます。さらに、エラー処理(たとえば、データベースの切断エラーなど)はの責任ではないと仮定しましょうsavePeople。実際、ストア自体が魔法のようなデータベースであり、何らかのエラーが発生する可能性はないと仮定しましょう。 これらの仮定を考えると、問題は次のとおりです。 savePeople()単体テストする必要がありますか、それとも組み込みのforEach言語構成のテストに相当しますか? もちろん、モックdataStoreを渡し、dataStore.savePerson()各人に1回呼び出されることをアサートすることもできます。このようなテストは実装の変更に対するセキュリティを提供するという議論を確かに行うことができます。たとえば、forEach従来のforループや他の反復方法に置き換えることを決めた場合です。そのため、テストは完全に簡単ではありません。そしてそれでもひどく近いようです... より実りの多い別の例を次に示します。他のオブジェクトや機能を調整する以外の何もしない機能を考えてください。例えば: function bakeCookies(dough, pan, oven) { panWithRawCookies = pan.add(dough); oven.addPan(panWithRawCookies); oven.bakeCookies(); oven.removePan(); } このような機能は、どのようにユニットテストされるべきでしょうか?私は単純にモックていないユニットテストのいずれかの種類を想像するのは難しいdough、panとovenして、メソッドがそれらに呼ばれていると主張します。しかし、そのようなテストは、関数の正確な実装を複製する以上のことはしていません。 意味のあるブラックボックスの方法で関数をテストできないことは、関数自体の設計上の欠陥を示していますか?もしそうなら、どのように改善できますか? bakeCookies例の動機となる質問をさらに明確にするために、より現実的なシナリオを追加します。これは、テストを追加してレガシーコードをリファクタリングしようとしたときに遭遇したシナリオです。 ユーザーが新しいアカウントを作成するとき、いくつかのことを行う必要があります:1)新しいユーザーレコードをデータベースに作成する必要がある2)ウェルカムメールを送信する必要がある3)ユーザーのIPアドレスを詐欺のために記録する必要がある目的。 そこで、すべての「新規ユーザー」ステップを結び付けるメソッドを作成します。 function createNewUser(validatedUserData, emailService, dataStore) …

13
ソースコードにSQLを書くことはアンチパターンと見なされますか?
SQLを次のようなアプリケーションにハードコードするアン​​チパターンと見なされますか? public List<int> getPersonIDs() { List<int> listPersonIDs = new List<int>(); using (SqlConnection connection = new SqlConnection( ConfigurationManager.ConnectionStrings["Connection"].ConnectionString)) using (SqlCommand command = new SqlCommand()) { command.CommandText = "select id from Person"; command.Connection = connection; connection.Open(); SqlDataReader datareader = command.ExecuteReader(); while (datareader.Read()) { listPersonIDs.Add(Convert.ToInt32(datareader["ID"])); } } return listPersonIDs; } 通常、リポジトリレイヤーなどがありますが、簡単にするために上記のコードでは除外しています。 私は最近、SQLがソースコードで書かれていると不満を言う同僚からいくつかのフィードバックを得ました。理由を尋ねる機会がなかったので、彼は現在2週間(多分それ以上)離れています。私は彼が次のいずれかを意味したと思います: LINQ …
87 c#  sql 

8
本当に「ソフトコーディング」とは何ですか?
で、この記事アレックスPapadimoulisすることにより、あなたはこのスニペットを見ることができます: private void attachSupplementalDocuments() { if (stateCode == "AZ" || stateCode == "TX") { //SR008-04X/I are always required in these states attachDocument("SR008-04X"); attachDocument("SR008-04XI"); } if (ledgerAmnt >= 500000) { //Ledger of 500K or more requires AUTHLDG-1A attachDocument("AUTHLDG-1A"); } if (coInsuredCount >= 5 && orgStatusCode != "CORP") { //Non-CORP orgs with …
87 design 

2
MIT vs. BSD vs.デュアルライセンス
私の理解は: MITライセンスのプロジェクトは、BSDライセンスのプロジェクトで使用/再配布できます。 BSDライセンスのプロジェクトは、MITライセンスのプロジェクトで使用/再配布できます。 MITとBSD 2条項のライセンスは基本的に同一です。 BSD 3条項= BSD 2条項+「承認なし」条項 デュアルライセンスを発行すると、ユーザーはこれらのライセンスから選択できます。両方にバインドされることはありません。 上記のすべてが正しい場合、デュアル MIT / BSDライセンスを使用する意味は何ですか?BSDが3条項バージョンを参照している場合でも、ユーザーはMITライセンスのみを遵守することを合法的に選択することはできませんか? 「裏書きなし」条項を本当に適用したい場合は、BSD(デュアルではない)としてライセンスする必要があります。「承認なし」条項を気にしない場合は、MITだけで十分であり、MIT / BSDは冗長です。 同様に、MITライセンスとBSDライセンスは両方とも「GPL互換」であり、GPLライセンスのプロジェクトで再配布できるため、MIT / GPLのデュアルライセンスも冗長のようです。


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