ドキュメントの自動化

アビオニクスに関連するプロジェクトに取り組んでいる間、プロジェクトの完全な説明を含むいくつかのドキュメントセットを作成する必要がありました。 また、ESPD、KT-178Bなど、ドキュメントの設計と内容に関する多くのGOSTの要件を考慮する必要がありました。

説明には以下を含める必要があります。


ドキュメントの量は非常に多いです。 すべてのドキュメントのデータは相互に関連しているため、プロジェクトを変更する(たとえば、新しい要件を追加する)場合、ほとんどすべてのドキュメントを編集する必要があります。 さらに、どこかで間違いを犯したり、修正を忘れたりする可能性があり、ドキュメントの誤りにつながります。



記事の後半で、この問題をどのように解決したかを説明します。



ドキュメントジェネレーターアーキテクチャ



そのため、プライマリドキュメント(CSV形式のテーブル、XMLドキュメント)のデータを使用してすべてのドキュメントを作成する自動化ツールを使用することが決定されました。 プロジェクトに変更を加えたら、ドキュメントセットの生成を再開できます。

CSV形式のテーブルは、テーブルプロセッサで簡単に編集できます。 プロジェクトデータ(現在のバージョン、名前、互換性のある機器)はXML形式で保存されていました。

要件の実装の説明は、ソースコードのdoxygenコメントに既に含まれています。 そのような場合専用のDoxygenは、XML形式のドキュメントを生成できます。

ドキュメントジェネレーターは、ドキュメントテンプレートに基づいて、LaTeXドキュメントを作成します。これは既にPDF形式で顧客に転送されています。


ドキュメント作成チャート
リーダー->(計画)
スーパーバイザー->(要件)
スーパーバイザー->(テストの説明)
スーパーバイザー->(見つかった問題)
(要件)->プログラマー
プログラマー->(プログラムコード)
(プログラムコード)-> Doxygen
Doxygen->(実装の説明)

(ドキュメントテンプレート)->:ドキュメントジェネレーター:: LaTeX

(要件)->:ドキュメントジェネレーター:: CSV
(計画)->:ドキュメントジェネレーター:: LaTeX
(実装の説明)->:Documentation Generator :: XML
(テストの説明)->:Documentation Generator :: XML
(見つかった問題)->:ドキュメントジェネレーター:: CSV

:ドキュメントジェネレータ:->(ドキュメントセット):LaTeX


ドキュメントジェネレーター


ドキュメントを作成するためのこのようなシステムを実装するには、テンプレート処理ユーティリティとアセンブリスクリプトが必要でした。

Makefileにビルドスクリプトを実装しました。 スクリプトは次のアクションを実行しました。



ドキュメント生成シーケンス図
GIT-> "Documentation Generator":ソース
ドキュメントジェネレーター-> Doxygen:ソース
Doxygen->ドキュメントジェネレータ:XMLの説明
プロジェクトデータ->ドキュメントジェネレーター:テンプレート
ドキュメントジェネレーター-> PyTemplate:テンプレート
プロジェクトデータ-> PyTemplate:CSV、XML
PyTemplate-> LaTeX:LaTeXドキュメント
LaTeX->“ Documentation Generator”:PDFドキュメント


システムの重要な要素は、ドキュメントテンプレート処理ユーティリティです。

テンプレート処理ユーティリティ


ソースコードを入手できます: github.com/krotos139/pytemplate

または、次のコマンドを使用してユーティリティをインストールします。
sudo pip install pytemplateproc 


ユーティリティの使用法:pytemplate.py [オプション]
オプション:


テンプレートには、必要な外部ソースのデータである情報が含まれています。 テンプレートの処理中にユーティリティは必要なデータをロードし、データをテンプレートに入力するときにそれを使用します。

サポートされているデータソース:


テンプレートファイルと生成されたファイルへのパスがユーティリティに転送されます。 データソースへのパスは、すべてテンプレートで定義されており、1つのテンプレートでさまざまなデータソースを使用できるため、プログラムに転送されません。

テンプレートの例:
 {%- set docs = load_csv("database2.csv") %} \subsection{ } \begin{longtable}{|m{2cm}|m{3cm}|m{3cm}|m{3cm}|m{3cm}|} \caption{ } \label{tab:reports}\\\hline {\centering } & {\centering } & {\centering } & {\centering  } & {\centering } \\\hline \endfirsthead \caption*{\it{ } \ref{tab:reports}}\\\hline {\centering } & {\centering } & {\centering } & {\centering  } & {\centering } \\\hline \endhead {%- for item in docs %} {{ item.id }} & {{ item.name }} & {{ item.ref }} & {{ item.sign }} & {{ item.inv }} \\\hline {%- endfor %} \end{longtable} \newpage 


おわりに


pytemplateユーティリティを使用すると、テンプレートに入力するデータを使用して、テンプレートに関するドキュメントとレポートを作成できます。 さらに、データはスプレッドシートやデータベースに便利な形式で保存できます。

Source: https://habr.com/ru/post/J280476/


All Articles