软件工程课程第一次任务

目录

一、个人情况介绍

二、理论学习

1.慕课学习

2.阅读课外书

三、实践学习

1.编程环境

1.1源代码管理

1.2单元测试

1.2.1“文件”—>“新建项目”

1.2.2选择语言“C++”—>输入“test” —>创建“本机单元测试项目”

1.2.3配置测试运行环境

1.3性能分析

1.3.1CPU 使用率

1.3.2内存使用率

2.代码仓库

2.1源代码

2.2测试代码


一、个人情况介绍

        郑会吉,学号:D23181103。

        之前没有亲身参与大项目的经历,只是在硕士阶段参加过导师组织的几次研讨会,间断性地听说过软件工程、需求文档、开发模型等概念,所以计算机和软件开发不是我擅长的领域。因为博士阶段的课题和计算机操作系统有关,目前计划在这方面能有进一步学习。

         仓库链接:https://gitee.com/zheng-huiji/next-day.git

二、理论学习

1.慕课学习

完成学堂在线平台的《软件工程》(刘强教授主讲)慕课第一章和第二章学习

2.阅读课外书

《人月神话》读后感

首先什么是“人月”?人是程序员,月是时间。什么是“神话”?如果1个人10个月的工作量等同于10个人1个月的工作量,那就成神话了。人数和时间的互换仅仅适用于以下情况:某个任务可以分解给参与人员,并且他们之间不需要相互的交流。这在割小麦或收获棉花的工作中是可行的,而在系统编程中近乎不可能。

2.1焦油坑

过去几十年的大型系统开发就犹如一个焦油坑,很多大型动物在其中剧烈挣扎,他们中大多数开发出了可运行的系统--不过,其中只有非常少数的项目满足了目标、时间进度和预算的要求。各种团队,大型的和小型的,庞杂的和精干的,一个接一个淹没在了焦油坑中。表面上看起来好像没有任何一个单独的问题会导致困难,每个都能被解决,但是当它们相互纠缠和累积在一起的时候,团队的行动就会变得越来越慢且很难看清问题的本质。

2.2外科手术队伍

小型、精干队伍是最好的--尽可能的少。需要协作沟通的人员的数量影响着开发成本,因为成本的主要组成部分是相互的沟通和交流,以及更正沟通不当所引起的不良结果(系统调试)。Mills建议大型项目的每一个部分由一个团队解决,但是该队伍以类似外科手术的方式组建,而并非一拥而上。

2.3贯彻执行

即使是大型的设计团队,设计结果也必须由一个或两个人来完成,以确保这些决定是一致的。允许体系结构师对实现人员的询问做出电话应答解释是非常重要的,并且必须进行日志记录和整理发布。对于存有疑问的实现人员,应鼓励他们打电话询问相应的结构师,而不是一边自行猜测一边工作,这是一项很基本的措施。

2.4胸有成竹

编码大约只占了问题的六分之一左右,编码估计或者比率的错误可能会导致不合理的荒谬结果。对常用编程语句而言。生产率似乎是固定的。这个固定的生产率包括了编程中需要注释,并可能存在错误的情况。使用适当的高级语言,编程的生产率可以提高5倍。

2.5变更的客观需要

对于大多数项目,第一个开发的系统并不合用。它可能太慢、太大,而且难以使用,或者三者兼而有之。用户的实际需要和用户感觉会随着程序的构建、测试和使用而变化。软件产品易于掌握的特性和不可见性,导致了它的构建人员(特别容易)面临着永恒的需求变更。目标上(和开发策略上)的一些正常变化无可避免,事先为它们做准备总比假设它们不会出现要好得多。

2.6削足适履

在大型的团队中,各个小组倾向于不断地局部优化,以满足自己的目标,而较少考虑队用户的整体影响。这种方向性的问题是大型项目的主要危险。为了满足目标,每个人都在局部优化自己的程序,很少会有人停下来,考虑一下对客户的整体影响。培养开发人员从系统整体出发、面向用户的态度是软件编程管理人员最重要的职能。

2.7里程碑

