ソフトウェア工学

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

3
音楽ソフトウェアを設計するための適切なプログラミング言語[終了]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 私は自分の楽器のソフトウェアをリズミカルなものにしたいと思っています(メロディはありません)。これらのソフトウェアに必要なことは次のとおりです。 ユーザーが音楽を作れるようにする ユーザーが作成したものを再生する そのためには、その楽器の異なる音を録音し、各記号を適切な音と一致させる必要があります。 どのプログラミング言語がこの目的に適していますか?

3
try-catch-finallyブロックの無関係なコードは「どれほど悪い」ですか?
これは関連しているQ: 返品後の作業を行うためのfinally節の使用は、スタイルが悪い/危険ですか? 参照されるQでは、最終的に使用されるコードは、使用される構造とプリフェッチの必要性に関連しています。私の質問は少し異なりますが、より多くの聴衆にとって密接な関係があると思います。私の特定の例はC#winformアプリですが、これは最終的にC ++ / Javaの使用にも適用されます。 私は、ブロックに例外や例外処理/クリーンアップに関係のないコードがたくさんあるtry-catch-finallyブロックにかなり気付いています。そして、例外と処理に密接に関連するコードで非常にタイトなtry-catch-finallyブロックを作成するという私のバイアスを認めます。ここに私が見ているもののいくつかの例があります。 tryブロックには、スローされる可能性のあるコードに至るまでの多くの予備的な呼び出しと変数が設定されます。ロギング情報は、セットアップを取得し、tryブロックでも実行されます。 最後に、ブロックはform / module / controlのフォーマット呼び出し(catchブロックで表されるように、アプリが終了しようとしているにもかかわらず)を持ち、パネルなどの新しいオブジェクトを作成します。 大体: methodName(...) { 試してみる { //メソッドの多くのコード... //スローできるコード... //メソッドとリターンのためのより多くのコードを... } catch(何か) {//例外を処理する} 最後に { //例外によるいくつかのクリーンアップ、クローズ //作成されたもののためのより多くのコード(例外がスローされる可能性があることを無視)... //さらにオブジェクトを作成します } } コードは機能するため、何らかの価値があります。それはうまくカプセル化されておらず、ロジックは少し複雑です。私は(苦労して)コードを移動したりリファクタリングしたりするリスクに精通しているので、私の質問は、同様に構造化されたコードに関する他の人の経験を知りたいということになります。 悪いスタイルは変更を加えることを正当化しますか?同様の状況で誰かがひどくやけどをしたことがありますか?その悪い経験の詳細を共有してくれませんか?私が過剰に反応していて、スタイルがそれほど悪くないので、それを残してください?物事を片付けることのメンテナンスの利点を得る?

