asp.net程序涉及案例_我认识的张渤老师|程序设计教学中如何应用软件工程学

     《中国信息技术教育》解码专栏共采用张渤老师两篇文章了,今天分享的是他的第二篇。

       我认识张老师已经十几年了,特别是前五六年的时候,见面并不多。

       我们见了面,我经常说:“张老师你在忙什么,别只忙,要总结!”。

      他总是说:”我水平不高不敢总结,我就好好做点事,读读书。“

      大概每隔几年,见了,我再说他,他也总这几句话。

      我甚至有一些着急。在一些较大的研讨活动中说,别把书读死了,老是读,老是读,不用、不做、不写。

       他都是和气地对我说,好,我试着用,可是写是写不太了啊,水平不行。

       我就有点觉得他谦虚太过。

      又是几年过去,他终于想写一篇论文,于是写了一篇音频技术实验的,非常有理有据、有设计。

        因缘技巧,我们又一起做了几场培训的视频课,他态度的认真、技术的扎实打动了很多人。

       于是,顺其自然的一个机会来了,他成为了泰山版教材的分册主编。 他扎实、能拼、严谨、善良、低调... ...让我,我们每一个人都感到了。

        如此忙碌,如此实干,又如此谦逊,其实是我们每一个信息技术老师的特色。

       不过能做事如此踏实却又如此低调,这样的品格值得我和大家来分享学习:

        以学习为目标,以公益为心态,不以功利主导自己的思想和行动,用耐心的研究与努力,用十年磨一剑的思维与精神,潜心进行学术价值的追求,往往会更容易收获

       下面是张老师最近的一篇文章,即将在《中国信息技术教育》3月刊上正式发表,我们先读为快,请注意版权保护。

      另,同期还有济南高新区实验中学潘思阔的重磅文章,敬请关注当期杂志。 9f97c7c7-2c1c-eb11-8da9-e4434bdf6706.png杂志订阅方式,请搜索公众号”中国信息技术教育“。a097c7c7-2c1c-eb11-8da9-e4434bdf6706.png

程序设计教学中如何应用软件工程学


      张渤  山东省桓台第一中学256400

进入信息时代以来,世界各国都将信息技术教育提升到了一个史无前例的高度。2015年10月,美国签署《2015年STEM教育法案》,12月签署《每位学生都成功法案》,将掌握计算机科学提升到与获得读、写、算素养并列的地位。约80%的美国高中先修课程(AP)考试要求考察学生的编程能力(计算机科学A)【1】

2017年7月,国务院发布《新一代人工智能发展规划》强调在中小学阶段要“推广编程教育”;2017年9月,教育部发布《中小学综合实践活动课程指导纲要》,其中“走进程序世界”、“体验物联网”、“开源机器人初体验”等主题活动都要求“激发(学生)编程的兴趣,培养逻辑思维能力”,引导学生进一步理解计算思维的内涵;2017年12月,教育部公布《普通高中信息技术课程标准2017版》明确了算法和程序设计相关教学标准以及开展STEAM教育的基本要求。

由此可见,程序设计教学(编程教育)已经成为信息技术教学的核心内容之一。在以信息经济、低碳经济等经济形态为主导的当代社会背景下,从人的全面发展出发,人才的培养核心是核心素养【2】。程序设计教学成为信息技术学科核心素养--计算思维培养的重要途径。而在中学程序设计教学中,还存在一些不足甚至错误做法,严重影响着信息技术教学效果,无法达到预期的育人目标。无论是从宏观课程设计,还是从微观教学内容来看,借助软件工程思维有利于我们摆脱纯粹的理论教学,重构课堂,培养学生统筹规划、综合设计、分析推理等关键能力。

软件工程学是一门研究用工程化方法构建和维护有效的、实用的、高质量的软件的学科。它涉及程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。软件工程学借鉴传统工程的原则、方法,以提高质量、降低成本和改进算法。其中,数学用于构建模型,计算机科学用于设计算法,工程科学用于制定规范、设计范型、评估成本及确定权衡,管理科学用于计划、资源、质量、成本等管理等。软件工程学定义的软件开发过程,通常包括需求分析、概要设计、详细设计、编码、测试、交付维护等阶段。

