ソフトウェア工学

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

6
他の人がコードベースにすばやくコミットしている間に、どのようにコードベースをリファクタリングできますか?
私は最終的にはオープンソースになるプライベートプロジェクトに参加しています。私たちには、アプリを構築するための技術に十分な才能がある少数のチームメンバーがいますが、クリーンで美しい、最も重要な長期保守可能なコードを書くことができる専任の開発者はいません。 コードベースのリファクタリングを開始しましたが、定期的に連絡を取り合っていない別の国にいるチームの誰かがこのまったく別のものを更新する可能性があるため、少し扱いに​​くいです。 解決策の1つは、迅速に通信するか、より良いPMプラクティスを採用することですが、まだそれほど大きくはありません。コードをクリーンアップして、彼が更新したものにうまくマージしたいだけです。ブランチを使用することは適切な計画でしょうか?ベストエフォートマージですか?他に何か?

7
保守性に関する学生のトレーニングを改善する方法は?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 保守性は、専門的なソフトウェア開発の主要な問題です。実際、メンテナンスは、プロジェクトのリリースから基本的に終わりまで続くため、ほとんどの場合、ソフトウェアライフサイクルの最も長い部分です。 さらに、メンテナンス中のプロジェクトは、プロジェクトの総数の大部分を占めています。http://www.vlegaci.com/298/interesting-statistics-%E2%80%93-numbers-of-programmers-in-maintenance-vs-development/によると、メンテナンス中のプロジェクトの割合は約2です/ 3。 私は最近この質問に出くわしました。彼の仕事は主にメンテナンスに関するものであることに気付いた男はかなり驚いているようです。それから、フランスのソフトウェア開発専門家コミュニティ(http://www.developpez.com/)のメインサイトでディスカッション(フランス語)を開くことにしました。ディスカッションのタイトルは、「学生はプロのソフトウェア開発の現実に十分に訓練されていますか?」そして、主に保守性についてです。少なくともフランスでは、人々はその両方の面でメンテナンスに直面する準備が十分に整っていないことが指摘されました。 既存のコードを維持する 保守可能なコードを作成する ここでの私の質問は、この議論と同じであり、保守性を教える良い方法を見つけることを目指しています。 保守性をどのように教えることができますか? どのような運動を提案しますか? 保守性に関して十分な訓練を受けている場合、どのような種類のコースを受講しましたか? [編集]いくつかの誤解の後、私の質問を明確にしなければならないと思います。プロジェクトリーダーおよびソフトウェア開発者として、私はしばしば研修生または卒業したばかりの学生と仕事をしています。私はかつて自分自身を卒業したばかりでした。問題は、通常、プロジェクトの保守性を高めるSOLIDなどの原則に学生が慣れていないことです。私たちはしばしばプロジェクトを発展させる重要な困難を抱えることになります(保守性が低い)。私がここで探しているのは、保守性の重要性と、この特定の点に関してより良いコードを作成する方法に関する成功した教育の具体的な学術的な例です。または生徒の訓練方法を改善するための提案。

5
パーサーコンビネーターを使用して、構文解析と字句解析のパスを分けるのは良い習慣ですか?
パーサーコンビネーターを使用し始めたとき、私の最初の反応は、構文解析と字句解析の人為的な区別のように感じたものからの解放感でした。突然すべてが解析されただけです! しかし、私は最近、codereview.stackexchangeでこの区別を回復する誰かを示すこの投稿に出会いました。最初はこれは非常にばかげていると思いましたが、Parsecにはこの動作をサポートする機能が存在するという事実に疑問を抱きます。 パーサーコンビネーターで既にレキシシングされたストリームを解析することの利点/欠点は何ですか?

