ソフトウェア工学

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

2
これは厄介な間隔のあるタイプのスタイルですか?
他のプログラマーのコードを読む際、彼は私が見たことのないフォーマットを使用しています。例えば namespace MyNs.HereWeAre {//tab here for some reason public class SomeClass {//here's another tab public string Method() {//yet another tab string _variable = "";//no tab implementation return _variable; } }//eof - class (Yes these eof comments are on every file) }//eof - namespace // eof - file 私は認めます...このコードは私を怒らせます。このスタイルを実現することは困難です。IDEのビジュアルスタジオが提供するデフォルトのフォーマットと戦う必要があります。 このスタイルには正当な理由があることを知っていれば、この錠剤をもう少し簡単に飲み込むことができます。このスタイルは他のプログラミング言語/ IDEに由来していますか?

3
.NETモジュールがモジュールファイル名を名前空間から分離するのはなぜですか?
Schemeプログラミング言語(R6RS標準)の実装では、次のようにモジュールをインポートできます。 (import (abc def xyz)) システムは、ファイルを検索しようとするあなたのスキームモジュールを維持するいくつかのディレクトリです。モジュールのソースコードであり、必要に応じてオンザフライでコンパイルされます。$DIR/abc/def/xyz.sls$DIRxyz.sls Ruby、Python、およびPerlモジュールシステムは、この点で似ています。 一方、C#はもう少し複雑です。 まず、プロジェクトごとに参照する必要があるdllファイルがあります。それぞれを明示的に参照する必要があります。これは言うよりも複雑で、ディレクトリにdllファイルをドロップし、C#に名前でピックアップさせます。 次に、dllのファイル名と、dllによって提供される名前空間との間に1対1の名前の対応はありません。この柔軟性は高く評価できますが、手に負えなくなる可能性もあります。 これを具体的にするために、私がこれを言うときusing abc.def.xyz;、C#がC#がabc/def/xyz.dll参照することを知っている(プロジェクトごとに構成可能)ディレクトリでファイルを見つけようとするとよいでしょう。 Ruby、Python、Perl、Schemeのモジュール処理方法の方がエレガントだと思います。新興言語はより単純な設計で行く傾向があるようです。 .NET / C#の世界が、このようにして、間接レベルをさらに上げているのはなぜですか?

3
どうすれば複雑なコード構造を文書化できますか?
数学的にも構造的にも非常に複雑で還元不可能なほどのコードがある場合、このコードをドキュメント化するにはどうすればよいですか?特に、私が行う数学または建築のスキルを持っていない可能性のある人がドキュメントからそれを理解できるようにするにはどうすればよいですか?数学もすべて記録する必要がありますか?チュートリアルにリンクしますか?複雑な構造の場合、いくつかの視覚的補助リンクはありますか?

3
ヘビー級の開発方法論で個人的な練習をする方法は?
私は新しい仕事に取り組んでいます。プロジェクトは厳しい品質基準を満たす必要があり、詳細に文書化され、非常に詳細に管理され、UMLダイアグラムなど、これまでのほとんどの仕事の経験である「カウボーイコーディング」とは反対のすべてのものです。 。大規模な航空宇宙または医療機器ソフトウェアの開発方法を考えてみてください。 カウボーイコーディングの混乱を残してよかったと思います。ヘビー級のエンジニアリング手法がどれほどうまくいくか知りたいです。しかし、どのようにして重いメソッドの経験を迅速に得ることができますか? 単に数か月/数年の間仕事にいるだけでなく、それはです。 単なる言語、または新しいAPIで、おもちゃのテストプログラムをハックしたり、読んだり、意図的に間違いを起こして何が起こるかを確認したりできます。自転車に乗ったり楽器を演奏したりするのと同じように、練習は不可欠です。フルートを手に取り、毎日30分を費やすのは簡単です。オーケストラに参加したり、フルタイムのフルートコンサルタントになる必要はありません。しかし、大規模で複雑で、チームが関与するソフトウェアエンジニアリング活動をどのように実践するのでしょうか。そのほとんどは、コミュニケーションと計画、コミュニケーションの誤りの回避、およびスケジュールと予算の制限の超過に関するものです。 これは一人で行うことは不可能のようです。少数の人が大きなプロジェクト全体を短時間で(1日)小規模にエンジニアリングできる方法はありますか?

7
プロのソフトウェア開発チームは、重要なプロジェクトの複雑な設計にどのように対処しますか?
まず、私はこの質問が多少長く漠然としていることを理解しており、お詫び申し上げます。これはおそらく、「理解した」人にとっては短い名前の基本的な問題ですが、私はこの点について欠けていると思うので、問題を説明する際はご容赦ください。 私は11歳の頃から、この方法でプログラミングを行ってきました。これは、私が最初から自分にすべてを教えていたことを意味します。私は技術教育を受けましたが、厳密にはコンピュータサイエンスではありませんでした(私はフォトニックエンジニアリングの学位を取得して卒業しています)。もちろんプログラミングコースもありましたが、これは私にとっては基本的なもので、新しいことはあまり学びませんでした。私はその喜びのために自分自身を教育し続けており、プログラミングのキャリアを追求することを常に知っていましたが、その当時の私のプロジェクトはすべて非常に小規模でした。私はそれらを私の心に留め、維持するのに問題はありませんでした。 現在、私はチームでリードしていますが、企業環境ではありません-私は大学でエンジニアリングアプリケーション用の科学ソフトウェア(C ++)を開発しています。突然、プロジェクトは(比較的)大きくなり、ほとんどの場合、私はそれを心に抱くことができなくなりました。主に次の2つのことに多くの時間と労力を費やしています。 しばらく作業していなかったコードのセクションに戻る必要がある場合、それがどのように機能したかを思い出すことが困難です。私は、関連するクラスのヘッダーファイルを確認し、途中でソースファイルに配置したコメントを読むのに多くの時間を費やしています。私が垣間見ることができ、より簡単に画像を取り戻すことができる何らかの「回路図」があるといいのですが。 変更を導入するとき、私がやろうとしていることが他の場所で何かを壊してしまうことの中間点に気付くことがあります(さらに悪いことに、それは実行時にのみ驚きとして現れます)。私は元に戻して別の方法で始めましたが、他のコンポーネントへの影響を無視したことがわかりました。何かが行われる方法、他のコンポーネントに影響を与える方法、変更を実装する前に詳細に計画する方法を確認できる「アーキテクチャダイアグラム」があったらいいのにと思います。 私が一緒に仕事をする人のほとんどは私と同じようなストーリーを持っています-強力な技術的志向と時には素晴らしいスキルですが、彼らの仕事を整理する方法がありません。しかし、彼らのプロジェクトは通常私のプロジェクトよりもはるかに小さいので、彼らはどういうわけか対処します。とにかく、それが私にとって何を意味するかというと、私は一人でいるので、良い実践を学ぶ人がいないということです。 ITの管理に関する大学院のコースを受講しましたが、ITの管理は非常に満足できるものであると感じましたが、主に非プログラマーを対象としており、プロジェクト管理の方法論、予算/スケジュールの見積もり、エンタープライズアーキテクチャなどについて説明しており、ソフトウェアの設計や計画などは担当していません。それは大丈夫です、私もそのことを学ぼうとしています。もちろん、いくつかのツール(UMLなど)とソフトウェア開発プロセスのタイプ(カスケード、反復、アジャイル...)が導入されましたが、明らかにそれほど詳細ではなく、何を選択して使用するかを決めるのに苦労しました(とどの程度)。 私はSOのソフトウェア設計について多くの質問と回答を読んでいます-これまたはその特定のツールまたは方法論を使用してそれを行うことについては多くあります。UMLのドキュメントが私の問題を解決すると確信している場合-私はそれをピックアップし、それを使い始める。しかし、それを誓う人もいれば、役に立たないと言う人もいます。抽象化のより高いレベルでの答えを探しています-私が抱えている2つの問題を解決する方法はありますか。おそらく1つの特定のツールに縛られることなく、それを実行できるようにするには何を学ばなければなりませんか?これらは時々流行から脱却し、プロジェクトの種類によって適用性が異なると思います。 読んでくれてありがとう、私はもっと簡潔に言うことができませんでした(ソフトウェア設計の経験と語彙が不足しています)。

3
アジャイル-スパイクと全体的なタイムライン
チームは最初の資本であるアジャイルプロジェクトを開始しています。このプロジェクトは、方法論とうまく調和しているように見えます(つまり、アジャイルブックを入手して、レシピのようにそれに従うことができます)。 プロジェクトには、チームの誰も経験のない3つのことが含まれています。FooPayroll Systemと統合し、ファイルタイプXYZ​​89(「XYZ89」=聞いたことのないファイルタイプ)を処理し、いくつかを変換できるようにします。 Frobnobdicatorで処理できるように他のファイル。 私が理解しているように、標準的なアジャイルのプラクティスは、これらのそれぞれにスパイクをスケジュールすることです。その後、スパイクにかかる時間を決定できます(クライアントが実行しないことを決定する可能性が高いかどうかはわかりません)それらはプロジェクトのかなり確かな要件であるため) だから私の質問は: 最初の反復ですべてのスパイクを最初に実行して、それらを実行するのにかかる時間、および/または「ウォーキングスケルトン」を起動して実行するのにかかる時間のより良い見積もりを取得しますか? そうでない場合、プロジェクト全体のスケジュールは、これらの急上昇の1つに翻弄され、この特定のストーリーは、私たちが球場をとるよりも長い時間がかかるというデータが戻ってくるのではないでしょうか。 プロジェクトの基本的に交渉できない要件である複数のスパイクを処理するためのベストプラクティスの方法は何ですか?
9 agile 

