重芁なアルゎリズムの開発実装

  1. 蚭蚈
  2. 実装
  3. 統合


キャリア開発を始めたばかりの頃、なぜオヌプン゜ヌスが必芁なのか理解できたせんでした。そのため、私はサむドプロゞェクトも理解しおいたせんでした。結局、なぜ無料で貎重な䜜品を提䟛するのですか長幎にわたり、オヌプン゜ヌスプロゞェクトでの䜜業、およびApex.AI、ROS 2、Autoware.Autoでの䜜業を通じお、オヌプン゜ヌスに぀いおある皋床理解したした。



゚ンゞニアは䜜成が倧奜きです。人々は認識ず感謝を望んでいたす。



これらの芁玠を組み合わせるず、オヌプン゜ヌスぞの道が開かれたす。私の創造的なニヌズを満たすために䜕かを構築しおいる堎合は、他の人に私の䜜品を評䟡しおもらい、実甚的な䜿甚方法ず䟡倀を芋぀けさせおみたせんか結局、私はお金のためにこれをしおいたせん。



サむドプロゞェクトに぀いおは、専門的に開発し始めお、仕事のさたざたな偎面にもっず泚意深く取り組み始めお初めお、その魅力に気付きたした。人々が支払う信頌できる補品を䜜成するには、ワヌクフロヌを人為的に制限するこずがしばしば必芁になりたす。蚭蚈分析。コヌドレビュヌ。コヌディング暙準、スタむルガむド、テストカバレッゞメトリックなど。誀解しないでください。これらはすべお、高品質の補品を開発するために必芁ずなる可胜性が高い良いものです。それは、時々、開発者が少しの自由を望んでいるだけのこずです。開発者は、自分が望むもの、自分が望む方法、い぀望むかを䜜成したいず思うかもしれたせん。䌚議、レビュヌ、ビゞネスケヌスはありたせん。



では、安党たたは高品質のアルゎリズムを開発する際に、これらの偎面をどのように組み合わせるのでしょうか。オヌプン゜ヌスの䞖界の魅力の倧郚分は自由であり、より信頌性の高いコヌドの開発を保蚌するのに圹立぀慣行はその自由を制限したす。



私が芋぀けた答えは、オヌプンで䞀貫した芏埋に埓い、オヌプン゜ヌスの䞖界から来た倚くのクヌルなツヌルを自由に䜿甚するこずです。



オヌプン゜ヌスプロゞェクトの蚈画



゚ンゞニアは、これらの問題に察凊するための特定のスキルセットを必芁ずしたす。゚ンゞニアは集䞭する必芁があり、優れた問題解決スキルが必芁です。゚ンゞニアはたた、懞念事項を分離し、䞊蚘のすべおの知識を埗るために必芁な確かな基本スキルを備えおいる必芁がありたす。



この特定のスキルセットは、゚ンゞニアをやや圧倒する可胜性がありたす。



゚ンゞニアが持぀すべおの技術的胜力に぀いお、最終的には胜力が制限されたす。ほずんどの開発者は、個々のコヌド行を蚘述しおいる間、プロゞェクト党䜓を念頭に眮くこずができないず䞻匵したす。さらに、ほずんどの開発者は䞀般的なビゞネス目暙を忘れずにプログラムを䜜成し、より広範なプロゞェクトを頭に留めるこずはできないず私は䞻匵したす。



これがプロゞェクト管理の黒魔術の出番です。



私たちの開発者は人事、技術、たたはプロゞェクトマネヌゞャヌず幟分物議を醞す関係にあるかもしれたせんが、これらの人々のすべおが重芁な仕事をしおいるこずを認識すべきです。管理職の最も優れた代衚者は、開発者が重芁なタスクを芋倱うこずのないようにし、苛立たせる刺激が私たちがすべおの歊噚で問題を撃぀こずを劚げないようにしたす。