下面以一个简单的程序案例为例,来详细分析软件工程思维与传统程序教学的差异。案例背景是:学校举行一个“1分钟投篮班级对抗赛”,每班参赛选手5人,每人1次投篮机会限时1分钟,共有10个班级参加比赛。比赛成绩以班级所有选手投中总数进行计算。请你设计一个小程序。实现成绩统计和排序工作。

一、软件工程思维更关注需求分析和概要设计

传统的教学方式,老师往往将上述案例问题简化为“每组5个数求和,10项求和结果排序”,然后就直接进入程序语法教学环节了。

而对于软件工程思维来说,需求分析要解决做什么和怎么做的问题。学生要自己分析这个案例,找出解决方案,得出设计思路。通过分析,学生可以发现需要设计哪些功能,如输入、求和、排序等。然后,要明晰这些功能可能涉及的编程语言知识。

第一,通过具体问题的分析,学生发现自己所学的内容能够解决实际问题,是有实际意义的,从而避免了传统教学中用编程解决纯粹的数学问题的情况。需求分析能够激发学生的学习兴趣,使得程序设计不再是单纯的语法练习。从核心素养角度来看,利于培养学生开发或运用技术来解决问题的能力(技术素养),引导学生研究问题,并找到创新、有效的问题解决之道(创造性)。前期的需求分析可以有效地解决程序设计的盲目性和“无从下手”之感,也便于学生对整个程序的理解,其实能够为后续教学节约时间。也许,这个案例过于简单,尚不能体现需求分析的重要性。若将案例扩展为运动会成绩统计程序这样的大案例,则会超出学生的设计能力,反而不利于学生的学习。在小案例学习过程中,可以引导学生类比、类推,从而达到举一反三的目的,彰显小案例的典型性和代表性特点。

第二,概要设计是一个设计师根据用户交互过程和用户需求来形成交互框架和视觉框架的过程。简单来说,就是将软件模块、功能、层次关系用视觉化的方式展示出来。一般情况下概要设计不需要使用编程语言,常见如流程图。对应传统教学,流程图设计往往只是算法解析描述的工具,很少用来展示整个程序的功能设计。如果引导学生运用流程图进行功能的模块化划分,有助于培养模块化程序设计思维。通过概要设计可以进一步明确程序的模块构成和功能,便于确立各部分的实现方法(算法选择)。在设计环节还要决定程序设计使用的变量名称、类型甚至取值范围等细节问题。为便于后续阅读程序,变量命名不仅仅要“见名知意”,还要系统规划变量名称的分类以及大小写规范等,能够锻炼学生良好的规范表达意识。与平时教学中,变量名使用无意义的单字母等对学生习惯的影响有很大不同。

二、软件工程思维更突出编码的模块化设计和软件测试

软件工程对程序教学的一个很大的意义是形成良好的程序设计的代码文化与素养,形成日渐深厚的计算思维。其中,程序的模块化设计是良好的程序设计过程技能,而编码测试则是良好性工程人员的代码文化素养。

第一,编码的模块化设计,是指在进行程序设计时按照功能将一个复杂程序划分为若干程序模块,每个程序模块完成一个确定的功能,模块之间通过必要的联系和互相协作完成整个功能的程序设计方法。与通常的简单程序设计要求不同之处在于,模块化设计主要体现在两个方面,一是程序设计尽量使用函数、子过程、子程序,少使用全局变量;另一方面是,尽量将代码按照模块划分并做好注释。

