ソフトウェア工学

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

5
データベースを設計するのはプログラマの仕事ですか?
私は過去6年間プログラマーでした。私のキャリアを通じて、私は多くのWebアプリケーションに取り組んできました。 ほとんどの場合、データベースが必要になったとき、それは私たち(プログラマー)に与えられたか、作業するレガシーデータベースがありました。そうでない場合は、データベースを独自に作成および設計する必要がありましたが、それほど難しくはありませんでした。 しかし、プログラマーとして、データが非常に重要で複雑なデータモデルを使用して厄介な要件を持つ新しいアプリケーションを構築する必要がある場合、データベース全体をゼロから作成することになっていますか? 専門家がそれを成し遂げることは、アプリと会社の最大の利益ではありませんか? 私はデータベースの設計から逃げようとはしていませんが、それを正しく行うことはとても重要なことです。

7
MVCアーキテクチャでは、モデルとビューはコントローラーにどの程度密接に結合されていますか?
MVCを使用するアプリがありますが、コントローラーの設計方法について少し苦労しています。たとえば、ビューはモデルのデータの一部のみを一度に表示しています。しかし、私はこれがどのように配置されるべきか正確にはわかりません。たとえば、ビューまたはモデルがコントローラーの関数を直接呼び出すのは正常ですか?ある種のインターフェースを通して?または、それらは完全にカプセル化されており、コントローラーまたは互いについて決して知りませんか? 編集と同じように。これはWebフレームワークで書かれていないカスタムアプリなので、ここではフレームワーク固有の詳細を探しているわけではなく、自分で選択する自由があります。
16 mvc 

4
厚いモデルと ビジネスロジック、どこから区別を引きますか?
今日、私は組織の別の開発者とデータベースマップクラスにメソッドを追加する場所と方法について、激しい議論になりました。を使用しsqlalchemy、データベースモデルの既存のコードベースの大部分は、クラス名を持つマッピングされたプロパティのバッグ、データベーステーブルからpythonオブジェクトへのほぼ機械的な変換に過ぎません。 議論の中で、私の立場は、ORMを使用する主な価値は、マップされたクラスに低レベルの動作とアルゴリズムを付加できることだということでした。モデルは最初にクラスであり、2番目に永続的です(ファイルシステムでxmlを使用して永続的である可能性があるため、気にする必要はありません)。彼の見解では、すべての動作は「ビジネスロジック」であり、必然的に、データベースの永続化のみに使用される永続モデル以外のどこかに属します。 私は確かにビジネスロジックとは区別されていると思いますが、それは実装方法の下位レベルからある程度分離されているので、分離する必要があります前の段落で議論しましたが、私はそれが何であるかについて指を置くのに苦労しています。私は、彼らがしたいとのAPI呼び出しているユーザーには、(我々の場合には、HTTP「安らか」である、)APIが何であるかのより良い感覚を持っていません、彼らが行うことを許可されているものとは異なった、そしてどのように完了します。 tl; dr:ORMを使用する場合、マップされたクラスのメソッドにはどのような種類の要素を含めることができますか?