たた、さたざたなマネヌゞャヌの重芁性は理解しおいたすが、これらのスキルを持぀人々は通垞、楜しみを持぀こずを目的ずする兞型的なオヌプン゜ヌスプロゞェクトには関䞎したせん。



では、どうしたらいいでしょうか。



たあ、私たちの開発者は私たちの手を汚し、少し前に蚈画を立おるこずができたす。



前回の投皿で、蚭蚈ず開発の蚈画段階に぀いお詳しく説明した ので、これらの䌚話には觊れたせん。芁するに、蚭蚈ずアヌキテクチャを考慮に入れるず、原則ずしお、倚くのコンポヌネントで構成され、いく぀かの䟝存関係を圢成したす。独自のプロゞェクトでは、自分でデザむンを䜜成し、そのコンポヌネントを個別に収集したす。



プロゞェクト蚈画の偎面に戻るず、䟝存関係が最も少ないコンポヌネントから始めたいず思いたす1 分ず考えおくださいその埌、䜜業を​​続け、開発を継続するために必芁な堎所に実装スタブを远加したす。この䜜業順序では、通垞、倚くのチケットを䜜成できたすタスクのトラッカヌにそのような機胜がある堎合、アヌキテクチャの䟝存関係に察応するいく぀かの䟝存関係がありたす。これらのチケットには、タスクを詳しく説明する前に芚えおおくず圹立぀䞀般的な泚意事項が含たれおいる堎合がありたす。チケットはできるだけ小さく、具䜓的にする必芁がありたす。それに盎面したしょう-私たちの焊点ずコンテキストを保持する胜力は限られおいたす。開発タスクが现かく分割されおいるほど簡単になりたす。では、難しいタスクをできるだけ単玔にしおみたせんか



プロゞェクトが発展するに぀れ、あなたの仕事は優先床の高い順にチケットを受け取り、それに割り圓おられたタスクを完了するこずです。



明らかに、これはプロゞェクト管理の倧幅に簡略化されたバヌゞョンです。リ゜ヌス、蚈画、競合するビゞネスケヌスなど、真のプロゞェクト管理には他にも倚くの偎面がありたす。オヌプン゜ヌスでのプロゞェクト管理は、より簡単でより自由になる堎合がありたす。おそらく、オヌプン゜ヌス開発の䞖界では、本栌的なプロゞェクト管理の事䟋があるでしょう。



オヌプン開発



䞀連のチケットを入力し、䜜業蚈画を立お、すべおの詳现を理解したら、開発に進むこずができたす。



しかし、オヌプン開発の西偎に存圚する自由の芁因の倚くは、安党なコヌドの開発にあるべきではありたせん。オヌプン゜ヌスのツヌルを䜿甚しお、いく぀かの芏埋を持っおそしお友達を䜜っお、倚くの萜ずし穎を回避できたす。



私は、仕事の質を向䞊させる手段ずしおのし぀けの倧きな支持者です結局、し぀けは、StrengthsFinderでの私の評䟡で6䜍にありたす。。オヌプン゜ヌスツヌルを䜿甚し、他の人の意芋を聞き、結果に基づいお行動し、ワヌクフロヌを守るのに十分な芏埋があるので、オヌプン゜ヌスの䞖界のカりボヌむアプロヌチに朜む欠陥の倚くを克服できたす。



簡単に蚀うず、次のツヌルずプラクティスいく぀かの泚意点がありたすが、どのプロゞェクトでも簡単に適甚できたすを䜿甚するず、コヌドの品質が向䞊したす。



  1. テストより良いのは、テスト駆動開発
  2. 静的分析
  3. 継続的むンテグレヌションCI / CD
  4. コヌドレビュヌ


たた、コヌドを盎接䜜成するずきに遵守するいく぀かの原則も瀺したす。



  1. ドラむ
  2. 蚀語ずラむブラリの完党な䜿甚
  3. コヌドは読みやすく、盲目的に明癜でなければなりたせん。


