软件工程作业 - word count

(编程和软件工程作业系列)

实践最简单的项目:WC

实践是理论的基础和验证标准,希望读者贯彻“做中学”的思想,动手实现下面的项目,并和别人的成绩相比较,分析产生差距的原因。

1. 实现一个简单而完整的软件工具(源程序特征统计程序)。2. 进行单元测试、回归测试、效能测试,在实现上述程序的过程中使用相关的工具。3. 进行个人软件过程(PSP)的实践,逐步记录自己在每个软件工程环节花费的时间。4. 使用源代码管理系统 (GitHub,  Coding.net, 等); 并使用项目管理系统,练习使用其中的事件跟踪功能(选用TFS,Bugzilla 或者Trac, 等工具,了解其原理)。5. 进行最简单的项目管理系统的定制,这个留给一部分能力较强的同学参与。(选用TFS 或别的项目管理系统,了解原理并实现定制。)

1 WC 项目要求

wc.exe 是一个常见的工具,它能统计文本文件的字符数、单词数和行数。这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数、单词数和行数。当然,我们假设读者都已经通过之前的练习,建立了源代码控制工具并有基本的实践经历。实现一个统计程序,它能正确统计程序文件中的字符数、单词数、行数,以及还具备其他扩展功能,并能够快速地处理多个文件。具体功能要求:程序处理用户需求的模式为:

wc.exe [parameter] [file_name]

基本功能列表:

wc.exe -c file.c     //返回文件 file.c 的字符数
wc.exe -w file.c    //返回文件 file.c 的词的数目  
wc.exe -l file.c      //返回文件 file.c 的行数

扩展功能:    -s   递归处理目录下符合条件的文件。

    -a   返回更复杂的数据(代码行 / 空行 / 注释行)。

    -f   说明这个文件是哪一种语言的。  例如: C/Java/C++/JavaScript/Python/HTML,  如果看不出属于任何语言, 就输出 TXT  

空行:本行全部是空格或格式控制字符,如果包括代码,则只有不超过一个可显示的字符,例如“{”。

代码行:本行包括多于一个字符的代码。

注释行:本行不是代码行,并且本行包括注释。一个有趣的例子是有些程序员会在单字符后面加注释:

    } //注释在这种情况下,这一行属于注释行。

[file_name]: 文件或目录名,可以处理一般通配符。高级功能:

 -x 参数。这个参数单独使用。如果命令行有这个参数,则程序会显示图形界面,用户可以通过界面选取单个文件,程序就会显示文件的字符数、行数等全部统计信息。

需求举例:  wc.exe -s -a *.c

返回当前目录及子目录中所有*.c 文件的代码行数、空行数、注释行数。

2. 工作的细分

正如谚语所说:不能一口吃成个胖子。罗马不是一天建成的。同样,一个功能完备的程序也不是一蹴而就的。在这里,我们讨论如何把大任务划分为可操作的小任务,以及任务的次序。读完项目的要求后,首先请估计完成整个项目需要多少时间?把估计记下来,并且写成PSP 的形式。其次,如何逐步分解一个项目的需求?在这个项目中,各种需求已经通过各种参数表达得比较清楚了。

基本功能扩展功能高级功能

详细地了解了需求后,我们再估计需要的时间并记录 [ 估计值2]。最后,列出各类功能下面的详细需求。

基本功能

支持 -c支持 -w支持 -l

扩展功能

支持 -s -f -a 参数支持各种文件的通配符(*,?)

高级功能

基本的Windows GUI 程序操作支持通过图形界面选取文件支持通过图形界面展现文件的信息

请在这个时候把每一个详细功能所需的时间列出来,然后再把它们相加,得到 [ 估计值 3]。

同学相互之间比较估计值1、估计值2 和估计值3,看看差距是多少,有什么规律?对此有兴趣的同学请参看本书第8 章“计划和估计”一节。

3 如何保证质量— 回归测试

如何保证在加入新功能的过程中,已有的功能可继续工作?这就要求我们有一套标准的测试来保证基本功能的正确性。写这样的程序,用项目本身的源文件来做测试应该是比较酷的,但是源文件本身在不断地变动,并不是一个很好的测试样本,我们要建立起一系列测试文件。如下:

空文件只有一个字符的文件只有一个词的文件只有一行的文件一个典型的 C 语言源文件
一个典型的 Java 语言源文件一个典型的 HTML 语言源文件一个典型的 C# 语言源文件