7
他の人のコードを学習するプロセスをどのように説明すればよいですか?(請求書発行の状況で。)[終了]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 4年前に閉鎖されました。 編集:ジャスティン・ケイブは、この種のコミュニケーションが私の引用/見積もりで前もってあるべきであるという良い点を指摘しました。この場合、「既存のコード学習」アクティビティを記述するために人々がどのような言語を使用しているかを知りたいと思っています。特に、以前にソフトウェア請負業者と取引したことがない会社にとって。 編集を終了 大企業向けに社内ソフトウェアをアップグレードする契約を結んでいます。同社は、複数の機能追加といくつかのバグ修正を要求しています。これは私の最初のフリーランススタイルの仕事です。 まず、アプリケーションがどのように機能するかを理解する必要がありました-私はユーザーであるかのようにそれを学びました。 次に、ソフトウェアがどのように機能するかを学ぶ必要がありました。広い概念から始め、必要な詳細に絞り込んでから、各バグ修正と機能に取り組みました。 少なくともプロジェクトの開始時には、既存のコードを学習するのに、追加機能を書くよりもはるかに長い時間がかかりました。 請求書の既存のコードを学習するプロセスをどのように説明できますか?(会社のこの部分は通常社内で仕事をしているので、私のようなソフトウェア請負業者との取引経験はあまりありません。他の人のコードを学ぶオーバーヘッドを理解できないかもしれません。)実際の機能のアップグレードに学習時間を追加したくありません。これは、場合によっては「単純なタスク」に時間がかかりすぎるように見えるためです。請求書を関連するステップに分割し、自分のコードを追加する前に他の人のコードを学習するための大きなオーバーヘッドを請求していることを伝えたい。 ジョブの請求時にこの種のアクティビティを記述する標準的な方法はありますか?

7
時々バグですが、優先度が高い
私は、レーザーの助けを借りて形状を金属にカットするCNC(コンピューター数値制御)プロジェクトに取り組んでいます。 現在、私の問題はたまに(20日間で1〜2回)カットがうまくいかないか、設定された内容に従っていないことです。 しかし、これは損失を引き起こすため、クライアントはそれについてあまり満足していません。 私はその原因を見つけようとしました ログファイルを含める デバッグ 同じ環境を繰り返します。 しかし、それは繰り返されません。 一時停止して続行操作を行うと、再びバグが再現することなくスムーズに実行されます。 この問題にどのように取り組むのですか?ハードウェアの問題として述べる必要がありますか?

4
C#メソッドでの戻り変数の宣言と直接値を返す
戻り変数に関する議論では、チームの一部のメンバーは、呼び出し元に結果を直接返すメソッドを好む一方、他のメンバーは、呼び出し元に返される戻り変数を宣言することを好みます(以下のコード例を参照) 後者の引数は、コードをデバッグしている開発者が、呼び出し元に戻る前にメソッドの戻り値を見つけることができるため、コードが理解しやすくなることです。これは、メソッド呼び出しがデイジーチェーン接続されている場合に特に当てはまります。 どちらが最も効率的であるか、および/または、あるスタイルを別のスタイルよりも採用する必要があるという理由はありますか? ありがとう private bool Is2(int a) { return a == 2; } private bool Is3(int a) { var result = a == 3; return result; }

8
若手プログラマーとして見積りを処理する
私は数か月間、(特にジュニアではなく一般の人々のために)タスクを見積もる会社で働いていました。その後、タスクを与えられ、それを解決し、2つのテストを経て、最後に見積りがやや会った。 見積もりの​​いくつかは、私が満たすことが単に不可能であるため、私はストレスを超えています。私はまだシステム全体を知らないので(非常にかなり大きいので)、時には半分の時間が私が何をする必要があるのか​​を見つけるのに費やされ、どこでそして終わるまでに時々見積もりが終わり、まだテストがあります完了(および、誤りがある場合は修正)。 似たような機能を二度と処理しなければならない場合、すべてがずっと速く動作しますが、今のところプログラミングが苦手だと感じています。 このステージを乗り越えるのに役立ったのは、始めたばかりのときに何かしたことはありますか?コードを作成する時間があまりにも少ないので、自分がやっていることにきちんと焦点を合わせることができず、それがさらに悪化することがあるのを見ると、私はとてもストレスを感じます。