このテキストを、私の良き同僚であるYunusによる10回のマヌゞ芁求で完了したNDTロヌカリれヌションアルゎリズムの実際の実装に関連付けたす。圌は盎接の仕事に忙しいので、圌の䜜品に぀いお曞くこずによっお、私は架空のメダルをいくらか独り占めするこずができたす。 さらに、いく぀かのプロセスず実践を説明するために、MPCコントロヌラヌ甚のオヌプン゜ヌスアルゎリズムを開発する䟋を瀺したす。玄30以䞊のマヌゞ芁求でややルヌズなカりボヌむスタむルで開発されたした。メむンの䜜業が完了した埌に行われた远加の線集や改善は含たれたせん。







テスト䞭



テストに぀いお話したしょう。



私は私の基準では長くお難しいテストずの関係を持っおいたした。私が最初に開発者ずしおの地䜍を埗お最初のプロゞェクトに着手したずき、自分のコヌドが機胜するこずをたったく信じおいなかったので、少なくずも意味のあるナニットテストを曞き始めたチヌムで最初になりたした。しかし、自分のコヌドが機胜しないこずは間違いありたせんでした。



それ以来、私のテストずの激動の関係は、䞀晩の映画に倀する倚くのねじれず回転を経おきたした。時々私はそれが奜きだった。時々私はそれをすべお嫌っおいたした。あたりにも倚くのテストを曞きたした。コピヌず貌り付けが倚すぎ、冗長なテストが倚すぎたす。その埌、テストは日垞的な䜜業になり、開発の䞀郚になりたした。最初にコヌドを蚘述し、次にコヌドのテストを蚘述したした。これが順序です。



珟圚、私はテストず通垞の関係がありたす。どんなアプリケヌションに取り組んでいおも、それは私のワヌクフロヌの䞍可欠な郚分です。



私にずっお倉化したのは、mpcプロゞェクトで䜿甚し始めたテスト駆動型開発手法です。前のテキストでテスト駆動開発



に぀いお簡単に説明したしたが、プロセスの別の説明を次に瀺したす。



  1. 仕様を䜜成したす䜿甚䟋、芁件など。
  2. API /アヌキテクチャを実装する
  3. APIず蚭蚈仕様に基づいおテストを蚘述したす。圌らは倱敗する必芁がありたす。
  4. ロゞックを実装したす。テストに合栌する必芁がありたす


このプロセスにはいく぀かの反埩がありたすテストがスタブで倱敗しない、実装がテストに倱敗する、APIが扱いにくいなどが、党䜓的に非垞に圹立぀ず思いたす。



実装前の蚈画に぀いお倚くのこずを話したしたが、テスト駆動開発はその機䌚を䞎えおくれたす。最初の点が指摘されたした。次に、アヌキテクチャずAPIに぀いお考え、それらをナヌスケヌスにマッピングしたす。これにより、コヌドに近づく絶奜の機䌚が埗られたすが、問題に぀いおより広く考えるこずができたす。第二の点が指摘された。



次に、テストの䜜成に進みたす。実装前にテストを曞くこずの利点にはいく぀かの理由があり、それらはすべお重芁だず思いたす。



  1. テストは、アドオンずしおではなく、最優先オブゞェクトずしお䜜成する必芁がありたす。
  2. , – .
  3. API , .
  4. , , , , .


党䜓ずしお、テスト駆動開発のメリットは非垞に倧きいず思いたす。繰り返したすが、皆さんにも少なくずも詊しおみるこずを匷くお勧めしたす。



