ソフトウェア工学

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

2
Scalaステートメントを区切るにはセミコロンを使用する必要がありますか?
私はJavaからセミコロンでステートメントを区切るのに慣れているので、当然Scalaコードでもそれを行います。また、1つのステートメントが終了し、別のステートメントが開始する場所が明らかであるため、コードが読みやすいと感じています。しかし、SOにScalaコードを投稿すると、セミコロンを削除するためにコードが編集されることがよくあります。 セミコロンを使用する必要がありますか?「公式」のガイドラインやコーディングスタイルはありますか? セミコロンが必要な場合はありますが、それ以外の場合はコードがあいまいですか?

2
暗号化を元に戻すことはできませんか?
暗号化された文字列は復号化できないため、元の値が永久に失われるという印象を受けています。 ただし、次の文字列が常に「dominic」(私の名前)と等しい場合、それを逆にする論理的な方法はありません。それはランダムではなく、日付/時刻に基づいているわけではありませんが、それには論理的な方法がありますか? 0WrtCkg6IdaV/l4hDaYq3seMIWMbW+X/g36fvt8uYkE= 「dominic」(文字列)を何回または何回暗号化しても、常に上記と同じになります。それで、そのような文字列を解読する方法はありませんか? 私が話していることの例: public string EncryptPassword(string password) { return Convert.ToBase64String( System.Security.Cryptography.SHA256.Create() .ComputeHash(Encoding.UTF8.GetBytes(password))); }

3
クイックソートが「クイックソート」と呼ばれるのはなぜですか?
この質問の目的は、他の並べ替えアルゴリズムに対してこのメ​​リットを議論することではありません-これを行う他の多くの質問があります。この質問は名前についてです。クイックソートが「クイックソート」と呼ばれるのはなぜですか?確かに、それはほとんどの場合「迅速」ですが、常にというわけではありません。O(N ^ 2)に退化する可能性はよく知られています。この問題を軽減するさまざまな変更がクイックソートにありますが、最悪の場合を保証されたO(n log n)に下げるものは、一般にクイックソートと呼ばれなくなりました。(例:Introsort)。 よく知られているすべてのソートアルゴリズムのなかで、これが「クイック」という名前に値する唯一の理由であることに疑問を感じます。これは、アルゴリズムの動作方法ではなく、通常(通常)の速度を表します。Mergesortは、データをマージするため、それと呼ばれています。ヒープを使用するため、ヒープソートと呼ばれています。Introsortは、QuicksortからHeapsortに切り替えるタイミングを決定するために自身のパフォーマンスを監視するため、「Introspective」からその名前を得ています。同様に、すべての遅いもの(バブルソート、挿入ソート、選択ソートなど)についても同様です。私が考えることができる他の唯一の例外は「Bogosort」です。これは実際には誰も実際に実際に使用したことのない単なる冗談です。クイックソートが「パーティションソート」や「ピボットソート」など、より説明的なものと呼ばれないのはなぜですか。それが実際に何をしているのか?それは「最初にここに来た」の場合でさえありません。MergesortはQuicksortの15年前に開発されました。(ウィキペディアによると、それぞれ1945年と1960年) これは、プログラミングの問題というより、歴史の問題だと思います。私はそれがどのように名前を付けたのか興味があります-それはちょうど良いマーケティングでしたか?

5
複数のスクラムチームが単一のバックログに移動
現在、私たちは過去1年間、独自の製品バックログを処理する5つのスクラムチームを抱えています。各チームは独自の専用システムで作業しますが、基盤となるテクノロジーは同じ.Netです。 単一のバックログから機能ベースのチームに移行することについては、多くの議論がありました。その理由は、私たちの主要なシステムの1つにかなりの量の作業があり、その年のすべての作業を実行するのに十分な容量がないためです。もう1つの重要な理由は、ポートフォリオの変化に迅速に対応できる柔軟性が高まることです。 1つのバックログで作業するように2つのチームを変更する決定が行われましたが、開発者は他のシステムでの経験がありません。私たちがしていることの1つは、エクスペリエンスシステム開発者をチームに移すことによるクロススキルです。 私の質問は、2つ以上の異なるシステムの単一のバックログへの移行を経験したことがありますか。あなたの課題は何でしたか?それを機能させるために何をする必要がありましたか?
9 agile  scrum 