以前面的“1分钟投篮班级对抗赛”而言,可以将输入、求和、排序分作三个小部分。与平时相比,代码书写不一定减少,但会让编程作者和阅读者都能清晰的了解整个程序的架构,有利于错误排查和分工协作。如果遇到诸如“运动会成绩统计”这样有一定复杂度的程序设计,通过调用某个功能模块(如函数、子程序等),则能较好的解决不同比赛项目的人员分组、成绩输入、排序打印等问题。而没有模块化的程序设计,可能要重复设计相应功能,存在大量的重复代码,降低运行效率,且在遇到问题时不容易检查。

第二,软件测试是对编码程序的正确性、效率、容错能力等的测试。程序设计很可能遇到代码错误,甚至算法错误的问题。在教学中应该注意培养学生观察分析程序运行结果、错误提示的能力,对不同的数据结构、不同的算法选择进行优劣评估等。在常规教学过程中,我们多数使用验证性实验进行教学。

如前面投篮的案例,程序设计完成后,一般会要求学生输入3到5组的“正常”数据进行验证。验证仅仅限于证明语法结构可能没有错误。这种知识巩固式的教学模式,使得不少学生养成一看到出现预计结果就终止实验的习惯,其实是不利于培养学生的程序测试意识的【3】。参考软件工程思维中的程序测试,我们应该要求学生进行数据验证时,一方面要提高验证的数据量和运行次数,另一方面要尽量使用“边界值”或“异常值”进行验证。仍以投篮案例为例,如果程序设计时限定了数组(或列表)上下限值,则在验证时要在上下限的边界选择数据进行验证。例如根据生活实际经验,我们设置了1分钟投篮的上限为100次,那就可以使用三位数(如127)作为测试数据验证我们的设定是否有效。除此之外,验证数据还应该包含负数、小数等,以避免程序运行时错误输入带来的错误结果。从软件工程视角来看,程序设计要关注编程安全问题,如分母为0、超出数组界限、变量取值超出范围等情况。而在我们程序设计教学中,这些也恰恰是不易被发现的“易错点”。可见,测试数据的作用是非常大的,设计有效的检验数据,既能检验程序设计的规范性和算法的合理性,同时能够让学生强化测试意识,避免测试的随意性,为以后解决复杂的具体问题奠定基础。

通过引入符合实际情况的测试数据,可以有效检验程序的健壮性。而要提高健壮性,就要进行容错设计,从而使得程序设计从简单功能向复杂功能过渡,拓展学生的思维强度和广度,激发学生的学习兴趣。在上述案例中,负数或小数作为无效输入,如何解决因此类输入所导致的程序结果错误呢?学生很容易想到,在输入错误时进行提示并要求重新输入。由此,再讲解相关程序语法,学生就更容易接受。同样,在大量数据输入时,不仅仅会出现错误输入,还可能会出现漏掉数据等情况。这就要求我们不仅仅要检验输入数据的合法性,还要跟踪数据的数量。必要的时候,还可以在程序关键步骤设置“断点”,以随时跟踪数据的变化。遇到错误不容易判断时,可以灵活运用数据跟踪,更容易发现问题根源。根据现实中可能遇到的问题,学生思考解决方案的过程中,不知不觉地拓展了程序功能,很多知识的学习也变得顺理成章。

综上所述,我们可以看出,在程序设计教学中运用软件工程思维,并不是只有复杂程序才需要,也不是只有专业人士才可以做到的事情。在任何程序设计中,都可以渗透软件工程思维。而这样的思维方式,不仅仅有利于加深学生对程序设计的理解,强化应用技术解决实际问题的能力,也将大大提升我们的程序教学效率。相信,程序设计对于学生来讲不再是枯燥乏味的学习体验。

参考资料

[1]任友群,黄荣怀.普通高中信息技术课程标准(2017年版)解读[M].北京:高等教育出版社,2018.04:2~4

[2]林崇德.21世纪学生发展核心素养研究[M].北京:北京师范大学出版社,2016.03:1

[3] 龚建华, 刘惠安. 在高级语言程序设计课程中融入软件工程思想的教学改革思路[J]. 贵州师范学院学报, 2009, 20(3):31-33.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值