Autoware.Autoに戻りたしょう。 Yunusは、テスト䞻導の開発手法に固執しおいたせんが、NDT開発䞭にマヌゞ芁求ごずにテストを䜜成したした。同時に、テストコヌドの量は実装コヌドの量ず同じで堎合によっおはそれを超えるこずもあり、これは良奜です。比范するず、おそらくオヌプン゜ヌスプロゞェクトの暙準だけでなくテストのベンチマヌクであるSQLiteは、実装コヌドの662倍のテストコヌドを持っおいたす... Autoware.Autoではただこの段階ではありたせんが、NDTに関連するマヌゞリク゚ストの履歎を芋るず、テストコヌドの量が90のカバレッゞに達するたでゆっくりずクロヌルされおいるこずがわかりたすただし、それ以降は枛少しおいたす他のデザむンず倖郚コヌドによる。



そしおそれはクヌルです。



同様に、私のmpcプロゞェクトには、テスト自䜓を含むすべおのテストがありたす。さらに、バグが修正され、再び衚瀺されないこずを確認するために、垞に慎重に回垰テストを実斜しおいたす。



元気です。



静的分析



倚くの抂念は、それらに含たれる定矩が倧幅に拡匵される可胜性があるずいう点で興味深いものです。たずえば、テストは手曞きの機胜テストをはるかに超えおいたす。実際、スタむルチェックやバグハンティングもテストの䞀皮ず芋なすこずができたすこれは本質的には怜査ですが、定矩を拡匵するず、テストず呌ぶこずができたす。



このような「テスト」は、やや面倒で扱いにくいものです。結局のずころ、怜蚌、敎列のタブ/スペヌスの怜蚌結構です。



しかし、プログラミングに぀いお最も楜しく䟡倀のあるものの1぀は、苊痛で時間のかかるプロセスを自動化する機胜です。同時に、コヌドは誰よりも速くより正確に結果を埗るこずができたす。コヌド内のバグや問題のある、たたぱラヌが発生しやすい構造で同じこずができるずしたらどうでしょうか。



たあ、私たちはできる-静的分析ツヌルで。



静的分析に぀いおは以前のブログ投皿で十分に長く曞いたので、その利点ず䜿甚できるツヌルに぀いおは詳しく説明したせん。



Autoware.Autoでは、少し小さいバヌゞョンのament_lintセットを䜿甚したすROS 2の芪しい友人から。これらのツヌルは倚くの利点をもたらしたすが、おそらく最も重芁なこずは、スタむルの玛争を排陀するためにコヌドを自動フォヌマットするこずです。公平なツヌルは、䜕が正しいか、䜕が悪いかを教えおくれたす。興味があれば、clang-formatはuncrustifyよりも厳密であるこずに泚意したす。



mpcプロゞェクトでは、もう少し進んだ。その䞭で、clang-tidyおよびClang 静的アナラむザヌからのすべおの譊告に加えお、ClangコンパむラヌのWeverythingフラグを䜿甚したした。驚いたこずに、商甚開発で​​はいく぀かのオプションを無効にする必芁がありたした冗長な譊告ず抂念の混乱のため。。倖郚コヌドずやり取りするずき、私は倚くのチェックを無効にする必芁がありたした-それらは䞍必芁なノむズに぀ながりたした。



最終的に、私は広範な静的分析を䜿甚しおも通垞の開発に倧きな圱響を䞎えないこずを認識したした新しいコヌドを蚘述し、孊習曲線䞊の特定のポむントを通過した埌



、特に最初から䜿甚する堎合、静的分析の倀を定量化するこずは困難です。ポむントは、静的解析が導入される前に゚ラヌが存圚しおいたかどうかを掚枬するのが難しいずいうこずです。



ただし、譊告ず静的分析を䜿甚するこずは、正しく䜿甚した堎合でも、䜕が行われたかを確認できない堎合の1぀だず思いたす。。぀たり、静的アナラむザヌがオンになっおいるずきの倀はわかりたせんが、すぐには衚瀺されないこずに気づくでしょう。



CI / CD



厳密なテストず静的/動的コヌド分析が倧奜きなのず同じように、すべおのテストずチェックは、実行しなければ䟡倀がありたせん。CIは、最小限のオヌバヌヘッドでこれらの課題に察応できたす。CI / CD



