zoukankan      html  css  js  c++  java
  • 软件工程第一次作业补充

    软件工程第一次作业补充

    • 花20分钟写一个能自动生成小学四则运算题目的“软件”,要求:除了整数以外,还要支持真分数的四则运算。将代码上传至coding.net,并将地址发布至自己的博客。

    四则运算代码

    • 在一周之内快速看完《构建之法》,列出你不懂的5-10个问题,发布在自己的博客。
    • 1.单元测试应该覆盖所有代码段,如何确定是否覆盖了所有代码段?单元测试又该什么时候去写?
      我看了第二章关于单元测试的内容后,我有个想法,单元测试如此重要,但是有没有有效的办法确认单元测试是否覆盖了所有代码段呢,单元测试又该什么时候去写呢?我查了资料,资料上说在实际的工作中,可以不必过分强调先什么后什么,重要的是高效和感觉舒适。先编写产品函数的框架,然后编写测试函数,针对产品函数的功能编写测试用例,然后编写产品函数的代码,每写一个功能点都运行测试,随时补充测试用例。所谓先编写产品函数的框架,是指先编写函数空的实现,有返回值的随便返回一个值,编译通过后再编写测试代码,这时,函数名、参数表、返回类型都应该确定下来了,所编写的测试代码以后需修改的可能性比较小。但是我很少看到具体介绍如何判断单元测试是否覆盖了所有代码段,书上还说“100%的代码覆盖率并不等同于100%的正确性”,这让我有些困惑。
    • 2.软件=软件工程+程序,那么软件工程和程序哪个更重要?软件工程的侧重点又是什么?
      书上第一章P4说软件=软件工程+程序,但是软件工程和程序哪个更重要?软件工程的侧重点又是什么?我查了资料,百科上说软件工程是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科。它涉及到程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。但是定义太过抽象,我有些困惑,看了这本书后,我只有一个隐约的感觉,软件工程似乎侧重人际交往,合作,那么程序是否不比软件工程重要呢。
    • 3.敏捷流程是否是现代软件开发的主流?
      我看了第六章敏捷流程后,发现现在敏捷开发越来越火,越来越多的人使用这个模式,因为它是以人为核心,注重交流和协作,强调软件可持续发展,实现频繁交付对客户最重要的价值的开发模式。书上列举了很多敏捷流程的优点,我也觉得敏捷流程是大势所趋,因为软件开发是以人为本,这种模式十分试用。但是这种模式没有什么缺点吗,书上只是略加点出,我有些疑惑。另外,是否还有其他模式适合当今的软件开发呢?可以多个模式相结合吗?
    • 4.软件团队的模式对软件开发的影响?软件团队的模式是否指的是集体主义?
      我看了第五章第二节软件团队的模式之后,觉得大部分软件团队的模式都是大同小异,都是有一个中央领导者,统筹全局,剩下的人各自分工,最终完成一个项目,那么这是否意味着只要保证上述分工,那么软件团队的模式对软件开发的影响可以降至最低,这样看来,为什么还要划分不同的模式呢?另外,团队合作主要在于团结互助,这和集体主义类似,那么软件团队的模式是否意味着集体主义?
    • 5.用户体验应该什么时候开始考虑?工程师和设计师的区别又是什么?它们之间的交互方式又如何判断?
      我看了第五章用户体验后,有了疑问,用户体验应该什么时候开始考虑,是在软件开发的开始就进行,还是等到代码写的差不多了再进行呢?书上P245讲述了一个GE公司的故事,他们因为没有注重用户体验,最后付出了极大的代价,这是否意味着一开始就应该进行用户体验,杜绝这一点呢?另外,我从网上查了一下设计师的区别,设计师有很多,如用户体验设计师、UI 设计师和交互设计师等,这些设计师都有细微的差别,但是他们的侧重点都是用户体验,而工程师注重的是软件的质量,但是很少有介绍到两者之间的交互方式,书上也没有具体提及,这点我有些疑惑。
    • 软件有很多种:包装在盒子里的软件、基于网页的软件、企业或学校或某组织内部的软件、游戏、手机应用、操作系统、工具软件,选取三种软件,请分析它们各自的特点。
      1)这些软件开发者是怎么说服你(陌生人)成为他们的用户的?他们的目标都是盈利么?他们的目标都是赚取用户现金么么?还是别的?
      2)这些软件是如何到你手里的(邮购,下载,互相拷贝)
      3)这些软件是如何处理Bug的?又是如何更新新的版本的?
    1. 同一类型的软件之间是如何竞争的?
    • 手机应用:
    1. QQ,微信,淘宝,学堂在线,饿了么,WPS等都是手机应用,由于它们的功能强大,适用于用户需求,方便用户学习、生活,所以用户会主动使用它们。
    2. 这些手机应用主要目的是为用户服务,再此基础上会衍生出更高效、方便的功能,但是这些功能一般都需要付费使用,开发者通过这些功能盈利,并对软件进行进一步的优化。此外,在用户注册这些手机应用时,开发者会获取用户信息用作其他用途,或通过用户反馈的信息优化软件。
    3. 手机应用一般通过手机自带的软件商店、百度或应用宝等下载而来。
    4. 一般都是通过打补丁的方式,将更新的资源包发送给用户,让用户去安装更新。
    5. 同一类型的软件之间的竞争主要依靠取长补短,向用户宣传它的优点,将付费的功能免费向用户开放,来吸引用户。
    • 操作系统:
    1. 像windows, UNIX ,linux ,android ,ios 等操作系统,分别应用于移动端和pc端。
    2. 开发者会将这些系统软件安装于买到的手机或计算机中,让用户使用,用户在购买手机或计算机的时候,就相当于给这些操作系统间接付款。
    3. 让客户通过操作系统使用这些智能工具,真正实现工具的价值。正版的操作系统一般都需要付费购买,这些都被算在手机或计算机的价值之内。
    4. 可以通过网上下载,相互拷贝,或者在买智能工具的时候直接安装。
    5. 操作系统作为一个很大型的软件,与硬件直接接触,肯定会存在Bug,或者会有组成部分进行更新,正版的操作系统会收到更新通知,然后自动下载,或者可以自己去官网上下载安装。
    6. 一般操作系统的竞争主要是通过良好的界面,方便人机交互,让计算机系统所有资源最大限度地发挥作用,让用户获得更好的使用体验以及尽量少的Bug。
    • 工具软件:
    1. 杀毒软件、备份软件等都属于工具软件,这些软件功能较为单一,但都是针对用户需求设计,有些在用户购买电脑时直接安装,有些则是用户在需要时会主动去网上下载安装。
    2. 大部分工具软件都是免费使用。开发者通过用户反馈的信息优化软件。
    3. 几乎所有的工具软件都可以在网络上直接下载使用。
    4. 去官网下载安装包,或在接收更新提醒时直接更新。
    5. 同一类型的软件之间的竞争主要依靠软件质量决定,让用户获得更好的使用体验以及尽量少的Bug。
    • 列举你在使用上述软件时观察到的“特殊”现象,它们和硬件有什么不同?这些能说明软件的某些本质特性么?
    1. 软件就是程序,存在于硬件中,调动硬件的执行,是硬件的头脑和灵魂。
    2. 硬件产品设计定型后可以批量生产,产品质量通过质量检测体系可以得到保障。但是生产、加工过程一旦失误,硬件产品可能就会因为质量问题而报废。而软件生产是“定制”的,只能针对特定问题进行设计或实现。一旦实现后,其生产过程只是复制而已,而复制生产出来的软件质量是相同的。设计出来的软件即使出现质量问题,产品也不会报废,通过修改、测试,还可以将“报废”的软件“修复”,投入正常运行。可见软件的质量保证机制比硬件具有更大的灵活性。
    3. 软件五花八门,实现同一种功能会有很多不同的软件,但是同一种器件,组装它的硬件却不会有很多种。
    4. 硬件产品存在老化和折旧问题。当一个硬件部件磨损时可以用一个新部件去替换他。硬件会因为主要部件的磨损而最终被淘汰。对于软件而言,不存在折旧和磨损问题,如果需要的话可以永远使用下去。但是软件故障的排除要比硬件故障的排除复杂得多。软件故障主要是因为软件设计或编码的错误所致,必须重新设计和编码才能解决问题。
  • 相关阅读:
    【Atcoder Beginner Contest 178】E-F
    【Poj-3436】ACM Computer Factory 最大流
    【Codeforces Round #662 (Div. 2) 】C. Pinkie Pie Eats Patty-cakes 贪心
    【秋叶收藏集】
    【第二届全国高校绿色计算大赛 预赛第二阶段(Python)】Tarjan + 最短路
    【模拟】第二届全国高校绿色计算大赛 预赛第二阶段(Python) 文本编辑器
    【Codeforces】#658 D.Unmerge DP
    【Codeforces】#658 C2.Prefix Flip(Hard Version)
    【Codeforces】#658 B.Sequential Nim 博弈
    【Codeforces】#657 C.Choosing flowers 枚举 二分
  • 原文地址:https://www.cnblogs.com/Aveg123/p/6740508.html
Copyright © 2011-2022 走看看