3
後から考えると、XAMLをXMLに基づいているのは間違いですか、それとも良いアプローチですか?
XAMLは基本的にXMLのサブセットです。XMLに基づいたXAMLの主な利点の1つは、既存のツールで解析できることです。また、(構文的には重要ではない)属性値はテキスト形式のままであり、さらに解析する必要がありますが、かなりの程度まで可能です。 XML派生言語でGUIを記述するための2つの主要な代替手段があります。1つは、WinFormsが行ったことを実行し、それを実際のコードで記述することです。これには多くの問題がありますが、完全にアドバンテージがないわけではありません(このアプローチとXAMLを比較する質問)。他の主要な代替手段は、手元のタスクに合わせて特別に調整された完全に新しい構文を設計することです。これは、一般的にドメイン固有の言語として知られています。 それで、後知恵で、そして将来の世代への教訓として、XAMLをXMLに基づいたものにするのは良い考えでしたか、それともカスタム設計のドメイン固有言語としてより良いものでしたか?さらに優れたUIフレームワークを設計している場合、XMLまたはカスタムDSLを選択する必要がありますか? それは現状維持、かなりのコミュニティに好かれ、特に1について積極的に考えるのは非常に簡単ですので、私はXMLの上に構築する理由の理由は、いくつかの例をあげるかもしれない間違いと見なされます。 XMLを基に言語を作成することには1つのことがあります:解析がはるかに簡単(コアパーサーが既に利用可能)であり、設計作業がはるかに少なくてすみます。 しかし、結果として生じる言語は、さまざまな点で不満になる可能性があります。かなり冗長です。何かのタイプを変更する場合は、終了タグで変更する必要があります。コメントに対するサポートは非​​常に貧弱です。属性をコメント化することはできません。XMLによる属性のコンテンツには制限があります。マークアップ拡張機能は、XML構文の「最上部」に構築する必要があり、XML構文に深く、うまく統合されていません。そして、私の個人的なお気に入りは、属性を介して何かを設定する場合、コンテンツプロパティとまったく同じものを設定する場合とはまったく異なる構文を使用することです。 また、誰もがXMLを知っているため、XAMLの学習はそれほど必要ではないと言われています。厳密に言えばこれは事実ですが、構文の学習は、新しいUIフレームワークの学習に費やす時間のほんの一部です。曲線を急にするのはフレームワークの概念です。その上、XMLベースの言語の特異性は、実際に「学習が必要」なバスケットに追加される可能性があります。 これらの不利な点は、解析の容易さによって重くされていますか?次のクールなフレームワークは伝統を続けるべきでしょうか、それとも既存のツールでは解析できず、誰もが構文を学ぶ必要のある素晴らしいDSLを設計するために時間を投資すべきでしょうか? PS誰もがXAMLとWPFを混同しているわけではありませんが、一部は混同しています。XAMLはXMLのようなものです。WPFは、バインディング、テーマ設定、ハードウェアアクセラレーション、その他多くの優れた機能をサポートするフレームワークです。

5
顧客に対する保証免責事項の免責を正当化するにはどうすればよいですか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 昨年は閉店しました。 ユーザーが重要な情報を操作できるソフトウェアを販売しています。 私のライセンス契約(この分野に特化した弁護士によって起草された)では、次の標準条項を読んでいます。 このソフトウェアは作者によって「現状のまま」提供され、商品性および特定の目的への適合性の黙示的な保証を含むがこれに限定されない明示的または黙示的な保証は否認されます。いかなる場合においても、著者は、直接的、間接的、偶発的、特別、例示的、または結果的な損害(代替品またはサービスの調達、使用の損失、データ、利益、またはビジネス上の損害を含むが、これらに限定されない) )契約、厳格責任、不法行為(過失またはその他を含む)のいずれにおいても、かかるソフトウェアの使用から生じた損害の可能性について通知された場合でも、責任の理論および理論に基づいて これまで使用してきたほとんどすべてのソフトウェアで同等のものを見てきました。 これまでのところ、すべてのクライアントは問題なくそれを受け入れましたが、今では潜在的なクライアントの1人がそれを争っています。実際、彼は私に次のようなことを言っています。 あなたがあなたのソフトウェアを使ってサードパーティの会社から10ドルで何かを購入し、あなたのソフトウェアにバグがある場合(あなたは何も存在しないことを保証しないので)、あなたが20ドルの注文を送信すると、私は支払います10ドルの違いはあなたですか? 彼の常識のように思われることと、私の保険会社はおそらくそのようなリスクを私に保証しないという事実と、あなたが私たちが平易な$ではなく何百万もの話をしていると考えるなら、私は少し立ち往生していますその種の潜在的な損失の責任を負うことを快適に感じません。 これまでのところ、私が思いついた最善の答えは、業界で誰もがそれを行うということです(Microsoftは、Outlookを使用して送信したメールが、たとえば$ 10をすべて回すことによって変更されないことを保証しません20ドルに...) これを処理する方法に関するアドバイスはありますか?(もちろん、バグのないソフトウェアを出荷するために最善を尽くしていますが、p :)