8
文字列との結合はクラスメソッドよりも「緩い」のでしょうか?
Swingを使用して、Javaで学校グループプロジェクトを始めています。これは、データベースデスクトップアプリの簡単なGUIです。 教授は去年のプロジェクトのコードを教えてくれたので、彼がどのように仕事をしているかを見ることができました。私の最初の印象は、コードが本来あるべきよりもはるかに複雑であるということですが、プログラマーは、自分が書いただけではないコードを見るとき、これをよく考えると思います。 私は彼のシステムが良いか悪いかの理由を見つけたいと思っています。(私は教授に尋ねたが、彼は後でなぜそれが良いのかを見るだろうと言ったが、それは私を満足させない。) 基本的に、彼の永続可能なオブジェクト、モデル(ビジネスロジック)、およびビュー間のカップリングを避けるために、すべては文字列で行われます。データベースに格納される永続オブジェクトは文字列のハッシュテーブルであり、モデルとビューは互いにサブスクライブし、サブスクライブする「イベント」に文字列キーを提供します。 イベントがトリガーされると、ビューまたはモデルは、そのイベントの処理を決定するすべてのサブスクライバーに文字列を送信します。たとえば、ビューアクションリスナメソッドの1つ(これは永続オブジェクトにbicycleMakeFieldを設定するだけだと思います): else if(evt.getSource() == bicycleMakeField) { myRegistry.updateSubscribers("BicycleMake", bicycleMakeField.getText()); } その呼び出しは、最終的にVehicleモデルのこのメソッドに到達します。 public void stateChangeRequest(String key, Object value) { ... bunch of else ifs ... else if (key.equals("BicycleMake") == true) { ... do stuff ... 教授は、このような方法は、ビューでビジネスロジックオブジェクトのメソッドを単純に呼び出すよりも、拡張性と保守性が高いと言います。彼は、ビューとモデルがお互いの存在を知らないので、ビューとモデルの間に結合がないと言います。 ビューとモデルが機能するには同じ文字列を使用する必要があるため、これはより悪い種類のカップリングだと思います。ビューまたはモデルを削除するか、文字列にタイプミスをすると、コンパイルエラーは発生しません。また、コードが必要以上に長くなります。 私は彼とこれについて議論したいが、彼は彼の業界経験を使って、私、経験の浅い学生がするかもしれない議論に反論する。私が見逃している彼のアプローチにはいくつかの利点がありますか? 明確にするために、ビューをモデルに明らかに結合させることで、上記のアプローチを比較したいと思います。たとえば、車両モデルオブジェクトをビューに渡し、車両の「メイク」を変更するには、次のようにします。 vehicle.make = bicycleMakeField.getText(); これにより、車両のメーカーを1か所で設定するために現在使用されている15行のコードが、読み取り可能な1行のコードに削減されます。(そして、この種の操作はアプリ全体で何百回も行われるため、読みやすさと安全性にとって大きな勝利になると思います。) 更新 私のチームリーダーと私は、静的型付けを使用してフレームワークを望みどおりに再構築し、教授に通知し、最終的に彼にデモを提供しました。彼は私たちに助けを求めない限り、そして私たちのチームの残りの部分を最新に保つことができる限り、私たちのフレームワークを使用するのに十分寛大です-これは私たちにとって公平に思えます。
18 java  coupling 

4
配列の代わりにリンクリストを使用するための具体的なルールは何ですか?
リンクリストは、要素の安易な挿入と削除が必要な場合、および要素がメモリ内で隣接していないことが重要でない場合に使用できます。 これは非常に抽象的であり、配列ではなくリンクリストを使用する理由を具体的に説明したいと思います。私はプログラミングの経験があまりないので、実際の経験はあまりありません。

6
私の履歴書にテストや自己学習リポジトリをリストする価値はありますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 4年前に閉鎖されました。 GitHubリポジトリには、何かを学ぶときに書くおもちゃのプログラムがあります。たとえば、アルゴリズムやデータ構造について読んだとき、それを簡単に実装して、機能することを確認し、理解します。 私は時々、アルゴリズムとデータ構造のパズルを解き、それがリポジトリにプッシュされます。 このリポジトリは私の履歴書にリンクする価値がありますか、それとも実際に雇用される可能性を損ないますか?

4
プロジェクトに必要なプログラマの数を決定する方法
特定のプロジェクトを成功させるために必要なプログラマーの人数をどのように知っていますか? 私が働いている会社は、クライアント企業の注文を処理します。場所に基づいた在庫管理、注文処理、船荷証券の生成、請求書作成、貨物監査、レポート作成(おそらく50件のレポート)を処理する社内倉庫管理システムを作成しました。また、バーコードスキャン機能とクライアントポータル、およびその他の多数の小さな機能も備えています。また、従業員のフルタイムクロックも含まれています。Quickbooks、UPS、FedExと統合します。機能がわずかに異なる少なくとも50台のクライアントの作業を処理します。たとえば、顧客が送信したファイルから注文をインポートしますが、各顧客は異なるファイル形式(csv、excel、フラットファイル、およびWebサービス)を送信するため、十数個を超える注文変換方法がセットアップされています。輸出も同じ話です。 このプロジェクトは複雑で、毎日25万行を超えるコードで複雑さを増しています。これは、約250,000行のVB.NETコード、6,200行のRubyコード、そしておそらく5,000行のPHPです。また、約200のテーブルを持つMySQLデータベースもあります。 絶えず変化する要件と多数のクライアントの異なるニーズのために、コード自体の品質は非常に貧弱なコードから比較的良いコードまで大きく異なります。 現在、このプロジェクトにはプログラマーが1人しかいません-私です。私は現在、75人ほどの会社のすべての製品サポートも行っています。これには、トラブルシューティングと新しいクライアントのセットアップ、および必要な新しい機能が含まれます。さらに、私たちは全体を100%Ruby on Railsベースに書き換えようとしています。また、来年中にシステム全体を市場に出し、他の企業に使用したいと考えています。 現在、私たちにはプログラマーとしての自分しかいませんが、それで十分だとは思いません。この規模のプロジェクトに必要なプログラマの数や、その質問への答えをどのように決定すべきかについて、誰にも推奨事項がありますか?特に、経営者が来年までに製品の商業品質を望んでいるという事実を考えると?

13
Windowsサービスの実用的な用途は何ですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 4年前に閉鎖されました。 ロックされています。この質問とその回答はロックされています。なぜなら、質問はトピックから外れていますが、歴史的に重要だからです。現在、新しい回答やインタラクションを受け入れていません。 Windowsサービスを使用するのは初めてです。VS2010でWindowsサービスを作成することを学びましたが、Windowsサービスを使用できる実用的な方法を知りたいですか? 現在のコンテキストを念頭に置いてグーグルを試し、Windowsサービスの作成方法に関するチュートリアルをさらに見つけました。 バウンティオファーの編集: すべての答えは素晴らしいですが、私はWindowsサービスとその意味に関するより実用的な例を探していましたか?これは、開発者がケーススタディでそれらを使用するのが適切である時期を知るのに役立ちます。

7
80%を超える変更を行う場合、クラスファイルの著者名を変更する必要がありますか?
自動化されたUIテストのために、既存のJavaテストクラスのセットをリファクタリングしています。クラスファイルを大幅に変更するか、完全に変更することがあります。これにより、クラス全体を書き換えるとき、コメントセクションの著者名を自分のものに変更する必要があると思いますか? 私は貪欲ですか?それとも、私の名前を見て疑問がある場合に私に尋ねることは有用でしょうか?

7
最も使いやすい言語を使用するか、会社の「標準」を使用するか
私は特定の工場向けにイントラネットサイトを開発する予定であり、当社のWeb開発の標準はIIS + ASP.Net + VB.Net + Microsoft SQL Serverです(約10以上の工場があることに注意してください)。イントラネットサイトは私の工場でのみ使用され、私がそれをサポートするのは私だけです。私はLAMPのセットアップにはるかに精通しており、ASP.Netよりもはるかに迅速にPHPを使用して開発と問題解決を行うことができました。会社の「標準」はASP.Net/VB.Netですが、会社が全体として行うことのほとんどは、サードパーティソフトウェア(通常はJavaベース)を購入することです。会社も知っているASP.Net/VB.Netはもちろん、VB6。 そうは言っても、会社の標準に違反して、私がよりよくサポートできるセットアップを使用する方が良いのか、それとも、現在誰もいなくても会社がよりよくサポートできるセットアップを使用する方が良いとにかく社内で独自の標準をサポートできますか? 私の場合に考慮すべきいくつかの追加要因: 繰り返しますが、これは私の工場だけのためのものであり、私が会社を辞めない限り、これをサポートするのは私だけです。すでに会社にいる誰かはいません。 とにかく、同社は標準でほとんど開発を行っていません。 既存のソフトウェアのほとんどが自社の標準を使用していません。 会社の標準を選択した場合、Microsoft SQLのExpressバージョンとWindows 7 OSを使用する必要があります。私の読書から、Expressバージョンはビジネスでの使用には問題ありませんが、データベースのサイズは制限されています。

3
複雑さと到達可能性の間に相関関係はありますか?
最近、uniで循環的複雑度(McCabe)とソフトウェアの到達可能性を研究しています。今日、私の講師は、2つの測定値の間に相関関係はないと述べましたが、これは本当ですか? それほど複雑ではないプログラム(これまで見てきたわずかなものから)が到達可能性の点で「より良い」結果をもたらすように見えるので、間違いなく何らかの相関関係があると思います。 誰もが2つのメトリックを一緒に見ようとする試みを知っていますか?そうでない場合、多数のプログラムの複雑さと到達可能性の両方に関するデータを見つけるのに適した場所は何ですか?

6
自己文書化コードvs Javadocs?
最近、私が現在扱っているコードベースの部分のリファクタリングに取り組んでいます-自分自身をよりよく理解するためだけでなく、コードに取り組んでいる他の人にとってそれをより簡単にするために。 私は、自己文書化コードは素晴らしいと考える側に傾く傾向があります。私はちょうどそれがきれいだと思うし、コードがそれ自体のために話すなら、まあ... それは素晴らしいです。 一方、javadocsなどのドキュメントがあります。私もこれが好きですが、ここのコメントが時代遅れになるという特定のリスクがあります(もちろん一般的なコメントも同様です)。ただし、それらが最新の場合、複雑なアルゴリズムを理解するなど、非常に役立ちます。 これのベストプラクティスは何ですか?自己文書化コードとjavadocsの間のどこに線を引きますか?

7
UMLについて知っておくべき重要なことは何ですか?
この投稿を改善したいですか?引用や回答が正しい理由の説明など、この質問に対する詳細な回答を提供します。十分な詳細のない回答は、編集または削除できます。 プログラムのデザインと動作の落書きをもっと合理化して、他の開発者と共通の言語にしたいです。 私はUMLを見て、原則としてそれが私が探しているもののようですが、それはやり過ぎのようです。私がオンラインで見つけた情報も非常に肥大化しており、学術的だと思われます。 UMLを同僚に説明するのに十分な英語の平易な方法で理解するにはどうすればよいですか?地上レベルでUMLを理解するための標準的なリソースは何ですか?
18 design  uml 

6
優れたユーザーインターフェイスのインスピレーションはどこで得られますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 6年前に閉鎖されました。 私が現在アップグレードしているデスクトップアプリケーションのメイン画面インターフェースを設計する限り、私は精神的なブロックを持っています。このプログラムを最初に開発したとき、画面解像度は640 X 480でした。今日では、複数の画面解像度があります。 デスクトップアプリケーションの優れたメイン画面レイアウトのアイデアはどこにありますか?

6
JavaがC ++のようにヘッダーの使用を許可しない理由
要件を満たさない次の回答を除いて、回答が見つからなかったという質問があります。 「ジェームズゴスリングはしたくなかったから」 Javaにはインターフェース(純粋な仮想関数のみ、属性なし)を含めることができますが、クラス定義とまったく同じではありません。
18 java 

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