里程碑的选择只有一个原则,那就是,里程碑必须是具体的、特定的、可度量的事件,能够进行清晰定义。例如:"结构师和实现人员签字认可的规格说明","100%源代码编制完成,纸带打孔完成并输入到磁盘库","测试通过了所有的测试用例"。如果里程碑很模糊,老板就常常会得到一份与实际情况不符的报告。慢性进度偏离是士气杀手。如果在某项活动开始之前就着手估计,并且每两周进行一次仔细的修订,根据实际情况动态调整时间。当里程碑没有正确反映损失的时间,并对人们形成误导,以致事态无法挽回的时候,它会彻底碾碎小组的士气。

构建之法配套讲义读后感

邹欣教授的《构建之法-现代软件工程》配套讲义不仅仅是一本讲解软件工程理论和实践的书籍,更是一本关于如何成为一名优秀软件工程师的指南。
邹欣教授以其丰富的经验和深厚的理论知识,详细地解释了软件工程的本质、重要性以及其在现代社会中的作用。他强调了软件工程不仅仅是编程,更是一种思维方式和解决问题的方法。
邹欣教授详细介绍了各种软件工程方法和工具,如敏捷开发、版本控制、重构等,并通过生动的例子和详细的解析,让我对这些方法有了更深入的理解。同时,他还强调了实践的重要性,认为只有通过实践,我们才能真正掌握软件工程的知识和技术。
邹欣教授指出,作为一名软件工程师,我们不仅要追求技术的进步,更要关注软件对社会、经济和环境的影响。我们要确保我们的软件是安全的、可靠的、可用的,并且要对用户的隐私和数据负责。这让我明白,软件工程师不仅是一种职业,更是一种责任。
总的来说,阅读《构建之法-现代软件工程》配套讲义,让我对软件工程有了更深入的理解和新的认识。它不仅提供了丰富的理论知识,更提供了一种全新的视角和方法来看待和解决问题。我相信,无论你是一名刚刚入门的软件工程师,还是一名经验丰富的资深工程师,亦或是其他涉及到软件开发的学者,都能从中受益匪浅。

三、实践学习

1.编程环境

本文选择的IDE是Visual Studio 2022;

1.1源代码管理

1.2单元测试

1.2.1“文件”—>“新建项目”

1.2.2选择语言“C++”—>输入“test” —>创建“本机单元测试项目”

1.2.3配置测试运行环境

1.3性能分析

1.3.1CPU 使用率

1.3.2内存使用率

2.代码仓库

仓库链接:https://gitee.com/zheng-huiji/next-day.git

2.1源代码

#include <iostream>
using namespace std;

// 判断是否为闰年
bool isLeapYear(int year) {
    if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
        return true;
    }     
    else {
        return false;
    }
}
  
// 计算指定月份的天数
int getDaysInMonth(int year, int month) {
    if (month == 2) {
        return isLeapYear(year) ? 29 : 28;
    }
    else if (month == 4 || month == 6 || month == 9 || month == 11) {
        return 30;
    }
    else {
        return 31;
    }
}

// 获取下一天的日期
void getNextDay(int year, int month, int day, int& nextYear, int& nextMonth, int& nextDay) {
    if (day < getDaysInMonth(year, month)) {
        nextYear = year;
        nextMonth = month;
        nextDay = day + 1;
    }
    else if (month < 12) {
        nextYear = year;
        nextMonth = month + 1;
        nextDay = 1;
    }
    else {
        nextYear = year + 1;
        nextMonth = 1;
        nextDay = 1;
    }
    //return nextYear, nextMonth, nextDay;
}

int main() {
    int year, month, day;
    cout << "请输入日期:";
    cout << "\n年:";
    cin >> year;
    cout << "\n月:";
    cin >> month;

    if (month > 12) {
        cout << "月份输入错误!";

    }
    else {
        cout << "\n日:";
        cin >> day;

        if (day > 31 || day < 0) {
            cout << "日期输入错误!";
        }

        else {
            int nextYear, nextMonth, nextDay;
            getNextDay(year, month, day, nextYear, nextMonth, nextDay);
            cout << "下一天的日期是:" << nextYear << "年" << nextMonth << "月" << nextDay << "日" << endl;
        }
    }
    return 0;
}
/*NextDay测试功能点
1.测试闰年
输入2000-2-28,输出2000-2-29
输入2023-2-28,输出2023-3-1
2.测试年末
输入2022-12-31,输出2023-1-1
3.测试大月小月
输入2023-9-30,输出2023-10-1
输入2023-8-30,输出2023-8-31
*/