1
Pythonプログラムをパッケージ化するための良い習慣
私は、個人的なプロジェクトとプロのプロジェクトの両方のコンテキストで、Pythonをしばらく使用しています。 最近私に起こったことの1つは、Pythonプログラムをデプロイするための良い方法を考えたことがないということです。基本的に、それはほとんどがスクリプトの束であるため、私は通常、それらをデプロイしたいマシンにコピーして、出来上がりです! しかし、Pythonプロジェクトをデプロイする方法については、いくつかの良い習慣があるはずだと思います。Pythonの卵について聞いたことがありますが、Pythonの卵が十分に精通していないため、それが適切な選択肢かどうかはわかりません。または、コアモジュールスクリプトを実行するための多数のシェルスクリプトを含む単純な古いtarball? 基本的に、バージョンの追跡が簡単でなく、面倒なので、ファイルをあちこちにコピーするだけでなく、洗練されたエレガントな自己完結型のデプロイメントを実行できるようにしたいと考えています。

5
OOP:クラスベースのデザインがインターフェイスベースのデザインよりも優れている状況にはどのようなものがありますか?
JDOMのウェブサイトを読んでいました 。 JDOM APIがインターフェイスではなく具象クラスで定義されているのはなぜですか? Jason Hunterは、JDOMのインターフェースベースのAPIに対する引数を要約しています。 インターフェースではすべてがファクトリーになり、要素を追加するだけでなく新しいドキュメントに「インポート」する必要があり、長期的なシリアル化などの機能は保証されず、リストは続きます。 実際にインターフェースから始めました。いくつかの同僚へのリリース前のレビュー中に、具体的なクラスを試すべきフィードバックを受け取りました。私たちはそうしました、そしてデザインはそれのためにはるかに優れていました。 私は初心者デザイナーです。私が今までについて聞いたことがすべてのアドバイスをさに対して助言具象クラスを使用した設計を使用しました。 特定の場所で適切なクラスを使用している場合があります。デザインで具象クラスを使用しても問題ない、一般的なクラスの問題はありますか?

