プロジェクト | コンテンツ |
---|---|
コースクラスのブログのリンク | https://edu.cnblogs.com/campus/xbsf/nwnu2020SE |
このジョブは、リンクが必要です | https://www.cnblogs.com/nwnu-daizh/p/12521474.html |
私のコース学習目標 | 彼らは、ソフトウェアの開発協力、練習ペアプログラミング(ペアプログラミング)で体験し、Githubの共同開発プログラムを取得するための手段を動作させます。 |
この仕事は私がどのような分野での目標を達成するため学習に役立っ | より身近な開発ツール、チームワークの重要性 |
他の学校の数を結び目 - 名前 | 201771030106-のGe Jiacheng |
ブログでは、他のジョブリンク結び目 | https://www.cnblogs.com/luor/p/12590222.html |
プロジェクトのGithubのリポジトリリンクアドレス |
実験内容と手順
タスクを1:読書 - 「法の近代的なソフトウェアエンジニアリング建設の」章3-4コンテンツは、スタイルのコードの仕様、コードの設計仕様、コードレビュー、ペアプログラミングの概念を理解し、習得します。
-
コードスタイルガイド
-
原則:簡潔な、読みやすい、異性のために行きます。
-
主な考慮事項は、インデント、線幅、ブラケット、空白行{}、分岐、名前、下線、大文字と破線、注釈を含みます。
-
-
コード設計仕様
-
機能の重要な原則:一つのことをして、それをうまくやります。
-
単一の出口で最高の機能、あなたはgoto文を使用することができます。
-
エラー処理と処理のパラメータは、アサーションをカバーしました。
-
-
コードレビュー
-
定義:コードを見て正しくコード仕様の枠組みの中で問題を解決します。
-
自己評価、ピアレビュー、レビューチーム:3つのコードレビューの形式があります。
-
コードレビューの目的:
-
いくつかは、コンパイラエラー(2)をだますことが起こるなど(1)コーディングエラー、地元チームのコードの仕様を満たしていない次のようなコードのエラーは、検索
-
、論理エラーを探すプログラムをコンパイルすることができますが、コードの論理は間違っています
-
このようなアルゴリズムの使用など発見アルゴリズム誤差は、最適ではない、それはなど、境界条件に対処していませんでした
-
現在の変更が再び登場欠損の修復の結果の前に - 潜在的なエラーと回帰エラーを特定
-
私たちは、改善のための領域を見つけることができます
-
教育(相互教育)の開発者、指導経験なので、実践的な知識やアプリケーション関連に精通しながら、より多くのメンバーは、プロジェクトの各部分のコードに精通していること
-
-
-
ペアプログラミングの概念
これは、コンピュータ上で一緒に働く2人のプログラマを指します。男のコードを入力し、他の人は、彼が入力したコードのすべての行を確認します。コードを見直しドライバは、観測者(またはナビゲーター)と呼ばれると呼ばれる人々のコードを入力します。2人のプログラマは、多くの場合、役割を交換します。
タスク2:次のように二つは二つの遊離ペア、大腸向こう側「ソフトウェア工学実験の2つの個々のイベント、」プロジェクトの結果は、特定の要件を評価するためには、以下のとおりです。
(1)ボーエンジョブが読み、コメントするプロジェクトは、コメントのハイライトは次のとおり関係欄「の対象」でボーエン構造、ブログのコンテンツ、ブログの構造やPSP、PSP「プログラム時間が完了し必要」と「実用的な完了を時間は「コメントエリアをブログ上のコメントにコンテンツを公開するために、二つの理由の分析とデータの違いを探るために必要。
![](https://img2020.cnblogs.com/blog/1946992/202003/1946992-20200328234718094-920267031.png)
(2)を参照して、読んで、テストコードを実行し、ローカルマシンに大腸他のソースプロジェクトをクローン「現代のソフトウェア工学 - 法の構築」4.4.3項コンパニオンプロジェクトコードレビューチェックリストとレコードが。
1.概要部分
代码已经测试通过,符合需求和规格说明,设计考虑周全,可读性强易维护。
2.设计规范部分
设计遵从项目中常用的模式,有部分硬编码和数字存在,代码没有依赖于平台,不会影响将来的移植,开发者新写的代码不能用已有的 Library/SDK/Framework中的功能实现,本项目中不存在类似的功能可以调用而不用重新实现,不存在没有用的
代码,绝不可清除。
3.代码规范部分
修改的部分符合代码标准和风格。
4.具体代码部分
做了相应的错误处理,对于调用的外部函数处理了异常,参数传递无错误,字符串的长度是字节的长度,是以0开始计数的,switch语句的default分支是以break结束的,不会出现死循环的情况,不可能存在资源泄露的问题,在图像用户界面方面可
以优化得更美观一点。
5.效能
代码效能很棒,最坏的情况也能执行出来,代码写得精简明了,图形界面的设计可优化得更完美,由于数据比较大,调用时可能会出现超时现象。
6.可读性
代码书写规范,可读性强。有足够的注释。
7.可测试性
代码测试时不需要更新或创建新的单元。
(3)フォーク、クローン、プッシュ、プルリクエスト、マージプル要求他の操作の倉庫利用githubの変更を協力して、ソースの個人的なコンパニオンプロジェクトにしようとする審査の結果に基づいて。
他のブログのリンクを結び、こちらをクリックしてください:https://www.cnblogs.com/luor/p/12590222.html
他のノード倉庫プロジェクトにgithubのリンク、(1)https://github.com/luorrr/SchoolInfoSystem(2)https://github.com/luorrr/UniversityInfoSystem
タスク3:2ペアプログラミングモード、私たちの学校の伝染病の予防と制御の要件に合わせてシステムの経験、設計および情報システムの開発を報告し、当社の教師と学生の毎日の流行をと組み合わせるので、それは次のような特徴を持っていること:
要求分析:
2019年12月末,中国武汉发生新型冠状病毒(2019-nCoV) 感染的肺炎疫情,为遏制疫情蔓延,有效切断病毒传播途径,在中央政府指导下,各级政府部分采取了一系列防控措施: 2020年1 月23 日10时起对武汉“封城”,全国 31个省市也相继实施了严格的防控措施;全国各省市向武汉和湖北派遣医疗队参与救治工作;在全国范围内调配口罩、防护服、药品等急需的医疗资源支援武汉;指导和督促全国范围内拥有医疗物资生产资质的企业尽快恢复生产能力;定向拨付专项财政资金用于疾病防控;从其他省份调集物资保障武汉市民日常生活。
值得一提的是,中国互联网企业在此次疫情防控中发挥了社会治理方面的重要作用。以腾讯为例,围绕应对疫情管控需求开发了十一款产品。其中疫情在线问诊功能,对于减少发热病人之间的相互交叉感染具有重要的作用,患者在家通过互联网向在线医生问诊,减少了病毒传播或感染的风险;谣言粉碎对于公众采取理性态度看待疫情的发展具有重要意义。滴滴出行还在武汉专门组建车队,服务于医护人员的通勤,这在实施交通管制的武汉具有重要作用。此外,还有新型肺炎确诊患者同行程查询工具,用户只需要输入自己所乘坐交通工具的时间和班次,就可以确认是否与被确诊感染者同行,提前做好自我隔离和就诊工作。在疫情防控中,中国互联网企业不仅发展壮大,在承担社会责任方面也越来越成熟。
为有效配合防控机构有关疫情信息的采集、统计与排查,我校开发了教职工/学生疫情上报系统,该系统由教职工疫情每日上报、学生疫情每日上报、二级部门疫情每日汇总表、疫情防控填报统计四个子系统组成。实现对我校各类人员基本情况、所在区域及活动轨迹及健康状况的信息收集。
ソフトウェア設計の説明
(1)可采集全校各类师生员工疫情信息;
(2)各二级部门疫情防控工作负责人可查看本部门人员疫情汇总,并提供高级查询功能进行多属性组合查询和可视化统计功能;
(3)学校防控办指定负责人登录《西北师范大学疫情防控信息统计》子系统,可浏览所有人员填报汇总数据清单,利用【高级查询】可进行数据组合筛选,系统以图形化方式展示各学院已填报和未填报学生统计情况和关键疫情数据统计情况,可【导出】查询列表的EXCEL文件;
(4)人机交互界面要求GUI界面(WEB页面、APP页面都可);
(5)附加分功能:定时填报提醒
ソフトウェアおよびコア機能コード表示
:システム設計の実際の状況によると、設計データベースのテーブルには、次のいくつか持っている
(1)学生情報登録テーブルを
(2)教師情報登録テーブル
(3)管理情報登録テーブル
次のようにコードの構造は次のようになります。
キーコード:
public class ExcelUtil {
// 不需要的字段
//private static String passString = "count";
/**
* 将list集合转成Excel文件
*
* @param list 对象集合
* @param path 输出路径
* @return 返回文件路径
*/
public static String createExcel(List<? extends Object> list, String path) {
String result = "";
if (list.size() == 0 || list == null) {
result = "没有对象信息";
} else {
Object o = list.get(0);
Class<? extends Object> clazz = o.getClass();
String className = clazz.getSimpleName();
// 通过反射获取字段数组
Field[] fields = clazz.getDeclaredFields();
File folder = new File(path);
if (!folder.exists()) {
folder.mkdirs();
}
String fileName = new SimpleDateFormat("yyyyMMdd").format(new Date()).toString();
String name = fileName.concat(".xls");
WritableWorkbook book = null;
File file = null;
try {
file = new File(path.concat(File.separator).concat(name));
// 创建xls文件
book = Workbook.createWorkbook(file);
WritableSheet sheet = book.createSheet(className, 0);
// 列
int i = 0;
// 行
int j = 0;
for (Field f : fields) {
j = 0;
// 这里把字段名称写入excel第一行中
Label label = new Label(i, j, f.getName());
sheet.addCell(label);
j = 1;
for (Object obj : list) {
Object temp = getFieldValueByName(f.getName(), obj);
String strTemp = "";
if (temp != null) {
strTemp = temp.toString();
}
// 把每个对象此字段的属性写入这一列excel中
sheet.addCell(new Label(i, j, strTemp));
j++;
}
i++;
}
book.write();
result = file.getPath();
} catch (Exception e) {
// TODO Auto-generated catch block
result = "SystemException";
e.printStackTrace();
} finally {
fileName = null;
name = null;
folder = null;
file = null;
if (book != null) {
try {
book.close();
} catch (WriteException e) {
// TODO Auto-generated catch block
result = "WriteException";
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
result = "IOException";
e.printStackTrace();
}
}
}
}
// 输出文件路径
return result;
}
/**
* ·根据属性名获取属性值
*
* @param fieldName 属性名
* @param o
* @return 属性值
*/
private static Object getFieldValueByName(String fieldName, Object o) {
try {
String firstLetter = fieldName.substring(0, 1).toUpperCase();
// 获取方法名
String getter = "get" + firstLetter + fieldName.substring(1);
// 获取方法对象
Method method = o.getClass().getMethod(getter, new Class[] {});
// 用invoke调用此对象的get字段方法
Object value = method.invoke(o, new Object[] {});
// 返回值
return value;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
(1)ログイン画面、さまざまな状況に応じて選択します。
(2)学生情報エントリ:
(3)教師情報入力:
(4)入力の成功は、プロンプトが表示されます:
(5)他の大学の学生情報エントリー、エントリーは、プロンプトの成功は以下となります。
(6)あなたはidで、生徒/教師情報を見つけることができます
結果の表示を探します:
学生ID / ID +日付を介して情報を検索する(7)セクション
結果の表示を探します:
(8)管理ログイン画面
管理メニューは、ログイン後に表示されます。
(9)感染の地理的分布図
(10)感染症チャートの数
(11)輸出クエリ結果:
輸出成功:
ツイニングプロセス:
PSPの表示
PSP | 概要 | 計画時間(分)の合計を完了するために必要 | 完了するために必要な実際の時間(分) |
---|---|---|---|
プランニング | 計画 | 20 | 20 |
・見積り | これは、タスクは、一般的に作業工程に多くの時間と計画が必要と推定しました | 20 | 20 |
開発 | 開発 | 715 | 750 |
。分析 | (新しい技術を学ぶ含む)ニーズ分析 | 45 | 60 |
。デザインスペック | 設計ドキュメントの生成 | 5 | 5 |
。デザインレビュー | デザインレビュー(と同僚が設計文書を見直し) | 15 | 10 |
。標準コーディング | コードの仕様(現在の開発に適したカスタム仕様) | 10 | 15 |
・ 設計 | 具体的な設計 | 30 | 40 |
・コーディング | 具体的なコーディング | 400 | 450 |
・コードレビュー | ・コードレビュー | 120 | 60 |
。テスト | 検査(セルフテスト、コードを変更し、変更を提出) | 90 | 40 |
報告 | レポート | 90 | 80 |
。試験報告書 | テストレポート | 70 | 60 |
.Size測定 | 計算ワークロード | 8 | 5 |
。死後&プロセス改善計画 | ・後知恵、およびプロセス改善計画を提案します | 12 | 15 |
概要経験:
この実験を通じて、私は本当に2は、その限られたプログラミング機能のために、プログラムの最初の、1 + 1> 2の効果をもたらすことができ、多くの関数は、自分では実現できない、本当に一緒に働いてきた経験できますこの容量の仲間が比較的強いながら、まあ、それはリーダーシップで役割を果たすことができ、そして第二に、彼らは規制のコードを書いて、自分自身の学習を促進することができ、任意の時点でネットワークツールを交換することができます。この実験の後、以降の学習における利点は、ワーク1にいきます!