2.2测试代码

#include "pch.h"
#include "CppUnitTest.h"
#include "../Nextday/next.cpp"
using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace nextdaytest
{
	TEST_CLASS(UnitTest2)
	{
	public:
        // 判断是否为闰年
        bool isLeapYear(int year) {
            if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
                return true;
            }
            else {
                return false;
            }
        }

        // 计算指定月份的天数
        int getDaysInMonth(int year, int month) {
            if (month == 2) {
                return isLeapYear(year) ? 29 : 28;
            }
            else if (month == 4 || month == 6 || month == 9 || month == 11) {
                return 30;
            }
            else {
                return 31;
            }
        }

        // 获取下一天的日期
        void getNextDay(int year, int month, int day, int& nextYear, int& nextMonth, int& nextDay) {
            if (day < getDaysInMonth(year, month)) {
                nextYear = year;
                nextMonth = month;
                nextDay = day + 1;
            }
            else if (month < 12) {
                nextYear = year;
                nextMonth = month + 1;
                nextDay = 1;
            }
            else {
                nextYear = year + 1;
                nextMonth = 1;
                nextDay = 1;
            }
        }

        //1.测试非闰年的2月
		TEST_METHOD(TestMethod1)
		{
            int year = 2023, month = 2, day = 28;
            int nextYear, nextMonth, nextDay;
            getNextDay(year, month, day, nextYear, nextMonth, nextDay);
            std::cout << "下一天的日期是:" << nextYear << "年" << nextMonth << "月" << nextDay << "日" << std::endl;                   
            Assert::AreEqual(year, nextYear);
            Assert::AreEqual(month + 1, nextMonth);
            Assert::AreEqual(1, nextDay);
		}

        //2.测试闰年的2月
        TEST_METHOD(TestMethod2)
        {
            int year = 2000, month = 2, day = 28;
            int nextYear, nextMonth, nextDay;
            getNextDay(year, month, day, nextYear, nextMonth, nextDay);
            std::cout << "下一天的日期是:" << nextYear << "年" << nextMonth << "月" << nextDay << "日" << std::endl;
            Assert::AreEqual(year, nextYear);
            Assert::AreEqual(month, nextMonth);
            Assert::AreEqual(day + 1, nextDay);
        }

        //3.测试年末
        TEST_METHOD(TestMethod3)
        {
            int year = 2022, month = 12, day = 31;
            int nextYear, nextMonth, nextDay;
            getNextDay(year, month, day, nextYear, nextMonth, nextDay);
            std::cout << "下一天的日期是:" << nextYear << "年" << nextMonth << "月" << nextDay << "日" << std::endl;
            Assert::AreEqual(year + 1, nextYear);
            Assert::AreEqual(1, nextMonth);
            Assert::AreEqual(1, nextDay);
        }

        //4.测试大月月末
        TEST_METHOD(TestMethod4)
        {
            int year = 2023, month = 9, day = 30;
            int nextYear, nextMonth, nextDay;
            getNextDay(year, month, day, nextYear, nextMonth, nextDay);
            std::cout << "下一天的日期是:" << nextYear << "年" << nextMonth << "月" << nextDay << "日" << std::endl;
            Assert::AreEqual(year, nextYear);
            Assert::AreEqual(month + 1, nextMonth);
            Assert::AreEqual(1, nextDay);
        }

        //5.测试小月月末
        TEST_METHOD(TestMethod5)
        {
            int year = 2023, month = 8, day = 30;
            int nextYear, nextMonth, nextDay;
            getNextDay(year, month, day, nextYear, nextMonth, nextDay);
            std::cout << "下一天的日期是:" << nextYear << "年" << nextMonth << "月" << nextDay << "日" << std::endl;
            Assert::AreEqual(year, nextYear);
            Assert::AreEqual(month, nextMonth);
            Assert::AreEqual(day + 1, nextDay);
        }
	};
}

PSP
工作阶段预估时间(min)实际时间(min)
慕课学习180200
课外书阅读400420
配置编译环境3032
具体编码120134
单元测试100121
创建仓库3029
撰写报告4055

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值