2023年秋 软件工程课程第一次任务
一、任务完成情况概述
通过软件工程前期课程的学习,总体来说较好地完成了教员布置的第一次任务,在这期间,我完成了学堂在线《软件工程》课程第一、二章内容的学习,阅读了构建之法及其配套讲义和《人月神话》,可以说,在一定程度上,对于软件工程课有了更深入的理解。在实验课和课后使用电脑的时间内,我认真地搭载了VScode环境,熟悉了教学过程中所使用的各个平台,包括Gitee、CSDN、GitHub等,建立并关联了各平台账号,理顺总体的软件工程课学习过程,具体完成情况如下。
二、个人情况介绍
(一)经历
在软件开放方面,我个人没有大型软件开发的经历,只制作过一些小型程序,主要是针对程序设计有过一定的研究学习,曾经学过的语言有Pascal、VB、C、python,也学过数据库中的结构化查询语言SQL,比较熟练应用的语言是C和python,我都用过这两种语言对数据结构预与算法进行学习。其中,我做过的最复杂的内容是基于数据挖掘的方法,利用K-means聚类算法和Beta信誉模型对有关数据进行分析,并生成一套预警机制,动态生成图表进行反馈。
(二)认识
计算机和软件开发领域是我喜欢的领域,也是我比较擅长的领域。我年少时就接触计算机,比较早就对计算机编程有了一定的认识和见解,随着时代的不断发展,计算机已经深入到我们日常生活中的方方面面,甚至替代了很多人的行为和一些事物。学好计算机,学好软件工程课程,可以更好地顺应时代潮流大的发展趋势。
(三)规划
目前,我打算在未来的研究生学习生活中首先尽快地迈入计算机、人工智能这些领域的行列之中,并能够熟练地运用人工智能相关工具对于现实生活中存在的亟待解决的问题进行研究。
(四)目标
学习软件工程对我来说非常重要。通过学习这门课程,我期望能够掌握软件开发所需的相关技术和能力,以更好地参与和开展软件项目。我希望通过学习软件工程,能够了解软件开发的整个流程,包括项目管理、需求分析、设计模式、编程规范、软件测试等方面知识的掌握,从而提高自己解决实际问题的能力。
在每周学习中,我计划抽出足够的时间,大约每天1-2小时来专注于这门课程。具体的时间投入会根据课程的难度和个人的学习进度来灵活安排。
对于感兴趣的项目或者想要得到实战锻炼的机会,我愿意付出更多的时间和精力。我相信在实践中不断学习和挑战自己,可以更好地提升自己的软件开发技能。当然,在追求学习的同时,我也会注意保持身体健康,避免过度疲劳或牺牲休息时间。只有身心健康,我才能更加有效地学习和成长。
三、理论学习情况
(一)学堂在线
完成学堂在线平台的《软件工程》(刘强教授主讲)慕课第一章和第二章学习,作为课堂讲授的补充,并完成配套练习。
第一章内容学习 | ![]() |
第一章配套练习 | ![]() |
第二章内容学习 | ![]() |
第二章配套练习 | ![]() |
(二)构建之法及人月神话
1、构建之法
《构建之法》是一本由软件工程师邹欣所著的书籍,配套讲义能够提供实践指导和案例分析。阅读完这本书以及相关讲义后,我深感受益匪浅,对软件架构设计和开发方法有了更深入的理解。
在《构建之法》中,邹欣通过一系列的实践经验和案例,系统地介绍了软件架构设计的原则、方法和最佳实践。他强调了软件架构的重要性,指出良好的架构设计能够提高软件的可维护性、可扩展性和可重用性。通过深入讲解各种常见的架构模式和设计原则,作者帮助读者建立起一个系统化的架构思维框架。我特别欣赏作者将理论与实践相结合的方法。配套讲义中提供了大量的真实案例和实际项目的分析,详细介绍了如何应用书中所述的架构设计原则和方法来解决实际问题。这种实践驱动的学习方式使我更能够理解和运用所学的知识。在阅读过程中,我也对一些软件开发中容易忽视的方面有了更深入的认识。比如,作者强调了团队合作和沟通的重要性,鼓励不同角色的开发人员进行有效的协作。他还提供了一些实用的技巧和建议,如如何有效地进行需求分析、如何进行架构评审等,这些对于我在实际项目中的工作非常有帮助。
通过阅读《构建之法》及其配套讲义,我对软件架构设计和开发方法有了更系统和全面的认识。这本书不仅为我提供了宝贵的知识和经验,也让我对软件开发的整个过程有了更清晰的认知。我相信通过运用书中所述的原则和方法,我能够更好地应对复杂的软件开发挑战,提高自己的技术水平和项目执行能力。总的来说,《构建之法》及其配套讲义是一本非常实用和有启发性的书籍。它不仅适合软件工程师学习和参考,也对团队项目管理者和技术决策者有很大的借鉴意义。我将会把书中所学应用到实际工作中,不断学习和成长。
2、人月神话
《人月神话》是一本由计算机科学家弗雷德里克·布鲁克斯所著的经典书籍。阅读完这本书后,我深受启发,对软件工程的管理和开发过程有了更深入的理解。
在《人月神话》中,布鲁克斯提出了许多关于软件工程的重要原则和理念。其中最重要的观点之一是“没有银弹”,即没有一种独特的技术或方法能够解决所有软件开发的难题。这一观点提醒我们,在实际的项目中,没有简单快捷的解决方案,需要通过持续的努力和团队合作来克服问题。书中还谈到了“人月”概念,即在软件项目中,增加人手并不一定能够加快项目的进度。相反,新加入的人员可能需要花费时间来适应团队和项目,从而导致项目进展缓慢。这一观点对我来说是一个很大的启示,让我意识到在软件项目中,团队的稳定性和配合是至关重要的。此外,布鲁克斯还强调了软件工程中的沟通和协作的重要性。他指出,软件开发不仅仅是一个技术问题,还涉及到人与人之间的合作和沟通。只有通过有效的沟通和团队合作,才能够实现高质量的软件开发。
通过阅读《人月神话》,我意识到软件开发是一项复杂而艰巨的任务,需要全力以赴的投入和持续的学习。这本书提供了许多宝贵的经验和教训,让我对软件工程的本质有了更深刻的认识。同时,它也给我带来了对团队合作、沟通和项目管理的新思考。总的来说,阅读《人月神话》是一次非常有收获的经历。这本书向我展示了软件工程的复杂性和挑战性,让我懂得了追求卓越的软件开发需要付出巨大的努力和团队的协同合作。我将会在今后的软件开发中应用这些宝贵的经验,不断提升自己的技术水平和团队合作能力。
四、实践学习情况
(一)编程环境
本科期间,我在学习C语言的过程中,主要使用VScode,后面在利用python做毕业设计时,也就同样使用VScode,可以说是比较依赖和习惯于VScode的环境,所以在软件工程的课程学习过程中,我同样是采用轻量级集成开发环境VScode,并使用c语言进行学习。
1、源代码管理
2、单元测试
3、性能测试
性能测试采用VS2022进行
(二)代码仓库
1、Nextday小程序的编写
# 得到下一个日期
def next_day(year, month, day):
# 每个月的天数
monthday = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30]
# 判断是否是闰年
if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
monthday[2] = 29 # 将2月的天数改为29
# tday得到下一天
tday = day + 1
# 如果比当前月份的天数大,month进入下一个月份,tday从1开始
if tday > monthday[month]:
tday = 1
month += 1
# 如果month大于12月,表示进入了新的一年,month为1,year加1
if month > 12:
month = 1
year += 1
# 得到新的日
day = tday
return year, month, day
# 主程序
if __name__ == "__main__":
# 输入年月日
year, month, day = map(int, input().split())
year, month, day = next_day(year, month, day)
# 输出下一天的日期
print(f"{year}-{month}-{day}")
2、VScode配置码云gitee
代码仓库地址:下一天代码.py · 江超宇/Next-Day - 码云 - 开源中国 (gitee.com)
五、总结
(一)工作记录
学习内容 | 学习时间 | 完成情况 |
学堂在线《软件工程》 | 2h40m | 已完成 |
学堂在线课后配套练习 | 50m | 已完成 |
构建之法及其配套讲义 | 3h20m | 已完成 |
《人月神话》 | 3h | 已完成 |
IDE的配置 | 15m | 已完成 |
熟悉各个平台的使用 | 1h20m | 已完成 |
程序编写以及上传 | 2h40m | 已完成 |
(二)学习心得
在完成软件工程课程第一次任务时,首先对于理论知识进行学习,软件工程基础的理论知识,包括:软件开发生命周期、需求分析、概要设计和详细设计等。通过这些理论知识的学习,我对软件工程的整个开发过程有了更深刻的认识。通过阅读构建之法及其相关配套讲义和《人月神话》,我对于软件开发有了更加感性和客观的认识。在小程序编写方面,我使用python语言完成了一个简单的日期计算程序Nextday,并熟悉了编写python程序的基本技能。此外,我还学习了如何使用Git工具进行版本控制和上传代码到Gitee平台上。
在整个任务的完成过程中,我遇到了许多问题,但是通过仔细阅读相关资料并寻求同学和老师的帮助,我最终成功地完成了任务。除此之外,我还意识到了自己很多不足之处,例如对于一些编程语言的理解不够深入,对于版本控制的理解也不够深刻,这些问题激励我继续加强自己的学习,提高自己的技能水平。总之,通过完成软件工程课程第一次任务,我对软件工程的概念和基本知识有了更深入的认识,也掌握了一些实用的编程技能和工具使用方法。这给了我信心和动力,希望能够继续学习和提高自己的技能。