4
有料のオープンソースアプリ
気になるのは、オープンソースのアプリがモバイル市場でうまく売れることを期待することは可能/実現可能/合理的であるかどうかという疑問です。 ユーザーはチェックアウトバージョンを作成するのではなく、自分のアプリを使用すると思いますか。さらに重要なのは、OSSライセンスでアプリを利用できるようにした場合、どのように競合に対処できるでしょうか。 これまでのところ、私が見つけたテーマに関する唯一のリンクはhttp://blog.zachwaugh.com/post/17554643060/selling-open-source-appsですが、Mac OS Xアプリを扱っています。 私の質問は、iOS、Android、または別のOSに焦点を当てていないことに言及する必要があります。それは、モバイルアプリケーション全般に​​関するものです。 編集:私のユーザーがプログラマーであるかどうかの非常に合理的な質問が尋ねられました。 ほとんどのユーザーがリモートからプログラミングに精通しているとは思いません。

8
午後にVB6よりも.NETのメリットを賞賛する午後があります。[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、専門知識によって裏付けられると期待していますが、この質問は、議論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 私の会社は小さな20人のエンジニアリング会社です。ここでのすべてのアプリケーションプログラミングは、過去25年以上ここで働いている間にアセンブリのバックグラウンドからVB6を学んだ2人と私自身によってVB6で行われます。 その結果、VB6コードは、文字列型変数、ひどく長い関数、数百のパブリックグローバル変数(一部は引数を渡して値を返すよりも優先される)のような恐ろしいコードのにおいがし、単一のオブジェクトではありませんクラス。リファクタリングはほとんど不可能であり、変更を行うにはコード全体を掘り下げる必要があり、一度作成すると、常にさらに多くの穴が生じるようです。 私の上司は、VB6が死んだテクノロジであることを認識しており、新しい開発のために.NETに移行する私の嘆願に耳を傾けてくれます。私たちは.NETに移行していますが、彼はそれを新しいWindows OSとの互換性を保つための方法であり、より優れたコードを記述する方法ではないと考えています。 単なる最新性を超えて、VB6に対する.NET言語の利点を最もよく説明するにはどうすればよいですか?.NETへの移行が適切な移行であるだけでなく、現在のプログラミングパラダイムも変化し始める必要があることを最も強調するために何を言えるでしょうか。上司がVisual Basic .NETがVB6のように見えることを聞くとすぐに、彼の最初の本能は単に古いコードの混乱を.NETに変換することであることを知っています。 私はそれは、単一の午後に変更誰の考え方に不可能になることを理解し、どのように私は、少なくとも強く型付けされた変数、カスタムクラス、およびprivateフィールドのようなものではないというのが私の組立-携えた上司を説得することができ、総時間の無駄とエネルギー?

7
スプリント間でビルドを実行する以外に、アジャイルプラクティスに利点はありますか?
私は最近、ソフトウェア開発のアジャイルプラクティスに興味を持ちました。それ以来、多くの記事で、これらのプラクティスにより全体的なコストを削減できることを指摘しました。 その背後にあるロジックは通常、次のようになります。要件が変更された場合、この変更を次のスプリントバックログに反映できます。これにより、新機能の設計と実装が時間的に近いため、コストの削減につながります。後で要件を変更する必要があるほど、その要件を満たすためにコストがかかるという有名なルールに従って、コストは下がります。 しかし、中規模から大規模のソフトウェアプロジェクトは複雑です。要件が突然変更されても、その要件を満たすためにシステムの他の部分に触れる必要がないわけではありません。多くの場合、アーキテクチャを大幅に変更する必要があります。つまり、古いアーキテクチャに依存していたすべての機能を再実装する必要があります。したがって、コスト削減の全体的な要点はここではなくなります。もちろん、新しい要件がシステムの新しい独立した部分を必要とする場合、それは問題ではなく、古いアーキテクチャが成長するだけなので、再考して再実装する必要はありません。 そしてその逆。ウォーターフォールを使用していて、新しい要件を導入する必要があることに突然気付いた場合は、デザインを変更できます。既存のアーキテクチャを変更する必要がある場合は、再設計します。それが本当にそれを台無しにせず、システムの新しい部分を導入するだけなら、あなたは行ってすべての仕事をします、ここでは問題ありません。 そうは言っても、アジャイル開発の唯一の利点は、スプリント間で機能を完全にビルドできることだけであるように思えます。多くの人やプロジェクトにとって、これは重要ではありません。さらに、アジャイルはソフトウェアアーキテクチャ全体で悪い結果を招くように見えます。機能が相互に平手打ちされるため、アジャイルチームは機能が機能するかどうかではなく機能が機能することのみを気にします。これは、システムが時間とともに複雑になると、アジャイル開発の実践により、製品アーキテクチャ全体の混乱が実際に増大し、最終的にコストが高くなります。なぜなら、ウォーターフォールにより、アーキテクチャを完成させることができるからです。あなたが何かを解放する前に。 明らかに、多くの人が実稼働環境でアジャイルを使用しているので、どこかで間違っているに違いありません。

3
アジャイルの初期条件は何ですか?
最初に、アジャイルプロセスは、以下の基本原理のために機能すると思います。 それは焦点をもたらします 本当にフォーカスをもたらすノイズを制限します 次に、アジャイルプロセスを成功させるために必要な初期条件は何ですか。たとえば、次のものが必要ですか。 既存のバグはありません 完全に自動化されたテストプロセス、または少なくとも高度に自動化されたテストプロセス プロジェクトに専念する人々 より明確に定義された新しい開発 速くも安定もしない開発 ? それを成功させるには何が必要ですか?これらの初期条件のいくつかがないことをより適切に処理するさまざまなアジャイル実装はありますか?
9 agile 

6
会社で開発したコードを宿題として提出する[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 5年前休業。 私は現在、仲間と一緒に新興企業を経営しており、私が開発したいくつかのプログラムからいくつかのコードをコピーするだけで、大学の課題の一部を完了できることに気づきました。私が遭遇する可能性のある法的問題はありますか?それともこれは一般的には悪い考えですか? これが間違った場所にある場合は申し訳ありませんが、これをここに配置するのか、stackoverflowに配置するのかわかりませんでした。
9 legal  ethics 

6
ファイルを解析する最良の方法
EDIFACTやTRADACOMSなどの有名なファイル形式をパーサーで作成するためのより良い解決策を見つけようとしています。 これらの標準に慣れていない場合は、Wikipediaからこの例を確認してください。 製品の在庫状況のリクエストに回答するために使用されるEDIFACTメッセージの例については、以下を参照してください。 UNA:+.? ' UNB+IATB:1+6XPPC+LHPPC+940101:0950+1' UNH+1+PAORES:93:1:IA' MSG+1:45' IFT+3+XYZCOMPANY AVAILABILITY' ERC+A7V:1:AMD' IFT+3+NO MORE FLIGHTS' ODI' TVL+240493:1000::1220+FRA+JFK+DL+400+C' PDI++C:3+Y::3+F::1' APD+714C:0:::6++++++6X' TVL+240493:1740::2030+JFK+MIA+DL+081+C' PDI++C:4' APD+EM2:0:130::6+++++++DA' UNT+13+1' UNZ+1+1' UNAセグメントはオプションです。存在する場合は、メッセージの残りの部分を解釈するために使用される特殊文字を指定します。この順序でUNAに続く6文字があります。 コンポーネントデータ要素セパレータ(:このサンプルでは) データ要素セパレータ(このサンプルでは+) 10進数の通知(このサンプルでは。) リリースキャラクター(このサンプルでは?) 予約済み、スペースでなければならない セグメントターミネーター(このサンプルでは ') ご覧のとおり、解析されるのを待機している特別な方法でフォーマットされたデータの一部です(XMLファイルのように)。 現在、私のシステムはPHPで構築されており、セグメントごとに正規表現を使用してパーサーを作成できましたが、問題は誰もが標準を完全に実装しているわけではないということです。 一部のサプライヤーは、オプションのセグメントとフィールドを完全に無視する傾向があります。他の人は他より多くのデータを送信することを選択するかもしれません。そのため、ファイルが正しいかどうかをテストするために、セグメントとフィールドのバリデーターを作成する必要がありました。 私が今持っている正規表現の悪夢を想像できます。さらに、各サプライヤーは、各サプライヤーのパーサーを作成する傾向がある正規表現に多くの変更を加える必要があります。 質問: 1-これは(正規表現を使用して)ファイルを解析するためのベストプラクティスですか? 2-ファイルを解析するためのより良いソリューションはありますか(おそらくそこに既製のソリューションがあるでしょう)?どのセグメントが欠落しているか、またはファイルが破損しているかを表示できますか? 3-とにかくパーサーを構築する必要がある場合、どの設計パターンまたは方法論を使用する必要がありますか? ノート: yaccとANTLRについてどこかで読みましたが、私のニーズに合っているかどうかはわかりません。

3
JVMメモリを適切な方法で監視するにはどうすればよいですか?
忙しい時間帯でも、本番環境でオーバーヘッドの少ない方法でJVMメモリモニターを行う方法を考えています。 本番環境に2つのtomcatアプリサーバーがあり、それらの背後に負荷分散が設定されているとします。jvmメモリー統計を表示できる場合は、OOMの問題が発生するサーバーへのリクエストの送信を停止するようにロードバランスに指示できます。これは理にかなっていますか?JconsoleまたはVisualVMがより多くのパフォーマンスリソースを消費するのは私の選択ではありません。

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