むンフラストラクチャが最新の開発に䞍可欠であり、バヌゞョン管理システムを䜿甚し、開発暙準少なくずもスタむルガむドを持っおいるこずは、誰もが同意しおいるず思いたす。ただし、優れたCI / CDパむプラむンの䟡倀は、その操䜜が再珟可胜でなければならないこずです。



CI / CDパむプラむンは、少なくずもコヌドをビルドしお、コヌドをリポゞトリにプッシュする前にテストを実行する必芁がありたす。結局のずころ、アセンブリやある皮のテストを砎っお、すべおを迅速か぀恥ずかしそうに修正しなければならないその人たたは女の子、たたはペル゜ナになりたい人は誰もいたせん。 CIしたがっお、芪愛なるDevOps゚ンゞニアは、この恥からあなたを守りたす。



しかし、CIはあなたのためにもっず倚くのこずができたす。



堅牢なCIパむプラむンを䜿甚するず、オペレヌティングシステム、コンパむラ、およびアヌキテクチャの任意の数の組み合わせをテストできたす組み合わせテストを考慮しお、いく぀かの制限がありたす。たた、ビルドを実行したり、テストを実行したり、開発者が手䜜業で実行するにはリ゜ヌスを集䞭的に䜿甚したり、面倒だったりする操䜜を実行するこずもできたす。頭を飛び越えるこずはできたせん。



元のステヌトメントに戻っお、オヌプン゜ヌスプロゞェクトにCI / CDパむプラむンAutoware.Autoで䜿甚を含めるず、管理䞍可胜な開発に乗りやすくなりたす。テストをビルドたたはパスしない堎合、コヌドはプロゞェクトに入るこずができたせん。厳栌なテスト芏則に準拠しおいる堎合は、コヌドが機胜するこずを垞に確認できたす。



Autoware.AutoのCI



  1. コヌドを収集する
  2. テストを実行したすスタむル、リンタヌチェック、機胜テスト。
  3. テストカバレッゞを枬定
  4. コヌドが文曞化されおいるこずを確認したす




次に、mpcプロゞェクトで急いでコンパむルしたCI



  1. コヌドを収集する
  2. スキャンを実行したすClang静的分析
  3. テストを実行したすテストが倱敗しおもCIを停止したせん。


経隓豊富なDevOps゚ンゞニアJ.P. SamperやHao Pengなどが組み立おたCIパむプラむンは、さらに倚くのこずができたす。DevOps゚ンゞニアを倧切にしおください。圌らは開発者ずしおの私たちの生掻をはるかに簡単にしたす。



コヌドレビュヌ



ベンチマヌク、アナラむザヌ、CIは優れおいたす。テストを実行しおすべおを分析し、これらのテストがCIを䜿甚しお行われるこずを確認できたすよね



残念だけど違う。



繰り返しになりたすが、䞖界䞭のすべおのテストは、それが悪い堎合には無意味です。では、テストが適切であるこずをどのように確認したすか



残念ながら、私には魔法の答えはありたせん。実際、以前の゚ンゞニアリング手法であるピアレビュヌに戻りたす。特に、コヌドレビュヌに。



䞀般に、2぀のヘッドの方が1぀よりも優れおいるず考えられおいたす。実際、この抂念は文孊だけでなく理論によっおも支持されおいるず私は䞻匵したす。



メ゜ッドのアンサンブル機械孊習では、この理論を説明しおいたす。メ゜ッドのアンサンブルを䜿甚するず、統蚈モデルのパフォヌマンスを改善するための迅速か぀簡単な方法であるず考えられおいたすよく知られおいるブヌスティング法はその䞀䟋です。同様に、玔粋に統蚈的な芳点から芋るず、サンプル数が倚いほど、仮定により分散は小さくなりたす。぀たり、より倚くの埓業員を぀なぐず、真実により近づく可胜性が高くなりたす。チヌムビルディングの挔習を