1
さまざまなプログラミング言語のほとんどの機能と使用法を示す一種のプログラムはありますか?
印刷やフォントのベンチマークとして使用されている「怠惰な犬を飛び越える茶色のキツネ」は誰でも知っています。 プログラミング言語にも同様の「怠惰な犬」があるのだろうか。 非常に多くの異なるプログラミング言語があり、あらゆる種類の機能と構文が類似または異なっています。問題は、異なる言語を同時に使用するとユーザーが混乱することです。 異なる言語の間には多くの違いがありますが、何か共通のもの、つまりタスクやルーチンがあるはずです。同じタスクを異なる言語で実装し、最も頻繁に使用される機能をカバーしようとすると、言語の学習または比較がはるかに簡単になります。 この種のプログラムは、チュートリアルのように非常に長くなる必要はありませんが、一般的で十分に抽象的である必要があります。存在しますか?

1
Jekyll + Bootstrap + Gitサイトを最適に編成するにはどうすればよいですか?
何年にもわたって何もないところからサイトを構築して(そして自分自身で多くの作業を行ってきた)後、私はつま先を数年前から避けてきた2つのプロジェクト(BootstrapとJekyll)に浸しました。 デザインは非常にカスタマイズされたジョブで、LESSを掘り下げる必要があったため、Bootstrapソースファイル、ソースアセット、およびそのディレクトリ内のビルドディレクトリを用意しました。次に、ジキル側があります。これには独自の構造があり、Bootstrapビルドディレクトリでシンボリックリンクし、最終的なコンテンツ(実際に提供したいもの)は_siteディレクトリに埋め込まれています。 表示方法は次のとおりです。 /.git/* /.gitignore /bootstrap/ /bootstrap/... a load of source files ... /bootstrap/bootstrap/ # the build output /jek/ /jek/... all the jekyll files ... /jek/bootstrap/ # symlink on ../bootstrap/bootstrap/ /jek/_site # the stuff I actually want to upload - but don't really want in git で、私の歴史、私はどちらか(意味のかなりの量を作る)Djangoプロジェクトのレイアウトや静的なレイアウトを扱ってきました。ここにあるのは、2つの個別のビルドシステムであり、それが私を混乱させています。 このすべてのジャンクを構造化する、または失敗するより良い方法はありますか?ブートストラップ出力をjekディレクトリに直接作成する方法はありますか?このように、相互依存の静的サイトをどのように処理しますか?

4
嘘のコードに気をつけるべきですか?
これは、回答のディスカッションとこの質問のコメントを参照しています。業界でのドキュメントへの嫌悪とは何ですか?。その答えは、「コードは嘘をつくことができない」ので、ドキュメントの代わりに頼りになる場所であるべきだと主張しました。いくつかのコメントは「コードは嘘をつくことができる」と指摘しました。少なくとも部分的にはドキュメントの扱いが不十分で不適切であるために、双方に真実があります。 嘘のコードを探して、既存のドキュメントと比較する必要がありますか?それともそれは通常それがしている必要があることのための最良の情報源ですか?それがアジャイルコードである場合、それは嘘をつく可能性が低くなりますか、それともそのコードはまったく嘘をつきませんか?

2
Haskell関数の構成は、パイプとフィルターのアーキテクチャパターンのインスタンスですか?
パイプとフィルターのアーキテクチャパターンは、各要素の出力が次の要素の入力になるように配置された一連の処理要素として定義されます。すべての例は、ある種の共有バッファを介して実行されるプロセス間またはスレッド間接続を考慮しているようです。 私には、Haskell関数構成が同じタスクを実行しているようです。関数の順序付けだけで、明示的なバッファーがパイプとして使用されていない場合でも、それはこのパターンのインスタンスであると言えますか?はいの場合、怠惰でない言語でも同じことが言えますか?

3
HTML5とJSアプリがネイティブアプリと同じように機能しないのはなぜですか。
私が理解していることから、 HTMLはマークアップ言語であり、XAML、XIB、Androidが使用するもの、およびその他のネイティブUI開発フレームワークのコンテンツも同様です。 JavaScriptは、イベント処理、クライアント側の検証などのさまざまなフレームワークでC#、Java、Objective-C、またはC ++が行うことを含むクライアント側スクリプトを処理するためにJavaScriptと一緒に使用されるプログラミング言語です。 SenchaやAngularなどのフォームフレームワークで利用可能なMVC / MVVMパターンがあります。 他のフレームワークと同様に、sqliteとキー値ストアの両方の形式のlocalStorageがあり、不足しているほとんどすべてのAPI仕様があります。 ネイティブUIフレームワークがUIをレンダリングする必要がある場合は常に、同様のマークアップを解析してUIをレンダリングする必要があります。 質問の内訳 HTMLとJS自体で同じことをやめるのは何ですか? Webコントロールまたはブラウザーをレイヤーとして使用する代わりに、HTML(CSSと共に)とJSを同じように実行できないのはなぜですか? レイヤーがある場合でも、。++ランタイムとJVMは、C ++、Cが使用されていない他の場合にそうです。 それでは、DalvikのようなAndroidの場合を考えてみてください。なぜ、Chromiumが(dalvikとNDKと共に)別のオプションではないのですか? だから問題は、 現在の実装はそれほど良くない場合でも、理論的には、HTML5ベースのアプリケーションを他のモバイル用のネイティブアプリと同じように機能させることは可能ですか?

3
依存性注入は、複雑さを別のクラスに移動するだけではどうですか?
今週は、依存関係注入のためにTyphoonフレームワークを使用することを検討してきました。オブジェクトの構造を分離することは、単体テスト中に任意のコンポーネントをモックに置き換えるのに有益であることがわかりました。 しかし、何十ものヘッダーがインポートされた巨大なビューコントローラークラスがあった前に、何十ものヘッダーがインポートされた巨大なファクトリークラスができたと考えざるを得ません。大規模なファクトリークラスを避けるべきですか?

4
クラスのすべてのオブジェクトを追跡する
私はオブジェクト指向プログラミングが初めてなので、この問題に遭遇し続けます。(私はJavaでプログラミングしています)このような基本的な問題のように思われるので、私はこれについて尋ねるのに少し消極的でしたが、それに関する情報や質問についてここで見つけることはできません。私が(非常に基本的なレベルで)読んだ教科書は、この問題に触れています: 多くの場合、作成されたクラスのすべてのオブジェクトを追跡して、さまざまな目的でそれらを反復処理する必要があります。彼らは私が現在プログラムを書いているように、多くのオブジェクトは他のオブジェクトからのみ参照されます。つまり、それらすべてを参照する配列やコレクションはありません。 これはOOPの非常に基本的な必要性のように思われるので、これを行うにはかなり制度化された簡単な方法があるはずだと思います。クラスのすべてのオブジェクトの個別のリストを保持することは通常の習慣ですか? 静的配列または静的コレクションについて考えました。コンストラクターを介して、作成されたすべての新しいオブジェクトが追加されます。ただし、コンストラクターは継承されないため、これはサブクラスでは機能しません。 この質問には1つの簡単な答えがないかもしれません。誰かがこの問題について少し教えてくれることを願っています。ここで中心的な知識が不足しているような気がします。

1
基幹業務アプリケーションにおけるMVVMの価値(および現在の開発手法の現状)
2年経った今でも、実用的なソフトウェアを作成する実用的な方法としてMVVMに取り組んでいます。素晴らしい場合もあります。私は、MVVMの概念がなければナイトメアであった小さな組み立てラインを制御するマルチスレッドアプリケーションを実行しました。物理的な組み立てラインからの抽象化は、ほとんど簡単なことではありませんでした。 ただし、私のキャリアのほとんどは、ビジネスアプリケーションの内部ラインを中心に展開します-ビジネスの運用を形式化および最適化します。このようなアプリには、一般にCRUDと複合操作を中心に展開するビジネスティアーがあります。LOBでは、私のビューモデルはビジネスクラスメソッドの1行のラッパー関数の非常に単純なコレクションになり、最終的にはメッセージボックスの表示やウィンドウのオープンなどの最も単純なタスクが複雑になるだけです。何十年も前から存在しているWindow.ShowDialogの呼び出しについて、「依存性注入」と「メッセージングプロバイダー」の長い説明を読むと、奇妙に感じる人はいますか?winformsで非常に単純なタスクのアドバイスを求めるスタックオーバーフローに関する他の質問はいくつありますか? 誤解しないでください-MVVMがあり、シュリンクラップされて販売されているソフトウェアパッケージの水平開発を行っている大規模なチームにとって、これは非常に貴重です。ビューモデルのユニットテストでは、RTMのバグを回避することで数百万ドルを節約でき、専用のUI開発者が豊かなエクスペリエンスを提供できます。しかし、再導入のコストが最小限で、ビジネスで支払うすべてがシンプルなソフトウェアである場合、ビジネスロジックがすでにユニットテストされているのに、なぜ単純な「ラッパー」VMのユニットテストに時間を費やす必要があるのでしょうか。キュートなアニメーションと配色にビジネスが費やす時間はどれくらいですか?後輩開発者がやるべきことはありますか(以前は「Save_Click」を見ていた保存機能のバグを追跡し、 確かに、私はWPFのデータバインディングが本当に好きです。これを利用するために、データコンテキストをウィンドウ自体に設定します。ウィンドウは、ビジネスクラスやその他の監視可能なプロパティにアクセスできます。そうすることで、ほぼすべてのMVVMの「ルール」を破ります。しかし、少なくとも、読みやすいシンプルなイベントドリブンコードがあり、新しいデータバインディングと検証を利用できます。問題はデザイナーにあります-私はあまり使いませんが、2012年に統合されるようになったことを願っています-デザイナーは、ウィンドウとその基本クラスが持つ数百のプロパティを表示します。 関連性のある人のために、リソース、本、またはこれを飲み込みやすくする視点の変更にさえ私を向けることができます。MVVMをもう一度試してみますが、前回、依存関係の注入について心配していて、VMからのメッセージボックスを表示するだけでかなり愚かだったので、単体テストの意図はありませんでした。単体テストを行ったとしても、恐ろしい「密結合」アプリケーションのコンパイル時エラーとランタイムテストを交換することで、本当に品質が向上しますか? 1つの答えは、winformsにとどまることです。しかし、WebFormsの最後のサポーターの1人として(私はWeb開発の傾向について同じ批評を多く持っています)、Microsoft認定トラックにWebFormsが残っていないことに気付いたときのように、少し恐竜のように感じました。私が気に入らなくても、前進することが唯一の選択肢です。
9 wpf  mvvm 

5
アジャイルMVP(最も価値のあるプレーヤー/プログラマー)
最近、私は(スクラムを使用した)アジャイルプロジェクトに関与していて、各スプリントの最後にチームが開発者「MVP」とQA「MVP」を指名し、チーム。次にMVPは、小さな金銭的報酬と無料のランチ、およびトロフィーを彼の机に表示するために受け取ります。これまでのところ、この報酬システムを使用して2つのスプリントを達成しました。 これから私が見る良いことは次のとおりです: より多くのバグが修正されました(これは上級管理職が見たいものであり、彼らが望む方向への数の変化です) 各「チーム」のMVPが認識され、自尊心が高まります(または自我の高まりですか?) (少なくとも開発者の観点から)そのようなことをするのに悪い面をいくつか考えていることに気づきました。 バグ修正の品質が低下するほど、その数に非常に関心がある開発者が数人います。ある領域の修正により、別の領域で回帰が発生しています。 バグ数を増やすために、「より簡単でより速い」バグを厳選している開発者が数人います。私はここで悪いのは良いことだと思います。 より高い優先度(多くの場合、「修正するのがより困難/より長い」に関連する)の​​欠陥は、実際にはより低い優先度になります。 ブロッキングの欠陥は、通常より時間がかかり、QAとのより多くの調整を必要とするため、適時に対処されません。 開発チーム内のチームの側面が失われました。開発とQAが一体となって機能するチームの側面も改善されていませんが、以前と比べてあまり変わっていません。 バグ修正を超えて作業したり、その数に向けて作業したりすることは、簡単に認識/追跡することはできません。 私は、チームがそれぞれをどのように処理するかに応じて、上記の「悪い」のそれぞれにある程度対処できると信じています。 私の質問は、スプリントごとにMVPを認識しているこのようなものをうまく成功させた人はいますか?もしそうなら、あなたはその成功に何が貢献したと思いますか?

7
なぜそれほど多くの数値型(bit、int、float、double、long)があるのですか?
PHP、Java、Cを学びました。ビット、整数、浮動小数点数、倍精度浮動小数点数、長整数型など、非常に多くの種類の数値データ型がある理由について知りたいと思います。数値のタイプを1つだけにしないでください。 これには何かメリットがありますか?たぶん、そのような小さな数を保持するために整数を使用すると、メモリを節約できますか?
9 numbers 

7
ヘッダーがCPPファイルに明示的に含まれるようにする
#includeHPPファイルを介して既に何がインクルードされているかに関係なく、CPPファイルで使用されるすべてのタイプのヘッダーには、一般的には良い習慣だと思います。#include <string>たとえば、CPPでスキップした場合でもコンパイルできたとしても、HPPとCPPの両方で使用する可能性があります。これにより、HPPがフォワード宣言を使用したかどうかを心配する必要がなくなります。 この#includeコーディングスタイルを適用できるツールはありますか?このコーディングスタイルを適用する必要がありますか? プリプロセッサー/コンパイラーは#includeHPPからのものかCPPからのものかを気にしないので、このスタイルに従うのを忘れてもフィードバックは得られません。

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