一个典型的 JavaScript 语言源文件

如何为这个程序做有效的测试,有以下几种方法,自动化程度由低到高。

1. 手动测试,手工比较。2. 要做到不断地测试,可以把WC 的主要功能封装成一个类,然后测试程序调用这一个类的主要函数,得出结果并与标准作比较。3. 更进一步,把测试文件和正确的测试结果保存在文件中,测试驱动程序只要比较测试的输出和标准结果就能得出答案。4. 再进一步,把自动构建脚本和构建验证测试(Build Verification Test)结合起来。每一次构建之后,就自动运行测试,然后记录出现的Bug。了解测试的需求后,每人估计需要的时间并记录 [估计值4]。

4 标准测试集,正确性和速度评比

既然大家的程序都写得差不多了,那就拉出来遛遛,看看是骡子是马。以子目录的形式把目前所有同学的程序都集中在一个总的测试目录下,作为测试集合。然后大家看看各自的程序要花多少时间才能正确并且较快地完成任务。 在这里,同学们要记下满足了标准测试集之后,每人实际花费的时间 [ 实际值],并且按照本章PSP 的表格统计自己在软件开发的各个阶段所花费的时间。

5 扩展,从源代码服务器上读文件

请看这个文章,你能实现类似的功能么? https://www.ybrikman.com/writing/2018/08/12/the-10-to-1-rule-of-writing-and-programming/  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500349.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件工程课, 编程课 助教的工作介绍

在用 "做中学 (Learning By Doing) " 方式讲授编程和软件工程课的时候,我们认为助教在其中起了很大的作用。 费曼学习方法的精髓是 “以教代学” 。如果不能向其他人简单地解释一件事,那么你就还没有真正弄懂它。 我们课程的各位助教&#xff…

软件工程资料 - 优秀的大学怎么教程序开发和软件工程课

他山之石,可以攻玉 世界上很多大学都有不错的教学方法, 例如我们曾经的助教总结他在国外的学习经历,可以看出老师和学校对于如何教好课是花了心思, 有很多投入的。 一门课怎么上: https://zhuanlan.zhihu.com/p/206103…

第二届构建之法论坛预告(草案)

(草案) 时间:2018年7月初 (暂定 7/9 - 7/11) 地点: 北京航空航天大学 活动:为期三天的软件工程教案设计培训和软件专业教育方法的讨论 时间内容工具备注第一天上午 1. 论坛主题演讲 “构建之法教学改进” 构建之法的教学是如何演进到目前的形态的&#x…

AI应用开发实战系列之一: 从零开始配置环境

AI应用开发实战 - 从零开始配置环境 与本篇配套的视频教程请访问:https://www.bilibili.com/video/av24421492/ 零、前提条件 一台能联网的电脑,使用win10 64位操作系统请确保鼠标、键盘、显示器都是好的 建议和反馈,请发送到 https://g…

usb连接不上 艾德克斯电源_第十二届(深圳)新能源汽车核心电源技术研讨会成功举办...

2019年4月26日,由大比特主办的第十二届(深圳)新能源汽车核心电源技术研讨会在深圳登喜路国际大酒店成功举办。本次会议受到了法雷奥、长安铁雪龙、比亚迪、蔚来汽车、麦格米特、科陆电子、欣锐、英威腾、晶福源、英可瑞、瀚美特、航嘉驰源、核达中远通、永联、优优绿…

AI应用开发实战系列之二:从零开始搭建macOS开发环境

AI应用开发实战 - 从零开始搭建macOS开发环境 本视频配套的视频教程请访问:https://www.bilibili.com/video/av24368929/ 零、前提条件 一台能联网的电脑,使用macOS操作系统请确保鼠标、键盘、显示器都是好的 建议和反馈,请发送到 https…

安卓能硬改的手机机型_手机后盖材质,金属比塑料的好,玻璃比金属的好,是这样么?...

从2000年至今,18年手机发生了巨大变化到现在,人们不再唯性能至上屏幕、拍照、材质、工艺等等也成了人们选购手机的标准手机后盖材质的发展史很好的见证了人们喜好的变化接下来我们来看手机后盖材质的演变史从手机的创造到手机的普及作为一个材料人我们经…

AI应用开发实战系列之三:手写识别应用入门

AI应用开发实战 - 手写识别应用入门 手写体识别的应用已经非常流行了,如输入法,图片中的文字识别等。但对于大多数开发人员来说,如何实现这样的一个应用,还是会感觉无从下手。本文从简单的MNIST训练出来的模型开始,和…