行うこずにより、このテクニックを実際の䟋で詊すこずができたす。あたり面癜くないバヌゞョンでは、ランダム統蚈を個別に、たたはグルヌプで掚枬する必芁がありたす。



理論ずチヌムビルディングは別ずしお、コヌドレビュヌは重芁で匷力なツヌルです。圓然のこずながら、コヌドレビュヌはあらゆる専門的な開発プロセスの䞍可欠な郚分であり、ISO 26262芏栌によっおも掚奚されおいたすが、



これらはすべお、1人の子䟛が7乳母になる危険が垞にあるこずを瀺唆しおいたす。さらに、コヌドレビュヌによっお特定の問題が発生する堎合がありたす。



ただし、レビュヌ担圓者ず査読者の䞡方が次のこずを芚えおいれば、コヌドレビュヌは楜しく簡単にできるず思いたす。



  1. あなたはあなたのコヌドではありたせん。
  2. あなたは他の人ず話しおいる。
  3. 瀌儀正しく
  4. 誰もが同じ目暙に向かっお努力しおいたす。コヌドレビュヌはいかなる競争も衚しおいたせんただし、プログラミングで発生するこずもありたす


コヌドレビュヌを適切に行う方法に぀いお、私よりも賢くおすばらしい人がたくさん曞いおいたす。圌らの仕事を芋おください。最埌に蚀えるこずは、コヌドの信頌性を高めたい堎合はコヌドレビュヌを行う必芁があるずいうこずです。



ドラむ



開発環境を䜜成するために䜿甚できるプロセスずツヌルに぀いお詳しく説明したした。チェックず、チェックを実行しおコヌドが十分であるこずを確認するツヌルです。



次に、プログラミングの腕前に぀いお簡単に説明し、個々のコヌド行の蚘述の背埌にあるプロセスず意図に぀いおの考えを共有したす。



コヌドを倧幅に改善するのに圹立぀いく぀かの抂念がありたす。それらの抂念の1぀は、意図、セマンティクス、および読みやすさを蚘憶する機胜でした。これに぀いおは、埌で少し説明したす。もう䞀぀は、理解のあるOOPや関心事の分離。最埌の重芁なアむデアはDRYあるあなた自身を繰り返しおはいけない、たたは原則「DOは自分自身を繰り返しおいたせん。」



DRYは孊校で教えられおいるこずであり、他の倚くのこずず同様に、私たちはこの考えを遠くの棚に眮いおおり、詊隓以倖では少なくずも私にずっおはそれをあたり重芖しおいたせん。しかし、孊校の他の倚くの堎合ず同様に、私たちはそのようなこずを䜕も孊びたせん。実際、これは良い習慣です。



簡単に蚀えば、コヌドを頻繁にコピヌしお貌り付けたり、非垞によく䌌たコヌドを頻繁に䜜成したりする堎合、これは繰り返し可胜なコヌドが機胜たたは抜象化の䞀郚になるこずを瀺す非垞に良い兆候です。



ただし、DRYは、䞀郚のコヌドを関数に移動する必芁があるこずを確認するだけではありたせん。この抂念は、いく぀かのアヌキテクチャ䞊の決定の基瀎ずしおも圹立ちたす。



このアプロヌチはいく぀かのアヌキテクチャの抂念゚むリアス、接続、懞念事項の分離などず亀差したすが、DRYがアヌキテクチャにどのように適甚されるかの䟋は、私のmpcプロゞェクトで芋るこずができたす。mpcコントロヌラヌの開発䞭に、別のコントロヌラヌを䜜成する堎合、コヌドを耇補する必芁があるこずに気付きたした。状態、投皿、サブスクリプション、コンバヌゞョンなどを远跡するための定型コヌドに぀いおです。぀たり、mpcコントロヌラヌずは別のタスクであるように芋えたした。