6
行き詰まったときにさまざまな機能を操作するために飛び回るのは、プロジェクトの失敗の原因ですか?
個人プロジェクト(または仕事)で、問題に巻き込まれたり、問題の解決策を見つけ出すのを待っている場合、コードの別のセクションにジャンプしても、アプリケーションの正当な理由になると思いませんかバグが発生したり、さらに悪化したりすることはありませんか? gitを使用せず、各機能を特定のブランチにコーディングしていると仮定すると、作業中の3つの異なる機能があり、それぞれに未解決の問題があるため、物事が手に負えなくなる可能性があります。 そのため、仕事に取り掛かると、これらのぶら下がりの問題や中途半端なコードが残っているため、ストレスがたまってしまいます。 この問題を回避する最良の方法は何ですか?(お持ちの場合) gitのようなものを使用し、機能ごとにブランチを作成することが、この悪い習慣を回避する最も安全な方法だと思います。 他の提案はありますか?

8
なぜC ++はまだ「ハイブリッド」なのか
関連する C ++は多くの点でCとの互換性はありませんなぜ疑問、それは明らかにされています。ただし、C ++は依然として「ハイブリッド」*言語です。残念ながら、多くのプログラマーはまだC ++を「ストリームと組み込み文字列を含むC」と見なしています。その結果、コードが非常に悪くなり、C ++でもCでもありません。IMHO、言語/コンパイラーがある程度プログラマーにより洗練されたコードを書くことを強制した方が良いでしょう。では、最新のC ++(たとえばC ++ 0xと将来のバージョン)をハイブリッドに保つ理由はありますか? *ハイブリッドとは、標準の文字列とストリーム、クラス、デフォルト以外の名前空間などを使用するかどうかを決定するのはプログラマ次第であることを意味します。

5
LGPLはこれを許可していますか?
LGPLソフトウェアを使用して商用ソフトウェアを開発する予定です。 クラスで一部の機能を使用しているLGPLソフトウェアでは、完全には実装されていません。クラスの前にdllexportを追加し、関数の前に仮想キーワードを追加することにより、クラスと実装されていない関数がdllの外に見えるようにLGPLコードを変更します。 その後、これらの機能を独自のソフトウェアに実装する予定です。修正されたLGPLコードを配布する準備はできていますが、必要な機能を実装する独自のソフトウェアは配布しません。 LGPLの利用規約に違反していますか?
16 licensing  lgpl 

5
並行性とマルチスレッドアプリケーションについて学ぶための最良のリソースは何ですか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 4年前に閉鎖されました。 ロックされています。この質問は現在、新しい回答やインタラクションを受け入れていません。詳細をご覧ください。 マルチスレッドアプリケーションと同時プログラミングに関しては、知識のギャップが大きいことに気付きました。私は過去にいくつかの基本をカバーしましたが、そのほとんどは私の心から消えてしまったようです。そして、それは間違いなく私がもっと知りたいと思っている分野です。 並行アプリケーションの構築について学ぶための最良のリソースは何ですか?私は非常に実用的な志向の人間なので、もし本に具体的な例が含まれている方が良いのですが、私は提案を受け入れます。私は個人的には擬似コードまたはC ++で作業することを好み、ゲーム開発への傾斜が最適ですが、必須ではありません。