6
文字列を1つずつ連結するのは非効率ですか?
Cでのプログラミングの日々を思い出します。2つの文字列が結合されると、OSは結合された文字列にメモリを割り当てる必要があります。解放されます。したがって、リストに参加する場合のようにこれが複数回行われると、OSは次の連結後に解放されるために、より多くのメモリを常に割り当てる必要があります。Cでこれを行うより良い方法は、結合された文字列の合計サイズを決定し、結合された文字列のリスト全体に必要なメモリを割り当てることです。 現在、最新のプログラミング言語(C#など)では、コレクションを反復処理し、すべての文字列を一度に1つの文字列参照に追加することで、コレクションの内容が結合されるのがよく見られます。これは、最新のコンピューティング能力を備えていても非効率ではありませんか?

3
複雑なデータにアクセス/操作する場合、多くの小さな断片に格納するのが良いのですか、それとも大きなチャンクに格納するのが良いのでしょうか?
ギターのタブというかなり複雑なデータを操作するWebアプリを構築しています。 As a reference, guitar tabs look like this: Eb|-------------------------------------------------------------------------| Bb|-------------------------------------------------------------------------| Gb|--5-5-5-5----------------------------------------------------------------| Db|--5-5-5-5--3-3-3-3--7-7-7-7--5-5-5-5--2-2-2-2--3-3-3-3--2-2-2-2--5-5-5-5-| Ab|--3-3-3-3--3-3-3-3--7-7-7-7--5-5-5-5--2-2-2-2--3-3-3-3--2-2-2-2--5-5-5-5-| Eb|-----------1-1-1-1--5-5-5-5--3-3-3-3--0-0-0-0--1-1-1-1--0-0-0-0--3-3-3-3-| このデータを大きなチャンクとして保存するか、それを分割して「メモごと」に保存する方が、パフォーマンスにとってより効率的でしょうか? As a use case: User changes first chord from: to: Eb|--- Eb|--- Bb|--- Bb|--- Gb|--5 Gb|--4 Db|--5 Db|--4 Ab|--3 Ab|--2 Eb|--- Eb|--- ブロックとして保存する場合、タブを操作するコードははるかに複雑になります。メモごとに保存すると、データベースにさらにアクセスする必要があります。どの方法がより効率的ですか?多くのユーザーがデータを変更する可能性があります。最高のパフォーマンスのWebアプリが欲しい。回答にまったく影響がある場合は、MySQLを使用します。

5
どのような理由でC#の「使用」セクションをきれいに保つ必要がありますか?
コードをリファクタリングするときに、IDEをC#クラスのusingセクションに移動し、未使用の名前空間と重複する名前空間を削除して、すべてを並べ替えました。 ペア(ペアプログラミング)が理由を尋ねました。なぜそうしたのか分かりませんでした。私はすべてのコードをきれいに整頓することを習慣からやった。つまり、よりクリーンなコードを作成することは一般的には良いアイデアであると言いましたが、もちろんその理由は正当な理由ではありませんでした。C#コードページのusingセクションで時間を費やすことすらしません。 クラスまたは列挙(または一般に型)をあるネームスペースから別のネームスペースに移動することが多いため、コードに新しいusingステートメントを追加します(コードウィンドウを上に移動して自分でusingステートメントを記述するか、またはAlt+ Ctrl+のF10組み合わせを使用してエディタを介して)、これらの新しいusingステートメントはusingセクションの最後に追加され、アルファベット順にソートされず、コンパイラはこれらの問題のいずれにも不満を感じないため、なぜこれを行う必要があるのかセクションはきれいで整頓されていますか?どのような理由がありますか?

3
Gitには履歴の書き換えを防ぐための「セーフモード」がありますか?
Git(および一般的にDVCS)を使い始めて、履歴書き換えの変更を検討し始めたとき、リポジトリがローカルのみの場合は安全ですが、リモートで作業してみようとすると問題が発生する可能性がありますそのような変更をプッシュします。 私が期待している機能は、「セーフモード」を有効にする機能です。これにより、基本的に、私がすべきでないことは何もできなくなります。そして、それはどういう意味ですか?つまり、すでにオリジンにプッシュされたものの履歴書き換えの変更を意味します。正確に定義することはできませんが、これには次のようなケースが含まれます。 commit --amend HEADがすでにプッシュされている場合 rebase 非ローカルブランチの reset プッシュされたブランチの これらは、おそらく次のpush失敗をもたらす状況の例です(IIRCは早送りではないため)。そのうちのいくつかを偶然に作成し、リモートでブランチを再作成する必要がありました。そして、私はこれを十分に速く実行できたので、私が書き直した歴史を誰も引き出せなかったのは幸運でした。 この種の変更を特定し、必要に応じて、ユーザーがそれらを変更できないようにすることは可能だと思います。おそらくそのためのオプションはありますか? 存在しない場合、作成しようとする価値があると思いますか?そのような「危険な変化」を特定する方法を正確に定義してみませんか?
11 git  dvcs 

9
分析はテクノロジーにとらわれないべきですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 昨日、同僚の一人と議論をしました。彼(ビジネスアナリスト、以前はプログラマー)は、システムを実装するために使用されるテクノロジーを知っておく必要があると考えているため、より適切な設計上の決定を下すことができます。私の意見では(私はプログラマーです)、分析はテクノロジーと決して結び付けられるべきではなく、優れたアナリストは実装の詳細を気にせずに素晴らしいデザインを作成できると信じています。 そのように考えるのは正しいですか?ビジネスアナリストがシステムの実装に使用されるテクノロジーを知る必要がある理由はありますか? 編集:私は言っているときに間違った用語を使用したと信じていますbusiness analyst。多分私は建築家、またはシステムアナリストを意味した。私はこれらの用語に慣れていません。必要に応じて、建築家やシステムアナリストのようなものを意味しました。 素晴らしい回答をありがとうございました!私はまだあまり経験がなく、これに目を開いてくれてうれしいです。

4
チーム用スクラムは2つの音声言語に分割
すべてのチームメンバーに共通の言語が1つもないチームがあります。チームは2つの場所に分かれています(ただし、地理的な問題は主要な問題ではありません)。各場所のすべてのチームメンバーは同じ言語を話し、両方の場所で両方を話すことができるメンバーがいます。スクラムを紹介したいのですが、言語の問題に対処するためのロジスティックスに苦労しています。 これはオフショアチームではありません。すべてのチームメンバーは会社の従業員ですが、異なる国の2つの異なるオフィスにいます。幸いなことに、タイムゾーンに関する問題はありません。言語が第一の障壁です。各場所の人々の規模とスキルセット、およびその他の外部要因を考慮して、チームを2つのチームに分割することもできますが、単一のチームとして統合することがより望ましいです。 コミュニケーションを豊かにし、チームが団結してお互いを見て真のスタンドアップアプローチを行えるようにするには、ビデオ会議を使用することが望ましいと思います。しかし、これは言語間でのコミュニケーションが困難になると思います。チームのバイリンガルメンバーは口頭で翻訳する必要がありますか?代わりに、分散スクラムの言語の問題に関する唯一のリファレンスで推奨されているインスタントメッセージを使用することもできます。私は「貧しい」コミュニケーションを心配しており、おそらくそれはスクラムの概念への不十分な紹介です。 チーム内で言語の違いに対処した経験のある人から、問題にどのように対処し、どの程度うまく機能しましたか?

4
カプセル化の過剰使用に悩まされますか?
さまざまなプロジェクトのコードに、コードの臭いや悪いことのように見える何かに気づきましたが、対処できません。 「きれいなコード」を書き込もうとしている間、コードを読みやすくするためにプライベートメソッドを使いすぎる傾向があります。問題は、コードが確かにきれいであるが、テストするのが難しいことです(そう、私はプライベートメソッドをテストできることを知っています...)、一般的に私には悪い習慣のようです。 次に、.csvファイルからデータを読み取り、顧客のグループ(さまざまなフィールドと属性を持つ別のオブジェクト)を返すクラスの例を示します。 public class GroupOfCustomersImporter { //... Call fields .... public GroupOfCustomersImporter(String filePath) { this.filePath = filePath; customers = new HashSet<Customer>(); createCSVReader(); read(); constructTTRP_Instance(); } private void createCSVReader() { //.... } private void read() { //.... Reades the file and initializes the class attributes } private void readFirstLine(String[] inputLine) …

6
ソフトウェアアーキテクチャに関して「エンタープライズ」とはどういう意味ですか?
「エンタープライズ」という用語は、ソフトウェア開発者やプログラマーの周りに頻繁に投げ込まれ、大まかに使用されているようです。 en・ter・prise / ˈentərˌprīz / 名詞:プロジェクトまたは事業。通常は困難であるか、努力が必要です。イニシアチブと機知。 誰かがこの用語が実際に含むものを明確にしてください?「企業レベル」、「企業規模」?ものの「エンタープライズ版」もあります。正確にはどういう意味ですか?上記の定義から判断すると、ソフトウェアに対してより具体的に判断するのは明らかに意味がありません。エンタープライズという言葉を使用した場合の意味は何ですか? 編集: これにスピンを追加するには-この用語は、Enterprise Framework Modelなどのフレーズにどのように適合しますか?データアクセスとデータコンテキストは、会社全体の説明と何の関係がありますか?

2
PHPでのローカライズ、ベストプラクティス、またはアプローチ
PHPアプリケーションをローカライズしています。同じことを達成するための最良の方法を選択することにはジレンマがあります。 方法1:現在、PHPファイルの配列にローカライズする単語を保存しています <?php $values = array ( 'welcome' => 'bienvenida' ); ?> 必要に応じて各単語を抽出して返す関数を使用しています 方法2:同じ文字列を保存するtxtファイルを使用する必要がありますか? <?php $welcome = 'bienvenida'; ?> 私の質問は、同じものを開発するための速度と労力の面で、どちらがより良い方法であり、なぜですか? 編集:2つの方法のうち、応答が速い方法を知りたいのですが、なぜそうなるのでしょうか?また、上記のコードの改善は大歓迎です!
11 php  localization 

6
メインフレームの利点は何ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 メインフレームの欠点はよく踏まれています。高価で、レガシーで、コミュニティの縮小など。 マイナス面には特に興味はありませんが、現在のIntel / AMD&Linux / Windows環境よりもメインフレームハードウェア/ソフトウェアにメリットがあるかどうか興味があります。 MFは、I / O負荷が大きい場合に特に優れている(そして現在のサーバーよりも優れている)と言われています。これはまだ本当ですか?
11 legacy  mainframe 

5
私のクラスが本のクラスの階層よりも悪いのはなぜですか(初心者OOP)?
PHPオブジェクト、パターン、およびプラクティスを読んでいます。著者は大学での授業をモデル化しようとしています。目標は、レッスンタイプ(講義またはセミナー)と、レッスンが時間制レッスンか固定価格レッスンかに応じて、レッスンの料金を出力することです。したがって、出力は次のようになります Lesson charge 20. Charge type: hourly rate. Lesson type: seminar. Lesson charge 30. Charge type: fixed rate. Lesson type: lecture. 入力が次の場合: $lessons[] = new Lesson('hourly rate', 4, 'seminar'); $lessons[] = new Lesson('fixed rate', null, 'lecture'); 私はこれを書いた: class Lesson { private $chargeType; private $duration; private $lessonType; public function __construct($chargeType, $duration, …

3
単一開発者のGITワークフロー(単純なFTPから移行)
VCSに移行するのが賢明かどうかを判断しようとしています。私は小さな組織(5人)の単一のWeb開発者です。VCS(Git)は、バージョン管理、オフサイトバックアップ、集中コードリポジトリ(自宅からアクセス可能)などの理由で考えています。 現時点では、一般的にライブサーバーで作業しています。FTPで入力し、編集して保存し、再アップロードして更新します。通常、編集はCMSのテーマ/プラグインファイル(concrete5またはWordpressなど)に対して行われます。これはうまく機能しますが、バックアップもバージョン管理も提供しません。 VCSをこの手順にどのように統合するのが最善か疑問に思っています。会社のWebサーバーにGitサーバーをセットアップすることを想定していますが、クライアントアカウント(通常は同じサーバー上のVPS)に変更をプッシュする方法は明確ではありません-現時点では、詳細を指定してSFTPにログインし、変更を直接。 また、何がリポジトリを賢明に表現するのか分かりません-各クライアントのウェブサイトは独自のものを取得しますか? 洞察や経験は本当に役立つでしょう。どうしてもGitのフルパワーが必要だとは思いませんが、基本的なバージョン管理と事実上のクラウドアクセスは本当に便利です。 編集:私はそれを最も理にかなっていると思われる2つのオプションに絞り込みました。1つ目はZweiBlumenの回答に基づいており、編集はライブサーバーで行われ、そこから(外部の)Gitサーバーにコミットされます。これには、私のワークフローがあまり変わらないという利点があります(コミットを行うための追加のステップがありますが、それ以外は同じです)。 2番目のオプションは、XAMPPを使用してローカルで作業し、ローカルマシンから変更をコミットすることです。サイトがライブになったときのみ、完成した記事をローカルマシンからWebサーバーにアップロードします(Gitへの最終コミットの直後)。これは理論上は問題ないように見えますが、その後サイトが修正を必要とし、ライブサーバーでそれらを作成する場合(通常どおり)、ローカルリポジトリの変更されたファイルを手動でコピーし、それらの変更をGitサーバー。これは過度に複雑に思えますが、おそらく私の現在のワークフローからはかけ離れすぎています。 私は、オプション1を試してみて、どうやってうまくいくかをバランスよく考えます。

4
「混合」言語での設計:オブジェクト指向設計または関数型プログラミング?
過去数年間で、私が使用したい言語はますます「機能的」になりつつあります。現在、C#、F#、Scalaなどの「ハイブリッド」言語を使用しています。ドメインオブジェクトに対応するクラスを使用してアプリケーションを設計し、これによりコーディングがより簡単に、より正確に、より安全になる機能機能を使用します(特にコレクションの操作時または関数の受け渡し時)。 ただし、パターンを設計する場合、2つの世界は「衝突」します。私が最近直面した具体的な例は、Observerパターンです。アイテムが作成または変更されたときに、プロデューサーに他のコード(「消費者/オブザーバー」、たとえばDBストレージ、ロガーなど)に通知してほしい。 私は最初に次のように「機能的に」それをしました: producer.foo(item => { updateItemInDb(item); insertLog(item) }) // calls the function passed as argument as an item is processed しかし、私は今、もっと「OO」アプローチを使用すべきかどうか疑問に思っています。 interface IItemObserver { onNotify(Item) } class DBObserver : IItemObserver ... class LogObserver: IItemObserver ... producer.addObserver(new DBObserver) producer.addObserver(new LogObserver) producer.foo() //calls observer in a loop 2つのアプローチの長所と短所はどれですか?かつてFPの第一人者が、デザインパターンは言語の制限のためだけにあると言ったことを聞いたことがあり、それが関数型言語にはほとんどない理由です。たぶん、これはその例でしょうか? 編集:私の特定のシナリオでは、私はそれを必要としませんが、..機能的な方法で「観測者」の削除と追加をどのように実装しますか?(つまり、パターンのすべての機能をどのように実装しますか?)たとえば、新しい関数を渡すだけですか?

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