これは、䞀般的なデザむンず機胜を別のクラスに分ける必芁があるこずを瀺す良い兆候でした。芋返りは2぀ありたした。mpcコントロヌラヌは、mpcに関連するコヌドに100集䞭しおおり、関連付けられおいるモゞュヌルは、単なる構成テンプレヌトです。぀たり、アヌキテクチャの抜象化により、別のコントロヌラヌで䜜業するずきにすべおを曞き盎す必芁はありたせん。



䞖界は灰色の濃淡で構成されおいるため、これらの蚭蚈䞊の決定は、泚意深く適切な考え方で掘り䞋げる必芁がありたす。それ以倖の堎合は、行き過ぎお、必芁のないずころに抜象化を䜜成し始めるこずができたす。ただし、開発者がこれらの抜象化モデルの抂念を意識しおいる堎合、DRYはアヌキテクチャ䞊の決定を圢䜜る匷力なツヌルです。私の意芋では、DRYはコヌドをクリヌンで高密床に保぀ための䞻芁な抂念です。



結局のずころ、コヌドの䞻芁な利点の1぀は反埩的なタスクを実行できるこずです。そのため、適切に蚭蚈された関数ずクラスに反埩をシフトしおみたせんか



蚀語ずラむブラリの完党な䜿甚



私の意芋では、DRYは非垞に重芁で普及しおいる抂念であり、この点は実際にはDRYの䌚話のほんの䞀郚にすぎたせん。



䜿甚する蚀語が䜕かをサポヌトしおいる堎合は、オプトアりトする十分な理由がない限り、通垞はむンラむン実装を䜿甚する必芁がありたす。そしお、C ++には倚くのものが組み蟌たれおいたす。



プログラミングはスキルであり、スキルレベルには倧きな違いがありたす。このスキルの山の高さを垣間芋ただけで、䞀般的に、暙準を䜜成する人は私よりも䞀般的なパタヌンを実装する方が優れおいるこずがわかりたした。



ラむブラリの機胜に぀いおも同様の議論をするこずができたすただし、それほど明確には分類されおいたせん。他の誰かがすでに同じこずを行っおおり、おそらく良いレベルであるため、ホむヌルを再発明する理由はありたせん。



それでも、これは他の倚くの堎合ず同様に、この段萜は掚奚事項であり、適甚する厳栌で緊急の芏則ではありたせん。ホむヌルを再発明する䟡倀はありたせんが、暙準的な実装は䞀般的に非垞に優れおいたすが、正方圢の郚品を䞞い穎に抌し蟌もうずしおも意味がありたせん。あなたの頭で考えなさい。



読みやすいコヌド



私のプログラミングスキルの向䞊に圹立った最埌のコンセプトは、プログラミングはコヌドを曞くこずではなく、コミュニケヌションに぀いおだずいうこずでした。他の開発者ずのコミュニケヌションではない堎合は、未来からのあなた自身ずのコミュニケヌション。もちろん、メモリ、数孊、Big Oの耇雑さに぀いお考える必芁がありたすが、それが完了したら、意図、意味論、明快さに぀いお考える必芁がありたす。このトピックに぀いお



は非垞に有名で広く掚奚されおいる本であるClean Codeがあるので、このトピックに远加できるこずはあたりありたせん。ここでは、コヌドを蚘述しおコヌドレビュヌを行うずきに参照するいく぀かの䞀般的な情報を瀺したす。



  1. クラスを明確か぀集䞭的に保぀ようにしおください

    • 匕っ掛かりを最小限に抑える
    • ()



      • const, noexcept? ? (, )




    • , (, , ).
    • (, )
    • .
  2. -



    • «», , .
    • (, ).
    • ( ) ().
  3. ? ()



    • , ().
    • , , , (, ).


この皮の問題に察凊するもう1぀の優れたリ゜ヌスは、ISO C ++コアガむドラむンです。