6
モジョのプログラミングを取り戻すためのアイデアはありますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 私は長年(20年)プロのプログラマーでしたが、今では興味を失ってしまいました。現時点では、単純なものを数百行もノックアウトするのに苦労しています。30〜40分ではなく3〜4日かかります 誰もが興味を取り戻すためのヒントを持っていますか? 私は子供の頃から、目覚めている間はほとんどプログラミング/コーディングに取り組んできました。私は仕事を終え、寝るまで新しいものを探すためにインターウェブにアクセスしていました。幸運なことに、職場でのLOCカウントが妥当と思われるようになりました。 編集 皆に感謝-いくつかの素晴らしい提案-私は考えもしなかった-運動を楽しみにしていないが、おそらくそれを必要とする。
16 motivation 

10
生産性を経営陣に実証するにはどうすればよいですか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 7年前に閉鎖されました。 私の大学には、実際のクライアントとのソフトウェア開発のためのモジュールがあります。私のチームメンバーの何人かは常にコンピューターラボで働いていますが、これは非常に騒がしい環境であり、多くの中断や注意散漫があります。常に約30人が会話しています。人々は常に「仕事」をすることに加えて、FacebookやYouTubeに行ったり、お互いに冗談を言ったりします。私のチームメンバーの一部は、この環境で毎日3時間働いています。 私は毎週のチーム会議に出席し、オンラインプロジェクト管理システムを広範囲に使用しています。私はすべての電子メールに対処し、ビジー状態のチャットクライアントを持っていますが、メッセージを受け取ります。私は自分の問題を解決するときにオンラインリソースをよく使います。ただし、チームミーティングとペアプログラミングセッション以外は、集中して集中できる静かな環境でほとんどの作業を行い、すべての外部および内部の中断をブロックします。私は自分の仕事に100%集中しています。私は、この方法により、ラボでの生産性が約10倍向上し、多くの仕事をこなせるようになりました。 問題は、私たちの家庭教師や「管理者」が私が研究室で仕事をしているのを見ないということです。したがって、私は彼らに働いているようには見えません。したがって、彼らは私がチームワークをしていないと思います。チームと多くのコミュニケーションをとっているのに、チームワークをしていることを彼らに納得させるにはどうすればいいですか?私が単独で多く働いており、必ずしも研究室ですべての仕事をしているわけではないという理由だけで、私はチームの生産的なメンバーであるということを証明したいと思います。 UPDATE Managementは、問題はチームで60%の時間を費やし、40%の時間だけで仕事をしていることだと言っていました。彼らは、私がチームと一緒に研究室(別名オフィス)で99%の時間を過ごすべきだと言った。 いくつかの答えのいくつかの関連するコメント、いくつかは見逃すかもしれません: 「問題は、私が自分でグーグルで検索するので、チームに何も質問する必要がないということです。そして、何らかの理由で、スーパーバイザーやチームメンバーよりもグーグルを信頼しています。基本的に私は「ウェブ」の仕事をしているので、チームの仕事をしています。 「私は、スーパーバイザーやチームメイトの専門知識よりも、オンラインで見つけた(つまりSE)情報を信頼しています。」 更新2 自宅で真面目な仕事をやめるのをやめました。今は研究室にとどまり、チームで楽しんでいる一方、時々仕事をしています。受け入れられた答えが示すように、これは私が生産的であるということではなく、むしろマネージャーとチームメイトの期待を満たすことです。私と上司がソフトウェア開発の方法について異なる信念を持っている場合、彼らは私を失敗/解雇する力を持っているので、それは重要です。私の意見では、対面のミーティングはオンラインでの会話ほど効果的ではありません。また、騒がしいラボでの作業は、かなりの環境での作業ほど生産的ではありません。私は仕事の最中に、チームメイトがいつでも私を邪魔することはできないと思います。生産的な作業を単独で行うには少なくとも50%の時間、チームと同期するのに50%の時間が必要だと思います。とにかく、

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