重力加速度换算_中考物理重难点汇总——公式换算大全

初中物理中最重要的部分就是公式了,在这之中公式的换算可以说是一个难点,也是一个重点。力学部分一、速度公式火车过桥(洞)时通过的路程s=L桥+L车声音在空气中的传播速度为340m/s 光在空气中的传播速度为3108m/s二、密度公式(ρ水…

[人工智能教程] 人工智能暑期课实践项目建议

哈工大人工智能暑期课实践项目建议 这个博客介绍了暑期课实践作业的建议。 时间:7/10 - 7/22. 一周上课, 一周项目实践。 要求:项目实践的过程请用公开的博客记录。 项目的源代码请放到 github 中。 每4 ~ 5 人一个小组,从下…

新手一小时就写出人工智能应用 - 看图识熊

来不及了,先上车: 人工智能开发案例 熊的分类 如何安装必要的工具并配置环境呢,请看这个详细的解说 今后会有更详细的文字版在这个专题出现。 如果有对这个教程有疑问,请在这里留言。

c++ 线性回归_模型之母:简单线性回归的代码实现

模型之母:简单线性回归的代码实现关于作者:饼干同学,某人工智能公司交付开发工程师/建模科学家。专注于AI工程化及场景落地,希望和大家分享成长中的专业知识与思考感悟。0x00 前言 在《模型之母:简单线性回归&最小…

AI应用开发实战系列之四 - 定制化视觉服务的使用

AI应用开发实战 - 定制化视觉服务的使用 本篇教程的目标是学会使用定制化视觉服务,并能在UWP应用中集成定制化视觉服务模型。 前一篇:AI应用开发实战 - 手写识别应用入门 建议和反馈,请发送到 https://github.com/Microsoft/vs-tools-for-…

server sql 众数_sql 语句系列(众数中位数与百分比)[八百章之第十五章]

众数众数就是出现最多的那个数。select sal,count(*) as cntfrom empwhere DEPTNO20group by sal通过分组把他们的行数计算出来。那么最关键的部分在于,你如何知道最大值。是的我们可以查出当前最大值,然后再取出最大值的sal。但是这肯定要用到两个临时视…

【干货】快速部署微软开源GPU管理利器: OpenPAI

介绍 不管是机器学习的老手,还是入门的新人,都应该装备上尽可能强大的算力。除此之外,还要压榨出硬件的所有潜力来加快模型训练。OpenPAI作为GPU管理的利器,不管是一块GPU,还是上千块GPU,都能够做好调度&a…

python调用ansysworkbench_Workbench通过Python设定材料参数

微信公众号:CAE技术分享以下一段代码是在Workbench中通过Python设定材料的弹性模量和泊松比参数:# encoding: utf-8# Release 16.0SetScriptVersion(Version"16.0.361")template1 GetTemplate(TemplateName"EngData")system1 temp…

现代软件工程 结对/团队作业 - 汉字的 2048 + 俄罗斯方块

一个很有趣的软件工程/编程作业,如果把汉字构成的规律运用在 2048 俄罗斯方块这样的游戏中,会有什么效果呢? (链接1, 链接2) 既然是软件工程的作业, 那就要体现出一些工程的特性: 作业要求: 1) 学生自行…

invoke 按钮点击_h5+ app内点击按钮实现复制功能 实现方法

在项目中由于要实现点击按钮复制功能,我用的是H5APP,实现代码如下(包括安卓IOS):/*** //参数copy是要复制的文本内容* tip 复制成功后的提示语,可空*/function copy_fun(copy,tips) {if(!tips){tips"已成功复制到剪贴板"…

机器学习平台建设

本文从机器学习平台的架构开始,再到具体的功能,然后从需求的角度带给读者思考,找到合适的机器学习平台建设之路。最后,推荐了微软开源开放的机器学习平台OpenPAI,是可私有部署的机器学习训练平台。 本文不少要点都可以…

型管件的作用_管道工程基础 - 管件和管道附件的布置规定

概述1.1 管件的用途1.2 管件的种类根据管件的端部连接形式可将管件分为对焊连接管件、承插焊连接管件、螺纹连接管件、法兰连接管件以及其它管件。管件和管道附件的布置2.1管件的布置(1)弯头宜选用曲率半径等于1.5倍公称直径的长半径弯头;输送气固、液固两相流物料的…