これらの原則はどれも革呜的、新しい、たたはナニヌクなものではないこずを繰り返したすが、原則の蚘述に䟡倀がある堎合たたはそれを読んだずきに誰かが「あは」ず蚀う堎合、この投皿を曞くためにビットずトラフィックを無駄にしたせんでした。 ...



思い返す



これらは、NDTロヌカリれヌションアルゎリズムの開発ず実装、およびMPCコントロヌラヌでの䜜業に䜿甚したツヌル、原則、プロセスの䞀郚です。倚くの䜜業が行われ、楜しかったです。それに぀いお話すのはそれほど面癜くありたせんでした。



党䜓的に、私は私が述べたツヌルず実践をうたく利甚したしたが、完党ではありたせんでした。



したがっお、たずえば、NDTで䜜業するずきは、テスト駆動開発のむディオムには埓いたせんでしたただし、すべおを完党にテストしたした。次に、MPCでテスト駆動型の開発手法を䜿甚したしたが、このプロゞェクトはAutoware.Autoに組み蟌たれたより匷力なCIの恩恵を受けたせんでした。さらに、MPCプロゞェクトは公開されおいなかったため、コヌドレビュヌのメリットがありたせんでした。



どちらのプロゞェクトも、静的分析の導入、より詳现なテスト、およびフィヌドバックの恩恵を受けるこずができたす。しかし、私たちは䞀人で䜜成したプロゞェクトに぀いお話しおいるので、行われたテストず受け取ったフィヌドバックで十分だず思いたす。静的分析に関しおは、より良い、より近いフォヌムは、䞀般的に補品開発の関心の領域に入り、オヌプン゜ヌスの開発者コミュニティから離れたす興味深いアむデアが地平線に珟れるかもしれたせんが。



2぀のアルゎリズムの同時開発に぀いおは、蚀うたでもありたせん。私は、䞊で抂説した原則に埓っお、できる限りの努力をしたした。



私たちは倧きな問題を小さな郚分に分解する優れた仕事をしおNDTアルゎリズムのMRコンポヌネントはもっず小さいかもしれたせんが、広範囲にわたるテストを行ったず思いたす。予備的な結果はそれ自䜓が物語っおいるず思いたす。



前進運動



実装埌、統合の時間です。独自の耇雑なコンポヌネントを持぀倧芏暡なシステムに接続する必芁がありたす。このシステムは、入力を受け取り、ダむゞェストしお、アルゎリズムの結果を生成したす。システム党䜓の蚈画を远跡し、䜎レベルの問題を修正する必芁があるため、統合はおそらくアルゎリズム開発の最も難しい郚分です。倚くのコヌド行に誀りがあるず、アルゎリズムの統合が劚げられる可胜性がありたす。



これに぀いおは、このシリヌズの3番目の最埌の投皿で説明したす。



プレビュヌずしお、開発プロセス䞭に、mpcコントロヌラヌの䜿甚ず統合䞭に倧きな゚ラヌが1぀も怜出されなかったず蚀いたす。確かに、スクリプトの䜜成、組み立お、テスト、入力デヌタの怜蚌はスキップされ、QoS蚭定の非互換性に関する問題もありたしたが、コヌドに問題はありたせんでした。



実際、ほずんどそのたたでQoSの非互換性を無芖しおオプションを蚭定する実行できたした。



同じのようなマむナヌな問題の数に走ったNDTアルゎリズム、ために行くの共分散の䞍安定さ、文字列を怜玢䞭に゚ラヌ既存のコヌドでは、ず間違っお敎列マップ。ずにかく、箱から出しおすぐに䜜業するこずもできたした。



誰もが芋られるように蚭蚈された補品には悪くない。



チャンネル登録

@TeslaHackers — Tesla-, Tesla

@AutomotiveRu — ,







画像



- automotive . 2500 , 650 .



, , . ( 30, ), -, -, - (DSP-) .



, . , , , . , automotive. , , .


:






All Articles