zoukankan      html  css  js  c++  java
  • 现代软件工程 第一章 【概论】练习与讨论

    题目1

    解答:

    开发环境选择的是c++,开发工具使用的是Visual c++6.0。

    首先,先完成一个最简单的工能,随机产生一个只有两个操作数一个运算符的式子,接受输入并判断输入答案是否正确:

    代码如下:

    #include<iostream.h>

    #include<stdlib.h>

    #define MAX 100;

    #include<time.h>

    int main()

    {

             srand((unsigned(time(NULL))));///初始化当前时间种子

             int num1=rand()%100;///生成操作数

             int num2=rand()%100;

             char ope[]={'+','-','*','/'};////生成运算符

             int num=rand()%4;

             int result,input;

             cout<<num1<<ope[num]<<num2<<"=";

             cin>>input;

             cout<<endl;

             switch(num)///计算

             {

             case 0: result=num1+num2;break;

             case 1: result=num1-num2;break;

             case 2: result=num1*num2;break;

             case 3: result=num1/num2;break;

             }

             if(input==result)////判断

                       cout<<"right"<<endl;

             else

                       cout<<"false"<<endl;

             return 0;

    }

    其次完成第二个需求,需要可以求真分式的运算,初始界面输入-n出现普通运算,输入-r命令出现真分式运算。代码如下:

    #include<iostream>

    #include<stdlib.h>

    #define MAX 100;

    #include<time.h>

    #include<string>

     

    using namespace std;

    int main()

    {

        srand((unsigned(time(NULL))));

        string order;

       

        cin>>order;

        char ope[]={'+','-','*','/'};

        int num=rand()%4;

        if(order=="-n")

        {

             int num1=rand()%100;

             int num2=rand()%100;

             int result,input;

             cout<<num1<<ope[num]<<num2<<"=";

             cin>>input;

             cout<<endl;

             switch(num)

             {

             case 0: result=num1+num2;break;

             case 1: result=num1-num2;break;

             case 2: result=num1*num2;break;

             case 3: result=num1/num2;break;

             }

        if(input==result)

             cout<<"right"<<endl;

        else

             cout<<"false"<<endl;

        }

        if(order=="-r")////生成真分式,并计算

        {

             string Fraction(int num1,int num2);

             int num1=rand()%100;

             int num2=rand()%100%num1;

             int num3=rand()%100;

             int num4=rand()%100%num3;

             string result,input;

        cout<<num2<<"/"<<num1<<ope[num]<<num4<<"/"<<num3<<"=";

             cin>>input;

             cout<<endl;

             switch(num)

             {

             case 0: result=Fraction(num2*num3+num4*num1,num1*num3);break;

             case 1: result=Fraction(num2*num3-num4*num1,num1*num3);break;

             case 2: result=Fraction(num2*num4,num1*num3);break;

             case 3: result=Fraction(num2*num3,num1*num4);break;

             }

             cout<<result;

             if(input==result)

                 cout<<"right"<<endl;

             else

                 cout<<"false"<<endl;

        }

        return 0;

    }

    string Fraction(int num1,int num2)///约分的函数

    {

        string s1,s2;

        char *a=new char[10],*b=new char[10];

        for(int i=2;i<=num1;i++)

        {

             if(num1%i==0&&num2%i==0)

             {

                 num1/=i;

                 num2/=i;

             }

        }

        sprintf(a, "%d", num1);

        sprintf(b, "%d", num2);

        s1=a;

        s2=b;

        return s1+"/"+s2;

    }


    题目2:

    解答:

    (1)TFS(Team Foundation Server)是一个工作流协作的引擎,它允许一个团队使用他们自定义的流程,并使用在项目历史中实时收集起来的一个集中的数据仓库。由于经常做.net项目开发,所以对TFS还是比较了解的,它的优点非常明显:

    • 任务版上能将需求、项目进度一览无余,对于小团队而言,比甘特图更有用
    • 集成了项目管理、版本控制、BUG 跟踪,能有效实现 SCRUM
    • 能与 VS 无缝接合

    但是缺点也是在让人头痛:

    • 整个系统是用 asp 实现的,用浏览器访问相当慢(不知道是不是服务器性能太低还是我个人用的电脑配置太低)
    • 从 IE 上访问、填写各种开发、测试记录,也是很慢,感觉不如 mantis BT 这样基于 php 的那么方便、迅速
    • 用 XP 系统无法访问,还得是64位的? 所以把电脑的整体性能拖下来了
    • 团队的邮件细节配置比较复杂,我不关心的项目的变更集也会给我发邮件

    (2)GitHub:Ruby社区的程序员使用Git以后,找不到好的Git托管网站,于是就开发了Github出来。开源出来就是希望更多人关注,接近与关注者的距离,方便交流,github在这一点上无疑是最好的。

    (3)Bugzilla:为Unix定制的追踪系统的软件,可以管理软件开发中缺陷的提交、修复、关闭等整个生命周期。开源免费的产品,具有缺陷跟踪和强大的检索功能。
    (4)TortoiseSVN: 是 Subversion 版本控制系统的一个免费开源客户端,可以超越时间的管理文件和目录。文件保存在中央版本库,除了能记住文件和目录的每次修改以外,版本库非常像普通的文件服务器。你可以将文件恢复到过去的版本,并且可以通过检查历史知道数据做了哪些修改,谁做的修改。

          作为团队内部使用的版本控制软件TortoiseSVN非常好用,可以独立部署,而且对于版本和时间管理很有效,对于公司和企业来讲可以在内部搭建服务器环境,从而保证源代码的保密性。


    题目3

    解答:

         (1) 办公自动化系统,属于Internal Software,是我们学校内部的办公系统,这类软件在高校中出现一般是在本世纪初(即2000-2003年左右),在当时,高校实现办公自动化系统逐渐成为一种趋势,当时学校通过政府采购招标,选择了云南大学开发的一套Netcase2000办公自动化系统。当时市面上国产的办公自动化系统并不是很多,基本上都是以营利为目的;

         (2)当时2002年是一名大二的学生在学校的办公室帮忙,参与了这个软件项目需求书的辨析和软件的整体实施过程,当时对于办公自动化系统的使用做了严格的限制,只允许行政办公人员使用,所以最大的目标就是功能全面,用户体验良好;

         (3)2001年左右在天津软件行业较为红火,就业去向很好,很多大型的软件公司对于迎接毕业生都能够给出3k左右的薪酬;

         (4)当时有专门的软件工程师对学校老师进行统一的培训,我作为实习学生负责平时对服务器的维护,也参与了培训。当时的办公自动化系统的确使得学校在办公效率上有了质的飞跃,但是由于原有的行政审批流程依旧大行其道,仍旧没有真正实现无纸化办公。随着软件应用的逐渐深入,越来越多的bug也在出现,例如,当时采用的是文件数据库,发送一个文件,就需要将这个文件拷贝到接收人的文件夹,如果一个文件有10M,发送给10个人就要占用服务器100M的空间。到2005年左右的时候系统的运行效率非常低下了,打开收件箱旺旺需要10几秒钟的时间,当时,我们自己编写了一个软件,负责定时清理历史数据,并进行备份来提高系统的运行效率。2005年左右,云南大学开发了基于关系数据库的新型办公自动化系统,但是需要重新政府采购购买;

         (5)当前,国内的OA软件多如牛毛,有的是以产品的形式出现,有的是根据用户需求定制开发。但是不同厂商之间的竞争基本上都基于“功能性”和“价格”两个方面。现在我们学校已经更换了OA系统,是由一家公司定制研发的,因为这样更能够针对学校的办公流程和特有的工作习惯,市面上的很多OA都是针对企业和政府部门的,与高校的管理还是存在比较大的理念上的差异;

         (6)2006年的时候,服务器在硬件水平上已经有了明显的提高,可以供软件调用的资源较2001年已经提升了好几个量级,但是软件的功能已经不再能够满足学校办公的需要,需要根据需求进行升级;

         (7)观察市面上大多数的OA系统,在系统的可扩展性上都存在较大的缺陷,大家往往把精力放到流程的可定义、表单的可自动化配置等方面,反而忽略了系统功能的扩展性,如果需要增加一个新的功能,往往带来的是大量新的开发工作量和系统维护工作量。


    题目4

    解答:

          写程序与做软件之间当然是有区别的。一个优秀的程序员也绝对不是单打独斗的独行侠。ACM比赛中写的程序在我看来只属于编写代码,还不能构成一个完整软件。开发一款成熟的软件,不但要熟练掌握其开发环境,正确的编写代码,还要对一些相关知识有一定的了解,比如说需求及功能的制定,界面的设计,最后的软件测试等。当然,开发组成员之间的配合也是必不可少的。这些东西在开发软件的过程中尤为重要。因此,做软件绝不只是写写程序那么简单,编写代码只是一个实现软件功能的过程而已。

          至于软件工程,对于它,一直都没有一个很精准的定义。但是说软件工程就是教那些不怎么会写程序的人开发软件还是太狭隘了。在我看来,软件工程不仅是让我们明白如何编写代码,还包括了一个软件是如何进行开发的等一系列的内容。软件工程包含的东西太多,还有很多值得我们去学习。


    题目5

    解答:

          我所在的学校开设了计算机科学专业和软件工程专业。相关的教学计划总的来说差别不大,有一些课都是有共同之处的。但是,计算机专业的课程涵盖面更加宽广,包括计算机硬件、软件以及一些应用的基本理论知识。而软件工程专业,当然更侧重软件和工程,包括程序的设计,工程实践等,关于计算机硬件的课程开设较少。总的来说,计算机专业宽而浅,软件专业窄而深。至于这两个专业的毕业出路其实也相差不大,都是读研、出国或者工作。读研和出国的同学不必多说,研究方向也都各不相同。工作方面,大多数都是从事一些开发类型的工作,比如说某些软件公司的程序员等。但是因为本科时学到的知识有限,步入工作时肯定还要学习更多的东西。


    题目6

    解答:

          “刷课机”或者“刷票软件”,在法律范围内探讨,它的出现是合法的,但是若从道德规范方面思考的话,就如现实中排队时插队一样,是不符合道德规范的。网上选课或者是购票网站,是为了更加合理地分配现有资源,要体现的是对每一个参与者的公平性,若使用了“刷课机”或者是“刷票软件”,虽然能够帮助使用者解决某些问题,但是却使资源的分配失去其应有的公平,所以是不道德的。

          从“软件工程”的研究范围来看,这种软件是不符合工程师或者是产品经理的职业道德的,因为它会破坏现有的资源分配规则并与公众的利益相悖。

          参考信息:“约车软件”的出现,如果仅从对出租车的使用来说,它与“刷票软件”是完全不同的。“约车软件”是改变了人们使用出租车的方式,使大家叫车更加的方便快捷,是人们线下直接拦车向线上约车的习惯的转变,它使资源的分配更加的快捷、准确。


    题目7

    解答:

          我认为中文编程并不是一个能大幅度提高效率的编程方法,首先:中文编程一个最最明显的缺点就是,输入法的来回切换,这无疑增加了工作量。其次,中华文化博大精深,中文一个词、一个句子,在不同的语境下都有不同的意思,把中文用到编程这种严谨的工作中可不是一个好想法。对于一个职业的程序员来说,中文编程绝对是一个鸡肋。但是中文编程也不是一无是处,它可以适用于推广电脑教育,对编程的初学者以及编程的业余爱好者来说,中文编程可能让他们能更好的入门。


    题目8、9

    解答:

          (1)如何才能真正有效的实现编程规范,项目组中是否真的有人去执行代码复审;

          (2)结对编程在项目实践过程中是否真的能够实现;

          (3)程序设计是否是项目经理的必修课程;

          (4)如何才能对软件质量进行量化;

          (5)软件的运维应该是现代软件工程中很重要的内容,课程是否需要对此进行进一步的讲解。


    题目9、10

    解答:

    (1)当前博客已经建立,小组成员:

    组长:杨彬,2016级硕士生,男,河北沧州人,本科毕业于河北大学网络工程专业

    成员:

    • 曹悦,2016级硕士生,女,天津人,本科毕业于天津大学软件工程专业
    • 饶龙龙,
    • 田强,2016级博士生,男,天津人,本科毕业于天津师范大学计算机科学与技术专业,硕士毕业于天津大学计算机科学与技术专业

    (2)

    1)当时小组做的项目没有正式发表,仅仅是当做课程的作业来完成的,也没有面向用户公布我们所开发的项目。

    2)项目的源代码和相关文档还都保留着,可以进行进一步的开发。

    3)软件的开发是一个团队协作的过程,必须要团队成员相互配合才能进行下去。除此之外,必须要在项目开发之前就要进行合理的时间规划,这对完成项目有很大的帮助。

    4)学习软件工程不能只停留在编写代码上,还要多参加一些项目的开发,理论结合实践,这样学习才更有效率。


    题目11

    解答:

          1958年Turkey在论文"The Teaching of Concrete Mathematics"中提出软件这一概念。软件工程是在1968年北大西洋公约组织在前联邦德国开会提出的。瀑布模型这一概念是1970年由温斯顿·罗伊斯(Winston Royce)提出的。Agile Methodology是一种从1990年代开始逐渐引起广泛关注的一些新型软件开发方法。


    题目12

    解答:

          软件要运行在硬件芯片上面,看了硬件芯片的发展过程,我认为一个优秀的软件工程师应该及时的了解芯片的发展进程,以保证自己发开出的软件能更好的适应硬件,而不是拖硬件的后腿。因为硬件的发展速度实在是太快了。


    题目13

    解答:

          其实,从出生我们有正常的自我认知开始到死亡,压力会伴随我们一生。压力对于有些人来说,也许会成为他逃避问题的借口,但对于另一些人来说,也许会成为其前进的动力。是借口也好,是动力也罢,主要取决于我们对压力的看法。就像TED中所说,你可以将压力看成有害健康的,也可以认为压力是我们身体活力充沛的象征。在我看来,压力是我进行求知的动力,因为压力存在,说明我在处理某些问题时知识还存在欠缺,如果将这些欠缺的知识补上,那么问题也就自然而然能够解决,压力也就随之消失。

          在与他人合作时,相互帮助、相互学习,在自己遇到压力时,向周围的人寻求帮助,不仅弥补了自己知识的欠缺,又解决了问题;在他人遇到困难,存在压力时,你主动帮助他人,既帮助他人解决了困难,减轻了压力,同时也会增加自己在工作方面的信心。在相互帮助的过程中,既看清了自己的强项,也认清了自己的不足,学习、工作的压力自然而然的转化成进取的动力,双方在相互帮助中取得共赢,共同成长。


    题目14

    解答:

    第一个平台,Windows平台,用VS2010开发工具开发,开发语言为C#的winform程序,运行界面如下:

     

    第二个平台,网页,Apache+PHP,首先需要配置环境。程序运行界面如下:

    代码如下:

    <?php

    echo "hello world"

    ?>


    题目15

    解答:

          关于这个问题,我认为,这个游戏团队只是做了一个自认为好的软件,软件的消费群体定位、商业模式、营销都考虑的不到位。

          首先,游戏的消费群体,文中开发者只是简单说了购买者的评价(优美的画面、动听的音乐等等),并未说明该款游戏的主流消费群体是哪些,是学生为主还是上班族为主,是主打碎片时间的休闲娱乐还是竞技,这些不界定,又怎能去吸引主流消费群体下载软件。

          其次,商业模式,开发者只是简单的利用平台的付费下载来盈利,这在现在的多元化社会显得有点太过于单一化了,毕竟现在的游戏软件太过于繁多了,你不可能做到,让消费者在看了一眼软件的简单介绍后就去付费下载。如果仅仅作为一个独立游戏开发者,其实改成先期免费下载,试玩一段时间以后再进行收费,或者直接免费,后期向广告商收费,这样更能增加软件的下载量。

          最后,营销,开发者只是通过媒介宣传、展会、参加竞赛等等进行宣传,这对一款不是定位小众群体的游戏软件来说明显是不够的。其实,在一开始如果对游戏的消费群体界定方面就存在偏差的话,最后的营销也很难起到多大的作用。如果像文中开发者说的,“社区模式”不适合该款游戏,那我觉得,前期利用免费邀请重度游戏爱好者试玩不失为一个好的方式,毕竟普通消费者大多会存在“跟风”某一方面“领袖”的行为,而重度游戏爱好者很多在游戏方面具有“领袖”的地位。

          以上只是看过文章后的简单看法,毕竟在现在的社会,要做一款好的软件产品要考虑的因素实在是太多了。


     

  • 相关阅读:
    jQuery下拉框级联实现
    js获取当前月的天数
    jQuery获取select选中值的文本
    JSTL常用代码总结
    matplotlib.basemap安装失败的解决
    获取MODIS MCD19A2气溶胶数据(AOD)并用GDAL转换投影坐标
    keras 显示错误 无法保存model图片_ImportError: Failed to import pydot.
    ArcGIS处理每个栅格图行列号一致且上下对齐
    北京DEM数据下载
    最新 夜光遥感影像VIIRS&DMSP下载总结
  • 原文地址:https://www.cnblogs.com/yyshenren/p/5864205.html
Copyright © 2011-2022 走看看